initial commit

Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: Iaade5d67478a437673f2bc2a18e9fb676a6a6964
This commit is contained in:
raf 2026-05-02 19:43:06 +03:00
commit eb03499933
Signed by: NotAShelf
GPG key ID: 29D95B64378DB4BF
7 changed files with 1553 additions and 0 deletions

4
.gitignore vendored Normal file
View file

@ -0,0 +1,4 @@
node_modules/
.direnv/
build/
output/

33
package.json Normal file
View file

@ -0,0 +1,33 @@
{
"name": "@frozendev/tokens",
"version": "1.0.0",
"description": "FrozenDev Electronics design tokens",
"type": "module",
"main": "outputs/js/tokens.mjs",
"exports": {
".": "./outputs/js/tokens.mjs",
"./css": "./outputs/css/tokens.css",
"./scss": "./outputs/scss/_tokens.scss",
"./tailwind": "./outputs/js/tailwind.mjs",
"./android": "./outputs/android/frozendev_colors.xml",
"./ios": "./outputs/ios/FrozenDevColors.swift"
},
"files": [
"outputs/",
"tokens/"
],
"scripts": {
"build": "node scripts/build.mjs",
"preview": "node scripts/preview.mjs tokens build/color-preview.html"
},
"keywords": [
"design-tokens",
"frozendev",
"color",
"style-dictionary"
],
"license": "MIT",
"devDependencies": {
"style-dictionary": "^5.4.0"
}
}

975
pnpm-lock.yaml generated Normal file
View file

