@baukit/ui-tokens 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,183 @@
1
+ const TOKEN_NAME = /^[a-z][A-Za-z0-9]*$/u;
2
+ const HEX_COLOR = /^#[\dA-Fa-f]{3}(?:[\dA-Fa-f]{3})?$/u;
3
+ function isRecord(value) {
4
+ return value !== null && typeof value === 'object' && !Array.isArray(value);
5
+ }
6
+ function issue(issues, path, message) {
7
+ issues.push({ path, message });
8
+ }
9
+ function validateKeys(value, allowed, path, issues) {
10
+ for (const key of Object.keys(value)) {
11
+ if (!allowed.includes(key)) {
12
+ issue(issues, `${path}.${key}`, 'is not a recognized field');
13
+ }
14
+ }
15
+ for (const key of allowed) {
16
+ if (!(key in value)) {
17
+ issue(issues, `${path}.${key}`, 'is required');
18
+ }
19
+ }
20
+ }
21
+ function validateTokenName(name, path, issues) {
22
+ if (!TOKEN_NAME.test(name)) {
23
+ issue(issues, path, 'must start with a lowercase letter and contain only letters or digits');
24
+ }
25
+ }
26
+ function validateColorGroup(value, path, depth, issues) {
27
+ if (!isRecord(value)) {
28
+ issue(issues, path, 'must be a color token group');
29
+ return;
30
+ }
31
+ const isLeaf = 'light' in value || 'dark' in value;
32
+ if (isLeaf) {
33
+ validateKeys(value, ['light', 'dark'], path, issues);
34
+ if (depth < 2) {
35
+ issue(issues, path, 'must use a semantic group and token name (for example background.primary)');
36
+ }
37
+ for (const theme of ['light', 'dark']) {
38
+ const color = value[theme];
39
+ if (typeof color !== 'string' || !HEX_COLOR.test(color)) {
40
+ issue(issues, `${path}.${theme}`, 'must be a #RGB or #RRGGBB hexadecimal color');
41
+ }
42
+ }
43
+ return;
44
+ }
45
+ const entries = Object.entries(value);
46
+ if (entries.length === 0) {
47
+ issue(issues, path, 'must contain at least one token');
48
+ }
49
+ for (const [name, child] of entries) {
50
+ validateTokenName(name, `${path}.${name}`, issues);
51
+ validateColorGroup(child, `${path}.${name}`, depth + 1, issues);
52
+ }
53
+ }
54
+ function validScalar(value, kind) {
55
+ if (kind === 'string') {
56
+ return typeof value === 'string' && value.length > 0;
57
+ }
58
+ if (kind === 'weight') {
59
+ return typeof value === 'number' && Number.isInteger(value) && value >= 1 && value <= 1000;
60
+ }
61
+ if (typeof value === 'string') {
62
+ return value.length > 0;
63
+ }
64
+ return (typeof value === 'number' &&
65
+ Number.isFinite(value) &&
66
+ (kind === 'positive-dimension' ? value > 0 : value >= 0));
67
+ }
68
+ function validateScale(value, path, kind, issues) {
69
+ if (!isRecord(value)) {
70
+ issue(issues, path, 'must be a token scale');
71
+ return;
72
+ }
73
+ const entries = Object.entries(value);
74
+ if (entries.length === 0) {
75
+ issue(issues, path, 'must contain at least one token');
76
+ }
77
+ for (const [name, token] of entries) {
78
+ const tokenPath = `${path}.${name}`;
79
+ validateTokenName(name, tokenPath, issues);
80
+ if (!validScalar(token, kind)) {
81
+ issue(issues, tokenPath, `must be a valid ${kind.replace('-', ' ')}`);
82
+ }
83
+ }
84
+ }
85
+ function validateTypography(value, issues) {
86
+ if (!isRecord(value)) {
87
+ issue(issues, '$.typography', 'must be an object');
88
+ return;
89
+ }
90
+ validateKeys(value, ['family', 'size', 'weight', 'lineHeight'], '$.typography', issues);
91
+ validateScale(value['family'], '$.typography.family', 'string', issues);
92
+ validateScale(value['size'], '$.typography.size', 'positive-dimension', issues);
93
+ validateScale(value['weight'], '$.typography.weight', 'weight', issues);
94
+ validateScale(value['lineHeight'], '$.typography.lineHeight', 'positive-dimension', issues);
95
+ }
96
+ function validateMotion(value, issues) {
97
+ if (!isRecord(value)) {
98
+ issue(issues, '$.motion', 'must be an object');
99
+ return;
100
+ }
101
+ validateKeys(value, ['duration', 'easing'], '$.motion', issues);
102
+ validateScale(value['duration'], '$.motion.duration', 'dimension', issues);
103
+ validateScale(value['easing'], '$.motion.easing', 'string', issues);
104
+ }
105
+ function findColor(value, path) {
106
+ const segments = path.split('.');
107
+ if (segments.shift() !== 'color') {
108
+ return undefined;
109
+ }
110
+ let current = value;
111
+ for (const segment of segments) {
112
+ if (!isRecord(current)) {
113
+ return undefined;
114
+ }
115
+ current = current[segment];
116
+ }
117
+ if (isRecord(current) &&
118
+ typeof current['light'] === 'string' &&
119
+ typeof current['dark'] === 'string') {
120
+ return current;
121
+ }
122
+ return undefined;
123
+ }
124
+ function validateContrastPairs(value, colors, issues) {
125
+ if (!Array.isArray(value)) {
126
+ issue(issues, '$.contrastPairs', 'must be an array');
127
+ return;
128
+ }
129
+ value.forEach((pair, index) => {
130
+ const path = `$.contrastPairs[${String(index)}]`;
131
+ if (!isRecord(pair)) {
132
+ issue(issues, path, 'must be an object');
133
+ return;
134
+ }
135
+ for (const key of Object.keys(pair)) {
136
+ if (!['foreground', 'background', 'largeText'].includes(key)) {
137
+ issue(issues, `${path}.${key}`, 'is not a recognized field');
138
+ }
139
+ }
140
+ for (const role of ['foreground', 'background']) {
141
+ const colorPath = pair[role];
142
+ if (typeof colorPath !== 'string' || findColor(colors, colorPath) === undefined) {
143
+ issue(issues, `${path}.${role}`, 'must reference an existing color token path');
144
+ }
145
+ }
146
+ if ('largeText' in pair && typeof pair['largeText'] !== 'boolean') {
147
+ issue(issues, `${path}.largeText`, 'must be a boolean');
148
+ }
149
+ });
150
+ }
151
+ /** Returns every structural problem with a path rooted at `$`. */
152
+ export function validateTokens(input) {
153
+ const issues = [];
154
+ if (!isRecord(input)) {
155
+ return [{ path: '$', message: 'must be an object' }];
156
+ }
157
+ validateKeys(input, ['color', 'typography', 'space', 'radius', 'motion', 'elevation', 'contrastPairs'], '$', issues);
158
+ validateColorGroup(input['color'], '$.color', 0, issues);
159
+ validateTypography(input['typography'], issues);
160
+ validateScale(input['space'], '$.space', 'dimension', issues);
161
+ validateScale(input['radius'], '$.radius', 'dimension', issues);
162
+ validateMotion(input['motion'], issues);
163
+ validateScale(input['elevation'], '$.elevation', 'dimension', issues);
164
+ validateContrastPairs(input['contrastPairs'], input['color'], issues);
165
+ return issues;
166
+ }
167
+ export class TokenValidationError extends Error {
168
+ issues;
169
+ constructor(issues) {
170
+ super(issues.map(({ path, message }) => `${path}: ${message}`).join('\n'));
171
+ this.name = 'TokenValidationError';
172
+ this.issues = issues;
173
+ }
174
+ }
175
+ /** Validates unknown input and returns it with the design-token type. */
176
+ export function parseTokens(input) {
177
+ const issues = validateTokens(input);
178
+ if (issues.length > 0) {
179
+ throw new TokenValidationError(issues);
180
+ }
181
+ return input;
182
+ }
183
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,GAAG,sBAAsB,CAAC;AAC1C,MAAM,SAAS,GAAG,qCAAqC,CAAC;AAExD,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,KAAK,CAAC,MAAyB,EAAE,IAAY,EAAE,OAAe;IACrE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;AACjC,CAAC;AAED,SAAS,YAAY,CACnB,KAA8B,EAC9B,OAA0B,EAC1B,IAAY,EACZ,MAAyB;IAEzB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACrC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3B,KAAK,CAAC,MAAM,EAAE,GAAG,IAAI,IAAI,GAAG,EAAE,EAAE,2BAA2B,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,IAAI,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,EAAE,CAAC;YACpB,KAAK,CAAC,MAAM,EAAE,GAAG,IAAI,IAAI,GAAG,EAAE,EAAE,aAAa,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAY,EAAE,IAAY,EAAE,MAAyB;IAC9E,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3B,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,uEAAuE,CAAC,CAAC;IAC/F,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CACzB,KAAc,EACd,IAAY,EACZ,KAAa,EACb,MAAyB;IAEzB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,6BAA6B,CAAC,CAAC;QACnD,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK,CAAC;IACnD,IAAI,MAAM,EAAE,CAAC;QACX,YAAY,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QACrD,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACd,KAAK,CACH,MAAM,EACN,IAAI,EACJ,2EAA2E,CAC5E,CAAC;QACJ,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,CAAC,OAAO,EAAE,MAAM,CAAU,EAAE,CAAC;YAC/C,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;YAC3B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBACxD,KAAK,CAAC,MAAM,EAAE,GAAG,IAAI,IAAI,KAAK,EAAE,EAAE,6CAA6C,CAAC,CAAC;YACnF,CAAC;QACH,CAAC;QACD,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACtC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,iCAAiC,CAAC,CAAC;IACzD,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,OAAO,EAAE,CAAC;QACpC,iBAAiB,CAAC,IAAI,EAAE,GAAG,IAAI,IAAI,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC;QACnD,kBAAkB,CAAC,KAAK,EAAE,GAAG,IAAI,IAAI,IAAI,EAAE,EAAE,KAAK,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;IAClE,CAAC;AACH,CAAC;AAID,SAAS,WAAW,CAAC,KAAc,EAAE,IAAgB;IACnD,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IACvD,CAAC;IACD,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC;IAC7F,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IAC1B,CAAC;IACD,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QACtB,CAAC,IAAI,KAAK,oBAAoB,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CACzD,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CACpB,KAAc,EACd,IAAY,EACZ,IAAgB,EAChB,MAAyB;IAEzB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,uBAAuB,CAAC,CAAC;QAC7C,OAAO;IACT,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACtC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,iCAAiC,CAAC,CAAC;IACzD,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,OAAO,EAAE,CAAC;QACpC,MAAM,SAAS,GAAG,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC;QACpC,iBAAiB,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QAC3C,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC;YAC9B,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,mBAAmB,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QACxE,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAc,EAAE,MAAyB;IACnE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,KAAK,CAAC,MAAM,EAAE,cAAc,EAAE,mBAAmB,CAAC,CAAC;QACnD,OAAO;IACT,CAAC;IACD,YAAY,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC;IACxF,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IACxE,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,CAAC,CAAC;IAChF,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IACxE,aAAa,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,MAAM,CAAC,CAAC;AAC9F,CAAC;AAED,SAAS,cAAc,CAAC,KAAc,EAAE,MAAyB;IAC/D,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,mBAAmB,CAAC,CAAC;QAC/C,OAAO;IACT,CAAC;IACD,YAAY,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IAChE,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;IAC3E,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;AACtE,CAAC;AAED,SAAS,SAAS,CAAC,KAAc,EAAE,IAAY;IAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,QAAQ,CAAC,KAAK,EAAE,KAAK,OAAO,EAAE,CAAC;QACjC,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,OAAO,GAAY,KAAK,CAAC;IAC7B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACvB,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IACD,IACE,QAAQ,CAAC,OAAO,CAAC;QACjB,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,QAAQ;QACpC,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,QAAQ,EACnC,CAAC;QACD,OAAO,OAAgC,CAAC;IAC1C,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAc,EAAE,MAAe,EAAE,MAAyB;IACvF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,KAAK,CAAC,MAAM,EAAE,iBAAiB,EAAE,kBAAkB,CAAC,CAAC;QACrD,OAAO;IACT,CAAC;IACD,KAAK,CAAC,OAAO,CAAC,CAAC,IAAa,EAAE,KAAa,EAAE,EAAE;QAC7C,MAAM,IAAI,GAAG,mBAAmB,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;QACjD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACpB,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,mBAAmB,CAAC,CAAC;YACzC,OAAO;QACT,CAAC;QACD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACpC,IAAI,CAAC,CAAC,YAAY,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC7D,KAAK,CAAC,MAAM,EAAE,GAAG,IAAI,IAAI,GAAG,EAAE,EAAE,2BAA2B,CAAC,CAAC;YAC/D,CAAC;QACH,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,CAAC,YAAY,EAAE,YAAY,CAAU,EAAE,CAAC;YACzD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7B,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,SAAS,EAAE,CAAC;gBAChF,KAAK,CAAC,MAAM,EAAE,GAAG,IAAI,IAAI,IAAI,EAAE,EAAE,6CAA6C,CAAC,CAAC;YAClF,CAAC;QACH,CAAC;QACD,IAAI,WAAW,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,SAAS,EAAE,CAAC;YAClE,KAAK,CAAC,MAAM,EAAE,GAAG,IAAI,YAAY,EAAE,mBAAmB,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,YAAY,CACV,KAAK,EACL,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,CAAC,EAClF,GAAG,EACH,MAAM,CACP,CAAC;IACF,kBAAkB,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;IACzD,kBAAkB,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,CAAC;IAChD,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;IAC9D,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;IAChE,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC;IACxC,aAAa,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;IACtE,qBAAqB,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC;IACtE,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IAC7B,MAAM,CAA6B;IAEnD,YAAmB,MAAkC;QACnD,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3E,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;QACnC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF;AAED,yEAAyE;AACzE,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IACrC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,oBAAoB,CAAC,MAAM,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,KAAqB,CAAC;AAC/B,CAAC"}
package/package.json ADDED
@@ -0,0 +1,59 @@
1
+ {
2
+ "name": "@baukit/ui-tokens",
3
+ "version": "0.1.0",
4
+ "description": "Dependency-free design-token schema, validator, accessibility checker, and deterministic compiler for web and React Native.",
5
+ "license": "MIT",
6
+ "author": "Patrick Koss",
7
+ "homepage": "https://github.com/PatrickKoss/baukit#readme",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+https://github.com/PatrickKoss/baukit.git",
11
+ "directory": "typescript/packages/ui-tokens"
12
+ },
13
+ "bugs": {
14
+ "url": "https://github.com/PatrickKoss/baukit/issues"
15
+ },
16
+ "publishConfig": {
17
+ "access": "public"
18
+ },
19
+ "type": "module",
20
+ "engines": {
21
+ "node": ">=24.0.0"
22
+ },
23
+ "types": "./dist/index.d.ts",
24
+ "exports": {
25
+ ".": {
26
+ "types": "./dist/index.d.ts",
27
+ "import": "./dist/index.js"
28
+ },
29
+ "./eslint": {
30
+ "types": "./dist/eslint.d.ts",
31
+ "import": "./dist/eslint.js"
32
+ }
33
+ },
34
+ "files": [
35
+ "dist",
36
+ "README.md",
37
+ "LICENSE"
38
+ ],
39
+ "devDependencies": {
40
+ "@types/estree": "1.0.9",
41
+ "eslint": "9.39.5",
42
+ "typescript": "6.0.3",
43
+ "vitest": "4.1.10"
44
+ },
45
+ "peerDependencies": {
46
+ "eslint": "^9.39.5"
47
+ },
48
+ "peerDependenciesMeta": {
49
+ "eslint": {
50
+ "optional": true
51
+ }
52
+ },
53
+ "scripts": {
54
+ "build": "tsc -p tsconfig.json",
55
+ "test": "vitest run --config ../../vitest.config.ts",
56
+ "lint": "eslint src --max-warnings=0",
57
+ "format:check": "prettier --check src package.json tsconfig.json"
58
+ }
59
+ }