refactor: replace pastel-wasm with pure TypeScript color engine

Removes the @valknarthing/pastel-wasm WASM dependency and replaces it
with a self-contained TypeScript implementation of all color operations
(parsing, conversion, manipulation, gradients, palette generation).
Adds eslint-plugin-react-hooks which was missing from devDependencies.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-31 08:24:25 +02:00
parent ba118be485
commit 00af8edce6
4 changed files with 514 additions and 179 deletions
+42 -8
View File
@@ -23,9 +23,6 @@ importers:
'@tanstack/react-query':
specifier: ^5.90.21
version: 5.90.21(react@19.2.4)
'@valknarthing/pastel-wasm':
specifier: ^0.1.0
version: 0.1.0
class-variance-authority:
specifier: ^0.7.1
version: 0.7.1
@@ -111,6 +108,9 @@ importers:
eslint-config-next:
specifier: ^15.1.7
version: 15.1.7(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)
eslint-plugin-react-hooks:
specifier: ^7.0.1
version: 7.0.1(eslint@9.39.3(jiti@2.6.1))
postcss:
specifier: ^8.5.6
version: 8.5.6
@@ -1701,9 +1701,6 @@ packages:
cpu: [x64]
os: [win32]
'@valknarthing/pastel-wasm@0.1.0':
resolution: {integrity: sha512-oMEo023SQvs62orZ4WaM+LCPfNwFDjLQcDrGKXnOYfAa1wHtZzt5v8m42te6X+hlld0fPHjY/aR5iAD3RKKipQ==}
accepts@2.0.0:
resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==}
engines: {node: '>= 0.6'}
@@ -2258,6 +2255,12 @@ packages:
peerDependencies:
eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0
eslint-plugin-react-hooks@7.0.1:
resolution: {integrity: sha512-O0d0m04evaNzEPoSW+59Mezf8Qt0InfgGIBJnpC0h3NH/WjUAR7BIKUfysC6todmtiZ/A0oUVS8Gce0WhBrHsA==}
engines: {node: '>=18'}
peerDependencies:
eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0
eslint-plugin-react@7.37.5:
resolution: {integrity: sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==}
engines: {node: '>=4'}
@@ -2564,6 +2567,12 @@ packages:
headers-polyfill@4.0.3:
resolution: {integrity: sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==}
hermes-estree@0.25.1:
resolution: {integrity: sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==}
hermes-parser@0.25.1:
resolution: {integrity: sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==}
hono@4.12.2:
resolution: {integrity: sha512-gJnaDHXKDayjt8ue0n8Gs0A007yKXj4Xzb8+cNjZeYsSzzwKc0Lr+OZgYwVfB0pHfUs17EPoLvrOsEaJ9mj+Tg==}
engines: {node: '>=16.9.0'}
@@ -4037,6 +4046,12 @@ packages:
peerDependencies:
zod: ^3.25 || ^4
zod-validation-error@4.0.2:
resolution: {integrity: sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==}
engines: {node: '>=18.0.0'}
peerDependencies:
zod: ^3.25.0 || ^4.0.0
zod@3.25.76:
resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==}
@@ -5664,8 +5679,6 @@ snapshots:
'@unrs/resolver-binding-win32-x64-msvc@1.11.1':
optional: true
'@valknarthing/pastel-wasm@0.1.0': {}
accepts@2.0.0:
dependencies:
mime-types: 3.0.2
@@ -6302,6 +6315,17 @@ snapshots:
dependencies:
eslint: 9.39.3(jiti@2.6.1)
eslint-plugin-react-hooks@7.0.1(eslint@9.39.3(jiti@2.6.1)):
dependencies:
'@babel/core': 7.29.0
'@babel/parser': 7.29.0
eslint: 9.39.3(jiti@2.6.1)
hermes-parser: 0.25.1
zod: 3.25.76
zod-validation-error: 4.0.2(zod@3.25.76)
transitivePeerDependencies:
- supports-color
eslint-plugin-react@7.37.5(eslint@9.39.3(jiti@2.6.1)):
dependencies:
array-includes: 3.1.9
@@ -6681,6 +6705,12 @@ snapshots:
headers-polyfill@4.0.3: {}
hermes-estree@0.25.1: {}
hermes-parser@0.25.1:
dependencies:
hermes-estree: 0.25.1
hono@4.12.2: {}
html-to-image@1.11.13: {}
@@ -8341,6 +8371,10 @@ snapshots:
dependencies:
zod: 3.25.76
zod-validation-error@4.0.2(zod@3.25.76):
dependencies:
zod: 3.25.76
zod@3.25.76: {}
zustand@5.0.11(@types/react@19.2.14)(react@19.2.4)(use-sync-external-store@1.6.0(react@19.2.4)):