@ -0,0 +1,975 @@
lockfileVersion: '9.0'
settings:
autoInstallPeers: true
excludeLinksFromLockfile: false
importers:
.:
devDependencies:
style-dictionary:
specifier: ^5.4.0
version: 5.4.0(tslib@2.8.1)
packages:
'@bundled-es-modules/deepmerge@4.3.1':
resolution: {integrity: sha512-Rk453EklPUPC3NRWc3VUNI/SSUjdBaFoaQvFRmNBNtMHVtOFD5AntiWg5kEE1hqcPqedYFDzxE3ZcMYPcA195w==}
'@bundled-es-modules/glob@13.0.6':
resolution: {integrity: sha512-x9nR2e1pt8LF0yLPC6yz/aUoiN7qJJwZ1znLxIXCxGyH+8BI+yO/sklBdn1+QbUyWXQBM+CjfZz3IhqtgIoDVg==}
'@bundled-es-modules/memfs@4.17.0':
resolution: {integrity: sha512-ykdrkEmQr9BV804yd37ikXfNnvxrwYfY9Z2/EtMHFEFadEjsQXJ1zL9bVZrKNLDtm91UdUOEHso6Aweg93K6xQ==}
'@jsonjoy.com/base64@1.1.2':
resolution: {integrity: sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==}
engines: {node: '>=10.0'}
peerDependencies:
tslib: '2'
'@jsonjoy.com/base64@17.67.0':
resolution: {integrity: sha512-5SEsJGsm15aP8TQGkDfJvz9axgPwAEm98S5DxOuYe8e1EbfajcDmgeXXzccEjh+mLnjqEKrkBdjHWS5vFNwDdw==}
engines: {node: '>=10.0'}
peerDependencies:
tslib: '2'
'@jsonjoy.com/buffers@1.2.1':
resolution: {integrity: sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA==}
engines: {node: '>=10.0'}
peerDependencies:
tslib: '2'
'@jsonjoy.com/buffers@17.67.0':
resolution: {integrity: sha512-tfExRpYxBvi32vPs9ZHaTjSP4fHAfzSmcahOfNxtvGHcyJel+aibkPlGeBB+7AoC6hL7lXIE++8okecBxx7lcw==}
engines: {node: '>=10.0'}
peerDependencies:
tslib: '2'
'@jsonjoy.com/codegen@1.0.0':
resolution: {integrity: sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g==}
engines: {node: '>=10.0'}
peerDependencies:
tslib: '2'
'@jsonjoy.com/codegen@17.67.0':
resolution: {integrity: sha512-idnkUplROpdBOV0HMcwhsCUS5TRUi9poagdGs70A6S4ux9+/aPuKbh8+UYRTLYQHtXvAdNfQWXDqZEx5k4Dj2Q==}
engines: {node: '>=10.0'}
peerDependencies:
tslib: '2'
'@jsonjoy.com/fs-core@4.57.2':
resolution: {integrity: sha512-SVjwklkpIV5wrynpYtuYnfYH1QF4/nDuLBX7VXdb+3miglcAgBVZb/5y0cOsehRV/9Vb+3UqhkMq3/NR3ztdkQ==}
engines: {node: '>=10.0'}
peerDependencies:
tslib: '2'
'@jsonjoy.com/fs-fsa@4.57.2':
resolution: {integrity: sha512-fhO8+iR2I+OCw668ISDJdn1aArc9zx033sWejIyzQ8RBeXa9bDSaUeA3ix0poYOfrj1KdOzytmYNv2/uLDfV6g==}
engines: {node: '>=10.0'}
peerDependencies:
tslib: '2'
'@jsonjoy.com/fs-node-builtins@4.57.2':
resolution: {integrity: sha512-xhiegylRmhw43Ki2HO1ZBL7DQ5ja/qpRsL29VtQ2xuUHiuDGbgf2uD4p9Qd8hJI5P6RCtGYD50IXHXVq/Ocjcg==}
engines: {node: '>=10.0'}
peerDependencies:
tslib: '2'
'@jsonjoy.com/fs-node-to-fsa@4.57.2':
resolution: {integrity: sha512-18LmWTSONhoAPW+IWRuf8w/+zRolPFGPeGwMxlAhhfY11EKzX+5XHDBPAw67dBF5dxDErHJbl40U+3IXSDRXSQ==}
engines: {node: '>=10.0'}
peerDependencies:
tslib: '2'
'@jsonjoy.com/fs-node-utils@4.57.2':
resolution: {integrity: sha512-rsPSJgekz43IlNbLyAM/Ab+ouYLWGp5DDBfYBNNEqDaSpsbXfthBn29Q4muFA9L0F+Z3mKo+CWlgSCXrf+mOyQ==}
engines: {node: '>=10.0'}
peerDependencies:
tslib: '2'
'@jsonjoy.com/fs-node@4.57.2':
resolution: {integrity: sha512-nX2AdL6cOFwLdju9G4/nbRnYevmCJbh7N7hvR3gGm97Cs60uEjyd0rpR+YBS7cTg175zzl22pGKXR5USaQMvKg==}
engines: {node: '>=10.0'}
peerDependencies:
tslib: '2'
'@jsonjoy.com/fs-print@4.57.2':
resolution: {integrity: sha512-wK9NSow48i4DbDl9F1CQE5TqnyZOJ04elU3WFG5aJ76p+YxO/ulyBBQvKsessPxdo381Bc2pcEoyPujMOhcRqQ==}
engines: {node: '>=10.0'}
peerDependencies:
tslib: '2'
'@jsonjoy.com/fs-snapshot@4.57.2':
resolution: {integrity: sha512-GdduDZuoP5V/QCgJkx9+BZ6SC0EZ/smXAdTS7PfMqgMTGXLlt/bH/FqMYaqB9JmLf05sJPtO0XRbAwwkEEPbVw==}
engines: {node: '>=10.0'}
peerDependencies:
tslib: '2'
'@jsonjoy.com/json-pack@1.21.0':
resolution: {integrity: sha512-+AKG+R2cfZMShzrF2uQw34v3zbeDYUqnQ+jg7ORic3BGtfw9p/+N6RJbq/kkV8JmYZaINknaEQ2m0/f693ZPpg==}
engines: {node: '>=10.0'}
peerDependencies:
tslib: '2'
'@jsonjoy.com/json-pack@17.67.0':
resolution: {integrity: sha512-t0ejURcGaZsn1ClbJ/3kFqSOjlryd92eQY465IYrezsXmPcfHPE/av4twRSxf6WE+TkZgLY+71vCZbiIiFKA/w==}
engines: {node: '>=10.0'}
peerDependencies:
tslib: '2'
'@jsonjoy.com/json-pointer@1.0.2':
resolution: {integrity: sha512-Fsn6wM2zlDzY1U+v4Nc8bo3bVqgfNTGcn6dMgs6FjrEnt4ZCe60o6ByKRjOGlI2gow0aE/Q41QOigdTqkyK5fg==}
engines: {node: '>=10.0'}
peerDependencies:
tslib: '2'
'@jsonjoy.com/json-pointer@17.67.0':
resolution: {integrity: sha512-+iqOFInH+QZGmSuaybBUNdh7yvNrXvqR+h3wjXm0N/3JK1EyyFAeGJvqnmQL61d1ARLlk/wJdFKSL+LHJ1eaUA==}
engines: {node: '>=10.0'}
peerDependencies:
tslib: '2'
'@jsonjoy.com/util@1.9.0':
resolution: {integrity: sha512-pLuQo+VPRnN8hfPqUTLTHk126wuYdXVxE6aDmjSeV4NCAgyxWbiOIeNJVtID3h1Vzpoi9m4jXezf73I6LgabgQ==}
engines: {node: '>=10.0'}
peerDependencies:
tslib: '2'
'@jsonjoy.com/util@17.67.0':
resolution: {integrity: sha512-6+8xBaz1rLSohlGh68D1pdw3AwDi9xydm8QNlAFkvnavCJYSze+pxoW2VKP8p308jtlMRLs5NTHfPlZLd4w7ew==}
engines: {node: '>=10.0'}
peerDependencies:
tslib: '2'
'@zip.js/zip.js@2.8.26':
resolution: {integrity: sha512-RQ4h9F6DOiHxpdocUDrOl6xBM+yOtz+LkUol47AVWcfebGBDpZ7w7Xvz9PS24JgXvLGiXXzSAfdCdVy1tPlaFA==}
engines: {bun: '>=0.7.0', deno: '>=1.0.0', node: '>=18.0.0'}
assert@2.1.0:
resolution: {integrity: sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==}
available-typed-arrays@1.0.7:
resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==}
engines: {node: '>= 0.4'}
balanced-match@4.0.4:
resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==}
engines: {node: 18 || 20 || >=22}
base64-js@1.5.1:
resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
brace-expansion@5.0.5:
resolution: {integrity: sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==}
engines: {node: 18 || 20 || >=22}
buffer@6.0.3:
resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
call-bind-apply-helpers@1.0.2:
resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
engines: {node: '>= 0.4'}
call-bind@1.0.9:
resolution: {integrity: sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==}
engines: {node: '>= 0.4'}
call-bound@1.0.4:
resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==}
engines: {node: '>= 0.4'}
chalk@5.6.2:
resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==}
engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
change-case@5.4.4:
resolution: {integrity: sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==}
colorjs.io@0.5.2:
resolution: {integrity: sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==}
commander@12.1.0:
resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==}
engines: {node: '>=18'}
component-emitter@2.0.0:
resolution: {integrity: sha512-4m5s3Me2xxlVKG9PkZpQqHQR7bgpnN7joDMJ4yvVkVXngjoITG76IaZmzmywSeRTeTpc6N6r3H3+KyUurV8OYw==}
engines: {node: '>=18'}
deepmerge@4.3.1:
resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
engines: {node: '>=0.10.0'}
define-data-property@1.1.4:
resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
engines: {node: '>= 0.4'}
define-properties@1.2.1:
resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
engines: {node: '>= 0.4'}
dunder-proto@1.0.1:
resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
engines: {node: '>= 0.4'}
es-define-property@1.0.1:
resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==}
engines: {node: '>= 0.4'}
es-errors@1.3.0:
resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
engines: {node: '>= 0.4'}
es-object-atoms@1.1.1:
resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==}
engines: {node: '>= 0.4'}
events@3.3.0:
resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==}
engines: {node: '>=0.8.x'}
for-each@0.3.5:
resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==}
engines: {node: '>= 0.4'}
function-bind@1.1.2:
resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
generator-function@2.0.1:
resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==}
engines: {node: '>= 0.4'}
get-intrinsic@1.3.0:
resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==}
engines: {node: '>= 0.4'}
get-proto@1.0.1:
resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==}
engines: {node: '>= 0.4'}
glob-to-regex.js@1.2.0:
resolution: {integrity: sha512-QMwlOQKU/IzqMUOAZWubUOT8Qft+Y0KQWnX9nK3ch0CJg0tTp4TvGZsTfudYKv2NzoQSyPcnA6TYeIQ3jGichQ==}
engines: {node: '>=10.0'}
peerDependencies:
tslib: '2'
glob@13.0.6:
resolution: {integrity: sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==}
engines: {node: 18 || 20 || >=22}
gopd@1.2.0:
resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==}
engines: {node: '>= 0.4'}
has-property-descriptors@1.0.2:
resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==}
has-symbols@1.1.0:
resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==}
engines: {node: '>= 0.4'}
has-tostringtag@1.0.2:
resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==}
engines: {node: '>= 0.4'}
hasown@2.0.3:
resolution: {integrity: sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==}
engines: {node: '>= 0.4'}
hyperdyperid@1.2.0:
resolution: {integrity: sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==}
engines: {node: '>=10.18'}
ieee754@1.2.1:
resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
inherits@2.0.3:
resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==}
inherits@2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
is-arguments@1.2.0:
resolution: {integrity: sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==}
engines: {node: '>= 0.4'}
is-callable@1.2.7:
resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
engines: {node: '>= 0.4'}
is-generator-function@1.1.2:
resolution: {integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==}
engines: {node: '>= 0.4'}
is-nan@1.3.2:
resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==}
engines: {node: '>= 0.4'}
is-plain-obj@4.1.0:
resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==}
engines: {node: '>=12'}
is-regex@1.2.1:
resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==}
engines: {node: '>= 0.4'}
is-typed-array@1.1.15:
resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==}
engines: {node: '>= 0.4'}
json5@2.2.3:
resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
engines: {node: '>=6'}
hasBin: true
lru-cache@11.3.5:
resolution: {integrity: sha512-NxVFwLAnrd9i7KUBxC4DrUhmgjzOs+1Qm50D3oF1/oL+r1NpZ4gA7xvG0/zJ8evR7zIKn4vLf7qTNduWFtCrRw==}
engines: {node: 20 || >=22}
math-intrinsics@1.1.0:
resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
engines: {node: '>= 0.4'}
memfs@4.57.2:
resolution: {integrity: sha512-2nWzSsJzrukurSDna4Z0WywuScK4Id3tSKejgu74u8KCdW4uNrseKRSIDg75C6Yw5ZRqBe0F0EtMNlTbUq8bAQ==}
peerDependencies:
tslib: '2'
minimatch@10.2.5:
resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==}
engines: {node: 18 || 20 || >=22}
minipass@7.1.3:
resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==}
engines: {node: '>=16 || 14 >=14.17'}
object-inspect@1.13.4:
resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==}
engines: {node: '>= 0.4'}
object-is@1.1.6:
resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==}
engines: {node: '>= 0.4'}
object-keys@1.1.1:
resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
engines: {node: '>= 0.4'}
object.assign@4.1.7:
resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==}
engines: {node: '>= 0.4'}
path-scurry@2.0.2:
resolution: {integrity: sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==}
engines: {node: 18 || 20 || >=22}
path-unified@0.2.0:
resolution: {integrity: sha512-MNKqvrKbbbb5p7XHXV6ZAsf/1f/yJQa13S/fcX0uua8ew58Tgc6jXV+16JyAbnR/clgCH+euKDxrF2STxMHdrg==}
path@0.12.7:
resolution: {integrity: sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==}
possible-typed-array-names@1.1.0:
resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==}
engines: {node: '>= 0.4'}
prettier@3.8.3:
resolution: {integrity: sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw==}
engines: {node: '>=14'}
hasBin: true
process@0.11.10:
resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==}
engines: {node: '>= 0.6.0'}
punycode@1.4.1:
resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==}
qs@6.15.1:
resolution: {integrity: sha512-6YHEFRL9mfgcAvql/XhwTvf5jKcOiiupt2FiJxHkiX1z4j7WL8J/jRHYLluORvc1XxB5rV20KoeK00gVJamspg==}
engines: {node: '>=0.6'}
safe-buffer@5.2.1:
resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
safe-regex-test@1.1.0:
resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==}
engines: {node: '>= 0.4'}
set-function-length@1.2.2:
resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
engines: {node: '>= 0.4'}
side-channel-list@1.0.1:
resolution: {integrity: sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==}
engines: {node: '>= 0.4'}
side-channel-map@1.0.1:
resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==}
engines: {node: '>= 0.4'}
side-channel-weakmap@1.0.2:
resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==}
engines: {node: '>= 0.4'}
side-channel@1.1.0:
resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==}
engines: {node: '>= 0.4'}
stream@0.0.3:
resolution: {integrity: sha512-aMsbn7VKrl4A2T7QAQQbzgN7NVc70vgF5INQrBXqn4dCXN1zy3L9HGgLO5s7PExmdrzTJ8uR/27aviW8or8/+A==}
string_decoder@1.3.0:
resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
style-dictionary@5.4.0:
resolution: {integrity: sha512-6BzO0DV19t6KUEXYfvHJ73d3y8bBDcd0wNLfoZRX817obJ8YX5Vev8Xh3+k9601tHE8qRJ/586iLt0byuY2THw==}
engines: {node: '>=22.0.0'}
hasBin: true
thingies@2.6.0:
resolution: {integrity: sha512-rMHRjmlFLM1R96UYPvpmnc3LYtdFrT33JIB7L9hetGue1qAPfn1N2LJeEjxUSidu1Iku+haLZXDuEXUHNGO/lg==}
engines: {node: '>=10.18'}
peerDependencies:
tslib: ^2
tinycolor2@1.6.0:
resolution: {integrity: sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==}
tree-dump@1.1.0:
resolution: {integrity: sha512-rMuvhU4MCDbcbnleZTFezWsaZXRFemSqAM+7jPnzUl1fo9w3YEKOxAeui0fz3OI4EU4hf23iyA7uQRVko+UaBA==}
engines: {node: '>=10.0'}
peerDependencies:
tslib: '2'
tslib@2.8.1:
resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
url@0.11.4:
resolution: {integrity: sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==}
engines: {node: '>= 0.4'}
util@0.10.4:
resolution: {integrity: sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==}
util@0.12.5:
resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==}
which-typed-array@1.1.20:
resolution: {integrity: sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==}
engines: {node: '>= 0.4'}
snapshots:
'@bundled-es-modules/deepmerge@4.3.1':
dependencies:
deepmerge: 4.3.1
'@bundled-es-modules/glob@13.0.6':
dependencies:
buffer: 6.0.3
events: 3.3.0
glob: 13.0.6
path: 0.12.7
stream: 0.0.3
string_decoder: 1.3.0
url: 0.11.4
'@bundled-es-modules/memfs@4.17.0(tslib@2.8.1)':
dependencies:
assert: 2.1.0
buffer: 6.0.3
events: 3.3.0
memfs: 4.57.2(tslib@2.8.1)
path: 0.12.7
stream: 0.0.3
util: 0.12.5
transitivePeerDependencies:
- tslib
'@jsonjoy.com/base64@1.1.2(tslib@2.8.1)':
dependencies:
tslib: 2.8.1
'@jsonjoy.com/base64@17.67.0(tslib@2.8.1)':
dependencies:
tslib: 2.8.1
'@jsonjoy.com/buffers@1.2.1(tslib@2.8.1)':
dependencies:
tslib: 2.8.1
'@jsonjoy.com/buffers@17.67.0(tslib@2.8.1)':
dependencies:
tslib: 2.8.1
'@jsonjoy.com/codegen@1.0.0(tslib@2.8.1)':
dependencies:
tslib: 2.8.1
'@jsonjoy.com/codegen@17.67.0(tslib@2.8.1)':
dependencies:
tslib: 2.8.1
'@jsonjoy.com/fs-core@4.57.2(tslib@2.8.1)':
dependencies:
'@jsonjoy.com/fs-node-builtins': 4.57.2(tslib@2.8.1)
'@jsonjoy.com/fs-node-utils': 4.57.2(tslib@2.8.1)
thingies: 2.6.0(tslib@2.8.1)
tslib: 2.8.1
'@jsonjoy.com/fs-fsa@4.57.2(tslib@2.8.1)':
dependencies:
'@jsonjoy.com/fs-core': 4.57.2(tslib@2.8.1)
'@jsonjoy.com/fs-node-builtins': 4.57.2(tslib@2.8.1)
'@jsonjoy.com/fs-node-utils': 4.57.2(tslib@2.8.1)
thingies: 2.6.0(tslib@2.8.1)
tslib: 2.8.1
'@jsonjoy.com/fs-node-builtins@4.57.2(tslib@2.8.1)':
dependencies:
tslib: 2.8.1
'@jsonjoy.com/fs-node-to-fsa@4.57.2(tslib@2.8.1)':
dependencies:
'@jsonjoy.com/fs-fsa': 4.57.2(tslib@2.8.1)
'@jsonjoy.com/fs-node-builtins': 4.57.2(tslib@2.8.1)
'@jsonjoy.com/fs-node-utils': 4.57.2(tslib@2.8.1)
tslib: 2.8.1
'@jsonjoy.com/fs-node-utils@4.57.2(tslib@2.8.1)':
dependencies:
'@jsonjoy.com/fs-node-builtins': 4.57.2(tslib@2.8.1)
tslib: 2.8.1
'@jsonjoy.com/fs-node@4.57.2(tslib@2.8.1)':
dependencies:
'@jsonjoy.com/fs-core': 4.57.2(tslib@2.8.1)
'@jsonjoy.com/fs-node-builtins': 4.57.2(tslib@2.8.1)
'@jsonjoy.com/fs-node-utils': 4.57.2(tslib@2.8.1)
'@jsonjoy.com/fs-print': 4.57.2(tslib@2.8.1)
'@jsonjoy.com/fs-snapshot': 4.57.2(tslib@2.8.1)
glob-to-regex.js: 1.2.0(tslib@2.8.1)
thingies: 2.6.0(tslib@2.8.1)
tslib: 2.8.1
'@jsonjoy.com/fs-print@4.57.2(tslib@2.8.1)':
dependencies:
'@jsonjoy.com/fs-node-utils': 4.57.2(tslib@2.8.1)
tree-dump: 1.1.0(tslib@2.8.1)
tslib: 2.8.1
'@jsonjoy.com/fs-snapshot@4.57.2(tslib@2.8.1)':
dependencies:
'@jsonjoy.com/buffers': 17.67.0(tslib@2.8.1)
'@jsonjoy.com/fs-node-utils': 4.57.2(tslib@2.8.1)
'@jsonjoy.com/json-pack': 17.67.0(tslib@2.8.1)
'@jsonjoy.com/util': 17.67.0(tslib@2.8.1)
tslib: 2.8.1
'@jsonjoy.com/json-pack@1.21.0(tslib@2.8.1)':
dependencies:
'@jsonjoy.com/base64': 1.1.2(tslib@2.8.1)
'@jsonjoy.com/buffers': 1.2.1(tslib@2.8.1)
'@jsonjoy.com/codegen': 1.0.0(tslib@2.8.1)
'@jsonjoy.com/json-pointer': 1.0.2(tslib@2.8.1)
'@jsonjoy.com/util': 1.9.0(tslib@2.8.1)
hyperdyperid: 1.2.0
thingies: 2.6.0(tslib@2.8.1)
tree-dump: 1.1.0(tslib@2.8.1)
tslib: 2.8.1
'@jsonjoy.com/json-pack@17.67.0(tslib@2.8.1)':
dependencies:
'@jsonjoy.com/base64': 17.67.0(tslib@2.8.1)
'@jsonjoy.com/buffers': 17.67.0(tslib@2.8.1)
'@jsonjoy.com/codegen': 17.67.0(tslib@2.8.1)
'@jsonjoy.com/json-pointer': 17.67.0(tslib@2.8.1)
'@jsonjoy.com/util': 17.67.0(tslib@2.8.1)
hyperdyperid: 1.2.0
thingies: 2.6.0(tslib@2.8.1)
tree-dump: 1.1.0(tslib@2.8.1)
tslib: 2.8.1
'@jsonjoy.com/json-pointer@1.0.2(tslib@2.8.1)':
dependencies:
'@jsonjoy.com/codegen': 1.0.0(tslib@2.8.1)
'@jsonjoy.com/util': 1.9.0(tslib@2.8.1)
tslib: 2.8.1
'@jsonjoy.com/json-pointer@17.67.0(tslib@2.8.1)':
dependencies:
'@jsonjoy.com/util': 17.67.0(tslib@2.8.1)
tslib: 2.8.1
'@jsonjoy.com/util@1.9.0(tslib@2.8.1)':
dependencies:
'@jsonjoy.com/buffers': 1.2.1(tslib@2.8.1)
'@jsonjoy.com/codegen': 1.0.0(tslib@2.8.1)
tslib: 2.8.1
'@jsonjoy.com/util@17.67.0(tslib@2.8.1)':
dependencies:
'@jsonjoy.com/buffers': 17.67.0(tslib@2.8.1)
'@jsonjoy.com/codegen': 17.67.0(tslib@2.8.1)
tslib: 2.8.1
'@zip.js/zip.js@2.8.26': {}
assert@2.1.0:
dependencies:
call-bind: 1.0.9
is-nan: 1.3.2
object-is: 1.1.6
object.assign: 4.1.7
util: 0.12.5
available-typed-arrays@1.0.7:
dependencies:
possible-typed-array-names: 1.1.0
balanced-match@4.0.4: {}
base64-js@1.5.1: {}
brace-expansion@5.0.5:
dependencies:
balanced-match: 4.0.4
buffer@6.0.3:
dependencies:
base64-js: 1.5.1
ieee754: 1.2.1
call-bind-apply-helpers@1.0.2:
dependencies:
es-errors: 1.3.0
function-bind: 1.1.2
call-bind@1.0.9:
dependencies:
call-bind-apply-helpers: 1.0.2
es-define-property: 1.0.1
get-intrinsic: 1.3.0
set-function-length: 1.2.2
call-bound@1.0.4:
dependencies:
call-bind-apply-helpers: 1.0.2
get-intrinsic: 1.3.0
chalk@5.6.2: {}
change-case@5.4.4: {}
colorjs.io@0.5.2: {}
commander@12.1.0: {}
component-emitter@2.0.0: {}
deepmerge@4.3.1: {}
define-data-property@1.1.4:
dependencies:
es-define-property: 1.0.1
es-errors: 1.3.0
gopd: 1.2.0
define-properties@1.2.1:
dependencies:
define-data-property: 1.1.4
has-property-descriptors: 1.0.2
object-keys: 1.1.1
dunder-proto@1.0.1:
dependencies:
call-bind-apply-helpers: 1.0.2
es-errors: 1.3.0
gopd: 1.2.0
es-define-property@1.0.1: {}
es-errors@1.3.0: {}
es-object-atoms@1.1.1:
dependencies:
es-errors: 1.3.0
events@3.3.0: {}
for-each@0.3.5:
dependencies:
is-callable: 1.2.7
function-bind@1.1.2: {}
generator-function@2.0.1: {}
get-intrinsic@1.3.0:
dependencies:
call-bind-apply-helpers: 1.0.2
es-define-property: 1.0.1
es-errors: 1.3.0
es-object-atoms: 1.1.1
function-bind: 1.1.2
get-proto: 1.0.1
gopd: 1.2.0
has-symbols: 1.1.0
hasown: 2.0.3
math-intrinsics: 1.1.0
get-proto@1.0.1:
dependencies:
dunder-proto: 1.0.1
es-object-atoms: 1.1.1
glob-to-regex.js@1.2.0(tslib@2.8.1):
dependencies:
tslib: 2.8.1
glob@13.0.6:
dependencies:
minimatch: 10.2.5
minipass: 7.1.3
path-scurry: 2.0.2
gopd@1.2.0: {}
has-property-descriptors@1.0.2:
dependencies:
es-define-property: 1.0.1
has-symbols@1.1.0: {}
has-tostringtag@1.0.2:
dependencies:
has-symbols: 1.1.0
hasown@2.0.3:
dependencies:
function-bind: 1.1.2
hyperdyperid@1.2.0: {}
ieee754@1.2.1: {}
inherits@2.0.3: {}
inherits@2.0.4: {}
is-arguments@1.2.0:
dependencies:
call-bound: 1.0.4
has-tostringtag: 1.0.2
is-callable@1.2.7: {}
is-generator-function@1.1.2:
dependencies:
call-bound: 1.0.4
generator-function: 2.0.1
get-proto: 1.0.1
has-tostringtag: 1.0.2
safe-regex-test: 1.1.0
is-nan@1.3.2:
dependencies:
call-bind: 1.0.9
define-properties: 1.2.1
is-plain-obj@4.1.0: {}
is-regex@1.2.1:
dependencies:
call-bound: 1.0.4
gopd: 1.2.0
has-tostringtag: 1.0.2
hasown: 2.0.3
is-typed-array@1.1.15:
dependencies:
which-typed-array: 1.1.20
json5@2.2.3: {}
lru-cache@11.3.5: {}
math-intrinsics@1.1.0: {}
memfs@4.57.2(tslib@2.8.1):
dependencies:
'@jsonjoy.com/fs-core': 4.57.2(tslib@2.8.1)
'@jsonjoy.com/fs-fsa': 4.57.2(tslib@2.8.1)
'@jsonjoy.com/fs-node': 4.57.2(tslib@2.8.1)
'@jsonjoy.com/fs-node-builtins': 4.57.2(tslib@2.8.1)
'@jsonjoy.com/fs-node-to-fsa': 4.57.2(tslib@2.8.1)
'@jsonjoy.com/fs-node-utils': 4.57.2(tslib@2.8.1)
'@jsonjoy.com/fs-print': 4.57.2(tslib@2.8.1)
'@jsonjoy.com/fs-snapshot': 4.57.2(tslib@2.8.1)
'@jsonjoy.com/json-pack': 1.21.0(tslib@2.8.1)
'@jsonjoy.com/util': 1.9.0(tslib@2.8.1)
glob-to-regex.js: 1.2.0(tslib@2.8.1)
thingies: 2.6.0(tslib@2.8.1)
tree-dump: 1.1.0(tslib@2.8.1)
tslib: 2.8.1
minimatch@10.2.5:
dependencies:
brace-expansion: 5.0.5
minipass@7.1.3: {}
object-inspect@1.13.4: {}
object-is@1.1.6:
dependencies:
call-bind: 1.0.9
define-properties: 1.2.1
object-keys@1.1.1: {}
object.assign@4.1.7:
dependencies:
call-bind: 1.0.9
call-bound: 1.0.4
define-properties: 1.2.1
es-object-atoms: 1.1.1
has-symbols: 1.1.0
object-keys: 1.1.1
path-scurry@2.0.2:
dependencies:
lru-cache: 11.3.5
minipass: 7.1.3
path-unified@0.2.0: {}
path@0.12.7:
dependencies:
process: 0.11.10
util: 0.10.4
possible-typed-array-names@1.1.0: {}
prettier@3.8.3: {}
process@0.11.10: {}
punycode@1.4.1: {}
qs@6.15.1:
dependencies:
side-channel: 1.1.0
safe-buffer@5.2.1: {}
safe-regex-test@1.1.0:
dependencies:
call-bound: 1.0.4
es-errors: 1.3.0
is-regex: 1.2.1
set-function-length@1.2.2:
dependencies:
define-data-property: 1.1.4
es-errors: 1.3.0
function-bind: 1.1.2
get-intrinsic: 1.3.0
gopd: 1.2.0
has-property-descriptors: 1.0.2
side-channel-list@1.0.1:
dependencies:
es-errors: 1.3.0
object-inspect: 1.13.4
side-channel-map@1.0.1:
dependencies:
call-bound: 1.0.4
es-errors: 1.3.0
get-intrinsic: 1.3.0
object-inspect: 1.13.4
side-channel-weakmap@1.0.2:
dependencies:
call-bound: 1.0.4
es-errors: 1.3.0
get-intrinsic: 1.3.0
object-inspect: 1.13.4
side-channel-map: 1.0.1
side-channel@1.1.0:
dependencies:
es-errors: 1.3.0
object-inspect: 1.13.4
side-channel-list: 1.0.1
side-channel-map: 1.0.1
side-channel-weakmap: 1.0.2
stream@0.0.3:
dependencies:
component-emitter: 2.0.0
string_decoder@1.3.0:
dependencies:
safe-buffer: 5.2.1
style-dictionary@5.4.0(tslib@2.8.1):
dependencies:
'@bundled-es-modules/deepmerge': 4.3.1
'@bundled-es-modules/glob': 13.0.6
'@bundled-es-modules/memfs': 4.17.0(tslib@2.8.1)
'@zip.js/zip.js': 2.8.26
chalk: 5.6.2
change-case: 5.4.4
colorjs.io: 0.5.2
commander: 12.1.0
is-plain-obj: 4.1.0
json5: 2.2.3
path-unified: 0.2.0
prettier: 3.8.3
tinycolor2: 1.6.0
transitivePeerDependencies:
- tslib
thingies@2.6.0(tslib@2.8.1):
dependencies:
tslib: 2.8.1
tinycolor2@1.6.0: {}
tree-dump@1.1.0(tslib@2.8.1):
dependencies:
tslib: 2.8.1
tslib@2.8.1: {}
url@0.11.4:
dependencies:
punycode: 1.4.1
qs: 6.15.1
util@0.10.4:
dependencies:
inherits: 2.0.3
util@0.12.5:
dependencies:
inherits: 2.0.4
is-arguments: 1.2.0
is-generator-function: 1.1.2
is-typed-array: 1.1.15
which-typed-array: 1.1.20
which-typed-array@1.1.20:
dependencies:
available-typed-arrays: 1.0.7
call-bind: 1.0.9
call-bound: 1.0.4
for-each: 0.3.5
get-proto: 1.0.1
gopd: 1.2.0
has-tostringtag: 1.0.2

