@urbicon-ui/blocks 6.21.0 → 6.21.2

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 (142) hide show
  1. package/dist/components/Calendar/calendar.variants.d.ts +132 -419
  2. package/dist/components/CommandPalette/commandPalette.variants.d.ts +24 -51
  3. package/dist/components/CompositionBar/CompositionBar.svelte +6 -1
  4. package/dist/components/CompositionBar/composition-bar.variants.d.ts +23 -83
  5. package/dist/components/CompositionBar/composition-bar.variants.js +9 -3
  6. package/dist/components/EmptyState/emptyState.variants.d.ts +11 -27
  7. package/dist/components/FileUpload/fileUpload.variants.d.ts +24 -93
  8. package/dist/components/Guide/GuidePanel.svelte +38 -0
  9. package/dist/components/Guide/guide.variants.d.ts +69 -124
  10. package/dist/components/Guide/guide.variants.js +6 -1
  11. package/dist/components/NumberInput/NumberInput.svelte +197 -0
  12. package/dist/components/NumberInput/NumberInput.svelte.d.ts +4 -0
  13. package/dist/components/NumberInput/index.d.ts +55 -0
  14. package/dist/components/NumberInput/index.js +1 -0
  15. package/dist/components/Planner/planner.variants.d.ts +23 -94
  16. package/dist/components/Sankey/sankey.variants.d.ts +15 -48
  17. package/dist/components/SidebarLayout/sidebar-layout.variants.d.ts +10 -38
  18. package/dist/components/SidebarLayout/sidebar-layout.variants.js +12 -2
  19. package/dist/components/ThemeSwitcher/themeSwitcher.variants.d.ts +9 -36
  20. package/dist/components/index.d.ts +2 -0
  21. package/dist/components/index.js +1 -0
  22. package/dist/i18n/index.d.ts +8 -372
  23. package/dist/internal/charts/variants.d.ts +18 -31
  24. package/dist/primitives/Accordion/Accordion.svelte +11 -0
  25. package/dist/primitives/Accordion/AccordionItem.svelte +9 -3
  26. package/dist/primitives/Accordion/accordion.variants.d.ts +12 -43
  27. package/dist/primitives/Accordion/accordion.variants.js +6 -2
  28. package/dist/primitives/Accordion/index.d.ts +12 -0
  29. package/dist/primitives/Alert/alert.variants.d.ts +21 -62
  30. package/dist/primitives/Avatar/avatar.variants.d.ts +18 -138
  31. package/dist/primitives/Badge/Badge.svelte +12 -4
  32. package/dist/primitives/Badge/badge.variants.d.ts +19 -92
  33. package/dist/primitives/Badge/badge.variants.js +11 -4
  34. package/dist/primitives/Badge/index.d.ts +26 -6
  35. package/dist/primitives/Breadcrumb/Breadcrumb.svelte +11 -6
  36. package/dist/primitives/Breadcrumb/breadcrumb.variants.d.ts +13 -40
  37. package/dist/primitives/Breadcrumb/index.d.ts +2 -2
  38. package/dist/primitives/Button/button.variants.d.ts +19 -98
  39. package/dist/primitives/Button/button.variants.js +13 -9
  40. package/dist/primitives/ButtonGroup/buttongroup.variants.d.ts +9 -29
  41. package/dist/primitives/ButtonGroup/buttongroup.variants.js +3 -1
  42. package/dist/primitives/Card/card.variants.d.ts +14 -81
  43. package/dist/primitives/Checkbox/Checkbox.svelte +3 -3
  44. package/dist/primitives/Checkbox/checkbox.variants.d.ts +18 -77
  45. package/dist/primitives/Collapsible/Collapsible.svelte +10 -0
  46. package/dist/primitives/Collapsible/collapsible.variants.d.ts +11 -40
  47. package/dist/primitives/Collapsible/collapsible.variants.js +7 -2
  48. package/dist/primitives/Collapsible/index.d.ts +16 -0
  49. package/dist/primitives/Combobox/Combobox.svelte +478 -104
  50. package/dist/primitives/Combobox/combobox.variants.d.ts +112 -94
  51. package/dist/primitives/Combobox/combobox.variants.js +94 -13
  52. package/dist/primitives/Combobox/index.d.ts +166 -51
  53. package/dist/primitives/ConfirmDialog/index.d.ts +19 -0
  54. package/dist/primitives/Dialog/Dialog.svelte +95 -10
  55. package/dist/primitives/Dialog/dialog.variants.d.ts +15 -54
  56. package/dist/primitives/Dialog/index.d.ts +12 -1
  57. package/dist/primitives/Drawer/Drawer.svelte +23 -11
  58. package/dist/primitives/Drawer/drawer.variants.d.ts +22 -49
  59. package/dist/primitives/Drawer/drawer.variants.js +45 -10
  60. package/dist/primitives/Drawer/index.d.ts +13 -4
  61. package/dist/primitives/FormField/FormField.svelte +6 -6
  62. package/dist/primitives/FormField/index.d.ts +13 -4
  63. package/dist/primitives/Input/Input.svelte +8 -4
  64. package/dist/primitives/Input/input.variants.d.ts +32 -139
  65. package/dist/primitives/Input/input.variants.js +12 -10
  66. package/dist/primitives/JourneyTimeline/journey-timeline.variants.d.ts +55 -197
  67. package/dist/primitives/JourneyTimeline/journey-timeline.variants.js +4 -1
  68. package/dist/primitives/Menu/Menu.svelte +66 -4
  69. package/dist/primitives/Menu/index.d.ts +25 -0
  70. package/dist/primitives/Menu/menu.variants.d.ts +29 -93
  71. package/dist/primitives/Pagination/Pagination.svelte +28 -13
  72. package/dist/primitives/Pagination/index.d.ts +44 -0
  73. package/dist/primitives/Pagination/pagination.variants.d.ts +16 -54
  74. package/dist/primitives/Pagination/pagination.variants.js +16 -14
  75. package/dist/primitives/Popover/Popover.svelte +11 -1
  76. package/dist/primitives/Popover/index.d.ts +3 -3
  77. package/dist/primitives/Popover/popover.variants.d.ts +4 -2
  78. package/dist/primitives/Progress/progress.variants.d.ts +19 -83
  79. package/dist/primitives/Progress/progress.variants.js +2 -1
  80. package/dist/primitives/RadioGroup/RadioGroup.svelte +3 -3
  81. package/dist/primitives/RadioGroup/radioGroup.variants.d.ts +28 -109
  82. package/dist/primitives/SegmentGroup/SegmentGroup.svelte +14 -6
  83. package/dist/primitives/SegmentGroup/segmentgroup.variants.d.ts +12 -53
  84. package/dist/primitives/SegmentGroup/segmentgroup.variants.js +10 -10
  85. package/dist/primitives/Select/Select.svelte +21 -11
  86. package/dist/primitives/Select/index.d.ts +7 -0
  87. package/dist/primitives/Select/select.variants.d.ts +61 -150
  88. package/dist/primitives/Select/select.variants.js +24 -4
  89. package/dist/primitives/Separator/separator.variants.d.ts +4 -2
  90. package/dist/primitives/Sidebar/Sidebar.svelte +10 -15
  91. package/dist/primitives/Sidebar/sidebar.variants.d.ts +11 -29
  92. package/dist/primitives/Skeleton/skeleton.variants.d.ts +9 -36
  93. package/dist/primitives/Slider/Slider.svelte +4 -8
  94. package/dist/primitives/Slider/slider.variants.d.ts +37 -136
  95. package/dist/primitives/Slider/slider.variants.js +8 -5
  96. package/dist/primitives/Spinner/spinner.variants.d.ts +38 -135
  97. package/dist/primitives/Stepper/stepper.variants.d.ts +32 -130
  98. package/dist/primitives/Tab/Tab.svelte +14 -6
  99. package/dist/primitives/Tab/tab.variants.d.ts +17 -78
  100. package/dist/primitives/Textarea/Textarea.svelte +4 -5
  101. package/dist/primitives/Textarea/textarea.variants.d.ts +33 -118
  102. package/dist/primitives/Textarea/textarea.variants.js +17 -12
  103. package/dist/primitives/Toast/Toaster.svelte +58 -5
  104. package/dist/primitives/Toast/index.d.ts +39 -0
  105. package/dist/primitives/Toast/toast.store.svelte.d.ts +25 -1
  106. package/dist/primitives/Toast/toast.store.svelte.js +91 -1
  107. package/dist/primitives/Toast/toast.variants.d.ts +40 -78
  108. package/dist/primitives/Toast/toast.variants.js +15 -0
  109. package/dist/primitives/Toggle/Toggle.svelte +17 -3
  110. package/dist/primitives/Toggle/index.d.ts +8 -2
  111. package/dist/primitives/Toggle/toggle.variants.d.ts +24 -71
  112. package/dist/primitives/Toggle/toggle.variants.js +26 -0
  113. package/dist/primitives/Toolbar/toolbar.variants.d.ts +9 -60
  114. package/dist/primitives/Tooltip/Tooltip.svelte +58 -21
  115. package/dist/primitives/Tooltip/Tooltip.svelte.d.ts +1 -1
  116. package/dist/primitives/Tooltip/index.d.ts +45 -3
  117. package/dist/primitives/Tooltip/tooltip.variants.d.ts +14 -53
  118. package/dist/primitives/Tooltip/tooltip.variants.js +9 -3
  119. package/dist/primitives/index.d.ts +3 -3
  120. package/dist/style/foundation.css +4 -1
  121. package/dist/style/interaction.css +39 -11
  122. package/dist/style/semantic.css +2 -2
  123. package/dist/style/themes/index.css +1 -1
  124. package/dist/translations/de.d.ts +3 -0
  125. package/dist/translations/de.js +4 -1
  126. package/dist/translations/en.d.ts +3 -0
  127. package/dist/translations/en.js +4 -1
  128. package/dist/utils/guide.svelte.d.ts +8 -2
  129. package/dist/utils/guide.svelte.js +86 -5
  130. package/dist/utils/index.d.ts +2 -1
  131. package/dist/utils/index.js +5 -0
  132. package/dist/utils/overlay.d.ts +33 -4
  133. package/dist/utils/overlay.js +61 -18
  134. package/dist/utils/roving.d.ts +15 -0
  135. package/dist/utils/roving.js +44 -0
  136. package/dist/utils/use-floating-panel.svelte.d.ts +4 -1
  137. package/dist/utils/use-floating-panel.svelte.js +23 -1
  138. package/dist/utils/use-form-field.svelte.d.ts +9 -9
  139. package/dist/utils/use-form-field.svelte.js +12 -12
  140. package/dist/utils/variants.d.ts +60 -16
  141. package/dist/utils/variants.js +424 -123
  142. package/package.json +9 -6
