@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.
Files changed (105) hide show
  1. package/dist/components/Calendar/Calendar.svelte +3 -0
  2. package/dist/components/Calendar/calendar.variants.d.ts +132 -419
  3. package/dist/components/CommandPalette/commandPalette.variants.d.ts +24 -51
  4. package/dist/components/CompositionBar/CompositionBar.svelte +6 -1
  5. package/dist/components/CompositionBar/composition-bar.variants.d.ts +23 -83
  6. package/dist/components/CompositionBar/composition-bar.variants.js +9 -3
  7. package/dist/components/EmptyState/emptyState.variants.d.ts +11 -27
  8. package/dist/components/FileUpload/fileUpload.variants.d.ts +24 -93
  9. package/dist/components/Guide/GuidePanel.svelte +38 -0
  10. package/dist/components/Guide/guide.variants.d.ts +69 -124
  11. package/dist/components/Guide/guide.variants.js +6 -1
  12. package/dist/components/Planner/planner.variants.d.ts +23 -94
  13. package/dist/components/Sankey/sankey.variants.d.ts +15 -48
  14. package/dist/components/SidebarLayout/sidebar-layout.variants.d.ts +10 -38
  15. package/dist/components/SidebarLayout/sidebar-layout.variants.js +12 -2
  16. package/dist/components/ThemeSwitcher/themeSwitcher.variants.d.ts +9 -36
  17. package/dist/i18n/index.d.ts +2 -372
  18. package/dist/icons/IconProvider.svelte +3 -0
  19. package/dist/internal/charts/variants.d.ts +18 -31
  20. package/dist/mint/styles.css +1 -1
  21. package/dist/primitives/Accordion/Accordion.svelte +14 -0
  22. package/dist/primitives/Accordion/AccordionItem.svelte +9 -3
  23. package/dist/primitives/Accordion/accordion.variants.d.ts +12 -43
  24. package/dist/primitives/Accordion/accordion.variants.js +6 -2
  25. package/dist/primitives/Accordion/index.d.ts +12 -0
  26. package/dist/primitives/Alert/alert.variants.d.ts +21 -62
  27. package/dist/primitives/Avatar/Avatar.svelte +74 -48
  28. package/dist/primitives/Avatar/avatar.variants.d.ts +34 -128
  29. package/dist/primitives/Avatar/avatar.variants.js +43 -18
  30. package/dist/primitives/Avatar/index.d.ts +6 -1
  31. package/dist/primitives/Badge/badge.variants.d.ts +19 -92
  32. package/dist/primitives/Badge/badge.variants.js +11 -4
  33. package/dist/primitives/Breadcrumb/breadcrumb.variants.d.ts +13 -40
  34. package/dist/primitives/Button/button.variants.d.ts +19 -98
  35. package/dist/primitives/Button/button.variants.js +13 -9
  36. package/dist/primitives/ButtonGroup/buttongroup.variants.d.ts +9 -29
  37. package/dist/primitives/ButtonGroup/buttongroup.variants.js +3 -1
  38. package/dist/primitives/Card/card.variants.d.ts +14 -81
  39. package/dist/primitives/Checkbox/checkbox.variants.d.ts +18 -77
  40. package/dist/primitives/Collapsible/Collapsible.svelte +13 -0
  41. package/dist/primitives/Collapsible/collapsible.variants.d.ts +11 -40
  42. package/dist/primitives/Collapsible/collapsible.variants.js +7 -2
  43. package/dist/primitives/Collapsible/index.d.ts +16 -0
  44. package/dist/primitives/Combobox/combobox.variants.d.ts +24 -78
  45. package/dist/primitives/ConfirmDialog/index.d.ts +12 -0
  46. package/dist/primitives/Dialog/Dialog.svelte +23 -10
  47. package/dist/primitives/Dialog/dialog.variants.d.ts +15 -54
  48. package/dist/primitives/Drawer/Drawer.svelte +24 -11
  49. package/dist/primitives/Drawer/drawer.variants.d.ts +14 -49
  50. package/dist/primitives/Input/input.variants.d.ts +32 -139
  51. package/dist/primitives/Input/input.variants.js +12 -10
  52. package/dist/primitives/JourneyTimeline/journey-timeline.variants.d.ts +55 -197
  53. package/dist/primitives/JourneyTimeline/journey-timeline.variants.js +4 -1
  54. package/dist/primitives/Menu/MenuSubmenu.svelte +1 -0
  55. package/dist/primitives/Menu/menu.variants.d.ts +29 -93
  56. package/dist/primitives/Pagination/pagination.variants.d.ts +16 -54
  57. package/dist/primitives/Pagination/pagination.variants.js +16 -14
  58. package/dist/primitives/Popover/Popover.svelte +1 -1
  59. package/dist/primitives/Popover/popover.variants.d.ts +4 -2
  60. package/dist/primitives/Progress/progress.variants.d.ts +19 -83
  61. package/dist/primitives/Progress/progress.variants.js +2 -1
  62. package/dist/primitives/RadioGroup/radioGroup.variants.d.ts +28 -109
  63. package/dist/primitives/SegmentGroup/SegmentGroup.svelte +14 -6
  64. package/dist/primitives/SegmentGroup/segmentgroup.variants.d.ts +12 -53
  65. package/dist/primitives/SegmentGroup/segmentgroup.variants.js +10 -10
  66. package/dist/primitives/Select/Select.svelte +1 -1
  67. package/dist/primitives/Select/select.variants.d.ts +45 -134
  68. package/dist/primitives/Select/select.variants.js +6 -4
  69. package/dist/primitives/Separator/separator.variants.d.ts +4 -2
  70. package/dist/primitives/Sidebar/Sidebar.svelte +10 -15
  71. package/dist/primitives/Sidebar/sidebar.variants.d.ts +11 -29
  72. package/dist/primitives/Skeleton/skeleton.variants.d.ts +9 -36
  73. package/dist/primitives/Slider/slider.variants.d.ts +37 -136
  74. package/dist/primitives/Slider/slider.variants.js +8 -5
  75. package/dist/primitives/Spinner/spinner.variants.d.ts +38 -135
  76. package/dist/primitives/Stepper/stepper.variants.d.ts +32 -130
  77. package/dist/primitives/Tab/Tab.svelte +17 -6
  78. package/dist/primitives/Tab/tab.variants.d.ts +17 -78
  79. package/dist/primitives/Textarea/textarea.variants.d.ts +27 -112
  80. package/dist/primitives/Textarea/textarea.variants.js +12 -10
  81. package/dist/primitives/Toast/Toaster.svelte +16 -3
  82. package/dist/primitives/Toast/index.d.ts +9 -0
  83. package/dist/primitives/Toast/toast.variants.d.ts +22 -78
  84. package/dist/primitives/Toggle/toggle.variants.d.ts +17 -71
  85. package/dist/primitives/Toolbar/toolbar.variants.d.ts +9 -60
  86. package/dist/primitives/Tooltip/Tooltip.svelte +11 -0
  87. package/dist/primitives/Tooltip/index.d.ts +14 -0
  88. package/dist/primitives/Tooltip/tooltip.variants.d.ts +11 -50
  89. package/dist/primitives/Tooltip/tooltip.variants.js +7 -1
  90. package/dist/style/foundation.css +4 -1
  91. package/dist/style/interaction.css +40 -12
  92. package/dist/style/semantic.css +2 -2
  93. package/dist/style/themes/index.css +1 -1
  94. package/dist/system/attachments/ContextIsolation.svelte +2 -0
  95. package/dist/utils/index.d.ts +2 -1
  96. package/dist/utils/index.js +5 -0
  97. package/dist/utils/overlay.d.ts +33 -4
  98. package/dist/utils/overlay.js +61 -18
  99. package/dist/utils/roving.d.ts +15 -0
  100. package/dist/utils/roving.js +44 -0
  101. package/dist/utils/use-floating-panel.svelte.d.ts +4 -1
  102. package/dist/utils/use-floating-panel.svelte.js +23 -1
  103. package/dist/utils/variants.d.ts +60 -16
  104. package/dist/utils/variants.js +424 -123
  105. package/package.json +9 -6