242
scripts/build.mjs Normal file
View file

@ -0,0 +1,242 @@
import StyleDictionary from 'style-dictionary';
// Raw ramps as custom properties and semantic light/dark layers for CSS
StyleDictionary.registerFormat({
name: 'frozendev/css',
format: ({ dictionary }) => {
const ramp = dictionary.allTokens
.filter(t => t.path[0] === 'color')
.map(t => ` --fd-${t.path.slice(1).join('-')}: ${t.value};`)
.join('\n');
const light = dictionary.allTokens
.filter(t => t.path[0] === 'semantic' && t.path[1] === 'light')
.map(t => ` --fd-${t.path.slice(2).join('-')}: ${t.value};`)
.join('\n');
const dark = dictionary.allTokens
.filter(t => t.path[0] === 'semantic' && t.path[1] === 'dark')
.map(t => ` --fd-${t.path.slice(2).join('-')}: ${t.value};`)
.join('\n');
return [
`/* FrozenDev Electronics - @generated, do not edit */`,
`/* Raw ramps */`,
`:root {\n${ramp}\n}`,
``,
`/* Semantic aliases, light (default) */`,
`:root, [data-theme="light"] {\n${light}\n}`,
``,
`/* Semantic aliases, dark */`,
`[data-theme="dark"] {\n${dark}\n}`,
].join('\n');
},
});
// Ramp variables + semantic maps for SCSS
StyleDictionary.registerFormat({
name: 'frozendev/scss',
format: ({ dictionary }) => {
const rampVars = dictionary.allTokens
.filter(t => t.path[0] === 'color')
.map(t => `$fd-${t.path.slice(1).join('-')}: ${t.value};`)
.join('\n');
const lightMap = dictionary.allTokens
.filter(t => t.path[0] === 'semantic' && t.path[1] === 'light')
.map(t => ` '${t.path.slice(2).join('-')}': ${t.value},`)
.join('\n');
const darkMap = dictionary.allTokens
.filter(t => t.path[0] === 'semantic' && t.path[1] === 'dark')
.map(t => ` '${t.path.slice(2).join('-')}': ${t.value},`)
.join('\n');
return [
`// FrozenDev Electronics - @generated, do not edit`,
``,
`// Raw ramps`,
rampVars,
``,
`// Semantic maps`,
`$fd-theme-light: (\n${lightMap}\n);`,
``,
`$fd-theme-dark: (\n${darkMap}\n);`,
].join('\n');
},
});
// JS/TS ESM
StyleDictionary.registerFormat({
name: 'frozendev/js-esm',
format: ({ dictionary }) => {
const ramps = {};
dictionary.allTokens
.filter(t => t.path[0] === 'color')
.forEach(t => {
const [, ramp, stop] = t.path;
if (!ramps[ramp]) ramps[ramp] = {};
ramps[ramp][stop] = t.value;
});
const semantic = { light: {}, dark: {} };
dictionary.allTokens
.filter(t => t.path[0] === 'semantic')
.forEach(t => {
const [, theme, ...key] = t.path;
semantic[theme][key.join('-')] = t.value;
});
return [
`// FrozenDev Electronics - @generated, do not edit`,
`export const ramps = ${JSON.stringify(ramps, null, 2)};`,
``,
`export const semantic = ${JSON.stringify(semantic, null, 2)};`,
``,
`export const tokens = { ramps, semantic };`,
`export default tokens;`,
].join('\n');
},
});
// Tailwind config snippet
StyleDictionary.registerFormat({
name: 'frozendev/tailwind',
format: ({ dictionary }) => {
const colors = {};
dictionary.allTokens
.filter(t => t.path[0] === 'color')
.forEach(t => {
const [, ramp, stop] = t.path;
const camel = ramp.replace(/-([a-z])/g, (_, c) => c.toUpperCase());
if (!colors[camel]) colors[camel] = {};
colors[camel][stop] = t.value;
});
// Semantic CSS var references for Tailwind
const semanticLight = {};
dictionary.allTokens
.filter(t => t.path[0] === 'semantic' && t.path[1] === 'light')
.forEach(t => {
semanticLight[t.path.slice(2).join('-')] = `var(--fd-${t.path.slice(2).join('-')})`;
});
return [
`// FrozenDev Electronics - @generated, do not edit`,
`// Usage: spread into your Tailwind config's theme.colors`,
``,
`export const frozendevRamps = ${JSON.stringify(colors, null, 2)};`,
``,
`export const frozendevSemantic = ${JSON.stringify(semanticLight, null, 2)};`,
``,
`// In tailwind.config.js:`,
`// import { frozendevRamps, frozendevSemantic } from '@frozendev/tokens/tailwind';`,
`// theme: { extend: { colors: { ...frozendevRamps, fd: frozendevSemantic } } }`,
].join('\n');
},
});
// Android XML
StyleDictionary.registerFormat({
name: 'frozendev/android-xml',
format: ({ dictionary }) => {
const items = dictionary.allTokens
.filter(t => t.path[0] === 'color')
.map(t => {
const name = `fd_${t.path.slice(1).join('_')}`;
// Android color format: #AARRGGBB; our tokens are opaque, so prepend FF
const hex = t.value.replace('#', '#FF');
return ` <color name="${name}">${hex}</color>`;
})
.join('\n');
return `<?xml version="1.0" encoding="utf-8"?>\n<!-- FrozenDev Electronics - @generated, do not edit -->\n<resources>\n${items}\n</resources>`;
},
});
// iOS Swift
StyleDictionary.registerFormat({
name: 'frozendev/ios-swift',
format: ({ dictionary }) => {
const props = dictionary.allTokens
.filter(t => t.path[0] === 'color')
.map(t => {
const name = t.path.slice(1)
.join('-')
.replace(/-([a-z0-9])/g, (_, c) => c.toUpperCase());
const hex = t.value.replace('#', '');
const r = parseInt(hex.slice(0,2),16)/255;
const g = parseInt(hex.slice(2,4),16)/255;
const b = parseInt(hex.slice(4,6),16)/255;
return ` static let ${name} = Color(red: ${r.toFixed(4)}, green: ${g.toFixed(4)}, blue: ${b.toFixed(4)})`;
})
.join('\n');
return [
`// FrozenDev Electronics - @generated, do not edit`,
`import SwiftUI`,
``,
`public struct FrozenDevColors {`,
props,
`}`,
].join('\n');
},
});
// Build configuration
// See:
// <https://styledictionary.com/reference/config/>
const sd = new StyleDictionary({
source: ['tokens/**/*.json'],
platforms: {
css: {
transformGroup: 'css',
buildPath: 'outputs/css/',
files: [{
destination: 'tokens.css',
format: 'frozendev/css',
}],
},
scss: {
transformGroup: 'scss',
buildPath: 'outputs/scss/',
files: [{
destination: '_tokens.scss',
format: 'frozendev/scss',
}],
},
js: {
transformGroup: 'js',
buildPath: 'outputs/js/',
files: [
{
destination: 'tokens.mjs',
format: 'frozendev/js-esm',
},
{
destination: 'tailwind.mjs',
format: 'frozendev/tailwind',
},
],
},
android: {
transformGroup: 'android',
buildPath: 'outputs/android/',
files: [{
destination: 'frozendev_colors.xml',
format: 'frozendev/android-xml',
}],
},
ios: {
transformGroup: 'ios',
buildPath: 'outputs/ios/',
files: [{
destination: 'FrozenDevColors.swift',
format: 'frozendev/ios-swift',
}],
},
},
});
await sd.buildAllPlatforms();
console.log('\n✓ FrozenDev tokens built.\n');

