@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.
Files changed (57) hide show
  1. package/README.md +1 -1
  2. package/dist/components/Calendar/calendar.variants.d.ts +63 -63
  3. package/dist/components/Chat/ChatMessage/ChatMessage.svelte +93 -67
  4. package/dist/components/Chat/ChatMessage/chat-message.variants.d.ts +7 -0
  5. package/dist/components/Chat/ChatMessage/chat-message.variants.js +45 -12
  6. package/dist/components/Chat/ChatMessage/index.d.ts +20 -5
  7. package/dist/components/Chat/CodeBlock/CodeBlock.svelte +59 -33
  8. package/dist/components/Chat/CodeBlock/code-block.variants.d.ts +7 -0
  9. package/dist/components/Chat/CodeBlock/code-block.variants.js +28 -13
  10. package/dist/components/Chat/CodeBlock/index.d.ts +39 -4
  11. package/dist/components/Chat/PromptInput/PromptInput.svelte +9 -16
  12. package/dist/components/Chat/PromptInput/prompt-input.variants.js +16 -15
  13. package/dist/components/Chat/ToolCallCard/ToolCallCard.svelte +9 -4
  14. package/dist/components/Chat/ToolCallCard/index.d.ts +4 -3
  15. package/dist/components/Chat/ToolCallCard/tool-call-card.variants.d.ts +0 -3
  16. package/dist/components/Chat/ToolCallCard/tool-call-card.variants.js +4 -4
  17. package/dist/components/CopyButton/CopyButton.svelte +9 -19
  18. package/dist/components/CopyButton/copy-button.variants.d.ts +4 -4
  19. package/dist/components/FileUpload/fileUpload.variants.js +6 -1
  20. package/dist/components/PinInput/PinInput.svelte +12 -20
  21. package/dist/components/TimeInput/TimeInput.svelte +12 -20
  22. package/dist/i18n/index.d.ts +398 -2
  23. package/dist/internal/copy-state.svelte.d.ts +60 -0
  24. package/dist/internal/copy-state.svelte.js +76 -0
  25. package/dist/internal/core/CoreFieldMessage.svelte +81 -0
  26. package/dist/internal/core/CoreFieldMessage.svelte.d.ts +23 -0
  27. package/dist/internal/field-chrome.js +2 -2
  28. package/dist/primitives/Alert/alert.variants.d.ts +8 -8
  29. package/dist/primitives/Checkbox/Checkbox.svelte +10 -20
  30. package/dist/primitives/Checkbox/checkbox.variants.js +1 -1
  31. package/dist/primitives/Combobox/Combobox.svelte +16 -18
  32. package/dist/primitives/Combobox/combobox.variants.js +12 -5
  33. package/dist/primitives/Input/Input.svelte +10 -20
  34. package/dist/primitives/JourneyTimeline/journey-timeline.variants.d.ts +22 -22
  35. package/dist/primitives/RadioGroup/RadioGroup.svelte +10 -20
  36. package/dist/primitives/RadioGroup/radioGroup.variants.js +7 -2
  37. package/dist/primitives/Select/Select.svelte +10 -20
  38. package/dist/primitives/Select/select.variants.js +2 -2
  39. package/dist/primitives/Slider/Slider.svelte +10 -20
  40. package/dist/primitives/Spinner/spinner.variants.d.ts +16 -16
  41. package/dist/primitives/Stepper/stepper.variants.d.ts +11 -11
  42. package/dist/primitives/Stepper/stepper.variants.js +2 -1
  43. package/dist/primitives/Tab/tab.variants.js +5 -2
  44. package/dist/primitives/Textarea/Textarea.svelte +10 -15
  45. package/dist/primitives/Textarea/textarea.variants.js +2 -2
  46. package/dist/primitives/Toast/toast.variants.d.ts +12 -12
  47. package/dist/primitives/Toggle/Toggle.svelte +10 -20
  48. package/dist/primitives/Toggle/toggle.variants.js +9 -7
  49. package/dist/style/foundation.css +19 -9
  50. package/dist/style/semantic.css +59 -2
  51. package/dist/style/themes/forest.css +2 -2
  52. package/dist/style/themes/neutral.css +2 -2
  53. package/dist/style/themes/ocean.css +2 -2
  54. package/dist/style/themes/rose.css +2 -2
  55. package/dist/style/themes/sunset.css +2 -2
  56. package/dist/utils/figma-token-export.js +7 -3
  57. package/package.json +3 -3
@@ -1,53 +1,53 @@
1
1
  import { type SlotNames, type VariantProps } from '../../utils/variants.js';