@@ -1,4 +1,5 @@
1
1
  <script lang="ts" generics="TItem extends MenuItemType = MenuItemType">
2
+ import { tick } from 'svelte';
2
3
  import { useBlocksI18n } from '../..';
3
4
  import { getBlocksConfig, resolveSlotClasses } from '../../provider';
4
5
  import { Button, menuVariants, type MenuVariants } from '..';
@@ -27,11 +28,13 @@
27
28
  disabled = false,
28
29
  loading = false,
29
30
  open = $bindable(false),
31
+ onOpenChange,
30
32
  id: idProp,
31
33
  placement = 'bottom-start',
32
34
  syncWidth = true,
33
35
  usePortal = true,
34
36
  customTrigger,
37
+ contextTrigger,
35
38
  customItem,
36
39
  customHeader,
37
40
  customFooter,
@@ -71,6 +74,31 @@
71
74
  let openSubMenus = $state<Set<string>>(new Set());
72
75
  const childrenMode = $derived(!!children);
73
76
 
77
+ // ── Context-menu (right-click) anchoring ───────────────────────────────
78
+ // A context menu has no trigger button — it opens at the cursor. Floating UI
79
+ // anchors to an element, not a point, so a 0×0 fixed-position element is
80
+ // parked at the click coordinates and handed to Popover as the trigger.
81
+ let cursorAnchor = $state<HTMLElement>();
82
+ let contextX = $state(0);
83
+ let contextY = $state(0);
84
+
85
+ async function handleContextMenu(event: MouseEvent) {
86
+ if (disabled || loading) return;
87
+ // Suppress the native browser menu and anchor ours at the cursor.
88
+ event.preventDefault();
89
+ contextX = event.clientX;
90
+ contextY = event.clientY;
91
+ // Re-open at the new spot even if it was already open elsewhere: close and
92
+ // let Popover tear down (await tick) before reopening, so it re-reads the
93
+ // moved anchor rect. A synchronous setOpen(false)+setOpen(true) batches into
94
+ // no net change and would strand the menu at the previous cursor position.
95
+ if (open) {
96
+ setOpen(false);
97
+ await tick();
98
+ }
99
+ setOpen(true);
100
+ }
101
+
74
102
  // Map of declarative MenuItems by id — populated via the context's
