@arbor-css/tokens 0.0.59 → 0.0.62

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,147 @@
1
+ export declare const DEFAULT_TOKEN_PREFIX = "--x-";
2
+ export declare const DEFAULT_MIXIN_TOKEN_PREFIX = "--mx-";
3
+ export interface TokenOptions {
4
+ /** Inferred from purpose if not provided, defaults to "*" */
5
+ type?: PropertyType;
6
+ purpose?: TokenPurpose;
7
+ group?: string;
8
+ description?: string;
9
+ fallback?: string | number;
10
+ tag?: string;
11
+ inherits?: boolean;
12
+ /**
13
+ * Force the generation of a @property rule definition, even if it's not meaningful.
14
+ * Otherwise tokens whose properties have no special concerns like inherit:false will
15
+ * skip generating an @property
16
+ */
17
+ forceDefinition?: boolean;
18
+ }
19
+ /**
20
+ * Allowed types of properties - specifying one allows defining
21
+ * a custom property in CSS which enables interpolation in animations
22
+ * and other optimizations.
23
+ *
24
+ * "*" doesn't really do much but does allow any kind of value.
25
+ *
26
+ * "computed" will not generate a property definition and is assumed
27
+ * to be a complex CSS property value like calc() or other things.
28
+ */
29
+ export type PropertyType = 'angle' | 'color' | 'custom-ident' | 'image' | 'integer' | 'length' | 'length-percentage' | 'number' | 'percentage' | 'resolution' | 'string' | 'time' | 'transform-function' | 'transform-list' | 'url' | '*';
30
+ /**
31
+ * Roughly mapped / inspired by designtokens.org.
32
+ * Not currently used... but I wrote them down, so...
33
+ */
34
+ export type TokenType = 'color' | 'dimension' | 'font-family' | 'font-weight' | 'duration' | 'cubic-bezier' | 'number' | 'font-style' | 'ratio' | 'url' | TokenCompositeType;
35
+ export type TokenCompositeTypeShapes = {
36
+ strokeStyle: {
37
+ dashArray: {
38
+ value: string;
39
+ unit: string;
40
+ }[];
41
+ lineCap: string;
42
+ } | string;
43
+ border: {
44
+ color: string;
45
+ width: string;
46
+ style: string;
47
+ };
48
+ transition: {
49
+ duration: string;
50
+ delay: string;
51
+ timingFunction: string;
52
+ };
53
+ shadow: {
54
+ offsetX: string;
55
+ offsetY: string;
56
+ blur: string;
57
+ spread: string;
58
+ color: string;
59
+ } | {
60
+ offsetX: string;
61
+ offsetY: string;
62
+ blur: string;
63
+ spread: string;
64
+ color: string;
65
+ }[];
66
+ gradient: {
67
+ color: string;
68
+ position: string;
69
+ }[];
70
+ typography: {
71
+ fontFamily: string;
72
+ fontSize: string;
73
+ fontWeight: string;
74
+ letterSpacing: string;
75
+ lineHeight: string;
76
+ };
77
+ };
78
+ export type TokenCompositeType = keyof TokenCompositeTypeShapes;
79
+ export type TokenPurpose = 'color' | 'font-size' | 'font-weight' | 'font-family' | 'line-height' | 'spacing' | 'shadow' | 'border-radius' | 'border-width' | 'shadow-x' | 'shadow-y' | 'shadow-blur' | 'shadow-spread' | 'shadow-color' | 'size' | 'other';
80
+ export declare function getTypeFromPurpose(purpose: TokenPurpose): PropertyType;
81
+ export declare function createTokenFactory({ tokenPrefix }: {
82
+ tokenPrefix: string;
83
+ }): (name: string, { fallback, inherits, forceDefinition, purpose, type, group, description, tag, }?: TokenOptions) => {
84
+ "@@TOKEN@@": true;
85
+ name: string;
86
+ type: PropertyType;
87
+ tag: string | undefined;
88
+ purpose: TokenPurpose;
89
+ group: string | undefined;
90
+ description: string | undefined;
91
+ fallback: string | number | undefined;
92
+ var: string;
93
+ varFallback: (fallbackOverride?: string | number) => string;
94
+ assign: (value?: string | number) => string;
95
+ readonly definition: string;
96
+ suffixed: (suffix: string) => {
97
+ "@@TOKEN@@": true;
98
+ name: string;
99
+ type: PropertyType;
100
+ tag: string | undefined;
101
+ purpose: TokenPurpose;
102
+ group: string | undefined;
103
+ description: string | undefined;
104
+ fallback: string | number | undefined;
105
+ var: string;
106
+ varFallback: (fallbackOverride?: string | number) => string;
107
+ assign: (value?: string | number) => string;
108
+ readonly definition: string;
109
+ suffixed: /*elided*/ any;
110
+ prefixed: (prefix: string) => /*elided*/ any;
111
+ };
112
+ prefixed: (prefix: string) => {
113
+ "@@TOKEN@@": true;
114
+ name: string;
115
+ type: PropertyType;
116
+ tag: string | undefined;
117
+ purpose: TokenPurpose;
118
+ group: string | undefined;
119
+ description: string | undefined;
120
+ fallback: string | number | undefined;
121
+ var: string;
122
+ varFallback: (fallbackOverride?: string | number) => string;
123
+ assign: (value?: string | number) => string;
124
+ readonly definition: string;
125
+ suffixed: (suffix: string) => /*elided*/ any;
126
+ prefixed: /*elided*/ any;
127
+ };
128
+ };
129
+ export type Token = ReturnType<ReturnType<typeof createTokenFactory>>;
130
+ export type CreateToken = ReturnType<typeof createTokenFactory>;
131
+ export type TokenSchema = {
132
+ [Key: string]: Token | TokenSchema;
133
+ };
134
+ export declare function isToken(value: any): value is Token;
135
+ /**
136
+ * Maps all token values to themselves - i.e.
137
+ * {
138
+ * '--🌗-black': 'var(--🌗-black)',
139
+ * ...
140
+ * }
141
+ */
142
+ export declare function selfReferencedProps(schema: TokenSchema, { valuePrefix: prefix, }?: {
143
+ /** Apply a prefix to the referenced value, i.e. '$' = '--$system-black': '--$system-$-black' */
144
+ valuePrefix?: string;
145
+ }): Record<string, string>;
146
+ export declare function tokenSchemaToList(schema: TokenSchema): Token[];
147
+ //# sourceMappingURL=createToken.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createToken.d.ts","sourceRoot":"","sources":["../src/createToken.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oBAAoB,SAAS,CAAC;AAC3C,eAAO,MAAM,0BAA0B,UAAU,CAAC;AAElD,MAAM,WAAW,YAAY;IAC5B,6DAA6D;IAC7D,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,YAAY,GACrB,OAAO,GACP,OAAO,GACP,cAAc,GACd,OAAO,GACP,SAAS,GACT,QAAQ,GACR,mBAAmB,GACnB,QAAQ,GACR,YAAY,GACZ,YAAY,GACZ,QAAQ,GACR,MAAM,GACN,oBAAoB,GACpB,gBAAgB,GAChB,KAAK,GACL,GAAG,CAAC;AAEP;;;GAGG;AACH,MAAM,MAAM,SAAS,GAClB,OAAO,GACP,WAAW,GACX,aAAa,GACb,aAAa,GACb,UAAU,GACV,cAAc,GACd,QAAQ,GACR,YAAY,GACZ,OAAO,GACP,KAAK,GACL,kBAAkB,CAAC;AAEtB,MAAM,MAAM,wBAAwB,GAAG;IACtC,WAAW,EACR;QACA,SAAS,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;QAC7C,OAAO,EAAE,MAAM,CAAC;KACf,GACD,MAAM,CAAC;IACV,MAAM,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;KACd,CAAC;IACF,UAAU,EAAE;QACX,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,cAAc,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,MAAM,EACH;QACA,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;KACb,GACD;QACA,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;KACb,EAAE,CAAC;IACP,QAAQ,EAAE;QACT,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;KACjB,EAAE,CAAC;IACJ,UAAU,EAAE;QACX,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,aAAa,EAAE,MAAM,CAAC;QACtB,UAAU,EAAE,MAAM,CAAC;KACnB,CAAC;CACF,CAAC;AACF,MAAM,MAAM,kBAAkB,GAAG,MAAM,wBAAwB,CAAC;AAEhE,MAAM,MAAM,YAAY,GACrB,OAAO,GACP,WAAW,GACX,aAAa,GACb,aAAa,GACb,aAAa,GACb,SAAS,GACT,QAAQ,GACR,eAAe,GACf,cAAc,GACd,UAAU,GACV,UAAU,GACV,aAAa,GACb,eAAe,GACf,cAAc,GACd,MAAM,GACN,OAAO,CAAC;AAEX,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,YAAY,GAAG,YAAY,CAmBtE;AAQD,wBAAgB,kBAAkB,CAAC,EAAE,WAAW,EAAE,EAAE;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,IAEzE,MAAM,MAAM,EACZ,mFASG,YAAiB;;;;;;;;;;qCAcc,MAAM,GAAG,MAAM;qBAE/B,MAAM,GAAG,MAAM;;uBAQb,MAAM;;;;;;;;;;yCAVQ,MAAM,GAAG,MAAM;yBAE/B,MAAM,GAAG,MAAM;;;2BAgBb,MAAM;;uBAAN,MAAM;;;;;;;;;;yCAlBQ,MAAM,GAAG,MAAM;yBAE/B,MAAM,GAAG,MAAM;;2BAQb,MAAM;;;EAkB3B;AAED,MAAM,MAAM,KAAK,GAAG,UAAU,CAAC,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC,CAAC;AACtE,MAAM,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAChE,MAAM,MAAM,WAAW,GAAG;IACzB,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,GAAG,WAAW,CAAC;CACnC,CAAC;AAEF,wBAAgB,OAAO,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,KAAK,CAElD;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAClC,MAAM,EAAE,WAAW,EACnB,EACC,WAAW,EAAE,MAAM,GACnB,GAAE;IACF,gGAAgG;IAChG,WAAW,CAAC,EAAE,MAAM,CAAC;CAChB,GACJ,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAkBxB;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,GAAG,KAAK,EAAE,CAc9D"}
@@ -0,0 +1,113 @@
1
+ export const DEFAULT_TOKEN_PREFIX = '--x-';
2
+ export const DEFAULT_MIXIN_TOKEN_PREFIX = '--mx-';
3
+ export function getTypeFromPurpose(purpose) {
4
+ switch (purpose) {
5
+ case 'color':
6
+ return 'color';
7
+ case 'font-size':
8
+ return 'length';
9
+ case 'font-weight':
10
+ return 'number';
11
+ case 'line-height':
12
+ return 'length-percentage';
13
+ case 'font-family':
14
+ return 'string';
15
+ case 'spacing':
16
+ return 'length';
17
+ case 'shadow':
18
+ return 'string';
19
+ default:
20
+ return '*';
21
+ }
22
+ }
23
+ const TOKEN_BRAND = '@@TOKEN@@';
24
+ function normalizeName(name) {
25
+ return name.replaceAll('$', '').replace(/\s+/g, '-');
26
+ }
27
+ export function createTokenFactory({ tokenPrefix }) {
28
+ return function createToken(name, { fallback, inherits = true, forceDefinition, purpose = 'other', type = getTypeFromPurpose(purpose), group, description, tag, } = {}) {
29
+ const taggedName = tag ? `${tag}-${name}` : name;
30
+ const resolvedName = `${tokenPrefix}${normalizeName(taggedName)}`;
31
+ return {
32
+ [TOKEN_BRAND]: true,
33
+ name: resolvedName,
34
+ type,
35
+ tag,
36
+ purpose,
37
+ group,
38
+ description,
39
+ fallback,
40
+ var: `var(${resolvedName}${fallback ? `, ${fallback}` : ''})`,
41
+ varFallback: (fallbackOverride) => `var(${resolvedName}, ${fallbackOverride ?? fallback ?? 'initial'})`,
42
+ assign: (value) => `${resolvedName}: ${value ?? fallback};`,
43
+ get definition() {
44
+ if (inherits === false || forceDefinition) {
45
+ return `@property ${resolvedName} { syntax: '${type === '*' ? '*' : `<${type}>`}'; inherits: ${inherits}; initial-value: ${fallback ?? 'initial'}; }`;
46
+ }
47
+ return '';
48
+ },
49
+ suffixed: (suffix) => createToken(`${name}-${suffix}`, {
50
+ type,
51
+ fallback,
52
+ inherits,
53
+ description,
54
+ tag,
55
+ }),
56
+ prefixed: (prefix) => createToken(`${prefix}-${name}`, {
57
+ type,
58
+ fallback,
59
+ inherits,
60
+ description,
61
+ tag,
62
+ }),
63
+ };
64
+ };
65
+ }
66
+ export function isToken(value) {
67
+ return typeof value === 'object' && value !== null && TOKEN_BRAND in value;
68
+ }
69
+ /**
70
+ * Maps all token values to themselves - i.e.
71
+ * {
72
+ * '--🌗-black': 'var(--🌗-black)',
73
+ * ...
74
+ * }
75
+ */
76
+ export function selfReferencedProps(schema, { valuePrefix: prefix, } = {}) {
77
+ const result = {};
78
+ function walk(node) {
79
+ for (const key in node) {
80
+ const value = node[key];
81
+ if (isToken(value)) {
82
+ if (prefix) {
83
+ result[value.name] = value.prefixed(prefix).var;
84
+ }
85
+ else {
86
+ result[value.name] = value.var;
87
+ }
88
+ }
89
+ else if (typeof value === 'object') {
90
+ walk(value);
91
+ }
92
+ }
93
+ }
94
+ walk(schema);
95
+ return result;
96
+ }
97
+ export function tokenSchemaToList(schema) {
98
+ const result = [];
99
+ function walk(node) {
100
+ for (const key in node) {
101
+ const value = node[key];
102
+ if (isToken(value)) {
103
+ result.push(value);
104
+ }
105
+ else if (typeof value === 'object') {
106
+ walk(value);
107
+ }
108
+ }
109
+ }
110
+ walk(schema);
111
+ return result;
112
+ }
113
+ //# sourceMappingURL=createToken.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createToken.js","sourceRoot":"","sources":["../src/createToken.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=createToken.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createToken.test.d.ts","sourceRoot":"","sources":["../src/createToken.test.ts"],"names":[],"mappings":""}
@@ -1,5 +1,5 @@
1
1
  import { expect, it } from 'vitest';