@@ -74,6 +74,18 @@ export interface ConfirmDialogProps {
74
74
  closeOnBackdropClick?: boolean;
75
75
  /** Whether Escape cancels. @default true */
76
76
  closeOnEscape?: boolean;
77
+ /**
78
+ * Override the enter/exit animation duration in milliseconds, forwarded to
79
+ * the underlying {@link Dialog}. Defaults to the overlay token
80
+ * `--blocks-overlay-enter-duration` / `--blocks-overlay-exit-duration`
81
+ * (200ms / 180ms). Respects `prefers-reduced-motion`.
82
+ */
83
+ transitionDuration?: number;
84
+ /**
85
+ * Override the enter/exit easing function, forwarded to the underlying
86
+ * {@link Dialog}. Defaults to the overlay token easing (`quintOut`).
87
+ */
88
+ transitionEasing?: (t: number) => number;
77
89
  /** Optional richer markup rendered below `description`. */
78
90
  children?: Snippet;
79
91
  }
@@ -3,14 +3,9 @@
3
3
  import { getBlocksConfig, resolveSlotClasses } from '../../provider';
4
4
  import { resolveIcon } from '../../icons';
5
5
  import CloseIconDefault from '../../icons/CloseIcon.svelte';
6
- import { onDestroy } from 'svelte';
6
+ import { onDestroy, tick } from 'svelte';
7
7
  import { fade, scale } from 'svelte/transition';