75
103
  // `registerItem` / `unregisterItem` hooks. Used to debug + (in future)
76
104
  // power type-ahead search; the keyboard model itself walks DOM-focusable
@@ -127,13 +155,25 @@
127
155
  }
128
156
 
129
157
  // ── Open / close lifecycle ─────────────────────────────────────────────
158
+ // Single mutation point for internally-driven open changes, so
159
+ // `onOpenChange` fires exactly once per transition. Popover-owned dismiss
160
+ // paths (outside click) mutate `open` via `bind:open` instead and report
161
+ // through the forwarded Popover `onOpenChange` — the Escape path can't
162
+ // double-fire because `handlePanelKeydown` calls `preventDefault()`,
163
+ // which Popover's document-level Escape listener honors.
164
+ function setOpen(next: boolean) {
165
+ if (open === next) return;
166
+ open = next;
167
+ onOpenChange?.(next);
168
+ }
169
+
130
170
  function toggle() {
131
171
  if (disabled || loading) return;
132
- open = !open;
172
+ setOpen(!open);
133
173
  }
134
174
 
135
175
  function dismiss() {
136
- open = false;
176
+ setOpen(false);
137
177
  triggerRef?.focus();
138
178
  }
139
179
 
@@ -363,6 +403,26 @@
363
403
  .join(' ')}