201
scripts/preview.mjs Normal file
View file

@ -0,0 +1,201 @@
#!/usr/bin/env node
import fs from "node:fs/promises";
import path from "node:path";
const input = process.argv[2] ?? "tokens";
const output = process.argv[3] ?? "color-preview.html";
function isColor(value) {
return (
typeof value === "string" &&
(
/^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i.test(value) ||
/^rgb\(/i.test(value) ||
/^rgba\(/i.test(value) ||
/^hsl\(/i.test(value) ||
/^hsla\(/i.test(value) ||
/^oklch\(/i.test(value) ||
/^color\(/i.test(value)
)
);
}
function unwrapToken(node) {
if (!node || typeof node !== "object") return node;
if ("$value" in node) return node.$value;
if ("value" in node) return node.value;
return node;
}
async function walkFiles(dir) {
const out = [];
const entries = await fs.readdir(dir, { withFileTypes: true });
for (const entry of entries) {
const full = path.join(dir, entry.name);
if (entry.isDirectory()) {
out.push(...await walkFiles(full));
} else if (/\.(json|tokens\.json)$/i.test(entry.name)) {
out.push(full);
}
}
return out;
}
function collectColors(obj, prefix = [], source = "unknown") {
const colors = [];
if (!obj || typeof obj !== "object") return colors;
for (const [key, raw] of Object.entries(obj)) {
const value = unwrapToken(raw);
const name = [...prefix, key];
if (isColor(value)) {
colors.push({
name: name.join("."),
value,
source
});
} else if (value && typeof value === "object") {
colors.push(...collectColors(value, name, source));
}
}
return colors;
}
function htmlEscape(s) {
return String(s)
.replaceAll("&", "&amp;")
.replaceAll("<", "&lt;")
.replaceAll(">", "&gt;")
.replaceAll('"', "&quot;");
}
function makeHtml(colors) {
const cards = colors.map(c => `
<section class="card">
<div class="swatch" style="background: ${htmlEscape(c.value)}"></div>
<div class="meta">
<code>${htmlEscape(c.name)}</code>
<button data-copy="${htmlEscape(c.value)}">${htmlEscape(c.value)}</button>
<small>${htmlEscape(c.source)}</small>
</div>
</section>
`).join("\n");
return `<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Color Preview</title>
<style>
:root {
font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
color: #111;
background: #f5f5f5;
}
body {
margin: 0;
padding: 32px;
}
h1 {
margin: 0 0 24px;
font-size: 28px;
}
.grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
gap: 16px;
}
.card {
overflow: hidden;
border-radius: 14px;
background: white;
box-shadow: 0 1px 4px rgb(0 0 0 / 0.12);
}
.swatch {
height: 120px;
border-bottom: 1px solid rgb(0 0 0 / 0.08);
}
.meta {
display: grid;
gap: 8px;
padding: 14px;
}
code {
font-size: 13px;
word-break: break-word;
}
button {
width: fit-content;
border: 1px solid #ccc;
border-radius: 999px;
background: #fafafa;
padding: 6px 10px;
font: inherit;
cursor: pointer;
}
small {
color: #666;
word-break: break-word;
}
</style>
</head>
<body>
<h1>Color Preview</h1>
<div class="grid">
${cards || "<p>No colors found.</p>"}
</div>
<script>
document.addEventListener("click", async event => {
const button = event.target.closest("button[data-copy]");
if (!button) return;
await navigator.clipboard.writeText(button.dataset.copy);
const old = button.textContent;
button.textContent = "Copied";
setTimeout(() => button.textContent = old, 900);
});
</script>
</body>
</html>`;
}
const stat = await fs.stat(input).catch(() => null);
if (!stat) {
console.error(`Input not found: ${input}`);
process.exit(1);
}
const files = stat.isDirectory() ? await walkFiles(input) : [input];
const colors = [];
for (const file of files) {
const json = JSON.parse(await fs.readFile(file, "utf8"));
colors.push(...collectColors(json, [], file));
}
colors.sort((a, b) => a.name.localeCompare(b.name));
await fs.mkdir(path.dirname(output), { recursive: true });
await fs.writeFile(output, makeHtml(colors), "utf8");
console.log(`Wrote ${output}`);
console.log(`Found ${colors.length} colors.`);

64
tokens/color.json Normal file
View file

@ -0,0 +1,64 @@
{
"color": {
"ice-blue": {
"50": { "value": "#eaf6ff", "comment": "Subtle tinted backgrounds, hover fills" },
"100": { "value": "#c9e8ff", "comment": "Light badges, info chip backgrounds" },
"200": { "value": "#93cfff", "comment": "Borders on tinted surfaces" },
"300": { "value": "#5ab3f5", "comment": "Decorative accents, dark-mode borders" },
"400": { "value": "#2a94e8", "comment": "Primary button (dark theme)" },
"500": { "value": "#1070c8", "comment": "Primary button (light theme)" },
"600": { "value": "#0d549e", "comment": "Button hover (light theme)" },
"700": { "value": "#0a3c73", "comment": "Strong emphasis, active states" },
"800": { "value": "#072849", "comment": "Text on light blue fills" },
"900": { "value": "#041525", "comment": "Maximum contrast on tinted backgrounds" }
},
"circuit-green": {
"50": { "value": "#f0fce0", "comment": "Success message backgrounds" },
"100": { "value": "#d4f7a0", "comment": "Success badge fills" },
"200": { "value": "#aeee5a", "comment": "Decorative borders, dark-mode badge fills" },
"300": { "value": "#88d620", "comment": "Dark-mode success badges" },
"400": { "value": "#6aae0a", "comment": "Online indicators, success buttons (dark)" },
"500": { "value": "#4a8c00", "comment": "Success buttons (light)" },
"600": { "value": "#376600", "comment": "Hover state for success actions" },
"700": { "value": "#254500", "comment": "Strong success emphasis" },
"800": { "value": "#162b00", "comment": "Text on green fills" },
"900": { "value": "#0a1400", "comment": "Maximum contrast on green backgrounds" }
},
"plasma-violet": {
"50": { "value": "#f0f0ff", "comment": "Accent background tints" },
"100": { "value": "#d4d3ff", "comment": "Accent badge fills (light)" },
"200": { "value": "#a8a6ff", "comment": "Decorative borders, dark-mode badge fills" },
"300": { "value": "#7b78f5", "comment": "Illustrated highlights" },
"400": { "value": "#5956e8", "comment": "Accent interactive elements (dark)" },
"500": { "value": "#3e3bc8", "comment": "Accent interactive elements (light)" },
"600": { "value": "#2e2b9b", "comment": "Hover on accent elements" },
"700": { "value": "#201e6e", "comment": "Strong accent, selected state outlines" },
"800": { "value": "#141245", "comment": "Text on violet fills" },
"900": { "value": "#09081f", "comment": "Maximum contrast on violet backgrounds" }
},
"solder-amber": {
"50": { "value": "#fff8eb", "comment": "Warning message backgrounds" },
"100": { "value": "#fde9b2", "comment": "Warning badge fills (light)" },
"200": { "value": "#fbd062", "comment": "Decorative highlights" },
"300": { "value": "#f5b528", "comment": "Dark-mode warning badges" },
"400": { "value": "#dc8f0a", "comment": "Warning interactive elements (dark)" },
"500": { "value": "#ae6a06", "comment": "Warning buttons (light)" },
"600": { "value": "#804d04", "comment": "Hover on warning elements" },
"700": { "value": "#533203", "comment": "Strong warning emphasis" },
"800": { "value": "#301d02", "comment": "Text on amber fills" },
"900": { "value": "#160e01", "comment": "Maximum contrast on amber backgrounds" }
},
"void-gray": {
"50": { "value": "#f3f4f6", "comment": "Page background (light theme)" },
"100": { "value": "#d1d5db", "comment": "Subtle borders, dividers (light)" },
"200": { "value": "#9ca3af", "comment": "Placeholder text, disabled states" },
"300": { "value": "#6b7280", "comment": "Muted text, secondary labels" },
"400": { "value": "#4b5563", "comment": "Body text on white (accessible)" },
"500": { "value": "#374151", "comment": "Strong body text" },
"600": { "value": "#1f2937", "comment": "Surface background (dark theme)" },
"700": { "value": "#111827", "comment": "Elevated surface (dark theme)" },
"800": { "value": "#0a0e17", "comment": "Page background (dark theme)" },
"900": { "value": "#050810", "comment": "Deepest background, near-black" }
}
}
}

34
tokens/semantic.json Normal file
View file

@ -0,0 +1,34 @@
{
"semantic": {
"light": {
"bg": { "value": "{color.void-gray.50}", "comment": "Page background" },
"surface": { "value": "#ffffff", "comment": "Card / panel surface" },
"border": { "value": "#e2e8f0", "comment": "Default border" },
"text": { "value": "{color.void-gray.800}", "comment": "Primary text" },
"text-muted": { "value": "{color.void-gray.300}", "comment": "Secondary / helper text" },
"primary": { "value": "{color.ice-blue.500}", "comment": "Primary interactive" },
"primary-hover":{ "value": "{color.ice-blue.600}", "comment": "Primary hover" },
"accent": { "value": "{color.plasma-violet.500}", "comment": "Accent interactive" },
"accent-hover": { "value": "{color.plasma-violet.600}", "comment": "Accent hover" },
"success": { "value": "{color.circuit-green.500}", "comment": "Success / online" },
"success-hover":{ "value": "{color.circuit-green.600}", "comment": "Success hover" },
"warning": { "value": "{color.solder-amber.500}", "comment": "Warning / in-progress" },
"warning-hover":{ "value": "{color.solder-amber.600}", "comment": "Warning hover" }
},
"dark": {
"bg": { "value": "#0d1117", "comment": "Page background" },
"surface": { "value": "#161b22", "comment": "Elevated surface" },
"border": { "value": "#30363d", "comment": "Default border" },
"text": { "value": "#e6edf3", "comment": "Primary text" },
"text-muted": { "value": "#7d8590", "comment": "Secondary / helper text" },
"primary": { "value": "{color.ice-blue.400}", "comment": "Primary interactive" },
"primary-hover":{ "value": "{color.ice-blue.300}", "comment": "Primary hover" },
"accent": { "value": "{color.plasma-violet.300}", "comment": "Accent interactive" },
"accent-hover": { "value": "{color.plasma-violet.200}", "comment": "Accent hover" },
"success": { "value": "{color.circuit-green.400}", "comment": "Success / online" },
"success-hover":{ "value": "{color.circuit-green.300}", "comment": "Success hover" },
"warning": { "value": "{color.solder-amber.400}", "comment": "Warning / in-progress" },
"warning-hover":{ "value": "{color.solder-amber.300}", "comment": "Warning hover" }
}
}
}