@citron-systems/citron-ds 1.0.0 → 1.0.1

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.
Files changed (61) hide show
  1. package/README.md +163 -149
  2. package/cli/citron-mascot.mjs +117 -0
  3. package/dist/ai/inkblot-ai-reference.json +582 -570
  4. package/dist/ai/inkblot-tokens-resolved.json +25 -0
  5. package/dist/ai/inkblot-tokens-schema.json +54 -54
  6. package/dist/brand/citron-mascot-mono.svg +17 -0
  7. package/dist/brand/citron-mascot.svg +21 -0
  8. package/dist/bundle/README.md +28 -0
  9. package/dist/bundle/ai-reference.json +582 -0
  10. package/dist/bundle/brand/citron-mascot-mono.svg +17 -0
  11. package/dist/bundle/brand/citron-mascot.svg +21 -0
  12. package/dist/bundle/preview/mascot.html +72 -0
  13. package/dist/bundle/system/ai.json +168 -0
  14. package/dist/bundle/system/cli.json +340 -0
  15. package/dist/bundle/system/components.json +304 -0
  16. package/dist/bundle/system/content.json +168 -0
  17. package/dist/bundle/system/devtools.json +95 -0
  18. package/dist/bundle/system/foundations.json +121 -0
  19. package/dist/bundle/system/grid.json +101 -0
  20. package/dist/bundle/system/icons.json +507 -0
  21. package/dist/bundle/system/index.json +57 -0
  22. package/dist/bundle/system/inkblot-ai-reference.json +582 -0
  23. package/dist/bundle/system/motion.json +159 -0
  24. package/dist/bundle/tokens/primitive/breakpoint.tokens.json +14 -0
  25. package/dist/bundle/tokens/primitive/color.tokens.json +71 -0
  26. package/dist/bundle/tokens/primitive/devtools.palette.tokens.json +55 -0
  27. package/dist/bundle/tokens/primitive/duration.tokens.json +38 -0
  28. package/dist/bundle/tokens/primitive/grid.tokens.json +34 -0
  29. package/dist/bundle/tokens/primitive/radius.tokens.json +26 -0
  30. package/dist/bundle/tokens/primitive/shadow.tokens.json +41 -0
  31. package/dist/bundle/tokens/primitive/spacing.tokens.json +38 -0
  32. package/dist/bundle/tokens/primitive/typography.tokens.json +60 -0
  33. package/dist/bundle/tokens/primitive/zindex.tokens.json +19 -0
  34. package/dist/bundle/tokens/semantic/dark.tokens.json +43 -0
  35. package/dist/bundle/tokens/semantic/devtools.semantic.tokens.json +79 -0
  36. package/dist/bundle/tokens/semantic/inkblot.semantic.tokens.json +140 -0
  37. package/dist/bundle/tokens-schema.json +54 -0
  38. package/dist/bundle/tokens.flat.json +224 -0
  39. package/dist/bundle/tokens.resolved.json +224 -0
  40. package/dist/bundle/variables.css +228 -0
  41. package/dist/bundle/variables.scss +225 -0
  42. package/dist/css/inkblot-variables.css +25 -0
  43. package/dist/index.html +956 -0
  44. package/dist/js/inkblot-tokens.js +25 -0
  45. package/dist/js/inkblot-tokens.json +25 -0
  46. package/dist/preview/mascot.html +72 -0
  47. package/dist/scss/_inkblot-variables.scss +25 -0
  48. package/package.json +73 -61
  49. package/tokens/primitive/breakpoint.tokens.json +14 -14
  50. package/tokens/primitive/color.tokens.json +71 -71
  51. package/tokens/primitive/devtools.palette.tokens.json +55 -0
  52. package/tokens/primitive/duration.tokens.json +38 -38
  53. package/tokens/primitive/grid.tokens.json +34 -34
  54. package/tokens/primitive/radius.tokens.json +26 -26
  55. package/tokens/primitive/shadow.tokens.json +41 -41
  56. package/tokens/primitive/spacing.tokens.json +38 -38
  57. package/tokens/primitive/typography.tokens.json +60 -60
  58. package/tokens/primitive/zindex.tokens.json +19 -19
  59. package/tokens/semantic/dark.tokens.json +43 -43
  60. package/tokens/semantic/devtools.semantic.tokens.json +79 -0
  61. package/tokens/semantic/inkblot.semantic.tokens.json +140 -140
