@robr0/design-system 0.9.0 → 0.11.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.
Files changed (99) hide show
  1. package/README.md +16 -10
  2. package/components/AgentPlan/AgentPlan.css +14 -3
  3. package/components/AiButton/AiButton.css +1 -1
  4. package/components/Alert/Alert.css +9 -0
  5. package/components/AlertDialog/AlertDialog.css +3 -1
  6. package/components/AlertDialog/AlertDialog.js +2 -3
  7. package/components/AppSidebar/AppSidebar.css +22 -3
  8. package/components/AppSidebar/AppSidebar.d.ts +6 -2
  9. package/components/AppSidebar/AppSidebar.js +67 -36
  10. package/components/Card/Card.css +7 -2
  11. package/components/CardStack/CardStack.css +106 -0
  12. package/components/CardStack/CardStack.d.ts +44 -0
  13. package/components/CardStack/CardStack.js +140 -0
  14. package/components/Carousel/Carousel.css +9 -0
  15. package/components/Carousel/Carousel.js +37 -4
  16. package/components/Chart/AreaChart.js +6 -5
  17. package/components/Chart/BarChart.js +1 -1
  18. package/components/Chart/LineChart.js +4 -3
  19. package/components/Chart/PieChart.js +2 -15
  20. package/components/Chart/RadarChart.js +5 -4
  21. package/components/Chart/RadialChart.js +2 -15
  22. package/components/Chart/ScatterChart.js +3 -13
  23. package/components/Chart/StackedBarChart.js +2 -15
  24. package/components/Chart/Treemap.js +3 -17
  25. package/components/Chart/palette.d.ts +1 -0
  26. package/components/Chart/palette.js +19 -0
  27. package/components/ChatMarker/ChatMarker.css +9 -0
  28. package/components/ChatMessage/ChatMessage.css +16 -0
  29. package/components/ChatThread/ChatThread.js +2 -2
  30. package/components/Chip/Chip.css +9 -0
  31. package/components/CodeBlock/CodeBlock.css +10 -1
  32. package/components/CodeBlock/CodeBlock.js +2 -1
  33. package/components/ColorPicker/ColorPicker.js +10 -0
  34. package/components/Combobox/Combobox.css +9 -0
  35. package/components/CommandPalette/CommandPalette.css +9 -0
  36. package/components/CommandPalette/CommandPalette.js +31 -5
  37. package/components/Composer/Composer.css +118 -0
  38. package/components/Composer/Composer.d.ts +7 -0
  39. package/components/Composer/Composer.js +7 -1
  40. package/components/ContactCard/ContactCard.css +9 -0
  41. package/components/ContextMenu/ContextMenu.js +39 -3
  42. package/components/DatePicker/DatePicker.js +16 -0
  43. package/components/Dialog/Dialog.css +3 -1
  44. package/components/Dialog/Dialog.js +5 -4
  45. package/components/DocumentChip/DocumentChip.css +9 -0
  46. package/components/Dropdown/Dropdown.js +22 -3
  47. package/components/DropdownMenu/DropdownMenu.js +43 -6
  48. package/components/EmptyState/EmptyState.css +9 -0
  49. package/components/FileInput/FileInput.css +9 -0
  50. package/components/Globe/Globe.css +155 -0
  51. package/components/Globe/Globe.d.ts +96 -0
  52. package/components/Globe/Globe.js +415 -0
  53. package/components/InterruptCard/InterruptCard.css +27 -17
  54. package/components/InterruptCard/InterruptCard.d.ts +1 -1
  55. package/components/InterruptCard/InterruptCard.js +1 -1
  56. package/components/MapCallout/MapCallout.css +46 -0
  57. package/components/MapCallout/MapCallout.d.ts +29 -0
  58. package/components/MapCallout/MapCallout.js +17 -0
  59. package/components/MapLegend/MapLegend.css +88 -0
  60. package/components/MapLegend/MapLegend.d.ts +39 -0
  61. package/components/MapLegend/MapLegend.js +68 -0
  62. package/components/MessageActions/MessageActions.css +9 -0
  63. package/components/MessageCard/MessageCard.css +68 -16
  64. package/components/MessageCard/MessageCard.d.ts +1 -1
  65. package/components/MessageCard/MessageCard.js +6 -4
  66. package/components/ModelPicker/ModelPicker.css +4 -1
  67. package/components/ModelPicker/ModelPicker.js +43 -1
  68. package/components/NotificationCenter/NotificationCenter.css +9 -0
  69. package/components/NotificationCenter/NotificationCenter.js +26 -10
  70. package/components/NumberInput/NumberInput.css +9 -0
  71. package/components/Popover/Popover.css +3 -1
  72. package/components/Popover/Popover.js +2 -1
  73. package/components/SectionTitle/SectionTitle.css +8 -0
  74. package/components/SectionTitle/SectionTitle.d.ts +3 -1
  75. package/components/SectionTitle/SectionTitle.js +6 -1
  76. package/components/SourceChip/SourceChip.css +9 -0
  77. package/components/Stat/Stat.css +9 -0
  78. package/components/Stepper/Stepper.css +9 -0
  79. package/components/TagInput/TagInput.css +9 -0
  80. package/components/TimePicker/TimePicker.js +4 -1
  81. package/components/Toast/Toast.css +32 -11
  82. package/components/Toast/Toast.js +5 -4
  83. package/components/ToggleGroup/ToggleGroup.css +9 -0
  84. package/components/ToolCall/ToolCall.css +18 -6
  85. package/components/Tooltip/Tooltip.js +20 -16
  86. package/components/registry.json +37 -0
  87. package/components/registry.json.d.ts +37 -0
  88. package/components/registry.json.js +2 -2
  89. package/index.d.ts +4 -0
  90. package/index.js +8 -0
  91. package/package.json +5 -1
  92. package/tokens/motion.d.ts +23 -0
  93. package/tokens/motion.js +14 -0
  94. package/tokens/registry.json +17 -0
  95. package/tokens/registry.json.d.ts +17 -0
  96. package/tokens/registry.json.js +1 -1
  97. package/tokens/tokens-dark.css +28 -13
  98. package/tokens/tokens-light.css +26 -12
  99. package/tokens/tokens-typography.css +20 -0
