@actioneer/ads 0.5.5 → 0.5.7
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.
- package/components/agent-icon.js +3 -2
- package/components/ai-elements/chain-of-thought-icon.d.ts +10 -12
- package/components/ai-elements/chain-of-thought-icon.js +341 -201
- package/components/ai-elements/chain-of-thought.d.ts +1 -1
- package/components/answer-sources.d.ts +42 -0
- package/components/answer-sources.js +111 -0
- package/components/answer.d.ts +1 -0
- package/components/answer.js +665 -671
- package/components/assistant-ui/answer-tool-ui.js +11 -7
- package/components/assistant-ui/attachment.js +39 -39
- package/components/assistant-ui/composer-harness.js +5 -4
- package/components/assistant-ui/follow-up-suggestions.d.ts +5 -1
- package/components/assistant-ui/follow-up-suggestions.js +47 -19
- package/components/assistant-ui/thread-context.d.ts +2 -0
- package/components/assistant-ui/thread.js +41 -40
- package/components/avatar.js +14 -14
- package/components/dropdown.d.ts +1 -1
- package/components/dropdown.js +1 -1
- package/components/empty-state.d.ts +4 -4
- package/components/field.js +16 -16
- package/components/index.d.ts +1 -0
- package/components/index.js +414 -408
- package/components/infinite-canvas.js +1 -1
- package/components/pixel-icon.d.ts +3 -1
- package/components/pixel-icon.js +294 -214
- package/components/segmented.d.ts +4 -1
- package/components/segmented.js +9 -8
- package/components/sidebar.d.ts +2 -2
- package/components/switch.js +22 -4
- package/components/table.d.ts +15 -7
- package/components/table.js +313 -199
- package/components/textarea.js +1 -2
- package/components/tooltip.js +1 -1
- package/components/ui/tooltip.js +5 -5
- package/lib/icons.d.ts +8 -0
- package/lib/icons.js +103 -101
- package/llms.txt +18 -7
- package/manifest.json +125 -13
- package/package.json +1 -1
- package/styles.css +42 -47
- package/theme.css +24 -45
package/manifest.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@actioneer/ads",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.7",
|
|
4
4
|
"importPath": "@actioneer/ads",
|
|
5
5
|
"styleImport": "@import \"@actioneer/ads/styles.css\";",
|
|
6
6
|
"families": [
|
|
@@ -16,9 +16,9 @@
|
|
|
16
16
|
"Chat"
|
|
17
17
|
],
|
|
18
18
|
"counts": {
|
|
19
|
-
"total":
|
|
20
|
-
"component":
|
|
21
|
-
"type":
|
|
19
|
+
"total": 792,
|
|
20
|
+
"component": 357,
|
|
21
|
+
"type": 347,
|
|
22
22
|
"hook": 10,
|
|
23
23
|
"util": 78
|
|
24
24
|
},
|
|
@@ -148,7 +148,7 @@
|
|
|
148
148
|
"text-brand",
|
|
149
149
|
"border-brand"
|
|
150
150
|
],
|
|
151
|
-
"description": "
|
|
151
|
+
"description": "Compatibility action role — neutral ink, never a colored primary hue."
|
|
152
152
|
},
|
|
153
153
|
{
|
|
154
154
|
"name": "--color-brand-foreground",
|
|
@@ -157,7 +157,7 @@
|
|
|
157
157
|
"text-brand-foreground",
|
|
158
158
|
"bg-brand-foreground"
|
|
159
159
|
],
|
|
160
|
-
"description": "
|
|
160
|
+
"description": "Compatibility action role — neutral ink, never a colored primary hue."
|
|
161
161
|
},
|
|
162
162
|
{
|
|
163
163
|
"name": "--color-brand-hover",
|
|
@@ -167,7 +167,7 @@
|
|
|
167
167
|
"text-brand-hover",
|
|
168
168
|
"border-brand-hover"
|
|
169
169
|
],
|
|
170
|
-
"description": "
|
|
170
|
+
"description": "Compatibility action role — neutral ink, never a colored primary hue."
|
|
171
171
|
},
|
|
172
172
|
{
|
|
173
173
|
"name": "--color-brand-text",
|
|
@@ -177,7 +177,7 @@
|
|
|
177
177
|
"text-brand-text",
|
|
178
178
|
"border-brand-text"
|
|
179
179
|
],
|
|
180
|
-
"description": "
|
|
180
|
+
"description": "Compatibility action role — neutral ink, never a colored primary hue."
|
|
181
181
|
},
|
|
182
182
|
{
|
|
183
183
|
"name": "--color-fill",
|
|
@@ -2068,6 +2068,63 @@
|
|
|
2068
2068
|
"kind"
|
|
2069
2069
|
]
|
|
2070
2070
|
},
|
|
2071
|
+
{
|
|
2072
|
+
"name": "AnswerSourceChip",
|
|
2073
|
+
"family": "Data display",
|
|
2074
|
+
"kind": "component",
|
|
2075
|
+
"importPath": "@actioneer/ads",
|
|
2076
|
+
"module": "answer-sources",
|
|
2077
|
+
"description": "Use the blue connector/source chip inside AnswerSources to open only the referenced nodes represented by that chip in the shell's inspector.",
|
|
2078
|
+
"showcaseUrl": "https://ads.actioneer.dev/#/ai/sources",
|
|
2079
|
+
"props": [
|
|
2080
|
+
"icon",
|
|
2081
|
+
"count",
|
|
2082
|
+
"children"
|
|
2083
|
+
]
|
|
2084
|
+
},
|
|
2085
|
+
{
|
|
2086
|
+
"name": "AnswerSourceInspector",
|
|
2087
|
+
"family": "Data display",
|
|
2088
|
+
"kind": "component",
|
|
2089
|
+
"importPath": "@actioneer/ads",
|
|
2090
|
+
"module": "answer-sources",
|
|
2091
|
+
"description": "Render as a separate white shell-level panel beside the answer when a source chip is selected; close and unmount it when the selection clears.",
|
|
2092
|
+
"showcaseUrl": "https://ads.actioneer.dev/#/ai/sources",
|
|
2093
|
+
"props": [
|
|
2094
|
+
"description",
|
|
2095
|
+
"title",
|
|
2096
|
+
"children"
|
|
2097
|
+
]
|
|
2098
|
+
},
|
|
2099
|
+
{
|
|
2100
|
+
"name": "AnswerSourceItem",
|
|
2101
|
+
"family": "Data display",
|
|
2102
|
+
"kind": "component",
|
|
2103
|
+
"importPath": "@actioneer/ads",
|
|
2104
|
+
"module": "answer-sources",
|
|
2105
|
+
"description": "Use as an outlined clickable row inside AnswerSourceInspector for one referenced table or node, including its parent source, read state, and optional status.",
|
|
2106
|
+
"showcaseUrl": "https://ads.actioneer.dev/#/ai/sources",
|
|
2107
|
+
"props": [
|
|
2108
|
+
"name",
|
|
2109
|
+
"source",
|
|
2110
|
+
"description",
|
|
2111
|
+
"status",
|
|
2112
|
+
"icon"
|
|
2113
|
+
]
|
|
2114
|
+
},
|
|
2115
|
+
{
|
|
2116
|
+
"name": "AnswerSources",
|
|
2117
|
+
"family": "Data display",
|
|
2118
|
+
"kind": "component",
|
|
2119
|
+
"importPath": "@actioneer/ads",
|
|
2120
|
+
"module": "answer-sources",
|
|
2121
|
+
"description": "Place immediately above an answer's follow-up questions to summarize the referenced nodes and group them into clickable AnswerSourceChips.",
|
|
2122
|
+
"showcaseUrl": "https://ads.actioneer.dev/#/ai/sources",
|
|
2123
|
+
"props": [
|
|
2124
|
+
"count",
|
|
2125
|
+
"label"
|
|
2126
|
+
]
|
|
2127
|
+
},
|
|
2071
2128
|
{
|
|
2072
2129
|
"name": "AreaChart",
|
|
2073
2130
|
"family": "Data display",
|
|
@@ -3042,6 +3099,7 @@
|
|
|
3042
3099
|
"actionColumnWidth",
|
|
3043
3100
|
"sortDescriptor",
|
|
3044
3101
|
"onSortChange",
|
|
3102
|
+
"allowsSorting",
|
|
3045
3103
|
"isStatic"
|
|
3046
3104
|
]
|
|
3047
3105
|
},
|
|
@@ -3086,7 +3144,8 @@
|
|
|
3086
3144
|
"showcaseUrl": "https://ads.actioneer.dev/#/table",
|
|
3087
3145
|
"props": [
|
|
3088
3146
|
"align",
|
|
3089
|
-
"sticky"
|
|
3147
|
+
"sticky",
|
|
3148
|
+
"sortValue"
|
|
3090
3149
|
]
|
|
3091
3150
|
},
|
|
3092
3151
|
{
|
|
@@ -3099,7 +3158,9 @@
|
|
|
3099
3158
|
"props": [
|
|
3100
3159
|
"align",
|
|
3101
3160
|
"sticky",
|
|
3102
|
-
"sortKey"
|
|
3161
|
+
"sortKey",
|
|
3162
|
+
"allowsSorting",
|
|
3163
|
+
"_sortColumnIndex"
|
|
3103
3164
|
]
|
|
3104
3165
|
},
|
|
3105
3166
|
{
|
|
@@ -3466,6 +3527,34 @@
|
|
|
3466
3527
|
"importPath": "@actioneer/ads",
|
|
3467
3528
|
"module": "answer"
|
|
3468
3529
|
},
|
|
3530
|
+
{
|
|
3531
|
+
"name": "AnswerSourceChipProps",
|
|
3532
|
+
"family": "Data display",
|
|
3533
|
+
"kind": "type",
|
|
3534
|
+
"importPath": "@actioneer/ads",
|
|
3535
|
+
"module": "answer-sources"
|
|
3536
|
+
},
|
|
3537
|
+
{
|
|
3538
|
+
"name": "AnswerSourceInspectorProps",
|
|
3539
|
+
"family": "Data display",
|
|
3540
|
+
"kind": "type",
|
|
3541
|
+
"importPath": "@actioneer/ads",
|
|
3542
|
+
"module": "answer-sources"
|
|
3543
|
+
},
|
|
3544
|
+
{
|
|
3545
|
+
"name": "AnswerSourceItemProps",
|
|
3546
|
+
"family": "Data display",
|
|
3547
|
+
"kind": "type",
|
|
3548
|
+
"importPath": "@actioneer/ads",
|
|
3549
|
+
"module": "answer-sources"
|
|
3550
|
+
},
|
|
3551
|
+
{
|
|
3552
|
+
"name": "AnswerSourcesProps",
|
|
3553
|
+
"family": "Data display",
|
|
3554
|
+
"kind": "type",
|
|
3555
|
+
"importPath": "@actioneer/ads",
|
|
3556
|
+
"module": "answer-sources"
|
|
3557
|
+
},
|
|
3469
3558
|
{
|
|
3470
3559
|
"name": "AnswerSpec",
|
|
3471
3560
|
"family": "Data display",
|
|
@@ -4766,6 +4855,7 @@
|
|
|
4766
4855
|
"mask",
|
|
4767
4856
|
"motion",
|
|
4768
4857
|
"motionMode",
|
|
4858
|
+
"interactionColor",
|
|
4769
4859
|
"hero"
|
|
4770
4860
|
]
|
|
4771
4861
|
},
|
|
@@ -5090,7 +5180,7 @@
|
|
|
5090
5180
|
"kind": "component",
|
|
5091
5181
|
"importPath": "@actioneer/ads",
|
|
5092
5182
|
"module": "sidebar",
|
|
5093
|
-
"description": "Use as the app's left navigation rail
|
|
5183
|
+
"description": "Use as the app's left navigation rail. The canonical Actioneer shell composes SidebarBrand with persistent header actions, SidebarAction above grouped SidebarItems, optional attention counts and SidebarHistory, then SidebarAccount in a pinned footer. Its opt-in collapsed icon-rail mode (⌘B/Ctrl-B) is shared automatically by every sub-part.",
|
|
5094
5184
|
"showcaseUrl": "https://ads.actioneer.dev/#/sidebar",
|
|
5095
5185
|
"props": [
|
|
5096
5186
|
"collapsed",
|
|
@@ -7649,6 +7739,17 @@
|
|
|
7649
7739
|
"note": "Vendored assistant-ui component. Props follow upstream assistant-ui, not ADS conventions; the chat family needs an <AssistantRuntimeProvider> (chat runtime) and a <TooltipProvider> ancestor. Import from \"@actioneer/ads\" like any ADS export.",
|
|
7650
7740
|
"showcaseUrl": "https://ads.actioneer.dev/#/demo/ask"
|
|
7651
7741
|
},
|
|
7742
|
+
{
|
|
7743
|
+
"name": "FollowUpQuestion",
|
|
7744
|
+
"family": "Chat",
|
|
7745
|
+
"kind": "component",
|
|
7746
|
+
"importPath": "@actioneer/ads",
|
|
7747
|
+
"module": "follow-up-suggestions",
|
|
7748
|
+
"vendored": true,
|
|
7749
|
+
"note": "Vendored assistant-ui component. Props follow upstream assistant-ui, not ADS conventions; the chat family needs an <AssistantRuntimeProvider> (chat runtime) and a <TooltipProvider> ancestor. Import from \"@actioneer/ads\" like any ADS export.",
|
|
7750
|
+
"description": "Use for the two or three full-width next-question rows that close a structured answer, immediately after its source strip; show the exact prompt that clicking will send.",
|
|
7751
|
+
"showcaseUrl": "https://ads.actioneer.dev/#/ai/follow-up-suggestions"
|
|
7752
|
+
},
|
|
7652
7753
|
{
|
|
7653
7754
|
"name": "FollowUpSuggestion",
|
|
7654
7755
|
"family": "Chat",
|
|
@@ -7657,7 +7758,8 @@
|
|
|
7657
7758
|
"module": "follow-up-suggestions",
|
|
7658
7759
|
"vendored": true,
|
|
7659
7760
|
"note": "Vendored assistant-ui component. Props follow upstream assistant-ui, not ADS conventions; the chat family needs an <AssistantRuntimeProvider> (chat runtime) and a <TooltipProvider> ancestor. Import from \"@actioneer/ads\" like any ADS export.",
|
|
7660
|
-
"
|
|
7761
|
+
"description": "Use only for compact runtime suggestion chips above the composer; use FollowUpQuestion for the larger answer-ending question rows.",
|
|
7762
|
+
"showcaseUrl": "https://ads.actioneer.dev/#/ai/follow-up-suggestions"
|
|
7661
7763
|
},
|
|
7662
7764
|
{
|
|
7663
7765
|
"name": "Image",
|
|
@@ -8184,6 +8286,15 @@
|
|
|
8184
8286
|
"vendored": true,
|
|
8185
8287
|
"note": "Vendored assistant-ui component. Props follow upstream assistant-ui, not ADS conventions; the chat family needs an <AssistantRuntimeProvider> (chat runtime) and a <TooltipProvider> ancestor. Import from \"@actioneer/ads\" like any ADS export."
|
|
8186
8288
|
},
|
|
8289
|
+
{
|
|
8290
|
+
"name": "FollowUpQuestionProps",
|
|
8291
|
+
"family": "Chat",
|
|
8292
|
+
"kind": "type",
|
|
8293
|
+
"importPath": "@actioneer/ads",
|
|
8294
|
+
"module": "follow-up-suggestions",
|
|
8295
|
+
"vendored": true,
|
|
8296
|
+
"note": "Vendored assistant-ui component. Props follow upstream assistant-ui, not ADS conventions; the chat family needs an <AssistantRuntimeProvider> (chat runtime) and a <TooltipProvider> ancestor. Import from \"@actioneer/ads\" like any ADS export."
|
|
8297
|
+
},
|
|
8187
8298
|
{
|
|
8188
8299
|
"name": "FollowUpSuggestionProps",
|
|
8189
8300
|
"family": "Chat",
|
|
@@ -8682,7 +8793,7 @@
|
|
|
8682
8793
|
"id": "minimal-information",
|
|
8683
8794
|
"number": 8,
|
|
8684
8795
|
"title": "Minimal information per screen",
|
|
8685
|
-
"rule": "A screen carries ONLY what the user needs to move forward: one title,
|
|
8796
|
+
"rule": "A screen carries ONLY what the user needs to move forward: one title, the inputs, one primary action. Page, section, panel, modal, dialog, drawer, and popover headers are title-only by default; add a description only when the user explicitly asks for one. Never maximalist.",
|
|
8686
8797
|
"do": [
|
|
8687
8798
|
"Prefer more, smaller steps over dense ones; ask one thing at a time.",
|
|
8688
8799
|
"Derive instead of asking whenever possible (a name from a work email, the company from its domain).",
|
|
@@ -8690,6 +8801,7 @@
|
|
|
8690
8801
|
],
|
|
8691
8802
|
"dont": [
|
|
8692
8803
|
"Add section eyebrows above a title that already names the screen, or helper text that restates the obvious / duplicates a disabled button's meaning.",
|
|
8804
|
+
"Add any header description unless the user explicitly requested supporting copy for that page, section, panel, modal, dialog, drawer, or popover.",
|
|
8693
8805
|
"Nest panel/step-rail chrome inside a multi-step flow."
|
|
8694
8806
|
],
|
|
8695
8807
|
"enforcedByLint": false
|
package/package.json
CHANGED
package/styles.css
CHANGED
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
/*
|
|
32
32
|
* ============================================================
|
|
33
33
|
* ADS 1.0 — Design Tokens
|
|
34
|
-
*
|
|
34
|
+
* Palette: Ink neutrals · Typeface: Aribau Grotesk
|
|
35
35
|
* ============================================================
|
|
36
36
|
*/
|
|
37
37
|
@theme {
|
|
@@ -89,29 +89,8 @@
|
|
|
89
89
|
--color-ink-900: #636461; /* 11 · accessible text */
|
|
90
90
|
--color-ink-950: #1f1f1c; /* 12 · accessible text */
|
|
91
91
|
|
|
92
|
-
/* ---- Brand ramp — the full 12-step Sage green (light section, solid row),
|
|
93
|
-
same Radix roles as the neutral ramp. All 12 present: sage-850 (#417c36,
|
|
94
|
-
step 11 = the accessible green text tone) and sage-950 (#273d23, step 12)
|
|
95
|
-
are restored. The interactive brand (--brand #3f7a34) is step 9 (solid);
|
|
96
|
-
its hover is step 10 (#316c26). NOTE: steps 9–12 are not a pure lightness
|
|
97
|
-
ramp (Radix convention) — the Tailwind name order differs from role
|
|
98
|
-
order, so read the role comment, not the number. ---- */
|
|
99
|
-
--color-sage-50: #fbfefb; /* 1 · background */
|
|
100
|
-
--color-sage-100: #f6fbf5; /* 2 · background */
|
|
101
|
-
--color-sage-200: #e9f7e6; /* 3 · interactive */
|
|
102
|
-
--color-sage-300: #dbf1d6; /* 4 · interactive */
|
|
103
|
-
--color-sage-400: #cae8c5; /* 5 · interactive */
|
|
104
|
-
--color-sage-500: #b6dcaf; /* 6 · border */
|
|
105
|
-
--color-sage-600: #9ccc93; /* 7 · border */
|
|
106
|
-
--color-sage-700: #77b76b; /* 8 · border */
|
|
107
|
-
--color-sage-800: #3f7a34; /* 9 · solid (brand) */
|
|
108
|
-
--color-sage-900: #316c26; /* 10 · solid (hover) */
|
|
109
|
-
--color-sage-850: #417c36; /* 11 · accessible text */
|
|
110
|
-
--color-sage-950: #273d23; /* 12 · accessible text */
|
|
111
|
-
|
|
112
92
|
/* ---- Semantic accent ramps ---- */
|
|
113
|
-
/* Success
|
|
114
|
-
distinct from the warm Sage brand green. */
|
|
93
|
+
/* Success stays a semantic state color, never a product-primary hue. */
|
|
115
94
|
--color-success-50: #ecfdf5;
|
|
116
95
|
--color-success-100: #d1fae5;
|
|
117
96
|
--color-success-500: #10b981;
|
|
@@ -138,7 +117,7 @@
|
|
|
138
117
|
|
|
139
118
|
/* ---- Data-viz accents ---- three small ramps for charts & illustration.
|
|
140
119
|
deep = text/lines · base = fills · soft = backgrounds. Separate from the
|
|
141
|
-
semantic status ramps above; these
|
|
120
|
+
semantic status ramps above; these carry data, not product identity. */
|
|
142
121
|
--color-cyan-soft: #c7efe9; /* Cyan — vivid cool contrast; 2nd series, links */
|
|
143
122
|
--color-cyan-base: #12b5a5;
|
|
144
123
|
--color-cyan-deep: #0a7e82;
|
|
@@ -149,15 +128,15 @@
|
|
|
149
128
|
--color-amber-base: #f3a72e;
|
|
150
129
|
--color-amber-deep: #b57414;
|
|
151
130
|
|
|
152
|
-
/* ---- Radii ----
|
|
153
|
-
|
|
154
|
-
--radius-xs: 0.
|
|
155
|
-
--radius-sm: 0.
|
|
156
|
-
--radius-md: 0.
|
|
157
|
-
--radius-lg:
|
|
158
|
-
--radius-xl:
|
|
159
|
-
--radius-2xl:
|
|
160
|
-
--radius-full:
|
|
131
|
+
/* ---- Radii ---- TWO values only: 2px and 4px. Compact roles resolve to
|
|
132
|
+
2px; every surface and formerly pill-shaped role resolves to 4px. */
|
|
133
|
+
--radius-xs: 0.125rem; /* 2px */
|
|
134
|
+
--radius-sm: 0.125rem; /* 2px */
|
|
135
|
+
--radius-md: 0.25rem; /* 4px */
|
|
136
|
+
--radius-lg: 0.25rem; /* 4px */
|
|
137
|
+
--radius-xl: 0.25rem; /* 4px */
|
|
138
|
+
--radius-2xl: 0.25rem; /* 4px */
|
|
139
|
+
--radius-full: 0.25rem; /* 4px */
|
|
161
140
|
/* Status/indicator dots are SQUARE with a hair of softening — echoing the
|
|
162
141
|
growth-mark's square cells. Never render an indicator dot as a circle
|
|
163
142
|
(`rounded-full`); radio controls are the one exception (control
|
|
@@ -302,7 +281,7 @@
|
|
|
302
281
|
--color-card: var(--card);
|
|
303
282
|
--color-card-foreground: var(--card-foreground);
|
|
304
283
|
|
|
305
|
-
/*
|
|
284
|
+
/* Compatibility action role — neutral ink, never a colored primary hue. */
|
|
306
285
|
--color-brand: var(--brand);
|
|
307
286
|
--color-brand-foreground: var(--brand-foreground);
|
|
308
287
|
--color-brand-hover: var(--brand-hover);
|
|
@@ -361,10 +340,9 @@
|
|
|
361
340
|
|
|
362
341
|
/* ---- Theme (light only) ---- */
|
|
363
342
|
:root {
|
|
364
|
-
/* Every semantic token below points INTO
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
base surface, not a neutral scale step. */
|
|
343
|
+
/* Every neutral semantic token below points INTO the ink primitive scale.
|
|
344
|
+
Only pure white (#ffffff) stays literal: it is a base surface, not a
|
|
345
|
+
neutral scale step. */
|
|
368
346
|
--background: var(--color-ink-100); /* step 2 · canvas */
|
|
369
347
|
--foreground: var(--color-ink-950); /* step 12 */
|
|
370
348
|
|
|
@@ -384,11 +362,12 @@
|
|
|
384
362
|
--card: #ffffff; /* pure white base */
|
|
385
363
|
--card-foreground: var(--color-ink-950);
|
|
386
364
|
|
|
387
|
-
/*
|
|
388
|
-
|
|
365
|
+
/* Neutral action role. The `brand` name remains as a compatibility API,
|
|
366
|
+
but the product has no colored primary palette. */
|
|
367
|
+
--brand: var(--color-ink-950); /* darkest action ink */
|
|
389
368
|
--brand-foreground: #ffffff;
|
|
390
|
-
--brand-hover: var(--color-
|
|
391
|
-
--brand-text: var(--color-
|
|
369
|
+
--brand-hover: var(--color-ink-900); /* lighter hover lift */
|
|
370
|
+
--brand-text: var(--color-ink-950); /* action text / links */
|
|
392
371
|
|
|
393
372
|
/* Table interaction fills are pre-composited and opaque. Sticky edge cells
|
|
394
373
|
therefore cover horizontally scrolled content while preserving the
|
|
@@ -413,7 +392,7 @@
|
|
|
413
392
|
--input: var(--border-primary); /* form-control edge */
|
|
414
393
|
|
|
415
394
|
/* Ripple — the appearance wash that radiates from a floating surface's
|
|
416
|
-
origin corner as it opens (Dropdown/Popover/Select/Modal…). A soft
|
|
395
|
+
origin corner as it opens (Dropdown/Popover/Select/Modal…). A soft ink
|
|
417
396
|
tint that expands + fades once on mount; see the `.ads-ripple` layer and
|
|
418
397
|
the `Ripple` component. Duration stays in the sub-300ms UI band. */
|
|
419
398
|
--ripple-tint: color-mix(in srgb, var(--brand) 20%, transparent);
|
|
@@ -424,7 +403,7 @@
|
|
|
424
403
|
bottom of this file, so every `border`/`border-t|r|b|l|x|y` reads as a
|
|
425
404
|
true hairline. Explicit `border-2`+ widths are unaffected. */
|
|
426
405
|
--stroke-width: 0.5px;
|
|
427
|
-
--ring: color-mix(in srgb, var(--color-
|
|
406
|
+
--ring: color-mix(in srgb, var(--color-ink-950) 50%, transparent); /* ink @ 50% */
|
|
428
407
|
--overlay: color-mix(in srgb, var(--color-ink-950) 50%, transparent); /* ink-950 @ 50% */
|
|
429
408
|
|
|
430
409
|
/* Functional / domain tokens — named for their RENDER role, pointing into
|
|
@@ -445,7 +424,7 @@
|
|
|
445
424
|
/* shadcn-compat raw surfaces — so a downstream shadcn Sidebar / Popover
|
|
446
425
|
(or an inline `var(--sidebar)` / `var(--popover)`) resolves to the ADS
|
|
447
426
|
palette instead of shadcn's grey/black defaults. The sidebar reads as the
|
|
448
|
-
neutral canvas; its active item takes
|
|
427
|
+
neutral canvas; its active item takes action ink. A consumer that had
|
|
449
428
|
hard-coded these can now delete its overrides and inherit from here. */
|
|
450
429
|
--sidebar: var(--surface);
|
|
451
430
|
--sidebar-foreground: var(--foreground);
|
|
@@ -530,6 +509,22 @@
|
|
|
530
509
|
display: none;
|
|
531
510
|
}
|
|
532
511
|
|
|
512
|
+
/* Artifact widgets are positioned by GridStack; ADS cards own the visible
|
|
513
|
+
surface while the library content wrapper only clips during interaction.
|
|
514
|
+
The subtle elevation lives on the wrapper (not the inner card) because the
|
|
515
|
+
wrapper's own `overflow: hidden` would clip a shadow drawn on its child. */
|
|
516
|
+
.artifact-grid-stack > .grid-stack-item > .grid-stack-item-content {
|
|
517
|
+
overflow: hidden;
|
|
518
|
+
border-radius: var(--radius-lg);
|
|
519
|
+
box-shadow: var(--shadow-elevation);
|
|
520
|
+
}
|
|
521
|
+
|
|
522
|
+
.artifact-grid-stack > .grid-stack-placeholder > .placeholder-content {
|
|
523
|
+
border: 1px dashed var(--color-border-strong);
|
|
524
|
+
border-radius: var(--radius-sm);
|
|
525
|
+
background: var(--color-muted);
|
|
526
|
+
}
|
|
527
|
+
|
|
533
528
|
/* BrandTexture entrance (src/components/brand-texture.tsx): a radial bloom —
|
|
534
529
|
the halftone reveals from the centre out to the corners (clip-path circle)
|
|
535
530
|
while gently scaling up to rest. `from{}`-only keyframe, so it settles into
|
|
@@ -718,7 +713,7 @@
|
|
|
718
713
|
}
|
|
719
714
|
::-webkit-scrollbar-thumb {
|
|
720
715
|
background: var(--border-strong);
|
|
721
|
-
border-radius:
|
|
716
|
+
border-radius: var(--radius-lg);
|
|
722
717
|
border: 2px solid var(--background);
|
|
723
718
|
}
|
|
724
719
|
::-webkit-scrollbar-thumb:hover {
|
|
@@ -1009,7 +1004,7 @@
|
|
|
1009
1004
|
width: 1rem;
|
|
1010
1005
|
border-bottom: 1px solid var(--border-strong);
|
|
1011
1006
|
border-left: 1px solid var(--border-strong);
|
|
1012
|
-
border-bottom-left-radius:
|
|
1007
|
+
border-bottom-left-radius: var(--radius-lg);
|
|
1013
1008
|
}
|
|
1014
1009
|
/* Let the consumer's Tailwind discover the classes ADS components use. */
|
|
1015
1010
|
@source "./**/*.{js,mjs}";
|
package/theme.css
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
/*
|
|
3
3
|
* ============================================================
|
|
4
4
|
* ADS 1.0 — Design Tokens
|
|
5
|
-
*
|
|
5
|
+
* Palette: Ink neutrals · Typeface: Aribau Grotesk
|
|
6
6
|
* ============================================================
|
|
7
7
|
*/
|
|
8
8
|
@theme {
|
|
@@ -60,29 +60,8 @@
|
|
|
60
60
|
--color-ink-900: #636461; /* 11 · accessible text */
|
|
61
61
|
--color-ink-950: #1f1f1c; /* 12 · accessible text */
|
|
62
62
|
|
|
63
|
-
/* ---- Brand ramp — the full 12-step Sage green (light section, solid row),
|
|
64
|
-
same Radix roles as the neutral ramp. All 12 present: sage-850 (#417c36,
|
|
65
|
-
step 11 = the accessible green text tone) and sage-950 (#273d23, step 12)
|
|
66
|
-
are restored. The interactive brand (--brand #3f7a34) is step 9 (solid);
|
|
67
|
-
its hover is step 10 (#316c26). NOTE: steps 9–12 are not a pure lightness
|
|
68
|
-
ramp (Radix convention) — the Tailwind name order differs from role
|
|
69
|
-
order, so read the role comment, not the number. ---- */
|
|
70
|
-
--color-sage-50: #fbfefb; /* 1 · background */
|
|
71
|
-
--color-sage-100: #f6fbf5; /* 2 · background */
|
|
72
|
-
--color-sage-200: #e9f7e6; /* 3 · interactive */
|
|
73
|
-
--color-sage-300: #dbf1d6; /* 4 · interactive */
|
|
74
|
-
--color-sage-400: #cae8c5; /* 5 · interactive */
|
|
75
|
-
--color-sage-500: #b6dcaf; /* 6 · border */
|
|
76
|
-
--color-sage-600: #9ccc93; /* 7 · border */
|
|
77
|
-
--color-sage-700: #77b76b; /* 8 · border */
|
|
78
|
-
--color-sage-800: #3f7a34; /* 9 · solid (brand) */
|
|
79
|
-
--color-sage-900: #316c26; /* 10 · solid (hover) */
|
|
80
|
-
--color-sage-850: #417c36; /* 11 · accessible text */
|
|
81
|
-
--color-sage-950: #273d23; /* 12 · accessible text */
|
|
82
|
-
|
|
83
63
|
/* ---- Semantic accent ramps ---- */
|
|
84
|
-
/* Success
|
|
85
|
-
distinct from the warm Sage brand green. */
|
|
64
|
+
/* Success stays a semantic state color, never a product-primary hue. */
|
|
86
65
|
--color-success-50: #ecfdf5;
|
|
87
66
|
--color-success-100: #d1fae5;
|
|
88
67
|
--color-success-500: #10b981;
|
|
@@ -109,7 +88,7 @@
|
|
|
109
88
|
|
|
110
89
|
/* ---- Data-viz accents ---- three small ramps for charts & illustration.
|
|
111
90
|
deep = text/lines · base = fills · soft = backgrounds. Separate from the
|
|
112
|
-
semantic status ramps above; these
|
|
91
|
+
semantic status ramps above; these carry data, not product identity. */
|
|
113
92
|
--color-cyan-soft: #c7efe9; /* Cyan — vivid cool contrast; 2nd series, links */
|
|
114
93
|
--color-cyan-base: #12b5a5;
|
|
115
94
|
--color-cyan-deep: #0a7e82;
|
|
@@ -120,15 +99,15 @@
|
|
|
120
99
|
--color-amber-base: #f3a72e;
|
|
121
100
|
--color-amber-deep: #b57414;
|
|
122
101
|
|
|
123
|
-
/* ---- Radii ----
|
|
124
|
-
|
|
125
|
-
--radius-xs: 0.
|
|
126
|
-
--radius-sm: 0.
|
|
127
|
-
--radius-md: 0.
|
|
128
|
-
--radius-lg:
|
|
129
|
-
--radius-xl:
|
|
130
|
-
--radius-2xl:
|
|
131
|
-
--radius-full:
|
|
102
|
+
/* ---- Radii ---- TWO values only: 2px and 4px. Compact roles resolve to
|
|
103
|
+
2px; every surface and formerly pill-shaped role resolves to 4px. */
|
|
104
|
+
--radius-xs: 0.125rem; /* 2px */
|
|
105
|
+
--radius-sm: 0.125rem; /* 2px */
|
|
106
|
+
--radius-md: 0.25rem; /* 4px */
|
|
107
|
+
--radius-lg: 0.25rem; /* 4px */
|
|
108
|
+
--radius-xl: 0.25rem; /* 4px */
|
|
109
|
+
--radius-2xl: 0.25rem; /* 4px */
|
|
110
|
+
--radius-full: 0.25rem; /* 4px */
|
|
132
111
|
/* Status/indicator dots are SQUARE with a hair of softening — echoing the
|
|
133
112
|
growth-mark's square cells. Never render an indicator dot as a circle
|
|
134
113
|
(`rounded-full`); radio controls are the one exception (control
|
|
@@ -273,7 +252,7 @@
|
|
|
273
252
|
--color-card: var(--card);
|
|
274
253
|
--color-card-foreground: var(--card-foreground);
|
|
275
254
|
|
|
276
|
-
/*
|
|
255
|
+
/* Compatibility action role — neutral ink, never a colored primary hue. */
|
|
277
256
|
--color-brand: var(--brand);
|
|
278
257
|
--color-brand-foreground: var(--brand-foreground);
|
|
279
258
|
--color-brand-hover: var(--brand-hover);
|
|
@@ -332,10 +311,9 @@
|
|
|
332
311
|
|
|
333
312
|
/* ---- Theme (light only) ---- */
|
|
334
313
|
:root {
|
|
335
|
-
/* Every semantic token below points INTO
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
base surface, not a neutral scale step. */
|
|
314
|
+
/* Every neutral semantic token below points INTO the ink primitive scale.
|
|
315
|
+
Only pure white (#ffffff) stays literal: it is a base surface, not a
|
|
316
|
+
neutral scale step. */
|
|
339
317
|
--background: var(--color-ink-100); /* step 2 · canvas */
|
|
340
318
|
--foreground: var(--color-ink-950); /* step 12 */
|
|
341
319
|
|
|
@@ -355,11 +333,12 @@
|
|
|
355
333
|
--card: #ffffff; /* pure white base */
|
|
356
334
|
--card-foreground: var(--color-ink-950);
|
|
357
335
|
|
|
358
|
-
/*
|
|
359
|
-
|
|
336
|
+
/* Neutral action role. The `brand` name remains as a compatibility API,
|
|
337
|
+
but the product has no colored primary palette. */
|
|
338
|
+
--brand: var(--color-ink-950); /* darkest action ink */
|
|
360
339
|
--brand-foreground: #ffffff;
|
|
361
|
-
--brand-hover: var(--color-
|
|
362
|
-
--brand-text: var(--color-
|
|
340
|
+
--brand-hover: var(--color-ink-900); /* lighter hover lift */
|
|
341
|
+
--brand-text: var(--color-ink-950); /* action text / links */
|
|
363
342
|
|
|
364
343
|
/* Table interaction fills are pre-composited and opaque. Sticky edge cells
|
|
365
344
|
therefore cover horizontally scrolled content while preserving the
|
|
@@ -384,7 +363,7 @@
|
|
|
384
363
|
--input: var(--border-primary); /* form-control edge */
|
|
385
364
|
|
|
386
365
|
/* Ripple — the appearance wash that radiates from a floating surface's
|
|
387
|
-
origin corner as it opens (Dropdown/Popover/Select/Modal…). A soft
|
|
366
|
+
origin corner as it opens (Dropdown/Popover/Select/Modal…). A soft ink
|
|
388
367
|
tint that expands + fades once on mount; see the `.ads-ripple` layer and
|
|
389
368
|
the `Ripple` component. Duration stays in the sub-300ms UI band. */
|
|
390
369
|
--ripple-tint: color-mix(in srgb, var(--brand) 20%, transparent);
|
|
@@ -395,7 +374,7 @@
|
|
|
395
374
|
bottom of this file, so every `border`/`border-t|r|b|l|x|y` reads as a
|
|
396
375
|
true hairline. Explicit `border-2`+ widths are unaffected. */
|
|
397
376
|
--stroke-width: 0.5px;
|
|
398
|
-
--ring: color-mix(in srgb, var(--color-
|
|
377
|
+
--ring: color-mix(in srgb, var(--color-ink-950) 50%, transparent); /* ink @ 50% */
|
|
399
378
|
--overlay: color-mix(in srgb, var(--color-ink-950) 50%, transparent); /* ink-950 @ 50% */
|
|
400
379
|
|
|
401
380
|
/* Functional / domain tokens — named for their RENDER role, pointing into
|
|
@@ -416,7 +395,7 @@
|
|
|
416
395
|
/* shadcn-compat raw surfaces — so a downstream shadcn Sidebar / Popover
|
|
417
396
|
(or an inline `var(--sidebar)` / `var(--popover)`) resolves to the ADS
|
|
418
397
|
palette instead of shadcn's grey/black defaults. The sidebar reads as the
|
|
419
|
-
neutral canvas; its active item takes
|
|
398
|
+
neutral canvas; its active item takes action ink. A consumer that had
|
|
420
399
|
hard-coded these can now delete its overrides and inherit from here. */
|
|
421
400
|
--sidebar: var(--surface);
|
|
422
401
|
--sidebar-foreground: var(--foreground);
|