364
404
  {...restProps}
365
405
  >
406
+ {#if contextTrigger}
407
+ <!-- Right-click target. `display: contents` drops the wrapper from layout so
408
+ the consumer's own element controls sizing; the contextmenu event still
409
+ bubbles to the handler. -->
410
+ <!-- svelte-ignore a11y_no_static_element_interactions -->
411
+ <div class="contents" oncontextmenu={handleContextMenu}>
412
+ {@render contextTrigger()}
413
+ </div>
414
+ <!-- 0×0 anchor parked at the cursor for Popover to position the menu against. -->
415
+ <div
416
+ bind:this={cursorAnchor}
417
+ aria-hidden="true"
418
+ style:position="fixed"
419
+ style:left="{contextX}px"
420
+ style:top="{contextY}px"
421
+ style:width="0"
422
+ style:height="0"
423
+ ></div>
424
+ {/if}
425
+
366
426
  {#snippet triggerContent()}
367
427
  {#if customTrigger}
368
428
  {@render customTrigger(toggle, open, dismiss)}
@@ -414,13 +474,15 @@
414
474
  -->
415
475
  <Popover
416
476
  bind:open
477
+ onOpenChange={(o) => onOpenChange?.(o)}
417
478
  placement={placement as import('../../utils/floating').Placement}
418
479
  {usePortal}
419
480
  autoTrigger={false}
420
481
  unstyled
421
- syncMinWidth={syncWidth}
482
+ syncMinWidth={contextTrigger ? false : syncWidth}
422
483
  offsetDistance={effectiveTier === 'commit' ? 8 : 4}
423
- trigger={triggerContent}
484
+ trigger={contextTrigger ? undefined : triggerContent}
485
+ triggerElement={contextTrigger ? cursorAnchor : undefined}
424
486
  >
425
487
  <div
426
488
  bind:this={panelRef}
@@ -119,6 +119,12 @@ export interface MenuSpecificProps<TItem extends MenuItemType = MenuItemType> {
119
119
  * @default false
120
120
  */
121
121
  open?: boolean;
122
+ /**
123
+ * Fires when the menu opens or closes from user interaction (trigger
124
+ * click, item activation, Escape, Tab-out, outside click). Receives the
125
+ * new open state. Not called when the consumer writes `bind:open` directly.
126
+ */
127
+ onOpenChange?: (open: boolean) => void;
122
128
  /**
123
129
  * Button variant applied to the default trigger button.
124
130
  * @default 'outlined'
@@ -252,6 +258,25 @@ export interface MenuCustomSlots<TItem extends MenuItemType = MenuItemType> {
252
258
  * `aria-expanded={open}` + `aria-haspopup="menu"` for ARIA correctness.
253
259
  */
254
260
  customTrigger?: Snippet<[() => void, boolean, () => void]>;
261
+ /**
262
+ * Turn the menu into a **context menu**: instead of a trigger button, the
263
+ * snippet you pass becomes a right-click target. A `contextmenu` (right-click
264
+ * or long-press) on it opens the menu at the cursor position — the native
265
+ * browser context menu is suppressed. Keyboard navigation, dismissal and
266
+ * item selection behave exactly as in the dropdown menu; on dismiss, focus
267
+ * returns to wherever it was. Mutually exclusive with `customTrigger`/the
268
+ * default trigger button (when set, no trigger button renders).
269
+ *
270
+ * @example
271
+ * ```svelte
272
+ * <Menu {items} contextTrigger>
273
+ * {#snippet contextTrigger()}
274
+ * <div class="rounded-modify border border-border-subtle p-8">Right-click me</div>
275
+ * {/snippet}
276
+ * </Menu>
277
+ * ```
278
+ */
279
+ contextTrigger?: Snippet;
255
280
  /**
256
281
  * Custom per-item content. **Render visible content only** — the outer
257
282
  * `role="menuitem"` button is provided by Menu and handles the click /
@@ -1,69 +1,14 @@
1
1
  import { type SlotNames, type VariantProps } from '../../utils/variants.js';
2
- export declare const menuVariants: (props?: import("../../utils/variants.js").TVProps<{
3
- open: {
4
- true: {
5
- base: string;
6
- };
7
- };
8
- syncWidth: {
9
- true: {
10
- content: string;
11
- };
12
- false: {
13
- content: string;
14
- };
15
- };
16
- itemSize: {
17
- sm: {
18
- item: string;
19
- };
20
- md: {
21
- item: string;
22
- };
23
- lg: {
24
- item: string;
25
- };
26
- };
27
- disabled: {
28
- true: {
29
- item: string;
30
- };
31
- };
32
- placement: {
33
- 'bottom-start': {};
34
- bottom: {};
35
- 'bottom-end': {};
36
- 'top-start': {};
37
- top: {};
38
- 'top-end': {};
39
- };
40
- chevronAnimation: {
41
- rotate: {
42
- chevron: string;
43
- };
44
- translate: {
45
- chevron: string;
46
- };
47
- fade: {
48
- chevron: string;
49
- };
50
- none: {};
51
- };
52
- usePortal: {
53
- true: {
54
- content: string;
55
- };
56
- false: {};
57
- };
58
- tier: {
59
- commit: {
60
- content: string;
61
- };
62
- modify: {
63
- content: string;
64
- };
65
- };
66
- }> | undefined) => {
2
+ export declare const menuVariants: ((props?: {
3
+ open?: boolean | undefined;
4
+ syncWidth?: boolean | undefined;
5
+ itemSize?: "sm" | "md" | "lg" | undefined;
6
+ disabled?: boolean | undefined;
7
+ placement?: "top" | "bottom" | "top-start" | "top-end" | "bottom-start" | "bottom-end" | undefined;
8
+ chevronAnimation?: "rotate" | "translate" | "none" | "fade" | undefined;
9
+ usePortal?: boolean | undefined;
10
+ tier?: "commit" | "modify" | undefined;
11
+ } | undefined) => {
67
12
  base: (props?: ({
68
13
  open?: boolean | undefined;
69
14
  syncWidth?: boolean | undefined;
@@ -74,8 +19,7 @@ export declare const menuVariants: (props?: import("../../utils/variants.js").TV
74
19
  usePortal?: boolean | undefined;
75
20
  tier?: "commit" | "modify" | undefined;
76
21
  } & {
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;
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;
79
23
  }) | undefined) => string;
80
24
  trigger: (props?: ({
81
25
  open?: boolean | undefined;
@@ -87,8 +31,7 @@ export declare const menuVariants: (props?: import("../../utils/variants.js").TV
87
31
  usePortal?: boolean | undefined;
88
32
  tier?: "commit" | "modify" | undefined;
89
33
  } & {
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;
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;
92
35
  }) | undefined) => string;
93
36
  triggerText: (props?: ({
94
37
  open?: boolean | undefined;
@@ -100,8 +43,7 @@ export declare const menuVariants: (props?: import("../../utils/variants.js").TV
100
43
  usePortal?: boolean | undefined;
101
44
  tier?: "commit" | "modify" | undefined;
102
45
  } & {
103
- 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;
104
- 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;
46
+ 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;
105
47
  }) | undefined) => string;
106
48
  chevron: (props?: ({
107
49
  open?: boolean | undefined;
@@ -113,8 +55,7 @@ export declare const menuVariants: (props?: import("../../utils/variants.js").TV
113
55
  usePortal?: boolean | undefined;
114
56
  tier?: "commit" | "modify" | undefined;
115
57
  } & {
116
- 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;
117
- 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;
58
+ 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;
118
59
  }) | undefined) => string;
119
60
  content: (props?: ({
120
61
  open?: boolean | undefined;
@@ -126,8 +67,7 @@ export declare const menuVariants: (props?: import("../../utils/variants.js").TV
126
67
  usePortal?: boolean | undefined;
127
68
  tier?: "commit" | "modify" | undefined;
128
69
  } & {
129
- 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;
130
- 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;
70
+ 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;
131
71
  }) | undefined) => string;
132
72
  header: (props?: ({
133
73
  open?: boolean | undefined;
@@ -139,8 +79,7 @@ export declare const menuVariants: (props?: import("../../utils/variants.js").TV
139
79
  usePortal?: boolean | undefined;
140
80
  tier?: "commit" | "modify" | undefined;
141
81
  } & {
142
- 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;
143
- 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;
82
+ 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;
144
83
  }) | undefined) => string;
145
84
  section: (props?: ({
146
85
  open?: boolean | undefined;
@@ -152,8 +91,7 @@ export declare const menuVariants: (props?: import("../../utils/variants.js").TV
152
91
  usePortal?: boolean | undefined;
153
92
  tier?: "commit" | "modify" | undefined;
154
93
  } & {
155
- 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;
156
- 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;
94
+ 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;
157
95
  }) | undefined) => string;
158
96
  divider: (props?: ({
159
97
  open?: boolean | undefined;
@@ -165,8 +103,7 @@ export declare const menuVariants: (props?: import("../../utils/variants.js").TV
165
103
  usePortal?: boolean | undefined;
166
104
  tier?: "commit" | "modify" | undefined;
167
105
  } & {
168
- 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;
169
- 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;
106
+ 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;
170
107
  }) | undefined) => string;
171
108
  items: (props?: ({
172
109
  open?: boolean | undefined;
@@ -178,8 +115,7 @@ export declare const menuVariants: (props?: import("../../utils/variants.js").TV
178
115
  usePortal?: boolean | undefined;
179
116
  tier?: "commit" | "modify" | undefined;
180
117
  } & {
181
- 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;
182
- 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;
118
+ 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;
183
119
  }) | undefined) => string;
184
120
  item: (props?: ({
185
121
  open?: boolean | undefined;
@@ -191,8 +127,7 @@ export declare const menuVariants: (props?: import("../../utils/variants.js").TV
191
127
  usePortal?: boolean | undefined;
192
128
  tier?: "commit" | "modify" | undefined;
193
129
  } & {
194
- 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;
195
- 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;
130
+ 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;
196
131
  }) | undefined) => string;
197
132
  indicator: (props?: ({
198
133
  open?: boolean | undefined;
@@ -204,8 +139,7 @@ export declare const menuVariants: (props?: import("../../utils/variants.js").TV
204
139
  usePortal?: boolean | undefined;
205
140
  tier?: "commit" | "modify" | undefined;
206
141
  } & {
207
- 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;
208
- 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;
142
+ 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;
209
143
  }) | undefined) => string;
210
144
  submenu: (props?: ({
211
145
  open?: boolean | undefined;
@@ -217,8 +151,7 @@ export declare const menuVariants: (props?: import("../../utils/variants.js").TV
217
151
  usePortal?: boolean | undefined;
218
152
  tier?: "commit" | "modify" | undefined;
219
153
  } & {
220
- 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;
221
- 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;
154
+ 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;
222
155
  }) | undefined) => string;
223
156
  footer: (props?: ({
224
157
  open?: boolean | undefined;
@@ -230,16 +163,19 @@ export declare const menuVariants: (props?: import("../../utils/variants.js").TV
230
163
  usePortal?: boolean | undefined;
231
164
  tier?: "commit" | "modify" | undefined;
232
165
  } & {
233
- 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;
234
- 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;
166
+ 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;
235
167
  }) | undefined) => string;
168
+ }) & {
169
+ readonly config: import("../../utils/variants.js").TVConfig;
236
170
  };
237
- export declare const menuIconVariants: (props?: import("../../utils/variants.js").TVProps<{
171
+ export declare const menuIconVariants: ((props?: import("../../utils/variants.js").TVProps<{
238
172
  type: {
239
173
  chevron: string;
240
174
  checkmark: string;
241
175
  };
242
- }> | undefined) => string;
176
+ }> | undefined) => string) & {
177
+ readonly config: import("../../utils/variants.js").TVConfig;
178
+ };
243
179
  export type MenuVariants = VariantProps<typeof menuVariants>;
244
180
  export type MenuIconVariants = VariantProps<typeof menuIconVariants>;
245
181
  /** Slot names derived from the tv() config — single source of truth for slotClasses. */
@@ -34,6 +34,7 @@
34
34
  nextIcon,
35
35
  firstIcon,
36
36
  lastIcon,
37
+ renderItem,
37
38
  itemsPerPage = 10,
38
39
  totalItems,
39
40
  startItem,
@@ -323,19 +324,33 @@
323
324
 
324
325
  {#if showNumbers}
325
326
  {#each visiblePageNumbers as page (page)}
326
- <PaginationItem
327
- {size}
328
- {variant}
329
- {intent}
330
- {tier}
331
- {page}
332
- active={page === currentPage}
333
- disabled={disabled || loading}
334
- onPageClick={goToPage(page)}
335
- {mint}
336
- >
337
- {page}
338
- </PaginationItem>
327
+ {#if renderItem}
328
+ {@render renderItem({
329
+ page,
330
+ active: page === currentPage,
331
+ disabled: disabled || loading,
332
+ size,
333
+ variant,
334
+ intent,
335
+ tier,
336
+ mint,
337
+ select: goToPage(page)
338
+ })}
339
+ {:else}
340
+ <PaginationItem
341
+ {size}
342
+ {variant}
343
+ {intent}
344
+ {tier}
345
+ {page}
346
+ active={page === currentPage}
347
+ disabled={disabled || loading}
348
+ onPageClick={goToPage(page)}
349
+ {mint}
350
+ >
351
+ {page}
352
+ </PaginationItem>
353
+ {/if}
339
354
  {/each}
340
355
  {/if}
341
356
 
@@ -10,6 +10,33 @@ export interface PaginationPageItem {
10
10
  active?: boolean;
11
11
  disabled?: boolean;
12
12
  }
13
+ /**
14
+ * Context handed to the `renderItem` snippet for a single numbered page button.
15
+ * Bundles the page number, its active/disabled state, the style props forwarded
16
+ * from the Pagination (so a custom item stays visually consistent), and a
17
+ * `select` callback that changes the page (guarded against disabled / no-op /
18
+ * out-of-range internally).
19
+ */
20
+ export interface PaginationItemContext {
21
+ /** The 1-based page number this item represents. */
22
+ page: number;
23
+ /** Whether this item is the currently active page. */
24
+ active: boolean;
25
+ /** Whether the item is inert (component `disabled` or `loading`). */
26
+ disabled: boolean;
27
+ /** Button size forwarded from the Pagination props. */
28
+ size: 'sm' | 'md' | 'lg';
29
+ /** Button variant forwarded from the Pagination props. */
30
+ variant: 'outlined' | 'filled' | 'ghost';
31
+ /** Semantic intent forwarded from the Pagination props. */
32
+ intent: 'primary' | 'secondary' | 'success' | 'warning' | 'danger' | 'neutral';
33
+ /** Semantic radius tier forwarded from the Pagination props. */
34
+ tier?: InteractiveTier;
35
+ /** Micro-interaction preset forwarded from the Pagination props. */
36
+ mint: MintProp;
37
+ /** Navigate to this page. No-op when disabled, already active, or out of range. */
38
+ select: () => void;
39
+ }
13
40
  /**
14
41
  * @description Navigation control for paged data sets.
15
42
  * Supports multiple layouts, intents, button variants, and configurable ellipsis behaviour.
@@ -69,6 +96,23 @@ export interface PaginationProps extends Omit<PaginationVariants, 'disabled' | '
69
96
  firstIcon?: Snippet;
70
97
  /** Custom icon rendered inside the "Last" button. */
71
98
  lastIcon?: Snippet;
99
+ /**
100
+ * Render each numbered page button yourself. Receives a {@link PaginationItemContext}
101
+ * with the page number, its active/disabled state, the forwarded style props
102
+ * (size, variant, intent, tier, mint) and a `select` callback. Only affects the
103
+ * numbered page buttons in the default layout — prev/next/first/last keep their
104
+ * own icon snippets, and the ellipsis is unaffected.
105
+ *
106
+ * @example
107
+ * ```svelte
108
+ * <Pagination {currentPage} {totalPages} {onPageChange}>
109
+ * {#snippet renderItem({ page, active, disabled, select })}
110
+ * <button class:active onclick={select} {disabled}>{page}</button>
111
+ * {/snippet}
112
+ * </Pagination>
113
+ * ```
114
+ */
115
+ renderItem?: Snippet<[PaginationItemContext]>;
72
116
  /** Items shown per page. Used by the table layout to compute "Showing X to Y of Z". */
73
117
  itemsPerPage?: number;
74
118
  /** Total number of items across all pages. Used by the table layout info text. */