package/index.d.ts CHANGED
@@ -19,6 +19,7 @@ export * from './components/Breadcrumb/Breadcrumb';
19
19
  export * from './components/Button/Button';
20
20
  export * from './components/ButtonGroup/ButtonGroup';
21
21
  export * from './components/Card/Card';
22
+ export * from './components/CardStack/CardStack';
22
23
  export * from './components/Carousel/Carousel';
23
24
  export * from './components/ChatHeader/ChatHeader';
24
25
  export * from './components/ChatMarker/ChatMarker';
@@ -52,11 +53,14 @@ export * from './components/Field/Field';
52
53
  export * from './components/Field/FieldContext';
53
54
  export * from './components/Figure/Figure';
54
55
  export * from './components/FileInput/FileInput';
56
+ export * from './components/Globe/Globe';
55
57
  export * from './components/Input/Input';
56
58
  export * from './components/Instructions/Instructions';
57
59
  export * from './components/InterruptCard/InterruptCard';
58
60
  export * from './components/Kbd/Kbd';
59
61
  export * from './components/LinkList/LinkList';
62
+ export * from './components/MapCallout/MapCallout';
63
+ export * from './components/MapLegend/MapLegend';
60
64
  export * from './components/MessageActions/MessageActions';
61
65
  export * from './components/MessageCard/MessageCard';
62
66
  export * from './components/ModelPicker/ModelPicker';
package/index.js CHANGED
@@ -14,6 +14,7 @@ import { Breadcrumb } from "./components/Breadcrumb/Breadcrumb.js";
14
14
  import { Button } from "./components/Button/Button.js";
15
15
  import { ButtonGroup } from "./components/ButtonGroup/ButtonGroup.js";
16
16
  import { Card } from "./components/Card/Card.js";
17
+ import { CardStack } from "./components/CardStack/CardStack.js";
17
18
  import { Carousel } from "./components/Carousel/Carousel.js";
18
19
  import { ChatHeader } from "./components/ChatHeader/ChatHeader.js";
19
20
  import { ChatMarker } from "./components/ChatMarker/ChatMarker.js";
@@ -47,11 +48,14 @@ import { Field } from "./components/Field/Field.js";
47
48
  import { FieldContext, useField } from "./components/Field/FieldContext.js";
48
49
  import { Figure } from "./components/Figure/Figure.js";
49
50
  import { FileInput } from "./components/FileInput/FileInput.js";
51
+ import { Globe } from "./components/Globe/Globe.js";
50
52
  import { Input } from "./components/Input/Input.js";
51
53
  import { Instructions } from "./components/Instructions/Instructions.js";
52
54
  import { InterruptCard } from "./components/InterruptCard/InterruptCard.js";
53
55
  import { Kbd } from "./components/Kbd/Kbd.js";
54
56
  import { LinkList } from "./components/LinkList/LinkList.js";
57
+ import { MapCallout } from "./components/MapCallout/MapCallout.js";
58
+ import { MapLegend } from "./components/MapLegend/MapLegend.js";
55
59
  import { MessageActions } from "./components/MessageActions/MessageActions.js";
56
60
  import { MessageCard } from "./components/MessageCard/MessageCard.js";
57
61
  import { ModelPicker } from "./components/ModelPicker/ModelPicker.js";