8
- import {
9
- trapFocus,
10
- showDialogModal,
11
- closeDialogModal,
12
- unlockBodyScroll
13
- } from '../../utils/overlay';
8
+ import { trapFocus, showDialogModal, closeDialogModal } from '../../utils/overlay';
14
9
  import { overlayStack, getOverlayMotion } from '../../utils';
15
10
  import Button from '../Button/Button.svelte';
16
11
  import type { DialogProps } from './index';
@@ -41,6 +36,8 @@
41
36
  ...restProps
42
37
  }: DialogProps = $props();
43
38
 
39
+ // One-shot DEV sanity check on the initial close-path configuration.
40
+ // svelte-ignore state_referenced_locally
44
41
  if (
45
42
  import.meta.env?.DEV &&
46
43
  hideCloseButton &&
@@ -67,6 +64,9 @@
67
64
  let panelEl = $state<HTMLElement>();
68
65
  let isVisible = $state(false);
69
66
  let previouslyFocused: HTMLElement | null = null;
67
+ // Release for the body-scroll lock this instance holds while modal — set by
68
+ // showDialogModal, idempotent, so both teardown paths below may call it.
69
+ let releaseScrollLock: (() => void) | undefined;
70
70
 
71
71
  const structured = $derived(!!title);
72
72
 
@@ -118,7 +118,8 @@
118
118
  }
119
119
 
120
120
  function handleOutroEnd() {
121
- closeDialogModal(dialogEl, previouslyFocused);
121
+ closeDialogModal(dialogEl, previouslyFocused, releaseScrollLock);
122
+ releaseScrollLock = undefined;
122
123
  isVisible = false;
123
124
  previouslyFocused = null;
124
125
  }
@@ -127,7 +128,15 @@
127
128
  if (open && !isVisible) {
128
129
  isVisible = true;
129
130
  previouslyFocused = document.activeElement as HTMLElement;
130
- showDialogModal(dialogEl, panelEl);
131
+ // Defer until the `{#if isVisible}` block has rendered so `bind:this` has
132
+ // assigned dialogEl/panelEl — showDialogModal captures the refs by value,
133
+ // so promoting before the bind would silently no-op (never actually modal).
134
+ // The guard covers same-flush teardown: if the component unmounts before
135
+ // the tick resolves, bind:this has nulled dialogEl and onDestroy has
136
+ // already run — a lock taken now could never be released.
137
+ tick().then(() => {
138
+ if (dialogEl) releaseScrollLock = showDialogModal(dialogEl, panelEl);
139
+ });
131
140
  }
132
141
  });
133
142
 
@@ -137,7 +146,11 @@
137
146
  });
138
147
 
139
148
  onDestroy(() => {
140
- unlockBodyScroll();
149
+ // Safety net for destroy-while-open, where no outro runs. Releasing is
150
+ // idempotent and scoped to this instance's own lock, so a regular close
151
+ // (already released in handleOutroEnd) or a never-opened instance make
152
+ // this a no-op — it can never free another overlay's lock.
153
+ releaseScrollLock?.();
141
154
  });
142
155
  </script>
143
156
 
@@ -1,106 +1,67 @@
1
1
  import { type SlotNames, type VariantProps } from '../../utils/variants.js';