2
- import { createTokenFactory } from './index.js';
2
+ import { createTokenFactory } from './createToken.js';
3
3
  const createToken = createTokenFactory({ tokenPrefix: '--x-' });
4
4
  it('stores token descriptions and preserves them on derived tokens', () => {
5
5
  const token = createToken('action-primary-bg', {
@@ -10,4 +10,4 @@ it('stores token descriptions and preserves them on derived tokens', () => {
10
10
  expect(token.suffixed('hover').description).toBe(token.description);
11
11
  expect(token.prefixed('data').description).toBe(token.description);
12
12
  });
13
- //# sourceMappingURL=index.test.js.map
13
+ //# sourceMappingURL=createToken.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createToken.test.js","sourceRoot":"","sources":["../src/createToken.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEtD,MAAM,WAAW,GAAG,kBAAkB,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;AAEhE,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;IACzE,MAAM,KAAK,GAAG,WAAW,CAAC,mBAAmB,EAAE;QAC9C,WAAW,EAAE,oDAAoD;QACjE,IAAI,EAAE,OAAO;KACb,CAAC,CAAC;IAEH,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAC7B,oDAAoD,CACpD,CAAC;IACF,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACpE,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;AACpE,CAAC,CAAC,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,146 +1,3 @@
1
- export declare const DEFAULT_TOKEN_PREFIX = "--x-";
2
- export interface TokenOptions {
3
- /** Inferred from purpose if not provided, defaults to "*" */
4
- type?: PropertyType;
5
- purpose?: TokenPurpose;
6
- group?: string;
7
- description?: string;
8
- fallback?: string | number;
9
- tag?: string;
10
- inherits?: boolean;
11
- /**
12
- * Force the generation of a @property rule definition, even if it's not meaningful.
13
- * Otherwise tokens whose properties have no special concerns like inherit:false will
14
- * skip generating an @property
15
- */
16
- forceDefinition?: boolean;
17
- }
18
- /**
19
- * Allowed types of properties - specifying one allows defining
20
- * a custom property in CSS which enables interpolation in animations
21
- * and other optimizations.
22
- *
23
- * "*" doesn't really do much but does allow any kind of value.
24
- *
25
- * "computed" will not generate a property definition and is assumed
26
- * to be a complex CSS property value like calc() or other things.
27
- */
28
- export type PropertyType = 'angle' | 'color' | 'custom-ident' | 'image' | 'integer' | 'length' | 'length-percentage' | 'number' | 'percentage' | 'resolution' | 'string' | 'time' | 'transform-function' | 'transform-list' | 'url' | '*';
29
- /**
30
- * Roughly mapped / inspired by designtokens.org.
31
- * Not currently used... but I wrote them down, so...
32
- */
33
- export type TokenType = 'color' | 'dimension' | 'font-family' | 'font-weight' | 'duration' | 'cubic-bezier' | 'number' | 'font-style' | 'ratio' | 'url' | TokenCompositeType;
34
- export type TokenCompositeTypeShapes = {
35
- strokeStyle: {
36
- dashArray: {
37
- value: string;
38
- unit: string;
39
- }[];
40
- lineCap: string;
41
- } | string;
42
- border: {
43
- color: string;
44
- width: string;
45
- style: string;
46
- };
47
- transition: {
48
- duration: string;
49
- delay: string;
50
- timingFunction: string;
51
- };
52
- shadow: {
53
- offsetX: string;
54
- offsetY: string;
55
- blur: string;
56
- spread: string;
57
- color: string;
58
- } | {
59
- offsetX: string;
60
- offsetY: string;
61
- blur: string;
62
- spread: string;
63
- color: string;
64
- }[];
65
- gradient: {
66
- color: string;
67
- position: string;
68
- }[];
69
- typography: {
70
- fontFamily: string;
71
- fontSize: string;
72
- fontWeight: string;
73
- letterSpacing: string;
74
- lineHeight: string;
75
- };
76
- };
77
- export type TokenCompositeType = keyof TokenCompositeTypeShapes;
78
- export type TokenPurpose = 'color' | 'font-size' | 'font-weight' | 'font-family' | 'line-height' | 'spacing' | 'shadow' | 'border-radius' | 'border-width' | 'shadow-x' | 'shadow-y' | 'shadow-blur' | 'shadow-spread' | 'shadow-color' | 'size' | 'other';
79
- export declare function getTypeFromPurpose(purpose: TokenPurpose): PropertyType;
80
- export declare function createTokenFactory({ tokenPrefix }: {
81
- tokenPrefix: string;
82
- }): (name: string, { fallback, inherits, forceDefinition, purpose, type, group, description, tag, }?: TokenOptions) => {
83
- "@@TOKEN@@": true;
84
- name: string;
85
- type: PropertyType;
86
- tag: string | undefined;
87
- purpose: TokenPurpose;
88
- group: string | undefined;
89
- description: string | undefined;
90
- fallback: string | number | undefined;
91
- var: string;
92
- varFallback: (fallbackOverride?: string | number) => string;
93
- assign: (value?: string | number) => string;
94
- readonly definition: string;
95
- suffixed: (suffix: string) => {
96
- "@@TOKEN@@": true;
97
- name: string;
98
- type: PropertyType;
99
- tag: string | undefined;
100
- purpose: TokenPurpose;
101
- group: string | undefined;
102
- description: string | undefined;
103
- fallback: string | number | undefined;
104
- var: string;
105
- varFallback: (fallbackOverride?: string | number) => string;
106
- assign: (value?: string | number) => string;
107
- readonly definition: string;
108
- suffixed: /*elided*/ any;
109
- prefixed: (prefix: string) => /*elided*/ any;
110
- };
111
- prefixed: (prefix: string) => {
112
- "@@TOKEN@@": true;
113
- name: string;
114
- type: PropertyType;
115
- tag: string | undefined;
116
- purpose: TokenPurpose;
117
- group: string | undefined;
118
- description: string | undefined;
119
- fallback: string | number | undefined;
120
- var: string;
121
- varFallback: (fallbackOverride?: string | number) => string;
122
- assign: (value?: string | number) => string;
123
- readonly definition: string;
124
- suffixed: (suffix: string) => /*elided*/ any;
125
- prefixed: /*elided*/ any;
126
- };
127
- };
128
- export type Token = ReturnType<ReturnType<typeof createTokenFactory>>;
129
- export type CreateToken = ReturnType<typeof createTokenFactory>;
130
- export type TokenSchema = {
131
- [Key: string]: Token | TokenSchema;
132
- };
133
- export declare function isToken(value: any): value is Token;
134
- /**
135
- * Maps all token values to themselves - i.e.
136
- * {
137
- * '--🌗-black': 'var(--🌗-black)',
138
- * ...
139
- * }
140
- */
141
- export declare function selfReferencedProps(schema: TokenSchema, { valuePrefix: prefix, }?: {
142
- /** Apply a prefix to the referenced value, i.e. '$' = '--$system-black': '--$system-$-black' */
143
- valuePrefix?: string;
144
- }): Record<string, string>;
145
- export declare function tokenSchemaToList(schema: TokenSchema): Token[];
1
+ export * from './createToken.js';
2
+ export * from './simple.js';
146
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC"}
package/dist/index.js CHANGED
@@ -1,112 +1,3 @@
1
- export const DEFAULT_TOKEN_PREFIX = '--x-';
2
- export function getTypeFromPurpose(purpose) {
3
- switch (purpose) {
4
- case 'color':
5
- return 'color';
6
- case 'font-size':
7
- return 'length';
8
- case 'font-weight':
9
- return 'number';
10
- case 'line-height':
11
- return 'length-percentage';
12
- case 'font-family':
13
- return 'string';
14
- case 'spacing':
15
- return 'length';
16
- case 'shadow':
17
- return 'string';
18
- default:
19
- return '*';
20
- }
21
- }
22
- const TOKEN_BRAND = '@@TOKEN@@';
23
- function normalizeName(name) {
24
- return name.replaceAll('$', '').replace(/\s+/g, '-');
25
- }
26
- export function createTokenFactory({ tokenPrefix }) {
27
- return function createToken(name, { fallback, inherits = true, forceDefinition, purpose = 'other', type = getTypeFromPurpose(purpose), group, description, tag, } = {}) {
28
- const taggedName = tag ? `${tag}-${name}` : name;
29
- const resolvedName = `${tokenPrefix}${normalizeName(taggedName)}`;
30
- return {
31
- [TOKEN_BRAND]: true,
32
- name: resolvedName,
33
- type,
34
- tag,
35
- purpose,
36
- group,
37
- description,
38
- fallback,
39
- var: `var(${resolvedName}${fallback ? `, ${fallback}` : ''})`,
40
- varFallback: (fallbackOverride) => `var(${resolvedName}, ${fallbackOverride ?? fallback ?? 'initial'})`,
41
- assign: (value) => `${resolvedName}: ${value ?? fallback};`,
42
- get definition() {
43
- if (inherits === false || forceDefinition) {
44
- return `@property ${resolvedName} { syntax: '${type === '*' ? '*' : `<${type}>`}'; inherits: ${inherits}; initial-value: ${fallback ?? 'initial'}; }`;
45
- }
46
- return '';
47
- },
48
- suffixed: (suffix) => createToken(`${name}-${suffix}`, {
49
- type,
50
- fallback,
51
- inherits,
52
- description,
53
- tag,
54
- }),
55
- prefixed: (prefix) => createToken(`${prefix}-${name}`, {
56
- type,
57
- fallback,
58
- inherits,
59
- description,
60
- tag,
61
- }),
62
- };
63
- };
64
- }
65
- export function isToken(value) {
66
- return typeof value === 'object' && value !== null && TOKEN_BRAND in value;
67
- }
68
- /**
69
- * Maps all token values to themselves - i.e.
70
- * {
71
- * '--🌗-black': 'var(--🌗-black)',
72
- * ...
73
- * }
74
- */
75
- export function selfReferencedProps(schema, { valuePrefix: prefix, } = {}) {
76
- const result = {};
77
- function walk(node) {
78
- for (const key in node) {
79
- const value = node[key];
80
- if (isToken(value)) {
81
- if (prefix) {
82
- result[value.name] = value.prefixed(prefix).var;
83
- }
84
- else {
85
- result[value.name] = value.var;
86
- }
87
- }
88
- else if (typeof value === 'object') {
89
- walk(value);
90
- }
91
- }
92
- }
93
- walk(schema);
94
- return result;
95
- }
96
- export function tokenSchemaToList(schema) {
97
- const result = [];
98
- function walk(node) {
99
- for (const key in node) {
100
- const value = node[key];
101
- if (isToken(value)) {
102
- result.push(value);
103
- }
104
- else if (typeof value === 'object') {
105
- walk(value);
106
- }
107
- }
108
- }
109
- walk(schema);
110
- return result;
111
- }
1
+ export * from './createToken.js';
2
+ export * from './simple.js';
112
3
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC"}
@@ -0,0 +1,40 @@
1
+ import { CreateToken, Token, TokenPurpose } from './createToken.js';
2
+ /**
3
+ * Simple token syntax for end users to quickly and easily
4
+ * define tokens without worrying about naming conventions,
5
+ * prefixes, etc.
6
+ *
7
+ * Used in all public-facing token creation: modes, mixin contributions, etc.
8
+ */
9
+ /**
10
+ * Defines the purpose of a token.
11
+ */
12
+ export type SimpleTokenDefinition = TokenPurpose | {
13
+ purpose: TokenPurpose;
14
+ description?: string;
15
+ };
16
+ type SimpleTokenDefinitionObject = Exclude<SimpleTokenDefinition, TokenPurpose>;
17
+ type NestedSimpleTokenSchema<T> = T extends SimpleTokenDefinitionObject ? never : T extends SimpleTokenSchema ? T : never;
18
+ /**
19
+ * A structured object of tokens.
20
+ */
21
+ export type SimpleTokenSchema = {
22
+ /**
23
+ * Special key: creates a token at the current group path without appending
24
+ * a `-$root` segment. For example, `{ colors: { main: { $root: 'color', mid: 'color' } } }`
25
+ * generates `--$-colors-main` (for `$root`) and `--$-colors-main-mid` (for `mid`).
26
+ * Optional at any level.
27
+ */
28
+ $root?: SimpleTokenDefinition;
29
+ [key: string]: SimpleTokenDefinition | SimpleTokenSchema | undefined;
30
+ };
31
+ export type SimpleTokensAsTokenDefinitions<T extends SimpleTokenSchema> = T extends object ? {
32
+ [P in keyof T]: NonNullable<T[P]> extends string ? Token : NonNullable<T[P]> extends SimpleTokenDefinitionObject ? Token : SimpleTokensAsTokenDefinitions<NestedSimpleTokenSchema<NonNullable<T[P]>>>;
33
+ } : never;
34
+ /**
35
+ * Converts simple, data-only, user-provided token definitions into
36
+ * full-fledged Tokens, retaining object structure
37
+ */
38
+ export declare function convertSimpleTokenSchema<T extends SimpleTokenSchema>(root: T, tag: string, createTokenValue: CreateToken): SimpleTokensAsTokenDefinitions<T>;
39
+ export {};
40
+ //# sourceMappingURL=simple.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simple.d.ts","sourceRoot":"","sources":["../src/simple.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEpE;;;;;;GAMG;AAEH;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAC9B,YAAY,GACZ;IACA,OAAO,EAAE,YAAY,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEL,KAAK,2BAA2B,GAAG,OAAO,CAAC,qBAAqB,EAAE,YAAY,CAAC,CAAC;AAEhF,KAAK,uBAAuB,CAAC,CAAC,IAC7B,CAAC,SAAS,2BAA2B,GAAG,KAAK,GAC3C,CAAC,SAAS,iBAAiB,GAAG,CAAC,GAC/B,KAAK,CAAC;AAET;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC/B;;;;;OAKG;IACH,KAAK,CAAC,EAAE,qBAAqB,CAAC;IAC9B,CAAC,GAAG,EAAE,MAAM,GAAG,qBAAqB,GAAG,iBAAiB,GAAG,SAAS,CAAC;CACrE,CAAC;AAEF,MAAM,MAAM,8BAA8B,CAAC,CAAC,SAAS,iBAAiB,IACrE,CAAC,SAAS,MAAM,GACf;KACE,CAAC,IAAI,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,GAAG,KAAK,GACtD,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,2BAA2B,GAAG,KAAK,GAC7D,8BAA8B,CAC9B,uBAAuB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAC1C;CACF,GACA,KAAK,CAAC;AAqCT;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,CAAC,SAAS,iBAAiB,EACnE,IAAI,EAAE,CAAC,EACP,GAAG,EAAE,MAAM,EACX,gBAAgB,EAAE,WAAW,GAC3B,8BAA8B,CAAC,CAAC,CAAC,CAoCnC"}
package/dist/simple.js ADDED
@@ -0,0 +1,50 @@
1
+ function isProbablySimpleTokenDefinition(value) {
2
+ return (value &&
3
+ (typeof value === 'string' ||
4
+ (typeof value === 'object' &&
5
+ 'purpose' in value &&
6
+ typeof value.purpose === 'string')));
7
+ }
8
+ function getSimpleTokenPurpose(value) {
9
+ return typeof value === 'string' ? value : value.purpose;
10
+ }
11
+ function getSimpleTokenDescription(value) {
12
+ return typeof value === 'string' ? undefined : value.description;
13
+ }
14
+ function convertSimpleToken(name, prop, createTokenValue, group) {
15
+ return createTokenValue(name, {
16
+ purpose: getSimpleTokenPurpose(prop),
17
+ description: getSimpleTokenDescription(prop),
18
+ group,
19
+ });
20
+ }
21
+ /**
22
+ * Converts simple, data-only, user-provided token definitions into
23
+ * full-fledged Tokens, retaining object structure
24
+ */
25
+ export function convertSimpleTokenSchema(root, tag, createTokenValue) {
26
+ function generatePropsForSchemaLevel(schemaLevel, propPrefix) {
27
+ const propsLevel = {};
28
+ for (const key in schemaLevel) {
29
+ const value = schemaLevel[key];
30
+ if (key === '$root') {
31
+ // $root generates a token at the current group path (no segment appended)
32
+ if (isProbablySimpleTokenDefinition(value)) {
33
+ propsLevel.$root = convertSimpleToken(propPrefix, value, createTokenValue, propPrefix);
34
+ }
35
+ continue;
36
+ }
37
+ const currentPrefix = [propPrefix, key].filter(Boolean).join('-');
38
+ if (isProbablySimpleTokenDefinition(value)) {
39
+ const propertyDefinition = convertSimpleToken(currentPrefix, value, createTokenValue, propPrefix);
40
+ propsLevel[key] = propertyDefinition;
41
+ }
42
+ else if (typeof value === 'object' && value !== null) {
43
+ propsLevel[key] = generatePropsForSchemaLevel(value, currentPrefix);
44
+ }
45
+ }
46
+ return propsLevel;
47
+ }
48
+ return generatePropsForSchemaLevel(root, tag);
49
+ }
50
+ //# sourceMappingURL=simple.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simple.js","sourceRoot":"","sources":["../src/simple.ts"],"names":[],"mappings":"AAoDA,SAAS,+BAA+B,CACvC,KAAU;IAEV,OAAO,CACN,KAAK;QACL,CAAC,OAAO,KAAK,KAAK,QAAQ;YACzB,CAAC,OAAO,KAAK,KAAK,QAAQ;gBACzB,SAAS,IAAI,KAAK;gBAClB,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CACrC,CAAC;AACH,CAAC;AAED,SAAS,qBAAqB,CAAC,KAA4B;IAC1D,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;AAC1D,CAAC;AAED,SAAS,yBAAyB,CACjC,KAA4B;IAE5B,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC;AAClE,CAAC;AAED,SAAS,kBAAkB,CAC1B,IAAY,EACZ,IAA2B,EAC3B,gBAA6B,EAC7B,KAAc;IAEd,OAAO,gBAAgB,CAAC,IAAI,EAAE;QAC7B,OAAO,EAAE,qBAAqB,CAAC,IAAI,CAAC;QACpC,WAAW,EAAE,yBAAyB,CAAC,IAAI,CAAC;QAC5C,KAAK;KACL,CAAC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CACvC,IAAO,EACP,GAAW,EACX,gBAA6B;IAE7B,SAAS,2BAA2B,CACnC,WAAgB,EAChB,UAAkB;QAElB,MAAM,UAAU,GAAQ,EAAE,CAAC;QAC3B,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;YAC/B,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;gBACrB,0EAA0E;gBAC1E,IAAI,+BAA+B,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC5C,UAAU,CAAC,KAAK,GAAG,kBAAkB,CACpC,UAAU,EACV,KAAK,EACL,gBAAgB,EAChB,UAAU,CACV,CAAC;gBACH,CAAC;gBACD,SAAS;YACV,CAAC;YACD,MAAM,aAAa,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClE,IAAI,+BAA+B,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC5C,MAAM,kBAAkB,GAAG,kBAAkB,CAC5C,aAAa,EACb,KAAK,EACL,gBAAgB,EAChB,UAAU,CACV,CAAC;gBACF,UAAU,CAAC,GAAG,CAAC,GAAG,kBAAkB,CAAC;YACtC,CAAC;iBAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACxD,UAAU,CAAC,GAAG,CAAC,GAAG,2BAA2B,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;YACrE,CAAC;QACF,CAAC;QACD,OAAO,UAAU,CAAC;IACnB,CAAC;IACD,OAAO,2BAA2B,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAC/C,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=simple.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simple.test.d.ts","sourceRoot":"","sources":["../src/simple.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,20 @@
1
+ import { expect, it } from 'vitest';
2
+ import { createTokenFactory } from './createToken.js';
3
+ import { convertSimpleTokenSchema } from './simple.js';
4
+ const createToken = createTokenFactory({ tokenPrefix: '--x-' });
5
+ it('converts object-form simple token definitions with descriptions', () => {
6
+ const tokens = convertSimpleTokenSchema({
7
+ colors: {
8
+ main: {
9
+ $root: {
10
+ purpose: 'color',
11
+ description: 'Main color used by the palette.',
12
+ },
13
+ bg: 'color',
14
+ },
15
+ },
16
+ }, 'root', createToken);
17
+ expect(tokens.colors.main.$root.description).toBe('Main color used by the palette.');
18
+ expect(tokens.colors.main.bg.description).toBeUndefined();
19
+ });
20
+ //# sourceMappingURL=simple.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simple.test.js","sourceRoot":"","sources":["../src/simple.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAEvD,MAAM,WAAW,GAAG,kBAAkB,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;AAEhE,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;IAC1E,MAAM,MAAM,GAAG,wBAAwB,CACtC;QACC,MAAM,EAAE;YACP,IAAI,EAAE;gBACL,KAAK,EAAE;oBACN,OAAO,EAAE,OAAO;oBAChB,WAAW,EAAE,iCAAiC;iBAC9C;gBACD,EAAE,EAAE,OAAO;aACX;SACD;KACD,EACD,MAAM,EACN,WAAW,CACX,CAAC;IAEF,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAChD,iCAAiC,CACjC,CAAC;IACF,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,aAAa,EAAE,CAAC;AAC3D,CAAC,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@arbor-css/tokens",
3
- "version": "0.0.59",
3
+ "version": "0.0.62",
4
4
  "type": "module",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -23,8 +23,8 @@
23
23
  "devDependencies": {
24
24
  "@vitest/browser-playwright": "^4.1.5",
25
25
  "typescript": "^6.0.3",
26
- "vitest": "^4.1.5",
27
- "vite": "^8.0.10"
26
+ "vitest": "^4.1.7",
27
+ "vite": "^8.0.13"
28
28
  },
29
29
  "dependencies": {},
30
30
  "scripts": {
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=index.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEhD,MAAM,WAAW,GAAG,kBAAkB,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;AAEhE,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;IACzE,MAAM,KAAK,GAAG,WAAW,CAAC,mBAAmB,EAAE;QAC9C,WAAW,EAAE,oDAAoD;QACjE,IAAI,EAAE,OAAO;KACb,CAAC,CAAC;IAEH,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAC7B,oDAAoD,CACpD,CAAC;IACF,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACpE,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;AACpE,CAAC,CAAC,CAAC"}