@@ -114,6 +118,7 @@ export {
114
118
  ButtonGroup,
115
119
  COMPONENT_COUNT,
116
120
  Card,
121
+ CardStack,
117
122
  Carousel,
118
123
  ChatHeader,
119
124
  ChatMarker,
@@ -150,11 +155,14 @@ export {
150
155
  FieldContext,
151
156
  Figure,
152
157
  FileInput,
158
+ Globe,
153
159
  Input,
154
160
  Instructions,
155
161
  InterruptCard,
156
162
  Kbd,
157
163
  LinkList,
164
+ MapCallout,
165
+ MapLegend,
158
166
  MessageActions,
159
167
  MessageCard,
160
168
  ModelPicker,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@robr0/design-system",
3
- "version": "0.9.0",
3
+ "version": "0.11.0",
4
4
  "description": "An AI-ready React design system: accessible components on composable tokens, light/dark theming, and CSS-variable overrides.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -50,6 +50,10 @@
50
50
  "types": "./tokens/registry.d.ts",
51
51
  "import": "./tokens/registry.js"
52
52
  },
53
+ "./tokens/motion": {
54
+ "types": "./tokens/motion.d.ts",
55
+ "import": "./tokens/motion.js"
56
+ },
53
57
  "./components/*": {
54
58
  "types": "./components/*.d.ts",
55
59
  "import": "./components/*.js"
@@ -0,0 +1,23 @@
1
+ /**
2
+ * JS-driven motion timings — the TypeScript side of the motion tokens.
3
+ * CSS transitions read the `--motion-*` custom properties; these constants
4
+ * are the single home for timings that live in JavaScript timers, where a
5
+ * CSS variable cannot reach. Components use them as defaults, so a single
6
+ * instance can still be tuned through its component's own props.
7
+ *
8
+ * These are schedule timings (when something starts, stops, or is taken
9
+ * away), not animation durations, so the reduced-motion guard in
10
+ * tokens-motion.css deliberately does not apply to them.
11
+ */
12
+ /** Delay before a hover-triggered overlay appears, filtering pass-through hovers. */
13
+ export declare const MOTION_HOVER_SHOW_DELAY_MS = 300;
14
+ /** Grace period before a hover-triggered overlay or submenu closes, forgiving a wobbly pointer path. */
15
+ export declare const MOTION_HOVER_HIDE_DELAY_MS = 150;
16
+ /** How long a transient notification stays before dismissing itself. */
17
+ export declare const MOTION_AUTO_DISMISS_MS = 5000;
18
+ /** Interval between automatic slide advances. */
19
+ export declare const MOTION_AUTOPLAY_INTERVAL_MS = 5000;
20
+ /** How long momentary confirmation feedback (a copied state) holds before resetting. */
21
+ export declare const MOTION_FEEDBACK_RESET_MS = 2000;
22
+ /** How long after the last scroll event a scroll surface is considered settled. */
23
+ export declare const MOTION_SCROLL_SETTLE_MS = 600;
@@ -0,0 +1,14 @@
1
+ const MOTION_HOVER_SHOW_DELAY_MS = 300;
2
+ const MOTION_HOVER_HIDE_DELAY_MS = 150;
3
+ const MOTION_AUTO_DISMISS_MS = 5e3;
4
+ const MOTION_AUTOPLAY_INTERVAL_MS = 5e3;
5
+ const MOTION_FEEDBACK_RESET_MS = 2e3;
6
+ const MOTION_SCROLL_SETTLE_MS = 600;
7
+ export {
8
+ MOTION_AUTOPLAY_INTERVAL_MS,
9
+ MOTION_AUTO_DISMISS_MS,
10
+ MOTION_FEEDBACK_RESET_MS,
11
+ MOTION_HOVER_HIDE_DELAY_MS,
12
+ MOTION_HOVER_SHOW_DELAY_MS,
13
+ MOTION_SCROLL_SETTLE_MS
14
+ };
@@ -35,6 +35,13 @@
35
35
  "--color-chart-contribution-2",
36
36
  "--color-chart-contribution-3",
37
37
  "--color-chart-contribution-4",
38
+ "--color-chart-series-1",
39
+ "--color-chart-series-2",
40
+ "--color-chart-series-3",
41
+ "--color-chart-series-4",
42
+ "--color-chart-series-5",
43
+ "--color-chart-series-6",
44
+ "--color-chart-series-7",
38
45
  "--color-chat-bubble-received-bg",
39
46
  "--color-chat-bubble-received-text",
40
47
  "--color-chat-bubble-sent-bg",
@@ -84,6 +91,11 @@
84
91
  "--color-text-tertiary"
85
92
  ],
86
93
  "typography": [
94
+ "--font-caption-family",
95
+ "--font-caption-letter-spacing",
96
+ "--font-caption-line-height",
97
+ "--font-caption-size",
98
+ "--font-caption-weight",
87
99
  "--font-display-1-family",
88
100
  "--font-display-1-letter-spacing",
89
101
  "--font-display-1-line-height",
@@ -121,6 +133,11 @@
121
133
  "--font-mega-2-line-height",
122
134
  "--font-mega-2-size",
123
135
  "--font-mega-2-weight",
136
+ "--font-overline-family",
137
+ "--font-overline-letter-spacing",
138
+ "--font-overline-line-height",
139
+ "--font-overline-size",
140
+ "--font-overline-weight",
124
141
  "--font-paragraph-em-family",
125
142
  "--font-paragraph-em-letter-spacing",
126
143
  "--font-paragraph-em-line-height",
@@ -35,6 +35,13 @@ declare const _default: {
35
35
  "--color-chart-contribution-2",
36
36
  "--color-chart-contribution-3",
37
37
  "--color-chart-contribution-4",
38
+ "--color-chart-series-1",
39
+ "--color-chart-series-2",
40
+ "--color-chart-series-3",
41
+ "--color-chart-series-4",
42
+ "--color-chart-series-5",
43
+ "--color-chart-series-6",
44
+ "--color-chart-series-7",
38
45
  "--color-chat-bubble-received-bg",
39
46
  "--color-chat-bubble-received-text",
40
47
  "--color-chat-bubble-sent-bg",
@@ -84,6 +91,11 @@ declare const _default: {
84
91
  "--color-text-tertiary"
85
92
  ],
86
93
  "typography": [
94
+ "--font-caption-family",
95
+ "--font-caption-letter-spacing",
96
+ "--font-caption-line-height",
97
+ "--font-caption-size",
98
+ "--font-caption-weight",
87
99
  "--font-display-1-family",
88
100
  "--font-display-1-letter-spacing",
89
101
  "--font-display-1-line-height",
@@ -121,6 +133,11 @@ declare const _default: {
121
133
  "--font-mega-2-line-height",
122
134
  "--font-mega-2-size",
123
135
  "--font-mega-2-weight",
136
+ "--font-overline-family",
137
+ "--font-overline-letter-spacing",
138
+ "--font-overline-line-height",
139
+ "--font-overline-size",
140
+ "--font-overline-weight",
124
141
  "--font-paragraph-em-family",
125
142
  "--font-paragraph-em-letter-spacing",
126
143
  "--font-paragraph-em-line-height",
@@ -1,4 +1,4 @@
1
- const categories = { "colour": ["--color-action-icon-active", "--color-action-icon-default", "--color-action-passive-bg", "--color-action-passive-bg-active", "--color-action-passive-bg-hover", "--color-action-passive-text", "--color-action-primary-bg", "--color-action-primary-bg-active", "--color-action-primary-bg-hover", "--color-action-primary-border", "--color-action-primary-border-secondary", "--color-action-primary-border-tertiary", "--color-action-primary-text", "--color-action-primary-text-active", "--color-action-primary-text-secondary", "--color-action-primary-text-tertiary", "--color-ai-gradient-end", "--color-ai-gradient-mid", "--color-ai-gradient-start", "--color-bg-container-border", "--color-bg-container-inverse", "--color-bg-container-primary", "--color-bg-container-primary-semi", "--color-bg-container-primary-transparent", "--color-bg-container-secondary", "--color-bg-container-tertiary", "--color-bg-page-inverse", "--color-bg-page-primary", "--color-chart-contribution-0", "--color-chart-contribution-1", "--color-chart-contribution-2", "--color-chart-contribution-3", "--color-chart-contribution-4", "--color-chat-bubble-received-bg", "--color-chat-bubble-received-text", "--color-chat-bubble-sent-bg", "--color-chat-bubble-sent-text", "--color-control-thumb", "--color-core-accent-amber", "--color-core-accent-cobalt", "--color-core-accent-coral", "--color-core-accent-gold", "--color-core-accent-mint", "--color-core-accent-violet", "--color-core-ui-primary", "--color-core-ui-secondary", "--color-divider", "--color-icon-primary", "--color-icon-secondary", "--color-input-bg-disabled", "--color-input-bg-primary", "--color-input-border-disabled", "--color-input-border-hover", "--color-input-border-primary", "--color-input-border-selected", "--color-input-text-disabled", "--color-input-text-inverse", "--color-input-text-placeholder", "--color-input-text-primary", "--color-scrim", "--color-status-error-bg", "--color-status-error-border", "--color-status-error-text", "--color-status-info-bg", "--color-status-info-border", "--color-status-info-text", "--color-status-neutral-bg", "--color-status-neutral-border", "--color-status-neutral-text", "--color-status-positive-bg", "--color-status-positive-border", "--color-status-positive-text", "--color-status-warning-bg", "--color-status-warning-border", "--color-status-warning-text", "--color-text-inverse", "--color-text-on-inverse", "--color-text-primary", "--color-text-secondary", "--color-text-tertiary"], "typography": ["--font-display-1-family", "--font-display-1-letter-spacing", "--font-display-1-line-height", "--font-display-1-size", "--font-display-1-weight", "--font-display-2-family", "--font-display-2-letter-spacing", "--font-display-2-line-height", "--font-display-2-size", "--font-display-2-weight", "--font-family-code", "--font-family-primary", "--font-heading-1-family", "--font-heading-1-letter-spacing", "--font-heading-1-line-height", "--font-heading-1-size", "--font-heading-1-weight", "--font-heading-2-family", "--font-heading-2-letter-spacing", "--font-heading-2-line-height", "--font-heading-2-size", "--font-heading-2-weight", "--font-heading-3-family", "--font-heading-3-letter-spacing", "--font-heading-3-line-height", "--font-heading-3-size", "--font-heading-3-weight", "--font-mega-1-family", "--font-mega-1-letter-spacing", "--font-mega-1-line-height", "--font-mega-1-size", "--font-mega-1-weight", "--font-mega-2-family", "--font-mega-2-letter-spacing", "--font-mega-2-line-height", "--font-mega-2-size", "--font-mega-2-weight", "--font-paragraph-em-family", "--font-paragraph-em-letter-spacing", "--font-paragraph-em-line-height", "--font-paragraph-em-size", "--font-paragraph-em-weight", "--font-paragraph-family", "--font-paragraph-letter-spacing", "--font-paragraph-line-height", "--font-paragraph-size", "--font-paragraph-sm-em-family", "--font-paragraph-sm-em-letter-spacing", "--font-paragraph-sm-em-line-height", "--font-paragraph-sm-em-size", "--font-paragraph-sm-em-weight", "--font-paragraph-sm-family", "--font-paragraph-sm-letter-spacing", "--font-paragraph-sm-line-height", "--font-paragraph-sm-size", "--font-paragraph-sm-weight", "--font-paragraph-weight", "--font-sub-display-family", "--font-sub-display-letter-spacing", "--font-sub-display-line-height", "--font-sub-display-size", "--font-sub-display-weight", "--font-title-body-family", "--font-title-body-letter-spacing", "--font-title-body-line-height", "--font-title-body-size", "--font-title-body-weight"], "spacing": ["--gap-lg", "--gap-md", "--gap-sm", "--gap-sm-md", "--gap-xl", "--gap-xs", "--gap-xxl", "--gap-xxs", "--gap-xxxl", "--gap-xxxxl", "--padding-lg", "--padding-md", "--padding-sm", "--padding-sm-md", "--padding-xl", "--padding-xs", "--padding-xxl", "--padding-xxs", "--padding-xxxs"], "radius": ["--radius-composer", "--radius-full", "--radius-lg", "--radius-md", "--radius-sm", "--radius-xl", "--radius-xs", "--radius-xxl", "--radius-xxs"], "border": ["--border-md", "--border-xs"], "shadow": ["--shadow-floating", "--shadow-modal"], "icons": ["--icon-size-lg", "--icon-size-md", "--icon-size-sm", "--icon-size-xl"], "motion": ["--motion-duration-base", "--motion-duration-deliberate", "--motion-duration-fast", "--motion-duration-instant", "--motion-duration-loop-matrix", "--motion-duration-loop-shimmer", "--motion-duration-loop-spin", "--motion-duration-slow", "--motion-duration-slower", "--motion-ease-emphasized", "--motion-ease-entrance", "--motion-ease-linear", "--motion-ease-spring", "--motion-ease-standard"] };
1
+ const categories = { "colour": ["--color-action-icon-active", "--color-action-icon-default", "--color-action-passive-bg", "--color-action-passive-bg-active", "--color-action-passive-bg-hover", "--color-action-passive-text", "--color-action-primary-bg", "--color-action-primary-bg-active", "--color-action-primary-bg-hover", "--color-action-primary-border", "--color-action-primary-border-secondary", "--color-action-primary-border-tertiary", "--color-action-primary-text", "--color-action-primary-text-active", "--color-action-primary-text-secondary", "--color-action-primary-text-tertiary", "--color-ai-gradient-end", "--color-ai-gradient-mid", "--color-ai-gradient-start", "--color-bg-container-border", "--color-bg-container-inverse", "--color-bg-container-primary", "--color-bg-container-primary-semi", "--color-bg-container-primary-transparent", "--color-bg-container-secondary", "--color-bg-container-tertiary", "--color-bg-page-inverse", "--color-bg-page-primary", "--color-chart-contribution-0", "--color-chart-contribution-1", "--color-chart-contribution-2", "--color-chart-contribution-3", "--color-chart-contribution-4", "--color-chart-series-1", "--color-chart-series-2", "--color-chart-series-3", "--color-chart-series-4", "--color-chart-series-5", "--color-chart-series-6", "--color-chart-series-7", "--color-chat-bubble-received-bg", "--color-chat-bubble-received-text", "--color-chat-bubble-sent-bg", "--color-chat-bubble-sent-text", "--color-control-thumb", "--color-core-accent-amber", "--color-core-accent-cobalt", "--color-core-accent-coral", "--color-core-accent-gold", "--color-core-accent-mint", "--color-core-accent-violet", "--color-core-ui-primary", "--color-core-ui-secondary", "--color-divider", "--color-icon-primary", "--color-icon-secondary", "--color-input-bg-disabled", "--color-input-bg-primary", "--color-input-border-disabled", "--color-input-border-hover", "--color-input-border-primary", "--color-input-border-selected", "--color-input-text-disabled", "--color-input-text-inverse", "--color-input-text-placeholder", "--color-input-text-primary", "--color-scrim", "--color-status-error-bg", "--color-status-error-border", "--color-status-error-text", "--color-status-info-bg", "--color-status-info-border", "--color-status-info-text", "--color-status-neutral-bg", "--color-status-neutral-border", "--color-status-neutral-text", "--color-status-positive-bg", "--color-status-positive-border", "--color-status-positive-text", "--color-status-warning-bg", "--color-status-warning-border", "--color-status-warning-text", "--color-text-inverse", "--color-text-on-inverse", "--color-text-primary", "--color-text-secondary", "--color-text-tertiary"], "typography": ["--font-caption-family", "--font-caption-letter-spacing", "--font-caption-line-height", "--font-caption-size", "--font-caption-weight", "--font-display-1-family", "--font-display-1-letter-spacing", "--font-display-1-line-height", "--font-display-1-size", "--font-display-1-weight", "--font-display-2-family", "--font-display-2-letter-spacing", "--font-display-2-line-height", "--font-display-2-size", "--font-display-2-weight", "--font-family-code", "--font-family-primary", "--font-heading-1-family", "--font-heading-1-letter-spacing", "--font-heading-1-line-height", "--font-heading-1-size", "--font-heading-1-weight", "--font-heading-2-family", "--font-heading-2-letter-spacing", "--font-heading-2-line-height", "--font-heading-2-size", "--font-heading-2-weight", "--font-heading-3-family", "--font-heading-3-letter-spacing", "--font-heading-3-line-height", "--font-heading-3-size", "--font-heading-3-weight", "--font-mega-1-family", "--font-mega-1-letter-spacing", "--font-mega-1-line-height", "--font-mega-1-size", "--font-mega-1-weight", "--font-mega-2-family", "--font-mega-2-letter-spacing", "--font-mega-2-line-height", "--font-mega-2-size", "--font-mega-2-weight", "--font-overline-family", "--font-overline-letter-spacing", "--font-overline-line-height", "--font-overline-size", "--font-overline-weight", "--font-paragraph-em-family", "--font-paragraph-em-letter-spacing", "--font-paragraph-em-line-height", "--font-paragraph-em-size", "--font-paragraph-em-weight", "--font-paragraph-family", "--font-paragraph-letter-spacing", "--font-paragraph-line-height", "--font-paragraph-size", "--font-paragraph-sm-em-family", "--font-paragraph-sm-em-letter-spacing", "--font-paragraph-sm-em-line-height", "--font-paragraph-sm-em-size", "--font-paragraph-sm-em-weight", "--font-paragraph-sm-family", "--font-paragraph-sm-letter-spacing", "--font-paragraph-sm-line-height", "--font-paragraph-sm-size", "--font-paragraph-sm-weight", "--font-paragraph-weight", "--font-sub-display-family", "--font-sub-display-letter-spacing", "--font-sub-display-line-height", "--font-sub-display-size", "--font-sub-display-weight", "--font-title-body-family", "--font-title-body-letter-spacing", "--font-title-body-line-height", "--font-title-body-size", "--font-title-body-weight"], "spacing": ["--gap-lg", "--gap-md", "--gap-sm", "--gap-sm-md", "--gap-xl", "--gap-xs", "--gap-xxl", "--gap-xxs", "--gap-xxxl", "--gap-xxxxl", "--padding-lg", "--padding-md", "--padding-sm", "--padding-sm-md", "--padding-xl", "--padding-xs", "--padding-xxl", "--padding-xxs", "--padding-xxxs"], "radius": ["--radius-composer", "--radius-full", "--radius-lg", "--radius-md", "--radius-sm", "--radius-xl", "--radius-xs", "--radius-xxl", "--radius-xxs"], "border": ["--border-md", "--border-xs"], "shadow": ["--shadow-floating", "--shadow-modal"], "icons": ["--icon-size-lg", "--icon-size-md", "--icon-size-sm", "--icon-size-xl"], "motion": ["--motion-duration-base", "--motion-duration-deliberate", "--motion-duration-fast", "--motion-duration-instant", "--motion-duration-loop-matrix", "--motion-duration-loop-shimmer", "--motion-duration-loop-spin", "--motion-duration-slow", "--motion-duration-slower", "--motion-ease-emphasized", "--motion-ease-entrance", "--motion-ease-linear", "--motion-ease-spring", "--motion-ease-standard"] };
2
2
  const registry = {
3
3
  categories
4
4
  };
@@ -48,21 +48,25 @@
48
48
  --shadow-floating: 0 4px 16px rgba(0, 0, 0, 0.55);
49
49
  --shadow-modal: 0 8px 32px rgba(0, 0, 0, 0.6);
50
50
 
51
- /* Action - Primary */
52
- --color-action-primary-bg: var(--primitive-teal-07);
53
- --color-action-primary-bg-hover: var(--primitive-teal-08);
54
- --color-action-primary-bg-active: var(--primitive-teal-09);
55
- --color-action-primary-text: var(--primitive-teal-02);
56
- --color-action-primary-text-active: var(--primitive-neutral-01);
51
+ /* Action - Primary. Inverted from light: the fill is the light half of
52
+ the teal ramp under a dark label, because a dark fill cannot clear 3:1
53
+ against the near-black page. Hover and active brighten rather than
54
+ deepen, so the fill walks toward the page's opposite, not into it. */
55
+ --color-action-primary-bg: var(--primitive-teal-05);
56
+ --color-action-primary-bg-hover: var(--primitive-teal-04);
57
+ --color-action-primary-bg-active: var(--primitive-teal-03);
58
+ --color-action-primary-text: var(--primitive-teal-10);
59
+ --color-action-primary-text-active: var(--primitive-teal-10);
57
60
  --color-action-primary-text-secondary: var(--primitive-teal-10);
58
- --color-action-primary-text-tertiary: var(--primitive-teal-07);
59
- --color-action-primary-border: var(--primitive-teal-09);
61
+ --color-action-primary-text-tertiary: var(--primitive-teal-04);
62
+ --color-action-primary-border: var(--primitive-teal-05);
60
63
  --color-action-primary-border-secondary: var(--primitive-teal-06);
61
64
  --color-action-primary-border-tertiary: var(--primitive-teal-04);
62
65
 
63
- /* Action - Icon */
66
+ /* Action - Icon. The active icon sits on the hover/active fills, which
67
+ are the light half of the ramp here — so it inverts with the label. */
64
68
  --color-action-icon-default: var(--primitive-neutral-01);
65
- --color-action-icon-active: var(--primitive-neutral-01);
69
+ --color-action-icon-active: var(--primitive-teal-10);
66
70
 
67
71
  /* Action - Passive (Secondary button) */
68
72
  --color-action-passive-text: var(--primitive-neutral-01);
@@ -99,7 +103,7 @@
99
103
  stays luminous on dark surfaces. */
100
104
  --color-ai-gradient-start: var(--primitive-red-05);
101
105
  --color-ai-gradient-mid: var(--primitive-blue-05);
102
- --color-ai-gradient-end: var(--primitive-teal-05);
106
+ --color-ai-gradient-end: var(--primitive-teal-07);
103
107
 
104
108
  /* Chart - Contribution heatmap ramp (level 0 = none → level 4 = most) */
105
109
  --color-chart-contribution-0: var(--primitive-neutral-08);
@@ -108,20 +112,31 @@
108
112
  --color-chart-contribution-3: var(--primitive-green-08);
109
113
  --color-chart-contribution-4: var(--primitive-green-07);
110
114
 
115
+ /* Chart - Ordered series ramp for multi-series charts. Series 1 follows
116
+ the action teal (theme-split with it); 2-7 alias the core accents, so
117
+ re-theming an accent re-themes every chart that uses its slot. */
118
+ --color-chart-series-1: var(--color-action-primary-bg);
119
+ --color-chart-series-2: var(--color-core-accent-mint);
120
+ --color-chart-series-3: var(--color-core-accent-gold);
121
+ --color-chart-series-4: var(--color-core-accent-coral);
122
+ --color-chart-series-5: var(--color-core-accent-violet);
123
+ --color-chart-series-6: var(--color-core-accent-amber);
124
+ --color-chart-series-7: var(--color-core-accent-cobalt);
125
+
111
126
  /* Input */
112
127
  --color-input-text-primary: var(--primitive-neutral-01);
113
128
  --color-input-text-placeholder: var(--primitive-neutral-04);
114
129
  --color-input-text-disabled: var(--primitive-neutral-07);
115
130
  --color-input-text-inverse: var(--primitive-neutral-07);
116
131
  --color-input-border-primary: var(--primitive-neutral-08);
117
- --color-input-border-hover: var(--primitive-teal-09);
132
+ --color-input-border-hover: var(--primitive-teal-07);
118
133
  --color-input-border-selected: var(--primitive-teal-06);
119
134
  --color-input-border-disabled: var(--primitive-neutral-08);
120
135
  --color-input-bg-primary: var(--primitive-neutral-10);
121
136
  --color-input-bg-disabled: var(--primitive-neutral-09);
122
137
 
123
138
  /* Core colours */
124
- --color-core-ui-primary: var(--primitive-teal-07);
139
+ --color-core-ui-primary: var(--primitive-teal-05);
125
140
  --color-core-ui-secondary: var(--primitive-teal-09);
126
141
  --color-core-accent-coral: var(--primitive-red-07);
127
142
  --color-core-accent-violet: var(--primitive-purple-07);
@@ -51,17 +51,20 @@
51
51
  --shadow-floating: 0 4px 16px rgba(0, 0, 0, 0.12);
52
52
  --shadow-modal: 0 8px 32px rgba(0, 0, 0, 0.2);
53
53
 
54
- /* Action - Primary */
55
- --color-action-primary-bg: var(--primitive-teal-07);
56
- --color-action-primary-bg-hover: var(--primitive-teal-08);
57
- --color-action-primary-bg-active: var(--primitive-teal-09);
54
+ /* Action - Primary. The action colour is theme-dependent: one teal step
55
+ cannot clear 3:1 against both a white page and a near-black one while
56
+ also carrying a 4.5:1 label, so light takes a deep fill under a light
57
+ label and the dark theme inverts it (see tokens-dark.css). */
58
+ --color-action-primary-bg: var(--primitive-teal-08);
59
+ --color-action-primary-bg-hover: var(--primitive-teal-09);
60
+ --color-action-primary-bg-active: var(--primitive-teal-10);
58
61
  --color-action-primary-text: var(--primitive-teal-02);
59
62
  --color-action-primary-text-active: var(--primitive-neutral-01);
60
63
  --color-action-primary-text-secondary: var(--primitive-teal-10);
61
- --color-action-primary-text-tertiary: var(--primitive-teal-07);
62
- --color-action-primary-border: var(--primitive-teal-09);
63
- --color-action-primary-border-secondary: var(--primitive-teal-06);
64
- --color-action-primary-border-tertiary: var(--primitive-teal-04);
64
+ --color-action-primary-text-tertiary: var(--primitive-teal-09);
65
+ --color-action-primary-border: var(--primitive-teal-10);
66
+ --color-action-primary-border-secondary: var(--primitive-teal-08);
67
+ --color-action-primary-border-tertiary: var(--primitive-teal-08);
65
68
 
66
69
  /* Action - Icon */
67
70
  --color-action-icon-default: var(--primitive-neutral-10);
@@ -74,7 +77,7 @@
74
77
  --color-action-passive-bg-active: var(--primitive-neutral-03-semi);
75
78
 
76
79
  /* Core colours */
77
- --color-core-ui-primary: var(--primitive-teal-07);
80
+ --color-core-ui-primary: var(--primitive-teal-08);
78
81
  --color-core-ui-secondary: var(--primitive-teal-10);
79
82
  --color-core-accent-coral: var(--primitive-red-07);
80
83
  --color-core-accent-violet: var(--primitive-purple-07);
@@ -114,7 +117,7 @@
114
117
  (AiButton's ring and glow), never as fills for ordinary chrome. */
115
118
  --color-ai-gradient-start: var(--primitive-red-06);
116
119
  --color-ai-gradient-mid: var(--primitive-blue-06);
117
- --color-ai-gradient-end: var(--primitive-teal-06);
120
+ --color-ai-gradient-end: var(--primitive-teal-08);
118
121
 
119
122
  /* Chart - Contribution heatmap ramp (level 0 = none → level 4 = most) */
120
123
  --color-chart-contribution-0: var(--color-bg-container-primary);
@@ -123,14 +126,25 @@
123
126
  --color-chart-contribution-3: var(--primitive-green-07);
124
127
  --color-chart-contribution-4: var(--primitive-green-09);
125
128
 
129
+ /* Chart - Ordered series ramp for multi-series charts. Series 1 follows
130
+ the action teal (theme-split with it); 2-7 alias the core accents, so
131
+ re-theming an accent re-themes every chart that uses its slot. */
132
+ --color-chart-series-1: var(--color-action-primary-bg);
133
+ --color-chart-series-2: var(--color-core-accent-mint);
134
+ --color-chart-series-3: var(--color-core-accent-gold);
135
+ --color-chart-series-4: var(--color-core-accent-coral);
136
+ --color-chart-series-5: var(--color-core-accent-violet);
137
+ --color-chart-series-6: var(--color-core-accent-amber);
138
+ --color-chart-series-7: var(--color-core-accent-cobalt);
139
+
126
140
  /* Input */
127
141
  --color-input-text-primary: var(--primitive-neutral-10);
128
142
  --color-input-text-placeholder: var(--primitive-neutral-06);
129
143
  --color-input-text-disabled: var(--primitive-neutral-04);
130
144
  --color-input-text-inverse: var(--primitive-neutral-04);
131
145
  --color-input-border-primary: var(--primitive-neutral-02);
132
- --color-input-border-hover: var(--primitive-teal-04);
133
- --color-input-border-selected: var(--primitive-teal-06);
146
+ --color-input-border-hover: var(--primitive-teal-06);
147
+ --color-input-border-selected: var(--primitive-teal-08);
134
148
  --color-input-border-disabled: var(--primitive-neutral-03);
135
149
  --color-input-bg-primary: var(--primitive-neutral-00);
136
150
  --color-input-bg-disabled: var(--primitive-neutral-02);
@@ -118,6 +118,26 @@
118
118
  --font-paragraph-sm-em-weight: 500;
119
119
  --font-paragraph-sm-em-line-height: 20px;
120
120
  --font-paragraph-sm-em-letter-spacing: 0;
121
+
122
+ /* Overline — the uppercase label face: an eyebrow over a title, a map
123
+ callout's place name, a code block's language chip. Small and bold with
124
+ open tracking, because capitals at this size need air to stay legible.
125
+ Pair with text-transform: uppercase at the use site — the tokens set the
126
+ metrics, never the casing. */
127
+ --font-overline-family: var(--font-family-primary);
128
+ --font-overline-size: 14px;
129
+ --font-overline-weight: 600;
130
+ --font-overline-line-height: 20px;
131
+ --font-overline-letter-spacing: 0.08em; /* +8% */
132
+
133
+ /* Caption — the floor of the scale. Footnotes and disclaimers: a line the
134
+ reader should be able to find but never has to read to use the screen.
135
+ Never on a control, never for running text. */
136
+ --font-caption-family: var(--font-family-primary);
137
+ --font-caption-size: 12px;
138
+ --font-caption-weight: 400;
139
+ --font-caption-line-height: 16px;
140
+ --font-caption-letter-spacing: 0;
121
141
  }
122
142
 
123
143
  /* ============================================