2
- export declare const dialogVariants: (props?: import("../../utils/variants.js").TVProps<{
3
- size: {
4
- sm: {
5
- panel: string;
6
- };
7
- md: {
8
- panel: string;
9
- };
10
- lg: {
11
- panel: string;
12
- };
13
- xl: {
14
- panel: string;
15
- };
16
- full: {
17
- panel: string[];
18
- };
19
- fullscreen: {
20
- panel: string[];
21
- };
22
- };
23
- placement: {
24
- center: {
25
- dialog: string;
26
- };
27
- top: {
28
- dialog: string;
29
- };
30
- };
31
- intent: {
32
- neutral: {};
33
- primary: {};
34
- secondary: {};
35
- success: {};
36
- warning: {};
37
- danger: {};
38
- };
39
- }> | undefined) => {
2
+ export declare const dialogVariants: ((props?: {
3
+ size?: "sm" | "md" | "lg" | "xl" | "full" | "fullscreen" | undefined;
4
+ placement?: "top" | "center" | undefined;
5
+ intent?: "primary" | "secondary" | "success" | "warning" | "danger" | "neutral" | undefined;
6
+ } | undefined) => {
40
7
  dialog: (props?: ({
41
8
  size?: "sm" | "md" | "lg" | "xl" | "full" | "fullscreen" | undefined;
42
9
  placement?: "top" | "center" | undefined;
43
10
  intent?: "primary" | "secondary" | "success" | "warning" | "danger" | "neutral" | undefined;
44
11
  } & {
45
- 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;
46
- 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;
47
13
  }) | undefined) => string;
48
14
  backdrop: (props?: ({
49
15
  size?: "sm" | "md" | "lg" | "xl" | "full" | "fullscreen" | undefined;
50
16
  placement?: "top" | "center" | undefined;
51
17
  intent?: "primary" | "secondary" | "success" | "warning" | "danger" | "neutral" | undefined;
52
18
  } & {
53
- 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;
54
- 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;
55
20
  }) | undefined) => string;
56
21
  panel: (props?: ({
57
22
  size?: "sm" | "md" | "lg" | "xl" | "full" | "fullscreen" | undefined;
58
23
  placement?: "top" | "center" | undefined;
59
24
  intent?: "primary" | "secondary" | "success" | "warning" | "danger" | "neutral" | undefined;
60
25
  } & {
61
- 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;
62
- 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;
63
27
  }) | undefined) => string;
64
28
  content: (props?: ({
65
29
  size?: "sm" | "md" | "lg" | "xl" | "full" | "fullscreen" | undefined;
66
30
  placement?: "top" | "center" | undefined;
67
31
  intent?: "primary" | "secondary" | "success" | "warning" | "danger" | "neutral" | undefined;
68
32
  } & {
69
- 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;
70
- 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;
71
34
  }) | undefined) => string;
72
35
  header: (props?: ({
73
36
  size?: "sm" | "md" | "lg" | "xl" | "full" | "fullscreen" | undefined;
74
37
  placement?: "top" | "center" | undefined;
75
38
  intent?: "primary" | "secondary" | "success" | "warning" | "danger" | "neutral" | undefined;
76
39
  } & {
77
- 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;
78
- 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;
79
41
  }) | undefined) => string;
80
42
  title: (props?: ({
81
43
  size?: "sm" | "md" | "lg" | "xl" | "full" | "fullscreen" | undefined;
82
44
  placement?: "top" | "center" | undefined;
83
45
  intent?: "primary" | "secondary" | "success" | "warning" | "danger" | "neutral" | undefined;
84
46
  } & {
85
- 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;
86
- 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;
87
48
  }) | undefined) => string;
88
49
  body: (props?: ({
89
50
  size?: "sm" | "md" | "lg" | "xl" | "full" | "fullscreen" | undefined;
90
51
  placement?: "top" | "center" | undefined;
91
52
  intent?: "primary" | "secondary" | "success" | "warning" | "danger" | "neutral" | undefined;
92
53
  } & {
93
- 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;
94
- 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;
95
55
  }) | undefined) => string;
96
56
  footer: (props?: ({
97
57
  size?: "sm" | "md" | "lg" | "xl" | "full" | "fullscreen" | undefined;
98
58
  placement?: "top" | "center" | undefined;
99
59
  intent?: "primary" | "secondary" | "success" | "warning" | "danger" | "neutral" | undefined;
100
60
  } & {
101
- 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;
102
- 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;
61
+ 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;
103
62
  }) | undefined) => string;
63
+ }) & {
64
+ readonly config: import("../../utils/variants.js").TVConfig;
104
65
  };
105
66
  export type DialogVariants = VariantProps<typeof dialogVariants>;
106
67
  /** Slot names derived from the `tv()` config above — single source of truth for `slotClasses`. */
@@ -3,14 +3,9 @@
3
3
  import { getBlocksConfig, resolveSlotClasses } from '../../provider';
4
4
  import { resolveIcon } from '../../icons';
5
5
  import CloseIconDefault from '../../icons/CloseIcon.svelte';
6
- import { onDestroy } from 'svelte';
6
+ import { onDestroy, tick } from 'svelte';
7
7
  import { fade, fly } from 'svelte/transition';
8
- import {
9
- trapFocus,
10
- showDialogModal,
11
- closeDialogModal,
12
- unlockBodyScroll
13
- } from '../../utils/overlay';
8
+ import { trapFocus, showDialogModal, closeDialogModal } from '../../utils/overlay';
14
9
  import { overlayStack, getOverlayMotion } from '../../utils';
15
10
  import Button from '../Button/Button.svelte';
16
11
  import type { DrawerProps } from './index';
@@ -41,6 +36,8 @@
41
36
  ...restProps
42
37
  }: DrawerProps = $props();
