@urbicon-ui/blocks 6.19.3 → 6.21.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/Calendar/Calendar.svelte +3 -0
- package/dist/components/Calendar/calendar.variants.d.ts +132 -419
- package/dist/components/CommandPalette/commandPalette.variants.d.ts +24 -51
- package/dist/components/CompositionBar/CompositionBar.svelte +6 -1
- package/dist/components/CompositionBar/composition-bar.variants.d.ts +23 -83
- package/dist/components/CompositionBar/composition-bar.variants.js +9 -3
- package/dist/components/EmptyState/emptyState.variants.d.ts +11 -27
- package/dist/components/FileUpload/fileUpload.variants.d.ts +24 -93
- package/dist/components/Guide/GuidePanel.svelte +38 -0
- package/dist/components/Guide/guide.variants.d.ts +69 -124
- package/dist/components/Guide/guide.variants.js +6 -1
- package/dist/components/Planner/planner.variants.d.ts +23 -94
- package/dist/components/Sankey/sankey.variants.d.ts +15 -48
- package/dist/components/SidebarLayout/sidebar-layout.variants.d.ts +10 -38
- package/dist/components/SidebarLayout/sidebar-layout.variants.js +12 -2
- package/dist/components/ThemeSwitcher/themeSwitcher.variants.d.ts +9 -36
- package/dist/i18n/index.d.ts +2 -372
- package/dist/icons/IconProvider.svelte +3 -0
- package/dist/internal/charts/variants.d.ts +18 -31
- package/dist/mint/styles.css +1 -1
- package/dist/primitives/Accordion/Accordion.svelte +14 -0
- package/dist/primitives/Accordion/AccordionItem.svelte +9 -3
- package/dist/primitives/Accordion/accordion.variants.d.ts +12 -43
- package/dist/primitives/Accordion/accordion.variants.js +6 -2
- package/dist/primitives/Accordion/index.d.ts +12 -0
- package/dist/primitives/Alert/alert.variants.d.ts +21 -62
- package/dist/primitives/Avatar/Avatar.svelte +74 -48
- package/dist/primitives/Avatar/avatar.variants.d.ts +34 -128
- package/dist/primitives/Avatar/avatar.variants.js +43 -18
- package/dist/primitives/Avatar/index.d.ts +6 -1
- package/dist/primitives/Badge/badge.variants.d.ts +19 -92
- package/dist/primitives/Badge/badge.variants.js +11 -4
- package/dist/primitives/Breadcrumb/breadcrumb.variants.d.ts +13 -40
- package/dist/primitives/Button/button.variants.d.ts +19 -98
- package/dist/primitives/Button/button.variants.js +13 -9
- package/dist/primitives/ButtonGroup/buttongroup.variants.d.ts +9 -29
- package/dist/primitives/ButtonGroup/buttongroup.variants.js +3 -1
- package/dist/primitives/Card/card.variants.d.ts +14 -81
- package/dist/primitives/Checkbox/checkbox.variants.d.ts +18 -77
- package/dist/primitives/Collapsible/Collapsible.svelte +13 -0
- package/dist/primitives/Collapsible/collapsible.variants.d.ts +11 -40
- package/dist/primitives/Collapsible/collapsible.variants.js +7 -2
- package/dist/primitives/Collapsible/index.d.ts +16 -0
- package/dist/primitives/Combobox/combobox.variants.d.ts +24 -78
- package/dist/primitives/ConfirmDialog/index.d.ts +12 -0
- package/dist/primitives/Dialog/Dialog.svelte +23 -10
- package/dist/primitives/Dialog/dialog.variants.d.ts +15 -54
- package/dist/primitives/Drawer/Drawer.svelte +24 -11
- package/dist/primitives/Drawer/drawer.variants.d.ts +14 -49
- package/dist/primitives/Input/input.variants.d.ts +32 -139
- package/dist/primitives/Input/input.variants.js +12 -10
- package/dist/primitives/JourneyTimeline/journey-timeline.variants.d.ts +55 -197
- package/dist/primitives/JourneyTimeline/journey-timeline.variants.js +4 -1
- package/dist/primitives/Menu/MenuSubmenu.svelte +1 -0
- package/dist/primitives/Menu/menu.variants.d.ts +29 -93
- package/dist/primitives/Pagination/pagination.variants.d.ts +16 -54
- package/dist/primitives/Pagination/pagination.variants.js +16 -14
- package/dist/primitives/Popover/Popover.svelte +1 -1
- package/dist/primitives/Popover/popover.variants.d.ts +4 -2
- package/dist/primitives/Progress/progress.variants.d.ts +19 -83
- package/dist/primitives/Progress/progress.variants.js +2 -1
- package/dist/primitives/RadioGroup/radioGroup.variants.d.ts +28 -109
- package/dist/primitives/SegmentGroup/SegmentGroup.svelte +14 -6
- package/dist/primitives/SegmentGroup/segmentgroup.variants.d.ts +12 -53
- package/dist/primitives/SegmentGroup/segmentgroup.variants.js +10 -10
- package/dist/primitives/Select/Select.svelte +1 -1
- package/dist/primitives/Select/select.variants.d.ts +45 -134
- package/dist/primitives/Select/select.variants.js +6 -4
- package/dist/primitives/Separator/separator.variants.d.ts +4 -2
- package/dist/primitives/Sidebar/Sidebar.svelte +10 -15
- package/dist/primitives/Sidebar/sidebar.variants.d.ts +11 -29
- package/dist/primitives/Skeleton/skeleton.variants.d.ts +9 -36
- package/dist/primitives/Slider/slider.variants.d.ts +37 -136
- package/dist/primitives/Slider/slider.variants.js +8 -5
- package/dist/primitives/Spinner/spinner.variants.d.ts +38 -135
- package/dist/primitives/Stepper/stepper.variants.d.ts +32 -130
- package/dist/primitives/Tab/Tab.svelte +17 -6
- package/dist/primitives/Tab/tab.variants.d.ts +17 -78
- package/dist/primitives/Textarea/textarea.variants.d.ts +27 -112
- package/dist/primitives/Textarea/textarea.variants.js +12 -10
- package/dist/primitives/Toast/Toaster.svelte +16 -3
- package/dist/primitives/Toast/index.d.ts +9 -0
- package/dist/primitives/Toast/toast.variants.d.ts +22 -78
- package/dist/primitives/Toggle/toggle.variants.d.ts +17 -71
- package/dist/primitives/Toolbar/toolbar.variants.d.ts +9 -60
- package/dist/primitives/Tooltip/Tooltip.svelte +11 -0
- package/dist/primitives/Tooltip/index.d.ts +14 -0
- package/dist/primitives/Tooltip/tooltip.variants.d.ts +11 -50
- package/dist/primitives/Tooltip/tooltip.variants.js +7 -1
- package/dist/style/foundation.css +4 -1
- package/dist/style/interaction.css +40 -12
- package/dist/style/semantic.css +2 -2
- package/dist/style/themes/index.css +1 -1
- package/dist/system/attachments/ContextIsolation.svelte +2 -0
- package/dist/utils/index.d.ts +2 -1
- package/dist/utils/index.js +5 -0
- package/dist/utils/overlay.d.ts +33 -4
- package/dist/utils/overlay.js +61 -18
- package/dist/utils/roving.d.ts +15 -0
- package/dist/utils/roving.js +44 -0
- package/dist/utils/use-floating-panel.svelte.d.ts +4 -1
- package/dist/utils/use-floating-panel.svelte.js +23 -1
- package/dist/utils/variants.d.ts +60 -16
- package/dist/utils/variants.js +424 -123
- package/package.json +9 -6
|
@@ -8,6 +8,8 @@
|
|
|
8
8
|
type = 'single',
|
|
9
9
|
variant = 'default',
|
|
10
10
|
size = 'md',
|
|
11
|
+
transitionDuration,
|
|
12
|
+
transitionEasing,
|
|
11
13
|
value = $bindable(),
|
|
12
14
|
defaultValue,
|
|
13
15
|
onValueChange,
|
|
@@ -24,6 +26,13 @@
|
|
|
24
26
|
const blocksConfig = getBlocksConfig();
|
|
25
27
|
const unstyled = $derived(unstyledProp || blocksConfig?.unstyled || false);
|
|
26
28
|
|
|
29
|
+
// ACC-3: per-instance collapse motion. Set on the root; every item's content + chevron inherit
|
|
30
|
+
// the vars (AccordionItem renders an unstyled Collapsible that leaves them unset). Inline only
|
|
31
|
+
// when a prop is given, so the default keeps the reduced-motion-aware token.
|
|
32
|
+
const collapseDuration = $derived(
|
|
33
|
+
transitionDuration != null ? `${transitionDuration}ms` : undefined
|
|
34
|
+
);
|
|
35
|
+
|
|
27
36
|
const variantProps: AccordionVariants = $derived({ variant, size });
|
|
28
37
|
const styles = $derived(accordionVariants(variantProps));
|
|
29
38
|
|
|
@@ -36,6 +45,9 @@
|
|
|
36
45
|
return Array.isArray(v) ? v : [v];
|
|
37
46
|
}
|
|
38
47
|
|
|
48
|
+
// Uncontrolled seed: capture only the initial `defaultValue`; later changes
|
|
49
|
+
// must not clobber user interaction.
|
|
50
|
+
// svelte-ignore state_referenced_locally
|
|
39
51
|
let internalValue = $state<string[]>(normalise(defaultValue));
|
|
40
52
|
|
|
41
53
|
const openItems = $derived(value !== undefined ? normalise(value) : internalValue);
|
|
@@ -85,6 +97,8 @@
|
|
|
85
97
|
class={unstyled
|
|
86
98
|
? [slotClasses?.base, className].filter(Boolean).join(' ')
|
|
87
99
|
: styles.base({ class: [slotClasses?.base, className] })}
|
|
100
|
+
style:--blocks-collapse-duration={collapseDuration}
|
|
101
|
+
style:--blocks-collapse-easing={transitionEasing}
|
|
88
102
|
data-orientation="vertical"
|
|
89
103
|
{...restProps}
|
|
90
104
|
>
|
|
@@ -43,9 +43,15 @@
|
|
|
43
43
|
}
|
|
44
44
|
</script>
|
|
45
45
|
|
|
46
|
+
<!--
|
|
47
|
+
Collapsible is driven purely by the `open` prop (= ctx.isOpen(value)); the
|
|
48
|
+
trigger calls ctx.toggle(value) directly rather than Collapsible's own toggle.
|
|
49
|
+
Routing through Collapsible.toggle would optimistically mutate its local open
|
|
50
|
+
state *before* ctx decides — so a rejected toggle (collapsible=false on the
|
|
51
|
+
last open item) left Collapsible visually closed while ctx kept it open.
|
|
52
|
+
-->
|
|
46
53
|
<Collapsible
|
|
47
54
|
{open}
|
|
48
|
-
onOpenChange={() => ctx.toggle(value)}
|
|
49
55
|
disabled={isDisabled}
|
|
50
56
|
name={`accordion-${value}`}
|
|
51
57
|
unstyled
|
|
@@ -56,7 +62,7 @@
|
|
|
56
62
|
}}
|
|
57
63
|
{...restProps}
|
|
58
64
|
>
|
|
59
|
-
{#snippet trigger({ open: isOpen,
|
|
65
|
+
{#snippet trigger({ open: isOpen, triggerId, contentId })}
|
|
60
66
|
<button
|
|
61
67
|
id={triggerId}
|
|
62
68
|
type="button"
|
|
@@ -64,7 +70,7 @@
|
|
|
64
70
|
aria-expanded={isOpen}
|
|
65
71
|
aria-controls={contentId}
|
|
66
72
|
disabled={isDisabled}
|
|
67
|
-
onclick={toggle}
|
|
73
|
+
onclick={() => ctx.toggle(value)}
|
|
68
74
|
>
|
|
69
75
|
{#if customTrigger}
|
|
70
76
|
{@render customTrigger({ open: isOpen })}
|
|
@@ -1,77 +1,46 @@
|
|
|
1
1
|
import { type SlotNames, type VariantProps } from '../../utils/variants.js';
|
|
2
|
-
export declare const accordionVariants: (props?:
|
|
3
|
-
variant
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
base: string;
|
|
7
|
-
item: string;
|
|
8
|
-
};
|
|
9
|
-
ghost: {
|
|
10
|
-
base: string;
|
|
11
|
-
item: string;
|
|
12
|
-
trigger: string;
|
|
13
|
-
};
|
|
14
|
-
};
|
|
15
|
-
size: {
|
|
16
|
-
sm: {
|
|
17
|
-
trigger: string;
|
|
18
|
-
contentInner: string;
|
|
19
|
-
chevron: string;
|
|
20
|
-
};
|
|
21
|
-
md: {
|
|
22
|
-
trigger: string;
|
|
23
|
-
contentInner: string;
|
|
24
|
-
chevron: string;
|
|
25
|
-
};
|
|
26
|
-
lg: {
|
|
27
|
-
trigger: string;
|
|
28
|
-
contentInner: string;
|
|
29
|
-
chevron: string;
|
|
30
|
-
};
|
|
31
|
-
};
|
|
32
|
-
}> | undefined) => {
|
|
2
|
+
export declare const accordionVariants: ((props?: {
|
|
3
|
+
variant?: "default" | "ghost" | "separated" | undefined;
|
|
4
|
+
size?: "sm" | "md" | "lg" | undefined;
|
|
5
|
+
} | undefined) => {
|
|
33
6
|
base: (props?: ({
|
|
34
7
|
variant?: "default" | "ghost" | "separated" | undefined;
|
|
35
8
|
size?: "sm" | "md" | "lg" | undefined;
|
|
36
9
|
} & {
|
|
37
|
-
class?: string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | /*elided*/ any | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined;
|
|
38
|
-
className?: string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | /*elided*/ any | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined;
|
|
10
|
+
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;
|
|
39
11
|
}) | undefined) => string;
|
|
40
12
|
item: (props?: ({
|
|
41
13
|
variant?: "default" | "ghost" | "separated" | undefined;
|
|
42
14
|
size?: "sm" | "md" | "lg" | undefined;
|
|
43
15
|
} & {
|
|
44
|
-
class?: string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | /*elided*/ any | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined;
|
|
45
|
-
className?: string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | /*elided*/ any | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined;
|
|
16
|
+
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;
|
|
46
17
|
}) | undefined) => string;
|
|
47
18
|
trigger: (props?: ({
|
|
48
19
|
variant?: "default" | "ghost" | "separated" | undefined;
|
|
49
20
|
size?: "sm" | "md" | "lg" | undefined;
|
|
50
21
|
} & {
|
|
51
|
-
class?: string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | /*elided*/ any | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined;
|
|
52
|
-
className?: string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | /*elided*/ any | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined;
|
|
22
|
+
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;
|
|
53
23
|
}) | undefined) => string;
|
|
54
24
|
chevron: (props?: ({
|
|
55
25
|
variant?: "default" | "ghost" | "separated" | undefined;
|
|
56
26
|
size?: "sm" | "md" | "lg" | undefined;
|
|
57
27
|
} & {
|
|
58
|
-
class?: string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | /*elided*/ any | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined;
|
|
59
|
-
className?: string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | /*elided*/ any | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined;
|
|
28
|
+
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;
|
|
60
29
|
}) | undefined) => string;
|
|
61
30
|
content: (props?: ({
|
|
62
31
|
variant?: "default" | "ghost" | "separated" | undefined;
|
|
63
32
|
size?: "sm" | "md" | "lg" | undefined;
|
|
64
33
|
} & {
|
|
65
|
-
class?: string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | /*elided*/ any | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined;
|
|
66
|
-
className?: string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | /*elided*/ any | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined;
|
|
34
|
+
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;
|
|
67
35
|
}) | undefined) => string;
|
|
68
36
|
contentInner: (props?: ({
|
|
69
37
|
variant?: "default" | "ghost" | "separated" | undefined;
|
|
70
38
|
size?: "sm" | "md" | "lg" | undefined;
|
|
71
39
|
} & {
|
|
72
|
-
class?: string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | /*elided*/ any | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined;
|
|
73
|
-
className?: string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | /*elided*/ any | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined;
|
|
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;
|
|
74
41
|
}) | undefined) => string;
|
|
42
|
+
}) & {
|
|
43
|
+
readonly config: import("../../utils/variants.js").TVConfig;
|
|
75
44
|
};
|
|
76
45
|
export type AccordionVariants = VariantProps<typeof accordionVariants>;
|
|
77
46
|
/** Slot names derived from the tv() config — single source of truth for slotClasses. */
|
|
@@ -14,11 +14,15 @@ export const accordionVariants = tv({
|
|
|
14
14
|
],
|
|
15
15
|
chevron: [
|
|
16
16
|
'shrink-0 text-text-tertiary',
|
|
17
|
-
|
|
17
|
+
// Collapse tokens (ACC-3) — retuned by Accordion's `transitionDuration`/`transitionEasing`
|
|
18
|
+
// via CSS-variable inheritance; `motion-reduce` guards the inline-override path.
|
|
19
|
+
'transition-transform duration-[var(--blocks-collapse-duration)] ease-[var(--blocks-collapse-easing)]',
|
|
20
|
+
'motion-reduce:duration-[1ms]'
|
|
18
21
|
],
|
|
19
22
|
content: [
|
|
20
23
|
'overflow-hidden',
|
|
21
|
-
'transition-[grid-template-rows] duration-[var(--blocks-duration
|
|
24
|
+
'transition-[grid-template-rows] duration-[var(--blocks-collapse-duration)] ease-[var(--blocks-collapse-easing)]',
|
|
25
|
+
'motion-reduce:duration-[1ms]'
|
|
22
26
|
],
|
|
23
27
|
contentInner: 'pb-4 text-text-secondary'
|
|
24
28
|
},
|
|
@@ -56,6 +56,18 @@ export interface AccordionProps extends AccordionVariants, Omit<HTMLAttributes<H
|
|
|
56
56
|
disabled?: boolean;
|
|
57
57
|
/** Whether items can be fully collapsed @default true */
|
|
58
58
|
collapsible?: boolean;
|
|
59
|
+
/**
|
|
60
|
+
* Override every item's expand/collapse animation duration in milliseconds. Defaults to the
|
|
61
|
+
* `--blocks-collapse-duration` token (the `normal` 250ms). Respects `prefers-reduced-motion`.
|
|
62
|
+
*/
|
|
63
|
+
transitionDuration?: number;
|
|
64
|
+
/**
|
|
65
|
+
* Override every item's expand/collapse easing as a CSS `<easing-function>` — e.g.
|
|
66
|
+
* `'ease-in-out'`, `'cubic-bezier(0.4,0,0.2,1)'`, or a token like `'var(--blocks-ease-springy)'`.
|
|
67
|
+
* Defaults to the `--blocks-collapse-easing` token. (A CSS string, not the `(t) => number`
|
|
68
|
+
* easing function the overlay components take — Accordion animates via CSS.)
|
|
69
|
+
*/
|
|
70
|
+
transitionEasing?: string;
|
|
59
71
|
/** Accordion items */
|
|
60
72
|
children: Snippet;
|
|
61
73
|
/** Custom CSS class */
|
|
@@ -1,101 +1,60 @@
|
|
|
1
1
|
import { type SlotNames, type VariantProps } from '../../utils/variants.js';
|
|
2
|
-
export declare const alertVariants: (props?:
|
|
3
|
-
intent
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
warning: {};
|
|
8
|
-
danger: {};
|
|
9
|
-
neutral: {};
|
|
10
|
-
};
|
|
11
|
-
variant: {
|
|
12
|
-
soft: {
|
|
13
|
-
base: string;
|
|
14
|
-
};
|
|
15
|
-
inline: {
|
|
16
|
-
base: string;
|
|
17
|
-
};
|
|
18
|
-
filled: {
|
|
19
|
-
base: string;
|
|
20
|
-
};
|
|
21
|
-
};
|
|
22
|
-
size: {
|
|
23
|
-
sm: {
|
|
24
|
-
base: string;
|
|
25
|
-
icon: string;
|
|
26
|
-
title: string;
|
|
27
|
-
description: string;
|
|
28
|
-
};
|
|
29
|
-
md: {
|
|
30
|
-
base: string;
|
|
31
|
-
icon: string;
|
|
32
|
-
title: string;
|
|
33
|
-
description: string;
|
|
34
|
-
};
|
|
35
|
-
lg: {
|
|
36
|
-
base: string;
|
|
37
|
-
icon: string;
|
|
38
|
-
title: string;
|
|
39
|
-
description: string;
|
|
40
|
-
};
|
|
41
|
-
};
|
|
42
|
-
}> | undefined) => {
|
|
2
|
+
export declare const alertVariants: ((props?: {
|
|
3
|
+
intent?: "primary" | "info" | "success" | "warning" | "danger" | "neutral" | undefined;
|
|
4
|
+
variant?: "inline" | "filled" | "soft" | undefined;
|
|
5
|
+
size?: "sm" | "md" | "lg" | undefined;
|
|
6
|
+
} | undefined) => {
|
|
43
7
|
base: (props?: ({
|
|
44
|
-
intent?: "
|
|
8
|
+
intent?: "primary" | "info" | "success" | "warning" | "danger" | "neutral" | undefined;
|
|
45
9
|
variant?: "inline" | "filled" | "soft" | undefined;
|
|
46
10
|
size?: "sm" | "md" | "lg" | undefined;
|
|
47
11
|
} & {
|
|
48
|
-
class?: string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | /*elided*/ any | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined;
|
|
49
|
-
className?: string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | /*elided*/ any | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined;
|
|
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;
|
|
50
13
|
}) | undefined) => string;
|
|
51
14
|
icon: (props?: ({
|
|
52
|
-
intent?: "
|
|
15
|
+
intent?: "primary" | "info" | "success" | "warning" | "danger" | "neutral" | undefined;
|
|
53
16
|
variant?: "inline" | "filled" | "soft" | undefined;
|
|
54
17
|
size?: "sm" | "md" | "lg" | undefined;
|
|
55
18
|
} & {
|
|
56
|
-
class?: string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | /*elided*/ any | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined;
|
|
57
|
-
className?: string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | /*elided*/ any | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined;
|
|
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;
|
|
58
20
|
}) | undefined) => string;
|
|
59
21
|
content: (props?: ({
|
|
60
|
-
intent?: "
|
|
22
|
+
intent?: "primary" | "info" | "success" | "warning" | "danger" | "neutral" | undefined;
|
|
61
23
|
variant?: "inline" | "filled" | "soft" | undefined;
|
|
62
24
|
size?: "sm" | "md" | "lg" | undefined;
|
|
63
25
|
} & {
|
|
64
|
-
class?: string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | /*elided*/ any | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined;
|
|
65
|
-
className?: string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | /*elided*/ any | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined;
|
|
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;
|
|
66
27
|
}) | undefined) => string;
|
|
67
28
|
title: (props?: ({
|
|
68
|
-
intent?: "
|
|
29
|
+
intent?: "primary" | "info" | "success" | "warning" | "danger" | "neutral" | undefined;
|
|
69
30
|
variant?: "inline" | "filled" | "soft" | undefined;
|
|
70
31
|
size?: "sm" | "md" | "lg" | undefined;
|
|
71
32
|
} & {
|
|
72
|
-
class?: string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | /*elided*/ any | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined;
|
|
73
|
-
className?: string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | /*elided*/ any | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined;
|
|
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;
|
|
74
34
|
}) | undefined) => string;
|
|
75
35
|
description: (props?: ({
|
|
76
|
-
intent?: "
|
|
36
|
+
intent?: "primary" | "info" | "success" | "warning" | "danger" | "neutral" | undefined;
|
|
77
37
|
variant?: "inline" | "filled" | "soft" | undefined;
|
|
78
38
|
size?: "sm" | "md" | "lg" | undefined;
|
|
79
39
|
} & {
|
|
80
|
-
class?: string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | /*elided*/ any | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined;
|
|
81
|
-
className?: string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | /*elided*/ any | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined;
|
|
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;
|
|
82
41
|
}) | undefined) => string;
|
|
83
42
|
actions: (props?: ({
|
|
84
|
-
intent?: "
|
|
43
|
+
intent?: "primary" | "info" | "success" | "warning" | "danger" | "neutral" | undefined;
|
|
85
44
|
variant?: "inline" | "filled" | "soft" | undefined;
|
|
86
45
|
size?: "sm" | "md" | "lg" | undefined;
|
|
87
46
|
} & {
|
|
88
|
-
class?: string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | /*elided*/ any | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined;
|
|
89
|
-
className?: string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | /*elided*/ any | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined;
|
|
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;
|
|
90
48
|
}) | undefined) => string;
|
|
91
49
|
dismissButton: (props?: ({
|
|
92
|
-
intent?: "
|
|
50
|
+
intent?: "primary" | "info" | "success" | "warning" | "danger" | "neutral" | undefined;
|
|
93
51
|
variant?: "inline" | "filled" | "soft" | undefined;
|
|
94
52
|
size?: "sm" | "md" | "lg" | undefined;
|
|
95
53
|
} & {
|
|
96
|
-
class?: string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | /*elided*/ any | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined;
|
|
97
|
-
className?: string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | /*elided*/ any | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined;
|
|
54
|
+
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;
|
|
98
55
|
}) | undefined) => string;
|
|
56
|
+
}) & {
|
|
57
|
+
readonly config: import("../../utils/variants.js").TVConfig;
|
|
99
58
|
};
|
|
100
59
|
export type AlertVariants = VariantProps<typeof alertVariants>;
|
|
101
60
|
/** Slot names derived from the tv() config — single source of truth for slotClasses. */
|
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
intent = 'neutral',
|
|
18
18
|
status,
|
|
19
19
|
statusPosition = 'bottom-right',
|
|
20
|
+
pulse = false,
|
|
20
21
|
ring = false,
|
|
21
22
|
ringIntent = 'primary',
|
|
22
23
|
ringColor,
|
|
@@ -38,7 +39,6 @@
|
|
|
38
39
|
|
|
39
40
|
let avatarElement = $state<HTMLElement>();
|
|
40
41
|
let imageError = $state(false);
|
|
41
|
-
let isHovered = $state(false);
|
|
42
42
|
|
|
43
43
|
const isInteractive = $derived(clickable || interactive || !!onclick);
|
|
44
44
|
|
|
@@ -91,6 +91,7 @@
|
|
|
91
91
|
intent: randomColor ? undefined : intent,
|
|
92
92
|
status,
|
|
93
93
|
statusPosition,
|
|
94
|
+
pulse,
|
|
94
95
|
ring,
|
|
95
96
|
ringIntent: ringColor ? undefined : ringIntent,
|
|
96
97
|
interactive: isInteractive
|
|
@@ -102,31 +103,20 @@
|
|
|
102
103
|
resolveSlotClasses(blocksConfig, 'Avatar', preset, variantProps, slotClassesProp)
|
|
103
104
|
);
|
|
104
105
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
// ignored it and the avatar fell back to surface-interactive + white
|
|
112
|
-
// text (1.15:1 contrast).
|
|
113
|
-
styles['background-color'] = randomBg;
|
|
114
|
-
styles.color = 'white';
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
if (ringColor) {
|
|
118
|
-
styles['border-color'] = ringColor;
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
return styles;
|
|
122
|
-
});
|
|
123
|
-
|
|
124
|
-
const styleString = $derived(
|
|
125
|
-
Object.entries(dynamicStyles)
|
|
126
|
-
.map(([key, value]) => `${key}: ${value}`)
|
|
127
|
-
.join('; ')
|
|
106
|
+
// `randomColor` paints the visible fill, so it targets the `frame` slot.
|
|
107
|
+
// Inline property names stay kebab-case — a previous camelCase
|
|
108
|
+
// `backgroundColor` was silently ignored by browsers, dropping the avatar back
|
|
109
|
+
// to surface-interactive + white text.
|
|
110
|
+
const frameStyle = $derived(
|
|
111
|
+
randomColor && randomBg ? `background-color: ${randomBg}; color: white` : undefined
|
|
128
112
|
);
|
|
129
113
|
|
|
114
|
+
// `ringColor` recolours the ring on the outer `base`. The ring is a
|
|
115
|
+
// Tailwind `ring-2` box-shadow, so it reads `--tw-ring-color` — setting
|
|
116
|
+
// `border-color` (the previous approach) was a no-op, as the avatar has no
|
|
117
|
+
// border. Only meaningful together with `ring`.
|
|
118
|
+
const baseStyle = $derived(ringColor ? `--tw-ring-color: ${ringColor}` : undefined);
|
|
119
|
+
|
|
130
120
|
$effect(() => {
|
|
131
121
|
if (avatarElement && mint && mint !== 'none' && isInteractive) {
|
|
132
122
|
return mintRegistry.apply(avatarElement, mint);
|
|
@@ -134,12 +124,10 @@
|
|
|
134
124
|
});
|
|
135
125
|
|
|
136
126
|
function handleMouseEnter() {
|
|
137
|
-
isHovered = true;
|
|
138
127
|
onHover?.(true);
|
|
139
128
|
}
|
|
140
129
|
|
|
141
130
|
function handleMouseLeave() {
|
|
142
|
-
isHovered = false;
|
|
143
131
|
onHover?.(false);
|
|
144
132
|
}
|
|
145
133
|
|
|
@@ -165,12 +153,13 @@
|
|
|
165
153
|
<div
|
|
166
154
|
bind:this={avatarElement}
|
|
167
155
|
class={[
|
|
156
|
+
'blocks-avatar',
|
|
168
157
|
`blocks-intent-${intent}`,
|
|
169
158
|
unstyled
|
|
170
159
|
? [slotClasses?.base, className].filter(Boolean).join(' ')
|
|
171
160
|
: styles.base({ class: [slotClasses?.base, className] })
|
|
172
161
|
]}
|
|
173
|
-
style={
|
|
162
|
+
style={baseStyle}
|
|
174
163
|
role={isInteractive ? 'button' : undefined}
|
|
175
164
|
tabindex={isInteractive ? 0 : undefined}
|
|
176
165
|
aria-label={isInteractive ? alt || name || bt('accessibility.avatar') : undefined}
|
|
@@ -180,24 +169,31 @@
|
|
|
180
169
|
onkeydown={handleKeydown}
|
|
181
170
|
{...restProps}
|
|
182
171
|
>
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
172
|
+
<!-- `frame` clips the image/initials to the avatar shape; the status dot
|
|
173
|
+
below is a sibling so it renders outside the clip and stays whole. -->
|
|
174
|
+
<div
|
|
175
|
+
class={unstyled ? (slotClasses?.frame ?? '') : styles.frame({ class: slotClasses?.frame })}
|
|
176
|
+
style={frameStyle}
|
|
177
|
+
>
|
|
178
|
+
{#if src && !imageError}
|
|
179
|
+
<img
|
|
180
|
+
{src}
|
|
181
|
+
alt={alt || name || bt('accessibility.avatar')}
|
|
182
|
+
class={unstyled ? (slotClasses?.image ?? '') : styles.image({ class: slotClasses?.image })}
|
|
183
|
+
onerror={handleImageError}
|
|
184
|
+
/>
|
|
185
|
+
{:else if children}
|
|
186
|
+
{@render children()}
|
|
187
|
+
{:else}
|
|
188
|
+
<span
|
|
189
|
+
class={unstyled
|
|
190
|
+
? (slotClasses?.fallback ?? '')
|
|
191
|
+
: styles.fallback({ class: slotClasses?.fallback })}
|
|
192
|
+
>
|
|
193
|
+
{getInitials(name)}
|
|
194
|
+
</span>
|
|
195
|
+
{/if}
|
|
196
|
+
</div>
|
|
201
197
|
|
|
202
198
|
{#if status}
|
|
203
199
|
<span
|
|
@@ -229,14 +225,44 @@
|
|
|
229
225
|
}
|
|
230
226
|
}
|
|
231
227
|
|
|
228
|
+
/* AVT-3: opt-in "live" pulse on the status dot. A radar ring radiates via an
|
|
229
|
+
animated box-shadow — no extra DOM — coloured to match the status through
|
|
230
|
+
the per-status `--blocks-avatar-pulse-color` set in avatar.variants.ts.
|
|
231
|
+
The dot now sits outside the frame's overflow-hidden clip, so the ring is
|
|
232
|
+
never cut off. */
|
|
233
|
+
:global(.blocks-avatar-status-pulse) {
|
|
234
|
+
animation: avatar-status-pulse 1.6s var(--blocks-ease-confident) infinite;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
/* The ring must reach its brightest while it is already clear of the dot —
|
|
238
|
+
a shadow at spread 0 hides behind the opaque dot, so a plain from/to fade
|
|
239
|
+
only ever shows the faint, expanded tail. The mid stop lights it up at a
|
|
240
|
+
visible radius; it then keeps growing and fades to nothing. */
|
|
241
|
+
@keyframes avatar-status-pulse {
|
|
242
|
+
0% {
|
|
243
|
+
box-shadow: 0 0 0 0 color-mix(in oklab, var(--blocks-avatar-pulse-color) 0%, transparent);
|
|
244
|
+
}
|
|
245
|
+
35% {
|
|
246
|
+
box-shadow: 0 0 0 0.22rem
|
|
247
|
+
color-mix(in oklab, var(--blocks-avatar-pulse-color) 60%, transparent);
|
|
248
|
+
}
|
|
249
|
+
100% {
|
|
250
|
+
box-shadow: 0 0 0 0.6rem color-mix(in oklab, var(--blocks-avatar-pulse-color) 0%, transparent);
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
|
|
232
254
|
@media (prefers-reduced-motion: reduce) {
|
|
233
|
-
:global(.blocks-mint-pulse)
|
|
255
|
+
:global(.blocks-mint-pulse),
|
|
256
|
+
:global(.blocks-avatar-status-pulse) {
|
|
234
257
|
animation: none;
|
|
235
258
|
}
|
|
236
259
|
}
|
|
237
260
|
|
|
238
|
-
|
|
239
|
-
|
|
261
|
+
/* High-contrast delineation for the avatar disc. Targets the stable
|
|
262
|
+
`blocks-avatar` root marker exactly — not `[class*='blocks-avatar']`, which
|
|
263
|
+
would also catch the `blocks-avatar-status-pulse` dot and ring it. */
|
|
264
|
+
@media (prefers-contrast: more) {
|
|
265
|
+
:global(.blocks-avatar) {
|
|
240
266
|
outline: 2px solid currentColor;
|
|
241
267
|
outline-offset: -2px;
|
|
242
268
|
}
|