2
2
  export declare const alertVariants: ((props?: {
3
- intent?: "primary" | "success" | "warning" | "danger" | "neutral" | "info" | undefined;
3
+ intent?: "info" | "primary" | "success" | "warning" | "danger" | "neutral" | undefined;
4
4
  variant?: "inline" | "filled" | "soft" | undefined;
5
5
  size?: "sm" | "md" | "lg" | undefined;
6
6
  } | undefined) => {
7
7
  base: (props?: ({
8
- intent?: "primary" | "success" | "warning" | "danger" | "neutral" | "info" | undefined;
8
+ intent?: "info" | "primary" | "success" | "warning" | "danger" | "neutral" | undefined;
9
9
  variant?: "inline" | "filled" | "soft" | undefined;
10
10
  size?: "sm" | "md" | "lg" | undefined;
11
11
  } & {
12
12
  class?: string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | /*elided*/ any | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined;
13
13
  }) | undefined) => string;
14
14
  icon: (props?: ({
15
- intent?: "primary" | "success" | "warning" | "danger" | "neutral" | "info" | undefined;
15
+ intent?: "info" | "primary" | "success" | "warning" | "danger" | "neutral" | undefined;
16
16
  variant?: "inline" | "filled" | "soft" | undefined;
17
17
  size?: "sm" | "md" | "lg" | undefined;
18
18
  } & {
19
19
  class?: string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | /*elided*/ any | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined;
20
20
  }) | undefined) => string;
21
21
  content: (props?: ({
22
- intent?: "primary" | "success" | "warning" | "danger" | "neutral" | "info" | undefined;
22
+ intent?: "info" | "primary" | "success" | "warning" | "danger" | "neutral" | undefined;
23
23
  variant?: "inline" | "filled" | "soft" | undefined;
24
24
  size?: "sm" | "md" | "lg" | undefined;
25
25
  } & {
26
26
  class?: string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | /*elided*/ any | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined;
27
27
  }) | undefined) => string;
28
28
  title: (props?: ({
29
- intent?: "primary" | "success" | "warning" | "danger" | "neutral" | "info" | undefined;
29
+ intent?: "info" | "primary" | "success" | "warning" | "danger" | "neutral" | undefined;
30
30
  variant?: "inline" | "filled" | "soft" | undefined;
31
31
  size?: "sm" | "md" | "lg" | undefined;
32
32
  } & {
33
33
  class?: string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | /*elided*/ any | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined;
34
34
  }) | undefined) => string;
35
35
  description: (props?: ({
36
- intent?: "primary" | "success" | "warning" | "danger" | "neutral" | "info" | undefined;
36
+ intent?: "info" | "primary" | "success" | "warning" | "danger" | "neutral" | undefined;
37
37
  variant?: "inline" | "filled" | "soft" | undefined;
38
38
  size?: "sm" | "md" | "lg" | undefined;
39
39
  } & {
40
40
  class?: string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | /*elided*/ any | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined;
41
41
  }) | undefined) => string;
42
42
  actions: (props?: ({
43
- intent?: "primary" | "success" | "warning" | "danger" | "neutral" | "info" | undefined;
43
+ intent?: "info" | "primary" | "success" | "warning" | "danger" | "neutral" | undefined;
44
44
  variant?: "inline" | "filled" | "soft" | undefined;
45
45
  size?: "sm" | "md" | "lg" | undefined;
46
46
  } & {
47
47
  class?: string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | /*elided*/ any | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined;
48
48
  }) | undefined) => string;
49
49
  dismissButton: (props?: ({
50
- intent?: "primary" | "success" | "warning" | "danger" | "neutral" | "info" | undefined;
50
+ intent?: "info" | "primary" | "success" | "warning" | "danger" | "neutral" | undefined;
51
51
  variant?: "inline" | "filled" | "soft" | undefined;
52
52
  size?: "sm" | "md" | "lg" | undefined;
53
53
  } & {
@@ -1,5 +1,6 @@
1
1
  <script lang="ts">
2
2
  import { mintRegistry } from '../..';
3
+ import CoreFieldMessage from '../../internal/core/CoreFieldMessage.svelte';
3
4
  import { getBlocksConfig, resolveSlotClasses } from '../../provider';
4
5
  import { getTierContext, useFormField } from '../../utils';
5
6
  import { checkboxVariants, type CheckboxVariants } from '..';
@@ -186,24 +187,13 @@
186
187
  {/if}
187
188
  </label>
188
189
 
189
- {#if ff.errorId}
190
- <div
191
- id={ff.errorId}
192
- class={unstyled
193
- ? (slotClasses?.message ?? '')
194
- : styles.message({ class: slotClasses?.message })}
195
- role="alert"
196
- >
197
- {error}
198
- </div>
199
- {:else if ff.helperId}
200
- <div
201
- id={ff.helperId}
202
- class={unstyled
203
- ? (slotClasses?.message ?? '')
204
- : styles.message({ class: slotClasses?.message })}
205
- >
206
- {helper}
207
- </div>
208
- {/if}
190
+ <CoreFieldMessage
191
+ {error}
192
+ {helper}
193
+ errorId={ff.errorId}
194
+ helperId={ff.helperId}
195
+ class={unstyled
196
+ ? (slotClasses?.message ?? '')
197
+ : styles.message({ class: slotClasses?.message })}
198
+ />
209
199
  </div>
@@ -115,7 +115,7 @@ export const checkboxVariants = tv({
115
115
  checked: false,
116
116
  indeterminate: false,
117
117
  variant: 'ghost',
118
- class: { box: 'bg-transparent border-transparent group-hover:bg-surface-subtle' }
118
+ class: { box: 'bg-transparent border-transparent group-hover:bg-surface-hover' }
119
119
  },
120
120
  // ── Checked intent colors (identical across all variants) ──
121
121
  // Hover/active darken through the intent interaction-layer tokens —
@@ -1,5 +1,6 @@
1
1
  <script lang="ts" generics="T extends string | number | boolean = string">
2
2
  import { useBlocksI18n, mintRegistry } from '../..';
3
+ import CoreFieldMessage from '../../internal/core/CoreFieldMessage.svelte';
3
4
  import { tick } from 'svelte';
4
5
  import { SvelteMap } from 'svelte/reactivity';
5
6
  import { comboboxVariants, type ComboboxVariants } from './combobox.variants';
@@ -841,24 +842,21 @@
841
842
  </div>
842
843
  </div>
843
844
 
844
- {#if ff.errorId}
845
- <div
846
- id={ff.errorId}
847
- role="alert"
848
- class={unstyled
849
- ? (slotClasses?.message ?? '')
850
- : styles.message({ class: slotClasses?.message })}
851
- >
852
- {error}
853
- </div>
854
- {:else if ff.helperId}
855
- <div
856
- id={ff.helperId}
857
- class={unstyled ? (slotClasses?.helper ?? '') : styles.helper({ class: slotClasses?.helper })}
858
- >
859
- {helper}
860
- </div>
861
- {/if}
845
+ <!-- Combobox is the one field whose helper has a slot of its own: the two
846
+ tones are slot constants here, not a `messageType` axis, so the helper
847
+ arm keeps reading quiet while the field is invalid. -->
848
+ <CoreFieldMessage
849
+ {error}
850
+ {helper}
851
+ errorId={ff.errorId}
852
+ helperId={ff.helperId}
853
+ class={unstyled
854
+ ? (slotClasses?.message ?? '')
855
+ : styles.message({ class: slotClasses?.message })}
856
+ helperClass={unstyled
857
+ ? (slotClasses?.helper ?? '')
858
+ : styles.helper({ class: slotClasses?.helper })}
859
+ />
862
860
  </div>
863
861
 
864
862
  <!--
@@ -12,7 +12,13 @@ export const comboboxVariants = tv({
12
12
  // `variant` axis (default `outlined` keeps the historical look).
13
13
  'w-full border bg-surface-base text-text-primary placeholder:text-text-tertiary',
14
14
  'transition-colors duration-[var(--blocks-duration-fast)]',
15
- 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/50 focus-visible:border-primary',
15
+ // `/20` matches `fieldFocusRing` in internal/field-chrome.ts, which Input,
16
+ // Textarea, Select, PinInput and TimeInput all use. At `/50` this field was
17
+ // the odd one out in both directions: a stronger valid ring than every
18
+ // sibling, and — once it gained the shared error frame (ring-danger/20) —
19
+ // an invalid state weaker than its own valid one. The icon-button slots
20
+ // below keep `/50`: they are small targets, not field frames.
21
+ 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/20 focus-visible:border-primary',
16
22
  'disabled:opacity-50 disabled:cursor-not-allowed'
17
23
  ],
18
24
  // Message tone follows the ROLE of the text, not the field state: the
@@ -92,7 +98,8 @@ export const comboboxVariants = tv({
92
98
  control: [
93
99
  'flex w-full flex-wrap items-center border bg-surface-base cursor-text',
94
100
  'transition-colors duration-[var(--blocks-duration-fast)]',
95
- 'focus-within:outline-none focus-within:ring-2 focus-within:ring-primary/50 focus-within:border-primary'
101
+ // `/20` same reason as the `input` slot above.
102
+ 'focus-within:outline-none focus-within:ring-2 focus-within:ring-primary/20 focus-within:border-primary'
96
103
  ],
97
104
  // Borderless search input inside `control`; the frame owns the border/ring.
98
105
  search: [
@@ -135,11 +142,11 @@ export const comboboxVariants = tv({
135
142
  control: 'border-border-subtle hover:border-border-default'
136
143
  },
137
144
  filled: {
138
- input: 'bg-surface-interactive border-transparent hover:bg-surface-hover focus-visible:bg-surface-base',
139
- control: 'bg-surface-interactive border-transparent focus-within:bg-surface-base'
145
+ input: 'bg-surface-interactive border-transparent hover:bg-surface-interactive-hover focus-visible:bg-surface-base',
146
+ control: 'bg-surface-interactive border-transparent hover:bg-surface-interactive-hover focus-within:bg-surface-base'
140
147
  },
141
148
  ghost: {
142
- input: 'bg-transparent border-transparent hover:bg-surface-subtle focus-visible:bg-surface-base focus-visible:border-border-subtle',
149
+ input: 'bg-transparent border-transparent hover:bg-surface-hover focus-visible:bg-surface-base focus-visible:border-border-subtle',
143
150
  control: 'bg-transparent border-transparent focus-within:bg-surface-base focus-within:border-border-subtle'
144
151
  },
145
152
  underline: {
@@ -1,6 +1,7 @@
1
1
  <script lang="ts">
2
2
  import { useBlocksI18n, mintRegistry, createPersistentState } from '../..';
3
3
  import { getBlocksConfig, resolveSlotClasses } from '../../provider';
4
+ import CoreFieldMessage from '../../internal/core/CoreFieldMessage.svelte';
4
5
  import { useFormField, getTierContext } from '../../utils';
5
6
  import type { InputProps } from '.';
6
7
  import { inputVariants, type InputVariants } from './input.variants';
@@ -289,26 +290,15 @@
289
290
  {/if}
290
291
  </div>
291
292
 
292
- {#if ff.errorId}
293
- <div
294
- id={ff.errorId}
295
- class={unstyled
296
- ? (slotClasses?.message ?? '')
297
- : styles.message({ class: slotClasses?.message })}
298
- role="alert"
299
- >
300
- {error}
301
- </div>
302
- {:else if ff.helperId}
303
- <div
304
- id={ff.helperId}
305
- class={unstyled
306
- ? (slotClasses?.message ?? '')
307
- : styles.message({ class: slotClasses?.message })}
308
- >
309
- {helper}
310
- </div>
311
- {/if}
293
+ <CoreFieldMessage
294
+ {error}
295
+ {helper}
296
+ errorId={ff.errorId}
297
+ helperId={ff.helperId}
298
+ class={unstyled
299
+ ? (slotClasses?.message ?? '')
300
+ : styles.message({ class: slotClasses?.message })}
301
+ />
312
302
 
313
303
  {#if children}
314
304
  <div class="mt-1.5">
@@ -2,7 +2,7 @@ import { type SlotNames, type VariantProps } from '../../utils/variants.js';
2
2
  export declare const journeyTimelineVariants: ((props?: {
3
3
  orientation?: "horizontal" | "vertical" | undefined;
4
4
  size?: "sm" | "md" | "lg" | undefined;
5
- status?: "blocked" | "attention" | "active" | "complete" | "pending" | "skipped" | undefined;
5
+ status?: "complete" | "active" | "pending" | "attention" | "blocked" | "skipped" | undefined;
6
6
  focused?: boolean | undefined;
7
7
  interactive?: boolean | undefined;
8
8
  travelled?: boolean | undefined;
@@ -13,7 +13,7 @@ export declare const journeyTimelineVariants: ((props?: {
13
13
  base: (props?: ({
14
14
  orientation?: "horizontal" | "vertical" | undefined;
15
15
  size?: "sm" | "md" | "lg" | undefined;
16
- status?: "blocked" | "attention" | "active" | "complete" | "pending" | "skipped" | undefined;
16
+ status?: "complete" | "active" | "pending" | "attention" | "blocked" | "skipped" | undefined;
17
17
  focused?: boolean | undefined;
18
18
  interactive?: boolean | undefined;
19
19
  travelled?: boolean | undefined;
@@ -26,7 +26,7 @@ export declare const journeyTimelineVariants: ((props?: {
26
26
  rail: (props?: ({
27
27
  orientation?: "horizontal" | "vertical" | undefined;
28
28
  size?: "sm" | "md" | "lg" | undefined;
29
- status?: "blocked" | "attention" | "active" | "complete" | "pending" | "skipped" | undefined;
29
+ status?: "complete" | "active" | "pending" | "attention" | "blocked" | "skipped" | undefined;
30
30
  focused?: boolean | undefined;
31
31
  interactive?: boolean | undefined;
32
32
  travelled?: boolean | undefined;
@@ -39,7 +39,7 @@ export declare const journeyTimelineVariants: ((props?: {
39
39
  node: (props?: ({
40
40
  orientation?: "horizontal" | "vertical" | undefined;
41
41
  size?: "sm" | "md" | "lg" | undefined;
42
- status?: "blocked" | "attention" | "active" | "complete" | "pending" | "skipped" | undefined;
42
+ status?: "complete" | "active" | "pending" | "attention" | "blocked" | "skipped" | undefined;
43
43
  focused?: boolean | undefined;
44
44
  interactive?: boolean | undefined;
45
45
  travelled?: boolean | undefined;
@@ -52,7 +52,7 @@ export declare const journeyTimelineVariants: ((props?: {
52
52
  metaColumn: (props?: ({
53
53
  orientation?: "horizontal" | "vertical" | undefined;
54
54
  size?: "sm" | "md" | "lg" | undefined;
55
- status?: "blocked" | "attention" | "active" | "complete" | "pending" | "skipped" | undefined;
55
+ status?: "complete" | "active" | "pending" | "attention" | "blocked" | "skipped" | undefined;
56
56
  focused?: boolean | undefined;
57
57
  interactive?: boolean | undefined;
58
58
  travelled?: boolean | undefined;
@@ -65,7 +65,7 @@ export declare const journeyTimelineVariants: ((props?: {
65
65
  meta: (props?: ({
66
66
  orientation?: "horizontal" | "vertical" | undefined;
67
67
  size?: "sm" | "md" | "lg" | undefined;
68
- status?: "blocked" | "attention" | "active" | "complete" | "pending" | "skipped" | undefined;
68
+ status?: "complete" | "active" | "pending" | "attention" | "blocked" | "skipped" | undefined;
69
69
  focused?: boolean | undefined;
70
70
  interactive?: boolean | undefined;
71
71
  travelled?: boolean | undefined;
@@ -78,7 +78,7 @@ export declare const journeyTimelineVariants: ((props?: {
78
78
  markerColumn: (props?: ({
79
79
  orientation?: "horizontal" | "vertical" | undefined;
80
80
  size?: "sm" | "md" | "lg" | undefined;
81
- status?: "blocked" | "attention" | "active" | "complete" | "pending" | "skipped" | undefined;
81
+ status?: "complete" | "active" | "pending" | "attention" | "blocked" | "skipped" | undefined;
82
82
  focused?: boolean | undefined;
83
83
  interactive?: boolean | undefined;
84
84
  travelled?: boolean | undefined;
@@ -91,7 +91,7 @@ export declare const journeyTimelineVariants: ((props?: {
91
91
  marker: (props?: ({
92
92
  orientation?: "horizontal" | "vertical" | undefined;
93
93
  size?: "sm" | "md" | "lg" | undefined;
94
- status?: "blocked" | "attention" | "active" | "complete" | "pending" | "skipped" | undefined;
94
+ status?: "complete" | "active" | "pending" | "attention" | "blocked" | "skipped" | undefined;
95
95
  focused?: boolean | undefined;
96
96
  interactive?: boolean | undefined;
97
97
  travelled?: boolean | undefined;
@@ -104,7 +104,7 @@ export declare const journeyTimelineVariants: ((props?: {
104
104
  connector: (props?: ({
105
105
  orientation?: "horizontal" | "vertical" | undefined;
106
106
  size?: "sm" | "md" | "lg" | undefined;
107
- status?: "blocked" | "attention" | "active" | "complete" | "pending" | "skipped" | undefined;
107
+ status?: "complete" | "active" | "pending" | "attention" | "blocked" | "skipped" | undefined;
108
108
  focused?: boolean | undefined;
109
109
  interactive?: boolean | undefined;
110
110
  travelled?: boolean | undefined;
@@ -117,7 +117,7 @@ export declare const journeyTimelineVariants: ((props?: {
117
117
  content: (props?: ({
118
118
  orientation?: "horizontal" | "vertical" | undefined;
119
119
  size?: "sm" | "md" | "lg" | undefined;
120
- status?: "blocked" | "attention" | "active" | "complete" | "pending" | "skipped" | undefined;
120
+ status?: "complete" | "active" | "pending" | "attention" | "blocked" | "skipped" | undefined;
121
121
  focused?: boolean | undefined;
122
122
  interactive?: boolean | undefined;
123
123
  travelled?: boolean | undefined;
@@ -130,7 +130,7 @@ export declare const journeyTimelineVariants: ((props?: {
130
130
  card: (props?: ({
131
131
  orientation?: "horizontal" | "vertical" | undefined;
132
132
  size?: "sm" | "md" | "lg" | undefined;
133
- status?: "blocked" | "attention" | "active" | "complete" | "pending" | "skipped" | undefined;
133
+ status?: "complete" | "active" | "pending" | "attention" | "blocked" | "skipped" | undefined;
134
134
  focused?: boolean | undefined;
135
135
  interactive?: boolean | undefined;
136
136
  travelled?: boolean | undefined;
@@ -143,7 +143,7 @@ export declare const journeyTimelineVariants: ((props?: {
143
143
  header: (props?: ({
144
144
  orientation?: "horizontal" | "vertical" | undefined;
145
145
  size?: "sm" | "md" | "lg" | undefined;
146
- status?: "blocked" | "attention" | "active" | "complete" | "pending" | "skipped" | undefined;
146
+ status?: "complete" | "active" | "pending" | "attention" | "blocked" | "skipped" | undefined;
147
147
  focused?: boolean | undefined;
148
148
  interactive?: boolean | undefined;
149
149
  travelled?: boolean | undefined;
@@ -156,7 +156,7 @@ export declare const journeyTimelineVariants: ((props?: {
156
156
  trigger: (props?: ({
157
157
  orientation?: "horizontal" | "vertical" | undefined;
158
158
  size?: "sm" | "md" | "lg" | undefined;
159
- status?: "blocked" | "attention" | "active" | "complete" | "pending" | "skipped" | undefined;
159
+ status?: "complete" | "active" | "pending" | "attention" | "blocked" | "skipped" | undefined;
160
160
  focused?: boolean | undefined;
161
161
  interactive?: boolean | undefined;
162
162
  travelled?: boolean | undefined;
@@ -169,7 +169,7 @@ export declare const journeyTimelineVariants: ((props?: {
169
169
  trailing: (props?: ({
170
170
  orientation?: "horizontal" | "vertical" | undefined;
171
171
  size?: "sm" | "md" | "lg" | undefined;
172
- status?: "blocked" | "attention" | "active" | "complete" | "pending" | "skipped" | undefined;
172
+ status?: "complete" | "active" | "pending" | "attention" | "blocked" | "skipped" | undefined;
173
173
  focused?: boolean | undefined;
174
174
  interactive?: boolean | undefined;
175
175
  travelled?: boolean | undefined;
@@ -182,7 +182,7 @@ export declare const journeyTimelineVariants: ((props?: {
182
182
  labelGroup: (props?: ({
183
183
  orientation?: "horizontal" | "vertical" | undefined;
184
184
  size?: "sm" | "md" | "lg" | undefined;
185
- status?: "blocked" | "attention" | "active" | "complete" | "pending" | "skipped" | undefined;
185
+ status?: "complete" | "active" | "pending" | "attention" | "blocked" | "skipped" | undefined;
186
186
  focused?: boolean | undefined;
187
187
  interactive?: boolean | undefined;
188
188
  travelled?: boolean | undefined;
@@ -195,7 +195,7 @@ export declare const journeyTimelineVariants: ((props?: {
195
195
  title: (props?: ({
196
196
  orientation?: "horizontal" | "vertical" | undefined;
197
197
  size?: "sm" | "md" | "lg" | undefined;
198
- status?: "blocked" | "attention" | "active" | "complete" | "pending" | "skipped" | undefined;
198
+ status?: "complete" | "active" | "pending" | "attention" | "blocked" | "skipped" | undefined;
199
199
  focused?: boolean | undefined;
200
200
  interactive?: boolean | undefined;
201
201
  travelled?: boolean | undefined;
@@ -208,7 +208,7 @@ export declare const journeyTimelineVariants: ((props?: {
208
208
  subtitle: (props?: ({
209
209
  orientation?: "horizontal" | "vertical" | undefined;
210
210
  size?: "sm" | "md" | "lg" | undefined;
211
- status?: "blocked" | "attention" | "active" | "complete" | "pending" | "skipped" | undefined;
211
+ status?: "complete" | "active" | "pending" | "attention" | "blocked" | "skipped" | undefined;
212
212
  focused?: boolean | undefined;
213
213
  interactive?: boolean | undefined;
214
214
  travelled?: boolean | undefined;
@@ -221,7 +221,7 @@ export declare const journeyTimelineVariants: ((props?: {
221
221
  segment: (props?: ({
222
222
  orientation?: "horizontal" | "vertical" | undefined;
223
223
  size?: "sm" | "md" | "lg" | undefined;
224
- status?: "blocked" | "attention" | "active" | "complete" | "pending" | "skipped" | undefined;
224
+ status?: "complete" | "active" | "pending" | "attention" | "blocked" | "skipped" | undefined;
225
225
  focused?: boolean | undefined;
226
226
  interactive?: boolean | undefined;
227
227
  travelled?: boolean | undefined;
@@ -234,7 +234,7 @@ export declare const journeyTimelineVariants: ((props?: {
234
234
  detail: (props?: ({
235
235
  orientation?: "horizontal" | "vertical" | undefined;
236
236
  size?: "sm" | "md" | "lg" | undefined;
237
- status?: "blocked" | "attention" | "active" | "complete" | "pending" | "skipped" | undefined;
237
+ status?: "complete" | "active" | "pending" | "attention" | "blocked" | "skipped" | undefined;
238
238
  focused?: boolean | undefined;
239
239
  interactive?: boolean | undefined;
240
240
  travelled?: boolean | undefined;
@@ -247,7 +247,7 @@ export declare const journeyTimelineVariants: ((props?: {
247
247
  detailInner: (props?: ({
248
248
  orientation?: "horizontal" | "vertical" | undefined;
249
249
  size?: "sm" | "md" | "lg" | undefined;
250
- status?: "blocked" | "attention" | "active" | "complete" | "pending" | "skipped" | undefined;
250
+ status?: "complete" | "active" | "pending" | "attention" | "blocked" | "skipped" | undefined;
251
251
  focused?: boolean | undefined;
252
252
  interactive?: boolean | undefined;
253
253
  travelled?: boolean | undefined;
@@ -260,7 +260,7 @@ export declare const journeyTimelineVariants: ((props?: {
260
260
  detailContent: (props?: ({
261
261
  orientation?: "horizontal" | "vertical" | undefined;
262
262
  size?: "sm" | "md" | "lg" | undefined;
263
- status?: "blocked" | "attention" | "active" | "complete" | "pending" | "skipped" | undefined;
263
+ status?: "complete" | "active" | "pending" | "attention" | "blocked" | "skipped" | undefined;
264
264
  focused?: boolean | undefined;
265
265
  interactive?: boolean | undefined;
266
266
  travelled?: boolean | undefined;
@@ -273,7 +273,7 @@ export declare const journeyTimelineVariants: ((props?: {
273
273
  panel: (props?: ({
274
274
  orientation?: "horizontal" | "vertical" | undefined;
275
275
  size?: "sm" | "md" | "lg" | undefined;
276
- status?: "blocked" | "attention" | "active" | "complete" | "pending" | "skipped" | undefined;
276
+ status?: "complete" | "active" | "pending" | "attention" | "blocked" | "skipped" | undefined;
277
277
  focused?: boolean | undefined;
278
278
  interactive?: boolean | undefined;
279
279
  travelled?: boolean | undefined;
@@ -1,4 +1,5 @@
1
1
  <script lang="ts">
2
+ import CoreFieldMessage from '../../internal/core/CoreFieldMessage.svelte';
2
3
  import { getBlocksConfig, resolveSlotClasses } from '../../provider';
3
4
  import { getTierContext, useFormField } from '../../utils';
4
5
  import type { RadioGroupProps } from './index';
@@ -177,24 +178,13 @@
177
178
  {@render children()}
178
179
  </div>
179
180
 
180
- {#if ff.errorId}
181
- <div
182
- id={ff.errorId}
183
- class={unstyled
184
- ? (slotClasses?.message ?? '')
185
- : styles.message({ class: slotClasses?.message })}
186
- role="alert"
187
- >
188
- {error}
189
- </div>
190
- {:else if ff.helperId}
191
- <div
192
- id={ff.helperId}
193
- class={unstyled
194
- ? (slotClasses?.message ?? '')
195
- : styles.message({ class: slotClasses?.message })}
196
- >
197
- {helper}
198
- </div>
199
- {/if}
181
+ <CoreFieldMessage
182
+ {error}
183
+ {helper}
184
+ errorId={ff.errorId}
185
+ helperId={ff.helperId}
186
+ class={unstyled
187
+ ? (slotClasses?.message ?? '')
188
+ : styles.message({ class: slotClasses?.message })}
189
+ />
200
190
  </div>
@@ -85,7 +85,12 @@ export const radioItemVariants = tv({
85
85
  indicator: 'w-3.5 h-3.5 mt-px',
86
86
  dot: 'w-1.5 h-1.5',
87
87
  label: 'text-xs',
88
- description: 'text-3xs'
88
+ // `description` carries full sentences, so it stops at the body-copy
89
+ // floor (`text-xs`) instead of continuing the ladder down to `text-3xs`
90
+ // (10px) — 2xs/3xs are for marks, hints and dense grids, never for prose
91
+ // (see the tokens page). At this size the label/description hierarchy is
92
+ // carried by colour (text-primary vs text-tertiary) rather than size.
93
+ description: 'text-xs'
89
94
  },
90
95
  sm: {
91
96
  item: 'gap-2',
@@ -155,7 +160,7 @@ export const radioItemVariants = tv({
155
160
  {
156
161
  checked: false,
157
162
  variant: 'ghost',
158
- class: { indicator: 'bg-transparent border-transparent group-hover:bg-surface-subtle' }
163
+ class: { indicator: 'bg-transparent border-transparent group-hover:bg-surface-hover' }
159
164
  },
160
165
  // Checked intent colors
161
166
  // Hover/active darken through the intent interaction-layer tokens — the
@@ -1,5 +1,6 @@
1
1
  <script lang="ts" generics="T extends string | number | boolean = string">
2
2
  import { useBlocksI18n, mintRegistry } from '../..';
3
+ import CoreFieldMessage from '../../internal/core/CoreFieldMessage.svelte';
3
4
  import { useFormField, getTierContext, useFloatingPanel, floatingPanelHidden } from '../../utils';
4
5
  import { getBlocksConfig, resolveSlotClasses } from '../../provider';
5
6
  import { resolveIcon } from '../../icons';
@@ -759,24 +760,13 @@
759
760
  {/if}
760
761
  {/if}
761
762
 
762
- {#if ff.errorId}
763
- <div
764
- id={ff.errorId}
765
- class={unstyled
766
- ? (slotClasses?.message ?? '')
767
- : styles.message({ class: slotClasses?.message })}
768
- role="alert"
769
- >
770
- {error}
771
- </div>
772
- {:else if ff.helperId}
773
- <div
774
- id={ff.helperId}
775
- class={unstyled
776
- ? (slotClasses?.message ?? '')
777
- : styles.message({ class: slotClasses?.message })}
778
- >
779
- {helper}
780
- </div>
781
- {/if}
763
+ <CoreFieldMessage
764
+ {error}
765
+ {helper}
766
+ errorId={ff.errorId}
767
+ helperId={ff.helperId}
768
+ class={unstyled
769
+ ? (slotClasses?.message ?? '')
770
+ : styles.message({ class: slotClasses?.message })}
771
+ />
782
772
  </div>
@@ -78,10 +78,10 @@ export const selectVariants = tv({
78
78
  variant: {
79
79
  outlined: { trigger: 'border-border-subtle' },
80
80
  filled: {
81
- trigger: 'bg-surface-interactive border-transparent hover:bg-surface-hover focus-visible:bg-surface-base'
81
+ trigger: 'bg-surface-interactive border-transparent hover:bg-surface-interactive-hover focus-visible:bg-surface-base'
82
82
  },
83
83
  ghost: {
84
- trigger: 'bg-transparent border-transparent hover:bg-surface-subtle focus-visible:bg-surface-base focus-visible:border-border-subtle'
84
+ trigger: 'bg-transparent border-transparent hover:bg-surface-hover focus-visible:bg-surface-base focus-visible:border-border-subtle'
85
85
  },
86
86
  underline: {
87
87
  trigger: 'bg-transparent border-0 border-b-2 border-border-subtle rounded-none focus-visible:ring-0'
@@ -1,5 +1,6 @@
1
1
  <script lang="ts">
2
2
  import { useBlocksI18n, mintRegistry } from '../..';
3
+ import CoreFieldMessage from '../../internal/core/CoreFieldMessage.svelte';
3
4
  import { getBlocksConfig, resolveSlotClasses } from '../../provider';
4
5
  import { useFormField } from '../../utils';
5
6
  import type { SliderProps } from './index';
@@ -558,24 +559,13 @@
558
559
  </div>
559
560
  {/if}
560
561
 
561
- {#if ff.errorId}
562
- <div
563
- id={ff.errorId}
564
- class={unstyled
565
- ? (slotClasses?.message ?? '')
566
- : styles.message({ class: slotClasses?.message })}
567
- role="alert"
568
- >
569
- {error}
570
- </div>
571
- {:else if ff.helperId}
572
- <div
573
- id={ff.helperId}
574
- class={unstyled
575
- ? (slotClasses?.message ?? '')
576
- : styles.message({ class: slotClasses?.message })}
577
- >
578
- {helper}
579
- </div>
580
- {/if}
562
+ <CoreFieldMessage
563
+ {error}
564
+ {helper}
565
+ errorId={ff.errorId}
566
+ helperId={ff.helperId}
567
+ class={unstyled
568
+ ? (slotClasses?.message ?? '')
569
+ : styles.message({ class: slotClasses?.message })}
570
+ />
581
571
  </div>