43
38
 
39
+ // One-shot DEV sanity check on the initial close-path configuration.
40
+ // svelte-ignore state_referenced_locally
44
41
  if (
45
42
  import.meta.env?.DEV &&
46
43
  hideCloseButton &&
@@ -59,9 +56,12 @@
59
56
  let panelElement = $state<HTMLElement>();
60
57
  let isVisible = $state(false);
61
58
  let previouslyFocused: HTMLElement | null = null;
59
+ // Release for the body-scroll lock this instance holds while modal — set by
60
+ // showDialogModal, idempotent, so both teardown paths below may call it.
61
+ let releaseScrollLock: (() => void) | undefined;
62
62
 
63
63
  const uid = $props.id();
64
- const titleId = title ? `drawer-title-${uid}` : undefined;
64
+ const titleId = $derived(title ? `drawer-title-${uid}` : undefined);
65
65
  const bodyId = `drawer-body-${uid}`;
66
66
  const overlayId = `drawer-${uid}`;
67
67
 
@@ -120,7 +120,15 @@
120
120
  if (open && !isVisible) {
121
121
  isVisible = true;
122
122
  previouslyFocused = document.activeElement as HTMLElement;
123
- showDialogModal(dialogElement, panelElement);
123
+ // Defer until the `{#if isVisible}` block has rendered so `bind:this` has
124
+ // assigned dialogElement/panelElement — showDialogModal captures the refs
125
+ // by value, so promoting before the bind would silently no-op (never modal).
126
+ // The guard covers same-flush teardown: if the component unmounts before
127
+ // the tick resolves, bind:this has nulled dialogElement and onDestroy has
128
+ // already run — a lock taken now could never be released.
129
+ tick().then(() => {
130
+ if (dialogElement) releaseScrollLock = showDialogModal(dialogElement, panelElement);
131
+ });
124
132
  }
125
133
  });
126
134
 
@@ -130,7 +138,11 @@
130
138
  });
131
139
 
132
140
  onDestroy(() => {
133
- unlockBodyScroll();
141
+ // Safety net for destroy-while-open, where no outro runs. Releasing is
142
+ // idempotent and scoped to this instance's own lock, so a regular close
143
+ // (already released in handleOutroEnd) or a never-opened instance make
144
+ // this a no-op — it can never free another overlay's lock.
145
+ releaseScrollLock?.();
134
146
  });
135
147
 
136
148
  function handleBackdropDirectClick() {
@@ -147,7 +159,8 @@
147
159
  }
148
160
 
149
161
  function handleOutroEnd() {
150
- closeDialogModal(dialogElement, previouslyFocused);
162
+ closeDialogModal(dialogElement, previouslyFocused, releaseScrollLock);
163
+ releaseScrollLock = undefined;
151
164
  isVisible = false;
152
165
  previouslyFocused = null;
153
166
  }
@@ -1,95 +1,60 @@
1
1
  import { type SlotNames, type VariantProps } from '../../utils/variants.js';