@@ -0,0 +1,79 @@
1
+ {
2
+ "$description": "Semantic tokens for developer tooling UI. Compose from inkblot.color.devtools primitives.",
3
+ "inkblot": {
4
+ "semantic": {
5
+ "devtools": {
6
+ "color": {
7
+ "$type": "color",
8
+ "$description": "Use var(--inkblot-semantic-devtools-color-*) in dev menus, Storybook, Vite overlay, admin shells",
9
+ "background": {
10
+ "app": {
11
+ "$value": "{inkblot.color.devtools.background}",
12
+ "$description": "Full dev shell background"
13
+ },
14
+ "surface": {
15
+ "$value": "{inkblot.color.devtools.surface}",
16
+ "$description": "Panels, modals, dropdowns"
17
+ },
18
+ "surfaceElevated": {
19
+ "$value": "{inkblot.color.devtools.surface}",
20
+ "$description": "Optional second elevation — same token until a lighter step is needed"
21
+ }
22
+ },
23
+ "text": {
24
+ "primary": {
25
+ "$value": "{inkblot.color.devtools.textPrimary}",
26
+ "$description": "Body and titles in dev UI"
27
+ },
28
+ "muted": {
29
+ "$value": "{inkblot.color.devtools.textMuted}",
30
+ "$description": "Meta, captions, disabled-adjacent copy"
31
+ },
32
+ "onPrimary": {
33
+ "$value": "{inkblot.color.devtools.textPrimary}",
34
+ "$description": "Text on primary/dominant buttons"
35
+ }
36
+ },
37
+ "border": {
38
+ "default": {
39
+ "$value": "{inkblot.color.devtools.border}",
40
+ "$description": "Dividers and field outlines"
41
+ },
42
+ "strong": {
43
+ "$value": "{inkblot.color.devtools.support}",
44
+ "$description": "Drag handles, resize accents — use at low opacity if needed"
45
+ }
46
+ },
47
+ "accent": {
48
+ "brand": {
49
+ "$value": "{inkblot.color.devtools.dominant}",
50
+ "$description": "Dev chrome brand strip — blue, not citron"
51
+ },
52
+ "positive": {
53
+ "$value": "{inkblot.color.devtools.accent}",
54
+ "$description": "Build passed, tests green, healthy status"
55
+ }
56
+ },
57
+ "interactive": {
58
+ "primary": {
59
+ "$value": "{inkblot.color.devtools.primary}",
60
+ "$description": "Primary buttons, submit, run"
61
+ },
62
+ "primaryHover": {
63
+ "$value": "{inkblot.color.devtools.primaryHover}",
64
+ "$description": "Hover state for primary"
65
+ },
66
+ "ghost": {
67
+ "$value": "{inkblot.color.devtools.textMuted}",
68
+ "$description": "Low-emphasis controls — pair with transparent or surface bg"
69
+ },
70
+ "focus": {
71
+ "$value": "{inkblot.color.devtools.focus}",
72
+ "$description": "Focus ring color"
73
+ }
74
+ }
75
+ }
76
+ }
77
+ }
78
+ }
79
+ }
@@ -1,140 +1,140 @@
1
- {
2
- "$description": "Citron semantic tokens. Map primitives to component-ready meanings. Use these in components — never raw primitives.",
3
- "inkblot": {
4
- "semantic": {
5
- "color": {
6
- "$type": "color",
7
- "$description": "Semantic color mappings — Citron identity: warm, restrained, premium",
8
- "background": {
9
- "primary": { "$value": "{inkblot.color.neutral.gray.50}", "$description": "Body background — warm off-white with barely perceptible beige" },
10
- "secondary": { "$value": "{inkblot.color.neutral.white}", "$description": "Elevated surfaces — clean white floating above base" },
11
- "tertiary": { "$value": "{inkblot.color.neutral.gray.100}", "$description": "Grouped content, inset areas" },
12
- "inverse": { "$value": "{inkblot.color.neutral.gray.900}", "$description": "Inverted surfaces" }
13
- },
14
- "text": {
15
- "primary": { "$value": "{inkblot.color.neutral.gray.900}", "$description": "Primary text — deep warm slate, never pure black" },
16
- "secondary": { "$value": "{inkblot.color.neutral.gray.500}", "$description": "Secondary text" },
17
- "tertiary": { "$value": "{inkblot.color.neutral.gray.400}", "$description": "Placeholder, hints, captions" },
18
- "inverse": { "$value": "{inkblot.color.neutral.white}", "$description": "Text on dark surfaces" },
19
- "link": { "$value": "{inkblot.color.accent.citron.600}", "$description": "Links — deep citron for readability" },
20
- "linkHover": { "$value": "{inkblot.color.accent.citron.700}", "$description": "Link hover" }
21
- },
22
- "border": {
23
- "default": { "$value": "{inkblot.color.neutral.gray.200}", "$description": "Subtle warm dividers" },
24
- "strong": { "$value": "{inkblot.color.neutral.gray.300}", "$description": "Emphasized borders" },
25
- "focus": { "$value": "{inkblot.color.accent.citron.500}", "$description": "Focus ring — citron accent" }
26
- },
27
- "interactive": {
28
- "primary": { "$value": "{inkblot.color.accent.citron.500}", "$description": "Primary CTA — confident citron" },
29
- "primaryHover": { "$value": "{inkblot.color.accent.citron.600}", "$description": "Primary hover — deeper, subtle shift" },
30
- "primaryActive": { "$value": "{inkblot.color.accent.citron.700}", "$description": "Primary pressed" },
31
- "secondary": { "$value": "{inkblot.color.neutral.gray.100}", "$description": "Secondary surfaces with subtle depth" },
32
- "secondaryHover":{ "$value": "{inkblot.color.neutral.gray.200}", "$description": "Secondary hover" }
33
- },
34
- "status": {
35
- "success": { "$value": "{inkblot.color.semantic.success.main}", "$description": "Success state" },
36
- "warning": { "$value": "{inkblot.color.semantic.warning.main}", "$description": "Warning state" },
37
- "error": { "$value": "{inkblot.color.semantic.error.main}", "$description": "Error state" },
38
- "info": { "$value": "{inkblot.color.semantic.info.main}", "$description": "Info state" }
39
- }
40
- },
41
- "typography": {
42
- "$description": "Semantic type styles — composed, intentional hierarchy through spacing and weight",
43
- "heading": {
44
- "1": {
45
- "$type": "typography",
46
- "$value": {
47
- "fontFamily": "{inkblot.typography.fontFamily.display}",
48
- "fontSize": "{inkblot.typography.fontSize.3xl}",
49
- "fontWeight": "{inkblot.typography.fontWeight.semibold}",
50
- "lineHeight": "{inkblot.typography.lineHeight.tight}",
51
- "letterSpacing": "{inkblot.typography.letterSpacing.tight}"
52
- },
53
- "$description": "Page title — composed, not dramatic"
54
- },
55
- "2": {
56
- "$type": "typography",
57
- "$value": {
58
- "fontFamily": "{inkblot.typography.fontFamily.display}",
59
- "fontSize": "{inkblot.typography.fontSize.2xl}",
60
- "fontWeight": "{inkblot.typography.fontWeight.semibold}",
61
- "lineHeight": "{inkblot.typography.lineHeight.tight}",
62
- "letterSpacing": "{inkblot.typography.letterSpacing.tight}"
63
- },
64
- "$description": "Section title"
65
- },
66
- "3": {
67
- "$type": "typography",
68
- "$value": {
69
- "fontFamily": "{inkblot.typography.fontFamily.sans}",
70
- "fontSize": "{inkblot.typography.fontSize.xl}",
71
- "fontWeight": "{inkblot.typography.fontWeight.medium}",
72
- "lineHeight": "{inkblot.typography.lineHeight.snug}",
73
- "letterSpacing": "{inkblot.typography.letterSpacing.normal}"
74
- },
75
- "$description": "Subsection title"
76
- },
77
- "4": {
78
- "$type": "typography",
79
- "$value": {
80
- "fontFamily": "{inkblot.typography.fontFamily.sans}",
81
- "fontSize": "{inkblot.typography.fontSize.lg}",
82
- "fontWeight": "{inkblot.typography.fontWeight.medium}",
83
- "lineHeight": "{inkblot.typography.lineHeight.snug}",
84
- "letterSpacing": "{inkblot.typography.letterSpacing.normal}"
85
- },
86
- "$description": "Card title"
87
- }
88
- },
89
- "body": {
90
- "default": {
91
- "$type": "typography",
92
- "$value": {
93
- "fontFamily": "{inkblot.typography.fontFamily.sans}",
94
- "fontSize": "{inkblot.typography.fontSize.base}",
95
- "fontWeight": "{inkblot.typography.fontWeight.regular}",
96
- "lineHeight": "{inkblot.typography.lineHeight.normal}",
97
- "letterSpacing": "{inkblot.typography.letterSpacing.normal}"
98
- },
99
- "$description": "Body text"
100
- },
101
- "small": {
102
- "$type": "typography",
103
- "$value": {
104
- "fontFamily": "{inkblot.typography.fontFamily.sans}",
105
- "fontSize": "{inkblot.typography.fontSize.sm}",
106
- "fontWeight": "{inkblot.typography.fontWeight.regular}",
107
- "lineHeight": "{inkblot.typography.lineHeight.normal}",
108
- "letterSpacing": "{inkblot.typography.letterSpacing.normal}"
109
- },
110
- "$description": "Small body, captions"
111
- },
112
- "large": {
113
- "$type": "typography",
114
- "$value": {
115
- "fontFamily": "{inkblot.typography.fontFamily.sans}",
116
- "fontSize": "{inkblot.typography.fontSize.md}",
117
- "fontWeight": "{inkblot.typography.fontWeight.regular}",
118
- "lineHeight": "{inkblot.typography.lineHeight.relaxed}",
119
- "letterSpacing": "{inkblot.typography.letterSpacing.normal}"
120
- },
121
- "$description": "Emphasized body"
122
- }
123
- },
124
- "label": {
125
- "default": {
126
- "$type": "typography",
127
- "$value": {
128
- "fontFamily": "{inkblot.typography.fontFamily.sans}",
129
- "fontSize": "{inkblot.typography.fontSize.xs}",
130
- "fontWeight": "{inkblot.typography.fontWeight.medium}",
131
- "lineHeight": "{inkblot.typography.lineHeight.normal}",
132
- "letterSpacing": "{inkblot.typography.letterSpacing.wide}"
133
- },
134
- "$description": "Form labels, badges"
135
- }
136
- }
137
- }
138
- }
139
- }
140
- }
1
+ {
2
+ "$description": "Citron semantic tokens. Map primitives to component-ready meanings. Use these in components — never raw primitives.",
3
+ "inkblot": {
4
+ "semantic": {
5
+ "color": {
6
+ "$type": "color",
7
+ "$description": "Semantic color mappings — Citron identity: warm, restrained, premium",
8
+ "background": {
9
+ "primary": { "$value": "{inkblot.color.neutral.gray.50}", "$description": "Body background — warm off-white with barely perceptible beige" },
10
+ "secondary": { "$value": "{inkblot.color.neutral.white}", "$description": "Elevated surfaces — clean white floating above base" },
11
+ "tertiary": { "$value": "{inkblot.color.neutral.gray.100}", "$description": "Grouped content, inset areas" },
12
+ "inverse": { "$value": "{inkblot.color.neutral.gray.900}", "$description": "Inverted surfaces" }
13
+ },
14
+ "text": {
15
+ "primary": { "$value": "{inkblot.color.neutral.gray.900}", "$description": "Primary text — deep warm slate, never pure black" },
16
+ "secondary": { "$value": "{inkblot.color.neutral.gray.500}", "$description": "Secondary text" },
17
+ "tertiary": { "$value": "{inkblot.color.neutral.gray.400}", "$description": "Placeholder, hints, captions" },
18
+ "inverse": { "$value": "{inkblot.color.neutral.white}", "$description": "Text on dark surfaces" },
19
+ "link": { "$value": "{inkblot.color.accent.citron.600}", "$description": "Links — deep citron for readability" },
20
+ "linkHover": { "$value": "{inkblot.color.accent.citron.700}", "$description": "Link hover" }
21
+ },
22
+ "border": {
23
+ "default": { "$value": "{inkblot.color.neutral.gray.200}", "$description": "Subtle warm dividers" },
24
+ "strong": { "$value": "{inkblot.color.neutral.gray.300}", "$description": "Emphasized borders" },
25
+ "focus": { "$value": "{inkblot.color.accent.citron.500}", "$description": "Focus ring — citron accent" }
26
+ },
27
+ "interactive": {
28
+ "primary": { "$value": "{inkblot.color.accent.citron.500}", "$description": "Primary CTA — confident citron" },
29
+ "primaryHover": { "$value": "{inkblot.color.accent.citron.600}", "$description": "Primary hover — deeper, subtle shift" },
30
+ "primaryActive": { "$value": "{inkblot.color.accent.citron.700}", "$description": "Primary pressed" },
31
+ "secondary": { "$value": "{inkblot.color.neutral.gray.100}", "$description": "Secondary surfaces with subtle depth" },
32
+ "secondaryHover":{ "$value": "{inkblot.color.neutral.gray.200}", "$description": "Secondary hover" }
33
+ },
34
+ "status": {
35
+ "success": { "$value": "{inkblot.color.semantic.success.main}", "$description": "Success state" },
36
+ "warning": { "$value": "{inkblot.color.semantic.warning.main}", "$description": "Warning state" },
37
+ "error": { "$value": "{inkblot.color.semantic.error.main}", "$description": "Error state" },
38
+ "info": { "$value": "{inkblot.color.semantic.info.main}", "$description": "Info state" }
39
+ }
40
+ },
41
+ "typography": {
42
+ "$description": "Semantic type styles — composed, intentional hierarchy through spacing and weight",
43
+ "heading": {
44
+ "1": {
45
+ "$type": "typography",
46
+ "$value": {
47
+ "fontFamily": "{inkblot.typography.fontFamily.display}",
48
+ "fontSize": "{inkblot.typography.fontSize.3xl}",
49
+ "fontWeight": "{inkblot.typography.fontWeight.semibold}",
50
+ "lineHeight": "{inkblot.typography.lineHeight.tight}",
51
+ "letterSpacing": "{inkblot.typography.letterSpacing.tight}"
52
+ },
53
+ "$description": "Page title — composed, not dramatic"
54
+ },
55
+ "2": {
56
+ "$type": "typography",
57
+ "$value": {
58
+ "fontFamily": "{inkblot.typography.fontFamily.display}",
59
+ "fontSize": "{inkblot.typography.fontSize.2xl}",
60
+ "fontWeight": "{inkblot.typography.fontWeight.semibold}",
61
+ "lineHeight": "{inkblot.typography.lineHeight.tight}",
62
+ "letterSpacing": "{inkblot.typography.letterSpacing.tight}"
63
+ },
64
+ "$description": "Section title"
65
+ },
66
+ "3": {
67
+ "$type": "typography",
68
+ "$value": {
69
+ "fontFamily": "{inkblot.typography.fontFamily.sans}",
70
+ "fontSize": "{inkblot.typography.fontSize.xl}",
71
+ "fontWeight": "{inkblot.typography.fontWeight.medium}",
72
+ "lineHeight": "{inkblot.typography.lineHeight.snug}",
73
+ "letterSpacing": "{inkblot.typography.letterSpacing.normal}"
74
+ },
75
+ "$description": "Subsection title"
76
+ },
77
+ "4": {
78
+ "$type": "typography",
79
+ "$value": {
80
+ "fontFamily": "{inkblot.typography.fontFamily.sans}",
81
+ "fontSize": "{inkblot.typography.fontSize.lg}",
82
+ "fontWeight": "{inkblot.typography.fontWeight.medium}",
83
+ "lineHeight": "{inkblot.typography.lineHeight.snug}",
84
+ "letterSpacing": "{inkblot.typography.letterSpacing.normal}"
85
+ },
86
+ "$description": "Card title"
87
+ }
88
+ },
89
+ "body": {
90
+ "default": {
91
+ "$type": "typography",
92
+ "$value": {
93
+ "fontFamily": "{inkblot.typography.fontFamily.sans}",
94
+ "fontSize": "{inkblot.typography.fontSize.base}",
95
+ "fontWeight": "{inkblot.typography.fontWeight.regular}",
96
+ "lineHeight": "{inkblot.typography.lineHeight.normal}",
97
+ "letterSpacing": "{inkblot.typography.letterSpacing.normal}"
98
+ },
99
+ "$description": "Body text"
100
+ },
101
+ "small": {
102
+ "$type": "typography",
103
+ "$value": {
104
+ "fontFamily": "{inkblot.typography.fontFamily.sans}",
105
+ "fontSize": "{inkblot.typography.fontSize.sm}",
106
+ "fontWeight": "{inkblot.typography.fontWeight.regular}",
107
+ "lineHeight": "{inkblot.typography.lineHeight.normal}",
108
+ "letterSpacing": "{inkblot.typography.letterSpacing.normal}"
109
+ },
110
+ "$description": "Small body, captions"
111
+ },
112
+ "large": {
113
+ "$type": "typography",
114
+ "$value": {
115
+ "fontFamily": "{inkblot.typography.fontFamily.sans}",
116
+ "fontSize": "{inkblot.typography.fontSize.md}",
117
+ "fontWeight": "{inkblot.typography.fontWeight.regular}",
118
+ "lineHeight": "{inkblot.typography.lineHeight.relaxed}",
119
+ "letterSpacing": "{inkblot.typography.letterSpacing.normal}"
120
+ },
121
+ "$description": "Emphasized body"
122
+ }
123
+ },
124
+ "label": {
125
+ "default": {
126
+ "$type": "typography",
127
+ "$value": {
128
+ "fontFamily": "{inkblot.typography.fontFamily.sans}",
129
+ "fontSize": "{inkblot.typography.fontSize.xs}",
130
+ "fontWeight": "{inkblot.typography.fontWeight.medium}",
131
+ "lineHeight": "{inkblot.typography.lineHeight.normal}",
132
+ "letterSpacing": "{inkblot.typography.letterSpacing.wide}"
133
+ },
134
+ "$description": "Form labels, badges"
135
+ }
136
+ }
137
+ }
138
+ }
139
+ }
140
+ }