@urbicon-ui/blocks 6.43.0 → 6.44.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.
- package/README.md +1 -1
- package/dist/components/Calendar/calendar.variants.d.ts +63 -63
- package/dist/components/Chat/ChatMessage/ChatMessage.svelte +93 -67
- package/dist/components/Chat/ChatMessage/chat-message.variants.d.ts +7 -0
- package/dist/components/Chat/ChatMessage/chat-message.variants.js +45 -12
- package/dist/components/Chat/ChatMessage/index.d.ts +20 -5
- package/dist/components/Chat/CodeBlock/CodeBlock.svelte +59 -33
- package/dist/components/Chat/CodeBlock/code-block.variants.d.ts +7 -0
- package/dist/components/Chat/CodeBlock/code-block.variants.js +28 -13
- package/dist/components/Chat/CodeBlock/index.d.ts +39 -4
- package/dist/components/Chat/PromptInput/PromptInput.svelte +9 -16
- package/dist/components/Chat/PromptInput/prompt-input.variants.js +16 -15
- package/dist/components/Chat/ToolCallCard/ToolCallCard.svelte +9 -4
- package/dist/components/Chat/ToolCallCard/index.d.ts +4 -3
- package/dist/components/Chat/ToolCallCard/tool-call-card.variants.d.ts +0 -3
- package/dist/components/Chat/ToolCallCard/tool-call-card.variants.js +4 -4
- package/dist/components/CopyButton/CopyButton.svelte +9 -19
- package/dist/components/CopyButton/copy-button.variants.d.ts +4 -4
- package/dist/components/FileUpload/fileUpload.variants.js +6 -1
- package/dist/components/PinInput/PinInput.svelte +12 -20
- package/dist/components/TimeInput/TimeInput.svelte +12 -20
- package/dist/i18n/index.d.ts +398 -2
- package/dist/internal/copy-state.svelte.d.ts +60 -0
- package/dist/internal/copy-state.svelte.js +76 -0
- package/dist/internal/core/CoreFieldMessage.svelte +81 -0
- package/dist/internal/core/CoreFieldMessage.svelte.d.ts +23 -0
- package/dist/internal/field-chrome.js +2 -2
- package/dist/primitives/Alert/alert.variants.d.ts +8 -8
- package/dist/primitives/Checkbox/Checkbox.svelte +10 -20
- package/dist/primitives/Checkbox/checkbox.variants.js +1 -1
- package/dist/primitives/Combobox/Combobox.svelte +16 -18
- package/dist/primitives/Combobox/combobox.variants.js +12 -5
- package/dist/primitives/Input/Input.svelte +10 -20
- package/dist/primitives/JourneyTimeline/journey-timeline.variants.d.ts +22 -22
- package/dist/primitives/RadioGroup/RadioGroup.svelte +10 -20
- package/dist/primitives/RadioGroup/radioGroup.variants.js +7 -2
- package/dist/primitives/Select/Select.svelte +10 -20
- package/dist/primitives/Select/select.variants.js +2 -2
- package/dist/primitives/Slider/Slider.svelte +10 -20
- package/dist/primitives/Spinner/spinner.variants.d.ts +16 -16
- package/dist/primitives/Stepper/stepper.variants.d.ts +11 -11
- package/dist/primitives/Stepper/stepper.variants.js +2 -1
- package/dist/primitives/Tab/tab.variants.js +5 -2
- package/dist/primitives/Textarea/Textarea.svelte +10 -15
- package/dist/primitives/Textarea/textarea.variants.js +2 -2
- package/dist/primitives/Toast/toast.variants.d.ts +12 -12
- package/dist/primitives/Toggle/Toggle.svelte +10 -20
- package/dist/primitives/Toggle/toggle.variants.js +9 -7
- package/dist/style/foundation.css +19 -9
- package/dist/style/semantic.css +59 -2
- package/dist/style/themes/forest.css +2 -2
- package/dist/style/themes/neutral.css +2 -2
- package/dist/style/themes/ocean.css +2 -2
- package/dist/style/themes/rose.css +2 -2
- package/dist/style/themes/sunset.css +2 -2
- package/dist/utils/figma-token-export.js +7 -3
- package/package.json +3 -3
package/dist/style/semantic.css
CHANGED
|
@@ -18,7 +18,25 @@
|
|
|
18
18
|
above the one below — themes can differentiate them by color (e.g.
|
|
19
19
|
cream → lighter cream → near-white → white) or rely on shadows
|
|
20
20
|
alone when the palette ceiling is reached (as in the neutral default
|
|
21
|
-
where base and overlay are both white).
|
|
21
|
+
where base and overlay are both white).
|
|
22
|
+
|
|
23
|
+
LIGHT-MODE SPREAD (2026-07). In light mode `base` sits at the white
|
|
24
|
+
ceiling, so every other rung has to differentiate DOWNWARD — and the
|
|
25
|
+
ramp gave it almost nothing to work with: quiet/elevated were ΔL 0.01
|
|
26
|
+
and 0.02 from base, against 0.03 and 0.08 in dark mode. A tinted
|
|
27
|
+
in-flow surface with no border and no shadow was therefore effectively
|
|
28
|
+
invisible in light mode, which is why components kept reaching for a
|
|
29
|
+
border just to make a surface visible at all (the chat bubble, the
|
|
30
|
+
table-cell progress track). Fixed at the ramp rather than per token —
|
|
31
|
+
`neutral-25` 0.99 → 0.985 and `neutral-50` 0.98 → 0.965 — so quiet,
|
|
32
|
+
elevated and subtle all gain spread without any semantic moving and
|
|
33
|
+
without a new token landing on an occupied value. All five themes share
|
|
34
|
+
those L values (only the hue differs), so the change reaches every
|
|
35
|
+
theme at once. Measured: text-tertiary on the new elevated is 11.32:1,
|
|
36
|
+
far above AA; style/contrast.test.ts is the gate. Guarded below by
|
|
37
|
+
style/semantic.test.ts, which asserts the reading surfaces stay
|
|
38
|
+
mutually distinct in BOTH modes — the failure mode here is silent, a
|
|
39
|
+
collapsed rung looks exactly like a working one in a screenshot. */
|
|
22
40
|
/* L·1 — base: the page itself. Content, cards, and reading surfaces
|
|
23
41
|
sit at this level. */
|
|
24
42
|
--color-surface-base: light-dark(var(--color-neutral-0), var(--color-neutral-900));
|
|
@@ -31,11 +49,36 @@
|
|
|
31
49
|
/* L·3 — overlay: highest surfaces (Dialog, Drawer, Sheet, Toast).
|
|
32
50
|
Full shadow + backdrop dimming. */
|
|
33
51
|
--color-surface-overlay: light-dark(var(--color-neutral-0), var(--color-neutral-850));
|
|
52
|
+
/* `surface-hover` / `-active` are the hover/press steps for elements resting
|
|
53
|
+
on a READING surface (base/quiet/elevated) — a menu item, a table row.
|
|
54
|
+
`surface-interactive` is a resting FILL one step in from the page (a filled
|
|
55
|
+
Input, a Slider track, the Tab list). Those two ladders start at different
|
|
56
|
+
rungs, so they need their own hover step: `surface-interactive` already sits
|
|
57
|
+
at neutral-100, which is exactly where `surface-hover` lands in light mode —
|
|
58
|
+
`bg-surface-interactive hover:bg-surface-hover` was a silent no-op, and in
|
|
59
|
+
dark mode `surface-active` collapses onto `surface-interactive` the same
|
|
60
|
+
way. `-interactive-hover` continues the fill's own ladder: one step further
|
|
61
|
+
from the page in light, one step toward the light in dark. Guarded by
|
|
62
|
+
style/semantic.test.ts so the pair can never collapse again. */
|
|
34
63
|
--color-surface-interactive: light-dark(var(--color-neutral-100), var(--color-neutral-700));
|
|
64
|
+
--color-surface-interactive-hover: light-dark(
|
|
65
|
+
var(--color-neutral-200),
|
|
66
|
+
var(--color-neutral-650)
|
|
67
|
+
);
|
|
35
68
|
--color-surface-hover: light-dark(var(--color-neutral-100), var(--color-neutral-750));
|
|
36
69
|
--color-surface-active: light-dark(var(--color-neutral-200), var(--color-neutral-700));
|
|
37
70
|
--color-surface-disabled: light-dark(var(--color-neutral-100), var(--color-neutral-800));
|
|
38
71
|
--color-surface-selected: light-dark(var(--color-primary-50), var(--color-primary-900));
|
|
72
|
+
/* A RESTING tint only — never a hover step. It resolves to exactly
|
|
73
|
+
`surface-elevated`, so `hover:bg-surface-subtle` is invisible on every
|
|
74
|
+
elevated surface (Popover, Menu, Select dropdown, elevated Card). That
|
|
75
|
+
shipped across 8 components until 2026-07-26; the hover idiom moved to
|
|
76
|
+
`surface-hover`, and variants-lint now errors on any hover fill naming a
|
|
77
|
+
reading surface. Its in-page-zone role was superseded by `surface-quiet`
|
|
78
|
+
in v5 (MIGRATION-v5 "New tokens"), which is why it has no rung of its own
|
|
79
|
+
left — prefer `surface-quiet` for a tinted zone and `surface-elevated`
|
|
80
|
+
for a raised one. Kept for the resting uses that read correctly against
|
|
81
|
+
a border (readonly/disabled fields, list rows, code chips). */
|
|
39
82
|
--color-surface-subtle: light-dark(var(--color-neutral-50), var(--color-neutral-800));
|
|
40
83
|
--color-surface-inverted: light-dark(var(--color-neutral-900), var(--color-neutral-100));
|
|
41
84
|
/* Skeleton wave-shimmer highlight (Skeleton animation="wave"). A translucent
|
|
@@ -61,7 +104,21 @@
|
|
|
61
104
|
--color-text-secondary: light-dark(var(--color-neutral-700), var(--color-neutral-300));
|
|
62
105
|
--color-text-tertiary: light-dark(var(--color-neutral-600), var(--color-neutral-300));
|
|
63
106
|
--color-text-quaternary: light-dark(var(--color-neutral-500), var(--color-neutral-400));
|
|
64
|
-
|
|
107
|
+
/* Disabled text — the same stop in both modes. WCAG 1.4.3 exempts inactive
|
|
108
|
+
controls, so the old value was not a violation, but at neutral-300 / -600 it
|
|
109
|
+
measured roughly 1.5:1 in light and 2:1 in dark: a disabled field's label is
|
|
110
|
+
the one part that still has to say what the field IS, and it was effectively
|
|
111
|
+
invisible. Now held to the 3:1 UI floor by style/contrast.test.ts across
|
|
112
|
+
every theme × mode × reading surface plus the disabled fill — that test is
|
|
113
|
+
the number, not this comment.
|
|
114
|
+
|
|
115
|
+
Deliberately still the weakest rung of the text ramp, so "disabled" stays
|
|
116
|
+
legible without stopping being a signal. Two consequences, both accepted:
|
|
117
|
+
it shares its light-mode value with text-quaternary (two roles, not two
|
|
118
|
+
steps of one ladder — but see the Calendar entry in technical-debt, where
|
|
119
|
+
they meet), and the floor covers the token alone, not what a component
|
|
120
|
+
composes on top of it (an `opacity-*` wrapper can undo it). */
|
|
121
|
+
--color-text-disabled: light-dark(var(--color-neutral-500), var(--color-neutral-500));
|
|
65
122
|
/* The on-colors below pair text with a *fill* rather than a surface.
|
|
66
123
|
text-on-dark and text-on-primary answer fills that are dark in light
|
|
67
124
|
mode and light in dark mode, so the label has to travel the opposite
|
|
@@ -41,8 +41,8 @@
|
|
|
41
41
|
* contrast stays unchanged. surface-*, text-* and border-* pick this up
|
|
42
42
|
* automatically through semantic.css.
|
|
43
43
|
*/
|
|
44
|
-
--color-neutral-25: oklch(0.
|
|
45
|
-
--color-neutral-50: oklch(0.
|
|
44
|
+
--color-neutral-25: oklch(0.985 0.003 150);
|
|
45
|
+
--color-neutral-50: oklch(0.965 0.006 150);
|
|
46
46
|
--color-neutral-100: oklch(0.95 0.008 150);
|
|
47
47
|
--color-neutral-200: oklch(0.89 0.012 150);
|
|
48
48
|
--color-neutral-300: oklch(0.83 0.014 150);
|
|
@@ -54,8 +54,8 @@
|
|
|
54
54
|
* contrast stays unchanged. surface-*, text-* and border-* pick this up
|
|
55
55
|
* automatically through semantic.css.
|
|
56
56
|
*/
|
|
57
|
-
--color-neutral-25: oklch(0.
|
|
58
|
-
--color-neutral-50: oklch(0.
|
|
57
|
+
--color-neutral-25: oklch(0.985 0 0);
|
|
58
|
+
--color-neutral-50: oklch(0.965 0 0);
|
|
59
59
|
--color-neutral-100: oklch(0.95 0 0);
|
|
60
60
|
--color-neutral-200: oklch(0.89 0 0);
|
|
61
61
|
--color-neutral-300: oklch(0.83 0 0);
|
|
@@ -45,8 +45,8 @@
|
|
|
45
45
|
* hue shifts — so WCAG contrast stays unchanged. surface-*, text-* and
|
|
46
46
|
* border-* pick this up automatically through semantic.css.
|
|
47
47
|
*/
|
|
48
|
-
--color-neutral-25: oklch(0.
|
|
49
|
-
--color-neutral-50: oklch(0.
|
|
48
|
+
--color-neutral-25: oklch(0.985 0.003 220);
|
|
49
|
+
--color-neutral-50: oklch(0.965 0.006 220);
|
|
50
50
|
--color-neutral-100: oklch(0.95 0.008 220);
|
|
51
51
|
--color-neutral-200: oklch(0.89 0.012 220);
|
|
52
52
|
--color-neutral-300: oklch(0.83 0.014 220);
|
|
@@ -41,8 +41,8 @@
|
|
|
41
41
|
* stays unchanged. surface-*, text-* and border-* pick this up
|
|
42
42
|
* automatically through semantic.css.
|
|
43
43
|
*/
|
|
44
|
-
--color-neutral-25: oklch(0.
|
|
45
|
-
--color-neutral-50: oklch(0.
|
|
44
|
+
--color-neutral-25: oklch(0.985 0.003 350);
|
|
45
|
+
--color-neutral-50: oklch(0.965 0.006 350);
|
|
46
46
|
--color-neutral-100: oklch(0.95 0.008 350);
|
|
47
47
|
--color-neutral-200: oklch(0.89 0.012 350);
|
|
48
48
|
--color-neutral-300: oklch(0.83 0.014 350);
|
|
@@ -41,8 +41,8 @@
|
|
|
41
41
|
* contrast stays unchanged. surface-*, text-* and border-* pick this up
|
|
42
42
|
* automatically through semantic.css; no per-token overrides needed.
|
|
43
43
|
*/
|
|
44
|
-
--color-neutral-25: oklch(0.
|
|
45
|
-
--color-neutral-50: oklch(0.
|
|
44
|
+
--color-neutral-25: oklch(0.985 0.003 50);
|
|
45
|
+
--color-neutral-50: oklch(0.965 0.006 50);
|
|
46
46
|
--color-neutral-100: oklch(0.95 0.008 50);
|
|
47
47
|
--color-neutral-200: oklch(0.89 0.012 50);
|
|
48
48
|
--color-neutral-300: oklch(0.83 0.014 50);
|
|
@@ -21,8 +21,8 @@
|
|
|
21
21
|
const foundationColors = {
|
|
22
22
|
neutral: {
|
|
23
23
|
'0': 'oklch(1 0 0)',
|
|
24
|
-
'25': 'oklch(0.
|
|
25
|
-
'50': 'oklch(0.
|
|
24
|
+
'25': 'oklch(0.985 0.003 240)',
|
|
25
|
+
'50': 'oklch(0.965 0.006 240)',
|
|
26
26
|
'100': 'oklch(0.95 0.008 240)',
|
|
27
27
|
'200': 'oklch(0.89 0.012 240)',
|
|
28
28
|
'300': 'oklch(0.83 0.014 240)',
|
|
@@ -139,6 +139,10 @@ const semanticTokens = {
|
|
|
139
139
|
elevated: { value: '{color.neutral.50}', description: 'L2 — lifted surfaces (popover, menu)' },
|
|
140
140
|
overlay: { value: '{color.neutral.0}', description: 'L3 — dialog/drawer/toast background' },
|
|
141
141
|
interactive: { value: '{color.neutral.100}', description: 'Interactive control background' },
|
|
142
|
+
'interactive-hover': {
|
|
143
|
+
value: '{color.neutral.200}',
|
|
144
|
+
description: 'Hover step for an interactive control fill'
|
|
145
|
+
},
|
|
142
146
|
hover: { value: '{color.neutral.100}', description: 'Hover state background' },
|
|
143
147
|
active: { value: '{color.neutral.200}', description: 'Active/pressed state background' },
|
|
144
148
|
disabled: { value: '{color.neutral.100}', description: 'Disabled surface' },
|
|
@@ -152,7 +156,7 @@ const semanticTokens = {
|
|
|
152
156
|
secondary: { value: '{color.neutral.700}', description: 'Secondary text' },
|
|
153
157
|
tertiary: { value: '{color.neutral.600}', description: 'Tertiary text (WCAG AA on base)' },
|
|
154
158
|
quaternary: { value: '{color.neutral.500}', description: 'Quaternary text (lowest emphasis)' },
|
|
155
|
-
disabled: { value: '{color.neutral.
|
|
159
|
+
disabled: { value: '{color.neutral.500}', description: 'Disabled text' },
|
|
156
160
|
'on-dark': { value: '{color.neutral.0}', description: 'Text on dark surfaces' },
|
|
157
161
|
'on-primary': { value: '{color.neutral.0}', description: 'Text on primary color bg' },
|
|
158
162
|
'on-warning': {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@urbicon-ui/blocks",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.44.0",
|
|
4
4
|
"description": "Svelte 5 UI component library with Tailwind CSS 4, OKLCH design tokens and zero runtime dependencies",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -93,8 +93,8 @@
|
|
|
93
93
|
"@sveltejs/package": "^2.5.8",
|
|
94
94
|
"@sveltejs/vite-plugin-svelte": "^7.0.0",
|
|
95
95
|
"@tailwindcss/vite": "^4.3.1",
|
|
96
|
-
"@urbicon-ui/i18n": "6.
|
|
97
|
-
"@urbicon-ui/shared-types": "6.
|
|
96
|
+
"@urbicon-ui/i18n": "6.44.0",
|
|
97
|
+
"@urbicon-ui/shared-types": "6.44.0",
|
|
98
98
|
"prettier": "^3.8.4",
|
|
99
99
|
"prettier-plugin-svelte": "^4.1.1",
|
|
100
100
|
"prettier-plugin-tailwindcss": "^0.8.0",
|