2
- export declare const drawerVariants: (props?: import("../../utils/variants.js").TVProps<{
3
- placement: {
4
- left: {
5
- dialog: string;
6
- panel: string;
7
- };
8
- right: {
9
- dialog: string;
10
- panel: string;
11
- };
12
- top: {
13
- dialog: string;
14
- panel: string;
15
- };
16
- bottom: {
17
- dialog: string;
18
- panel: string;
19
- };
20
- };
21
- size: {
22
- sm: {};
23
- md: {};
24
- lg: {};
25
- xl: {};
26
- full: {};
27
- };
28
- intent: {
29
- neutral: {};
30
- primary: {};
31
- secondary: {};
32
- success: {};
33
- warning: {};
34
- danger: {};
35
- };
36
- }> | undefined) => {
2
+ export declare const drawerVariants: ((props?: {
3
+ placement?: "top" | "right" | "bottom" | "left" | undefined;
4
+ size?: "sm" | "md" | "lg" | "xl" | "full" | undefined;
5
+ intent?: "primary" | "secondary" | "success" | "warning" | "danger" | "neutral" | undefined;
6
+ } | undefined) => {
37
7
  dialog: (props?: ({
38
8
  placement?: "top" | "right" | "bottom" | "left" | undefined;
39
9
  size?: "sm" | "md" | "lg" | "xl" | "full" | undefined;
40
10
  intent?: "primary" | "secondary" | "success" | "warning" | "danger" | "neutral" | undefined;
41
11
  } & {
42
- 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;
43
- 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;
44
13
  }) | undefined) => string;
45
14
  backdrop: (props?: ({
46
15
  placement?: "top" | "right" | "bottom" | "left" | undefined;
47
16
  size?: "sm" | "md" | "lg" | "xl" | "full" | undefined;
48
17
  intent?: "primary" | "secondary" | "success" | "warning" | "danger" | "neutral" | undefined;
49
18
  } & {
50
- 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;
51
- 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;
52
20
  }) | undefined) => string;
53
21
  panel: (props?: ({
54
22
  placement?: "top" | "right" | "bottom" | "left" | undefined;
55
23
  size?: "sm" | "md" | "lg" | "xl" | "full" | undefined;
56
24
  intent?: "primary" | "secondary" | "success" | "warning" | "danger" | "neutral" | undefined;
57
25
  } & {
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;
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;
60
27
  }) | undefined) => string;
61
28
  header: (props?: ({
62
29
  placement?: "top" | "right" | "bottom" | "left" | undefined;
63
30
  size?: "sm" | "md" | "lg" | "xl" | "full" | undefined;
64
31
  intent?: "primary" | "secondary" | "success" | "warning" | "danger" | "neutral" | undefined;
65
32
  } & {
66
- 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;
67
- 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;
68
34
  }) | undefined) => string;
69
35
  title: (props?: ({
70
36
  placement?: "top" | "right" | "bottom" | "left" | undefined;
71
37
  size?: "sm" | "md" | "lg" | "xl" | "full" | undefined;
72
38
  intent?: "primary" | "secondary" | "success" | "warning" | "danger" | "neutral" | undefined;
73
39
  } & {
74
- 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;
75
- 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;
76
41
  }) | undefined) => string;
77
42
  body: (props?: ({
78
43
  placement?: "top" | "right" | "bottom" | "left" | undefined;
79
44
  size?: "sm" | "md" | "lg" | "xl" | "full" | undefined;
80
45
  intent?: "primary" | "secondary" | "success" | "warning" | "danger" | "neutral" | undefined;
81
46
  } & {
82
- 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;
83
- 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;
84
48
  }) | undefined) => string;
85
49
  footer: (props?: ({
86
50
  placement?: "top" | "right" | "bottom" | "left" | undefined;
87
51
  size?: "sm" | "md" | "lg" | "xl" | "full" | undefined;
88
52
  intent?: "primary" | "secondary" | "success" | "warning" | "danger" | "neutral" | undefined;
89
53
  } & {
90
- 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;
91
- 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;
92
55
  }) | undefined) => string;
56
+ }) & {
57
+ readonly config: import("../../utils/variants.js").TVConfig;
93
58
  };
94
59
  export type DrawerVariants = VariantProps<typeof drawerVariants>;
95
60
  /** Slot names derived from the `tv()` config above — single source of truth for `slotClasses`. */