@makolabs/ripple 2.5.9 → 3.0.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 (186) hide show
  1. package/README.md +403 -497
  2. package/dist/adapters/storage/S3Adapter.d.ts +49 -1
  3. package/dist/adapters/storage/S3Adapter.js +38 -1
  4. package/dist/adapters/storage/types.d.ts +20 -0
  5. package/dist/ai/AIChatInterface.svelte +2 -1
  6. package/dist/ai/AIChatInterface.svelte.d.ts +2 -1
  7. package/dist/ai/CodeRenderer.svelte +7 -2
  8. package/dist/ai/CodeRenderer.svelte.d.ts +2 -1
  9. package/dist/ai/ComposeDropdown.svelte +1 -1
  10. package/dist/ai/MessageBox.svelte +3 -3
  11. package/dist/ai/MessageBox.svelte.d.ts +3 -2
  12. package/dist/ai/ThinkingDisplay.svelte +4 -3
  13. package/dist/ai/ThinkingDisplay.svelte.d.ts +2 -1
  14. package/dist/ai/ai-types.d.ts +55 -1
  15. package/dist/button/Button.svelte +5 -5
  16. package/dist/button/button-types.d.ts +49 -4
  17. package/dist/button/button.d.ts +9 -9
  18. package/dist/button/button.js +6 -6
  19. package/dist/charts/Chart.svelte +8 -16
  20. package/dist/charts/chart-types.d.ts +78 -1
  21. package/dist/drawer/Drawer.svelte +6 -26
  22. package/dist/drawer/drawer-types.d.ts +33 -12
  23. package/dist/drawer/drawer.d.ts +3 -3
  24. package/dist/drawer/drawer.js +1 -1
  25. package/dist/elements/accordion/Accordion.svelte +6 -17
  26. package/dist/elements/accordion/accordion-types.d.ts +53 -6
  27. package/dist/elements/alert/Alert.svelte +3 -0
  28. package/dist/elements/badge/Badge.svelte +1 -1
  29. package/dist/elements/badge/badge-types.d.ts +22 -0
  30. package/dist/elements/badge/badge.d.ts +3 -3
  31. package/dist/elements/badge/badge.js +1 -1
  32. package/dist/elements/combobox/ComboBox.svelte +244 -0
  33. package/dist/elements/combobox/ComboBox.svelte.d.ts +4 -0
  34. package/dist/elements/combobox/combobox-types.d.ts +41 -0
  35. package/dist/elements/combobox/combobox-types.js +1 -0
  36. package/dist/elements/context-menu/ContextMenu.svelte +137 -0
  37. package/dist/elements/context-menu/ContextMenu.svelte.d.ts +4 -0
  38. package/dist/elements/context-menu/context-menu-types.d.ts +40 -0
  39. package/dist/elements/context-menu/context-menu-types.js +1 -0
  40. package/dist/elements/dropdown/Dropdown.svelte +1 -1
  41. package/dist/elements/dropdown/Select.svelte +4 -1
  42. package/dist/elements/dropdown/dropdown-types.d.ts +114 -0
  43. package/dist/elements/dropdown/dropdown.d.ts +3 -3
  44. package/dist/elements/dropdown/dropdown.js +2 -2
  45. package/dist/elements/dropdown/select.d.ts +3 -108
  46. package/dist/elements/dropdown/select.js +38 -47
  47. package/dist/elements/empty-state/EmptyState.svelte +1 -1
  48. package/dist/elements/empty-state/empty-state-types.d.ts +32 -1
  49. package/dist/elements/empty-state/empty-state.d.ts +3 -3
  50. package/dist/elements/empty-state/empty-state.js +2 -2
  51. package/dist/elements/file-upload/FileUpload.svelte +5 -0
  52. package/dist/elements/file-upload/file-upload-types.d.ts +59 -0
  53. package/dist/elements/pagination/Pagination.svelte +53 -21
  54. package/dist/elements/pagination/Pagination.svelte.d.ts +33 -5
  55. package/dist/elements/popover/Popover.svelte +254 -0
  56. package/dist/elements/popover/Popover.svelte.d.ts +4 -0
  57. package/dist/elements/popover/index.d.ts +2 -0
  58. package/dist/elements/popover/index.js +1 -0
  59. package/dist/elements/popover/popover-types.d.ts +60 -0
  60. package/dist/elements/popover/popover-types.js +1 -0
  61. package/dist/elements/progress/Progress.svelte +32 -7
  62. package/dist/elements/progress/progress-types.d.ts +48 -1
  63. package/dist/elements/skeleton/Skeleton.svelte +56 -0
  64. package/dist/elements/skeleton/Skeleton.svelte.d.ts +4 -0
  65. package/dist/elements/skeleton/index.d.ts +2 -0
  66. package/dist/elements/skeleton/index.js +1 -0
  67. package/dist/elements/skeleton/skeleton-types.d.ts +50 -0
  68. package/dist/elements/skeleton/skeleton-types.js +1 -0
  69. package/dist/elements/spinner/Spinner.svelte +1 -1
  70. package/dist/elements/spinner/spinner-types.d.ts +20 -0
  71. package/dist/elements/spinner/spinner.d.ts +3 -3
  72. package/dist/elements/spinner/spinner.js +2 -2
  73. package/dist/elements/tooltip/Tooltip.svelte +108 -11
  74. package/dist/elements/tooltip/tooltip-types.d.ts +49 -1
  75. package/dist/file-browser/FileBrowser.svelte +21 -12
  76. package/dist/filters/CompactFilters.svelte +221 -33
  77. package/dist/filters/CompactFilters.svelte.d.ts +1 -1
  78. package/dist/filters/FilterBar.svelte +184 -0
  79. package/dist/filters/FilterBar.svelte.d.ts +4 -0
  80. package/dist/filters/FilterPopover.svelte +346 -0
  81. package/dist/filters/FilterPopover.svelte.d.ts +4 -0
  82. package/dist/filters/date-presets.d.ts +15 -0
  83. package/dist/filters/date-presets.js +107 -0
  84. package/dist/filters/filter-types.d.ts +69 -3
  85. package/dist/filters/index.d.ts +5 -0
  86. package/dist/filters/index.js +4 -0
  87. package/dist/filters/sync-filters-to-url.svelte.d.ts +37 -0
  88. package/dist/filters/sync-filters-to-url.svelte.js +114 -0
  89. package/dist/forms/Checkbox.svelte +24 -9
  90. package/dist/forms/DateRange.svelte +23 -6
  91. package/dist/forms/Input.svelte +19 -19
  92. package/dist/forms/MarketSelector.svelte +9 -4
  93. package/dist/forms/NumberInput.svelte +14 -18
  94. package/dist/forms/RadioGroup.svelte +127 -0
  95. package/dist/forms/RadioGroup.svelte.d.ts +4 -0
  96. package/dist/forms/SegmentedControl.svelte +11 -4
  97. package/dist/forms/Slider.svelte +72 -3
  98. package/dist/forms/Tags.svelte +44 -14
  99. package/dist/forms/Textarea.svelte +121 -0
  100. package/dist/forms/Textarea.svelte.d.ts +4 -0
  101. package/dist/forms/Toggle.svelte +30 -22
  102. package/dist/forms/calendar/Calendar.svelte +315 -0
  103. package/dist/forms/calendar/Calendar.svelte.d.ts +4 -0
  104. package/dist/forms/calendar/calendar-types.d.ts +54 -0
  105. package/dist/forms/calendar/calendar-types.js +1 -0
  106. package/dist/forms/calendar/index.d.ts +2 -0
  107. package/dist/forms/calendar/index.js +1 -0
  108. package/dist/forms/date-picker/DatePicker.svelte +141 -0
  109. package/dist/forms/date-picker/DatePicker.svelte.d.ts +4 -0
  110. package/dist/forms/date-picker/date-picker-types.d.ts +29 -0
  111. package/dist/forms/date-picker/date-picker-types.js +1 -0
  112. package/dist/forms/form-size.d.ts +37 -0
  113. package/dist/forms/form-size.js +67 -0
  114. package/dist/forms/form-types.d.ts +430 -6
  115. package/dist/forms/market/market-selector-types.d.ts +52 -1
  116. package/dist/forms/segmented-control.d.ts +5 -2
  117. package/dist/forms/segmented-control.js +25 -13
  118. package/dist/forms/slider.d.ts +3 -3
  119. package/dist/forms/slider.js +37 -30
  120. package/dist/funcs/user-management.remote.js +1 -1
  121. package/dist/header/Breadcrumbs.svelte +4 -20
  122. package/dist/header/PageHeader.svelte +6 -14
  123. package/dist/header/breadcrumbs.d.ts +3 -11
  124. package/dist/header/breadcrumbs.js +10 -5
  125. package/dist/header/header-types.d.ts +62 -11
  126. package/dist/index.d.ts +35 -9
  127. package/dist/index.js +24 -4
  128. package/dist/layout/activity-list/ActivityList.svelte +13 -7
  129. package/dist/layout/activity-list/activity-list-types.d.ts +46 -7
  130. package/dist/layout/card/Card.svelte +12 -15
  131. package/dist/layout/card/MetricCard.svelte +50 -32
  132. package/dist/layout/card/card-types.d.ts +114 -4
  133. package/dist/layout/navbar/navbar-types.d.ts +48 -0
  134. package/dist/layout/navbar/navbar.d.ts +3 -3
  135. package/dist/layout/navbar/navbar.js +2 -2
  136. package/dist/layout/sidebar/Sidebar.svelte +87 -11
  137. package/dist/layout/sidebar/sidebar-types.d.ts +60 -1
  138. package/dist/layout/stepper/Stepper.svelte +288 -0
  139. package/dist/layout/stepper/Stepper.svelte.d.ts +4 -0
  140. package/dist/layout/stepper/stepper-types.d.ts +80 -0
  141. package/dist/layout/stepper/stepper-types.js +1 -0
  142. package/dist/layout/table/Table.svelte +91 -85
  143. package/dist/layout/table/table-types.d.ts +148 -24
  144. package/dist/layout/table/table.d.ts +3 -3
  145. package/dist/layout/table/table.js +2 -2
  146. package/dist/layout/tabs/Tab.svelte +6 -2
  147. package/dist/layout/tabs/Tab.svelte.d.ts +4 -1
  148. package/dist/layout/tabs/TabGroup.svelte +9 -2
  149. package/dist/layout/tabs/tabs-types.d.ts +63 -0
  150. package/dist/layout/tabs/tabs.d.ts +3 -3
  151. package/dist/layout/tabs/tabs.js +12 -6
  152. package/dist/modal/ConfirmDialog.svelte +65 -0
  153. package/dist/modal/ConfirmDialog.svelte.d.ts +4 -0
  154. package/dist/modal/Modal.svelte +6 -26
  155. package/dist/modal/confirm-dialog-types.d.ts +39 -0
  156. package/dist/modal/confirm-dialog-types.js +1 -0
  157. package/dist/modal/modal-types.d.ts +51 -12
  158. package/dist/modal/modal.d.ts +3 -3
  159. package/dist/modal/modal.js +3 -3
  160. package/dist/pipeline/Pipeline.svelte +8 -3
  161. package/dist/pipeline/pipeline-types.d.ts +55 -3
  162. package/dist/pipeline/pipeline.d.ts +18 -3
  163. package/dist/pipeline/pipeline.js +7 -2
  164. package/dist/server/s3.d.ts +35 -3
  165. package/dist/sonner/Toaster.svelte +29 -0
  166. package/dist/sonner/Toaster.svelte.d.ts +4 -0
  167. package/dist/sonner/index.d.ts +21 -0
  168. package/dist/sonner/index.js +20 -0
  169. package/dist/user-management/UserManagement.svelte +22 -16
  170. package/dist/user-management/UserModal.svelte +10 -7
  171. package/dist/user-management/UserTable.svelte +16 -17
  172. package/dist/user-management/UserViewModal.svelte +11 -11
  173. package/dist/user-management/user-management-types.d.ts +118 -31
  174. package/dist/variants.d.ts +1 -1
  175. package/dist/variants.js +1 -1
  176. package/package.json +7 -4
  177. package/dist/config/ai.d.ts +0 -13
  178. package/dist/config/ai.js +0 -44
  179. package/dist/elements/empty-state/EmptyStateTestWrapper.svelte +0 -25
  180. package/dist/elements/empty-state/EmptyStateTestWrapper.svelte.d.ts +0 -8
  181. package/dist/elements/tooltip/TooltipTestWrapper.svelte +0 -14
  182. package/dist/elements/tooltip/TooltipTestWrapper.svelte.d.ts +0 -7
  183. package/dist/helper/deprecation.d.ts +0 -14
  184. package/dist/helper/deprecation.js +0 -24
  185. package/dist/modal/ModalFooterTestWrapper.svelte +0 -17
  186. package/dist/modal/ModalFooterTestWrapper.svelte.d.ts +0 -8
@@ -1,8 +1,11 @@
1
1
  import { tv } from 'tailwind-variants';
2
2
  import { cn } from '../helper/cls.js';
3
- import { Color, Size } from '../variants.js';
3
+ import { Color } from '../variants.js';
4
+ import { formSizeTokens } from './form-size.js';
4
5
  export const segmentedTrack = tv({
5
- base: 'inline-flex overflow-hidden rounded-lg border',
6
+ // `max-w-full overflow-x-auto` + hidden scrollbar lets a long segment
7
+ // row swipe on narrow viewports instead of bleeding past the parent.
8
+ base: 'inline-flex max-w-full overflow-x-auto rounded-lg border [scrollbar-width:none] [&::-webkit-scrollbar]:hidden',
6
9
  variants: {
7
10
  appearance: {
8
11
  surface: 'border-default-200 bg-white p-0',
@@ -11,7 +14,13 @@ export const segmentedTrack = tv({
11
14
  },
12
15
  orientation: {
13
16
  horizontal: 'flex-row',
14
- vertical: 'w-full flex-col'
17
+ vertical: 'w-full flex-col',
18
+ // `auto`: horizontal + content width by default, flips to full-width
19
+ // column when the parent @container drops below 250px. Component
20
+ // sets `@container` on the rootClass wrapper for the query to resolve.
21
+ // `w-fit` prevents flex-stretch when labelLayout='above' puts this
22
+ // inside a flex-col root.
23
+ auto: 'w-fit flex-row @max-[250px]:w-full @max-[250px]:flex-col'
15
24
  }
16
25
  },
17
26
  defaultVariants: {
@@ -28,25 +37,28 @@ const selectedByColor = {
28
37
  [Color.WARNING]: 'bg-warning-600 text-white shadow-sm',
29
38
  [Color.DANGER]: 'bg-danger-600 text-white shadow-sm'
30
39
  };
31
- const segmentSize = {
32
- [Size.XS]: 'gap-1 px-2 py-1 text-xs',
33
- [Size.SM]: 'gap-1.5 px-3 py-1.5 text-xs',
34
- [Size.BASE]: 'gap-1.5 px-3 py-1.5 text-sm',
35
- [Size.LG]: 'gap-2 px-4 py-2 text-base',
36
- [Size.XL]: 'gap-2 px-4 py-2.5 text-lg',
37
- [Size.XXL]: 'gap-2 px-5 py-3 text-xl'
38
- };
40
+ // Pull padding/text/gap from the shared form-size tokens so a
41
+ // SegmentedControl at `size="md"` coordinates with Input / Select /
42
+ // DateRange / etc. at the same tier. Segments don't use `height` —
43
+ // their height falls out of text + padding.
44
+ function segmentSize(size) {
45
+ const t = formSizeTokens[size];
46
+ return `${t.gap} ${t.padX} ${t.padY} ${t.text}`;
47
+ }
39
48
  export function segmentClasses(args) {
40
49
  const { selected, disabled, appearance, color, size } = args;
41
50
  if (appearance === 'pills') {
42
- const pillBase = cn('flex cursor-pointer items-center justify-center rounded-full font-medium transition-colors duration-150', 'focus-visible:ring-primary-500 focus-visible:ring-2 focus-visible:outline-none focus-visible:ring-offset-2', segmentSize[size], disabled && 'cursor-not-allowed opacity-50');
51
+ const pillBase = cn('flex cursor-pointer items-center justify-center rounded-full font-medium transition-colors duration-150 shrink-0 whitespace-nowrap', 'focus-visible:ring-primary-500 focus-visible:ring-2 focus-visible:outline-none focus-visible:ring-offset-2', segmentSize(size), disabled && 'cursor-not-allowed opacity-50');
43
52
  if (disabled)
44
53
  return cn(pillBase, 'text-default-400');
45
54
  if (selected)
46
55
  return cn(pillBase, selectedByColor[color]);
47
56
  return cn(pillBase, 'bg-default-100 text-default-700 hover:bg-default-200');
48
57
  }
49
- const base = cn('flex cursor-pointer items-center justify-center font-medium transition-colors duration-150', 'focus-visible:ring-primary-500 focus-visible:ring-2 focus-visible:outline-none', appearance === 'inverted' ? 'focus-visible:ring-offset-0' : 'focus-visible:ring-offset-2', segmentSize[size], disabled && 'cursor-not-allowed opacity-50');
58
+ const base = cn('flex cursor-pointer items-center justify-center font-medium transition-colors duration-150 shrink-0 whitespace-nowrap', 'focus-visible:ring-primary-500 focus-visible:ring-2 focus-visible:outline-none', appearance === 'inverted' ? 'focus-visible:ring-offset-0' : 'focus-visible:ring-offset-2',
59
+ // Inverted track has p-0.5 padding around segments — give them inner radius
60
+ // so selected segments don't render as square boxes (matches surface look).
61
+ appearance === 'inverted' && 'rounded-md', segmentSize(size), disabled && 'cursor-not-allowed opacity-50');
50
62
  if (disabled) {
51
63
  return cn(base, 'text-default-400');
52
64
  }
@@ -14,7 +14,7 @@ export declare const slider: import("tailwind-variants").TVReturnType<{
14
14
  label: string;
15
15
  value: string;
16
16
  };
17
- base: {
17
+ md: {
18
18
  track: string;
19
19
  thumb: string;
20
20
  mark: string;
@@ -82,7 +82,7 @@ export declare const slider: import("tailwind-variants").TVReturnType<{
82
82
  label: string;
83
83
  value: string;
84
84
  };
85
- base: {
85
+ md: {
86
86
  track: string;
87
87
  thumb: string;
88
88
  mark: string;
@@ -150,7 +150,7 @@ export declare const slider: import("tailwind-variants").TVReturnType<{
150
150
  label: string;
151
151
  value: string;
152
152
  };
153
- base: {
153
+ md: {
154
154
  track: string;
155
155
  thumb: string;
156
156
  mark: string;
@@ -1,62 +1,69 @@
1
1
  import { tv } from 'tailwind-variants';
2
2
  import { Size } from '../variants.js';
3
+ import { formSizeTokens } from './form-size.js';
4
+ // Track/thumb dimensions are Slider-specific — a "size" for a slider
5
+ // means the physical rail, not an input height. We keep these tuned per
6
+ // tier but pull `text` classes from the shared form-size tokens so a
7
+ // Slider's label reads the same size as an adjacent Input's text.
8
+ const textFor = (size) => formSizeTokens[size].text;
3
9
  export const slider = tv({
4
10
  slots: {
5
11
  base: 'relative w-full',
6
- track: 'absolute h-2 w-full rounded-full bg-default-200 cursor-pointer',
12
+ track: 'absolute w-full rounded-full bg-default-200 cursor-pointer',
7
13
  range: 'absolute h-full rounded-full bg-primary-500',
8
14
  thumb: [
9
15
  'absolute top-1/2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-white border-2 border-primary-500',
10
16
  'focus:outline-none focus:ring-2 focus:ring-primary-500 focus:ring-offset-2',
11
17
  'hover:scale-110 transition-transform cursor-pointer'
12
18
  ],
13
- mark: 'absolute text-sm text-default-500 -translate-x-1/2',
14
- label: 'mb-2 block text-sm font-medium text-default-700',
15
- value: 'mt-1 text-sm text-default-500'
19
+ mark: 'absolute text-default-500 -translate-x-1/2',
20
+ label: 'mb-2 block font-medium text-default-700',
21
+ value: 'mt-1 text-default-500'
16
22
  },
17
23
  variants: {
18
24
  size: {
19
25
  [Size.XS]: {
20
- track: 'h-1',
21
- thumb: 'w-3 h-3',
22
- mark: 'text-xs top-4',
23
- label: 'text-xs',
24
- value: 'text-xs'
26
+ track: 'h-0.5',
27
+ thumb: 'w-2.5 h-2.5',
28
+ mark: `${textFor(Size.XS)} top-3`,
29
+ label: textFor(Size.XS),
30
+ value: textFor(Size.XS)
25
31
  },
26
32
  [Size.SM]: {
27
33
  track: 'h-1',
28
34
  thumb: 'w-3 h-3',
29
- mark: 'text-xs top-4',
30
- label: 'text-xs',
31
- value: 'text-xs'
35
+ mark: `${textFor(Size.SM)} top-4`,
36
+ label: textFor(Size.SM),
37
+ value: textFor(Size.SM)
32
38
  },
33
- [Size.BASE]: {
34
- track: 'h-2',
35
- thumb: 'w-4 h-4',
36
- mark: 'text-sm top-6',
37
- label: 'text-sm',
38
- value: 'text-sm'
39
+ [Size.MD]: {
40
+ track: 'h-1.5',
41
+ thumb: 'w-3.5 h-3.5',
42
+ mark: `${textFor(Size.MD)} top-5`,
43
+ label: textFor(Size.MD),
44
+ value: textFor(Size.MD)
39
45
  },
40
46
  [Size.LG]: {
41
- track: 'h-3',
42
- thumb: 'w-5 h-5',
43
- mark: 'text-base top-7',
44
- label: 'text-base',
45
- value: 'text-base'
47
+ track: 'h-2',
48
+ thumb: 'w-4 h-4',
49
+ mark: `${textFor(Size.LG)} top-6`,
50
+ label: textFor(Size.LG),
51
+ value: textFor(Size.LG)
46
52
  },
47
53
  [Size.XL]: {
48
54
  track: 'h-3',
49
55
  thumb: 'w-5 h-5',
50
- mark: 'text-base top-7',
51
- label: 'text-base',
52
- value: 'text-base'
56
+ mark: `${textFor(Size.XL)} top-7`,
57
+ label: textFor(Size.XL),
58
+ value: textFor(Size.XL)
53
59
  },
60
+ // Form controls cap at xl — see `form-size.ts`.
54
61
  [Size.XXL]: {
55
62
  track: 'h-3',
56
63
  thumb: 'w-5 h-5',
57
- mark: 'text-base top-7',
58
- label: 'text-base',
59
- value: 'text-base'
64
+ mark: `${textFor(Size.XXL)} top-7`,
65
+ label: textFor(Size.XXL),
66
+ value: textFor(Size.XXL)
60
67
  }
61
68
  },
62
69
  disabled: {
@@ -76,7 +83,7 @@ export const slider = tv({
76
83
  }
77
84
  },
78
85
  defaultVariants: {
79
- size: Size.BASE,
86
+ size: Size.MD,
80
87
  disabled: false,
81
88
  hasError: false
82
89
  }
@@ -1,4 +1,4 @@
1
- import { query, command } from '$app/server';
1
+ import { command } from '$app/server';
2
2
  import { getRequestEvent } from '$app/server';
3
3
  import { env } from '$env/dynamic/private';
4
4
  import { building } from '$app/environment';
@@ -1,6 +1,5 @@
1
1
  <script lang="ts">
2
2
  import { cn } from '../helper/cls.js';
3
- import { warnDeprecatedProps } from '../helper/deprecation.js';
4
3
  import { breadcrumbs } from './breadcrumbs.js';
5
4
  import type { BreadcrumbsProps } from '../index.js';
6
5
  import { resolve } from '$app/paths';
@@ -12,27 +11,12 @@
12
11
  weight = 'medium',
13
12
  icon: SeparatorIcon,
14
13
  class: className = '',
15
- listclass,
16
- listClass = listclass ?? '',
17
- itemclass,
18
- itemClass = itemclass ?? '',
19
- separatorclass,
20
- separatorClass = separatorclass ?? '',
21
- wrapperclass,
22
- wrapperClass = wrapperclass ?? ''
14
+ listClass = '',
15
+ itemClass = '',
16
+ separatorClass = '',
17
+ wrapperClass = ''
23
18
  }: BreadcrumbsProps = $props();
24
19
 
25
- warnDeprecatedProps(
26
- 'Breadcrumbs',
27
- { listclass, itemclass, separatorclass, wrapperclass },
28
- {
29
- listclass: 'listClass',
30
- itemclass: 'itemClass',
31
- separatorclass: 'separatorClass',
32
- wrapperclass: 'wrapperClass'
33
- }
34
- );
35
-
36
20
  const { base, list, item, separator, wrapper } = $derived(
37
21
  breadcrumbs({
38
22
  size,
@@ -1,6 +1,5 @@
1
1
  <script lang="ts">
2
2
  import { cn } from '../helper/cls.js';
3
- import { warnDeprecatedProps } from '../helper/deprecation.js';
4
3
  import type { PageHeaderProps } from '../index.js';
5
4
  import Breadcrumbs from './Breadcrumbs.svelte';
6
5
 
@@ -10,19 +9,10 @@
10
9
  breadcrumbs = [],
11
10
  children,
12
11
  class: className = '',
13
- titleclass,
14
- titleClass = titleclass ?? '',
12
+ titleClass = '',
15
13
  layout = 'vertical'
16
14
  }: PageHeaderProps = $props();
17
15
 
18
- warnDeprecatedProps(
19
- 'PageHeader',
20
- { titleclass },
21
- {
22
- titleclass: 'titleClass'
23
- }
24
- );
25
-
26
16
  const defaultTitleClasses =
27
17
  'font-bold text-default-900 sm:tracking-tight sm:truncate text-2xl/7 sm:text-3xl';
28
18
 
@@ -47,9 +37,11 @@
47
37
  {/if}
48
38
  </div>
49
39
 
50
- <!-- Actions area - responsive positioning -->
40
+ <!-- Actions area - responsive positioning. `flex-wrap` lets
41
+ multiple buttons wrap to a second row on narrow viewports
42
+ instead of overflowing. -->
51
43
  {#if children}
52
- <div class="flex-shrink-0 md:ml-6">
44
+ <div class="flex flex-wrap items-center gap-2 md:ml-6 md:shrink-0">
53
45
  {@render children()}
54
46
  </div>
55
47
  {/if}
@@ -70,7 +62,7 @@
70
62
 
71
63
  <!-- Children as separate unit below -->
72
64
  {#if children}
73
- <div class="mt-4">
65
+ <div class="mt-4 flex flex-wrap items-center gap-2">
74
66
  {@render children()}
75
67
  </div>
76
68
  {/if}
@@ -13,7 +13,7 @@ export declare const breadcrumbs: import("tailwind-variants").TVReturnType<{
13
13
  sm: {
14
14
  base: string;
15
15
  };
16
- base: {
16
+ md: {
17
17
  base: string;
18
18
  };
19
19
  lg: {
@@ -86,7 +86,7 @@ export declare const breadcrumbs: import("tailwind-variants").TVReturnType<{
86
86
  sm: {
87
87
  base: string;
88
88
  };
89
- base: {
89
+ md: {
90
90
  base: string;
91
91
  };
92
92
  lg: {
@@ -159,7 +159,7 @@ export declare const breadcrumbs: import("tailwind-variants").TVReturnType<{
159
159
  sm: {
160
160
  base: string;
161
161
  };
162
- base: {
162
+ md: {
163
163
  base: string;
164
164
  };
165
165
  lg: {
@@ -232,17 +232,9 @@ export type BreadcrumbsProps = {
232
232
  color?: keyof typeof breadcrumbs.variants.color;
233
233
  icon?: Component;
234
234
  class?: ClassValue;
235
- /** @deprecated Use listClass instead */
236
- listclass?: ClassValue;
237
235
  listClass?: ClassValue;
238
- /** @deprecated Use itemClass instead */
239
- itemclass?: ClassValue;
240
236
  itemClass?: ClassValue;
241
- /** @deprecated Use separatorClass instead */
242
- separatorclass?: ClassValue;
243
237
  separatorClass?: ClassValue;
244
- /** @deprecated Use wrapperClass instead */
245
- wrapperclass?: ClassValue;
246
238
  wrapperClass?: ClassValue;
247
239
  };
248
240
  export type { BreadcrumbItem };
@@ -2,11 +2,16 @@ import { tv } from 'tailwind-variants';
2
2
  import { Size, Color } from '../variants.js';
3
3
  export const breadcrumbs = tv({
4
4
  slots: {
5
- base: 'flex',
6
- list: 'flex flex-wrap items-center space-x-2.5',
5
+ // `min-w-0` lets the breadcrumb participate in a flex/grid parent
6
+ // that constrains its width so overflow scrolling actually triggers.
7
+ base: 'flex min-w-0',
8
+ // Switched from `flex-wrap` to `flex-nowrap` + horizontal scroll so
9
+ // deep paths stay on one line on narrow viewports and swipe cleanly
10
+ // instead of reflowing into a wall of text.
11
+ list: 'flex flex-nowrap items-center space-x-2.5 overflow-x-auto [scrollbar-width:none] [&::-webkit-scrollbar]:hidden',
7
12
  item: 'flex items-center whitespace-nowrap',
8
- separator: 'flex items-center',
9
- wrapper: 'flex items-center gap-2.5'
13
+ separator: 'flex items-center shrink-0',
14
+ wrapper: 'flex items-center gap-2.5 shrink-0'
10
15
  },
11
16
  variants: {
12
17
  size: {
@@ -16,7 +21,7 @@ export const breadcrumbs = tv({
16
21
  [Size.SM]: {
17
22
  base: 'items-center text-sm'
18
23
  },
19
- [Size.BASE]: {
24
+ [Size.MD]: {
20
25
  base: 'items-center text-base'
21
26
  },
22
27
  [Size.LG]: {
@@ -2,42 +2,93 @@ import type { ClassValue } from 'tailwind-variants';
2
2
  import type { Snippet } from 'svelte';
3
3
  import type { Component } from 'svelte';
4
4
  import type { VariantColors } from '../index.js';
5
+ /** Single crumb in `<Breadcrumbs>`. */
5
6
  export type BreadcrumbItem = {
7
+ /** Visible text. */
6
8
  label: string;
9
+ /** Target URL. Use `'#'` for non-navigable items. */
7
10
  href: string;
11
+ /** Mark as the current page (last crumb, no link styling). */
8
12
  current?: boolean;
13
+ /** Optional icon rendered before the label. */
9
14
  icon?: Component;
10
15
  };
16
+ /**
17
+ * Props for `<Breadcrumbs>` — a horizontal trail of links showing the
18
+ * user's location in a hierarchy. Pair with `<PageHeader>` for a
19
+ * standard top-of-page treatment.
20
+ *
21
+ * @example
22
+ * ```svelte
23
+ * <Breadcrumbs
24
+ * items={[
25
+ * { label: 'Home', href: '/' },
26
+ * { label: 'Reports', href: '/reports' },
27
+ * { label: 'Q1 2026', href: '/reports/q1-2026', current: true }
28
+ * ]}
29
+ * />
30
+ * ```
31
+ */
11
32
  export type BreadcrumbsProps = {
33
+ /** Ordered list of crumbs from root to current. */
12
34
  items: BreadcrumbItem[];
13
- size?: 'xs' | 'sm' | 'base' | 'lg';
35
+ /** Text size scale. @default 'sm' */
36
+ size?: 'xs' | 'sm' | 'md' | 'lg';
37
+ /** @default 'medium' */
14
38
  weight?: 'normal' | 'medium' | 'semibold' | 'bold';
39
+ /** @default 'default' */
15
40
  color?: VariantColors;
41
+ /** Custom separator icon (e.g. chevron, slash). Defaults to a chevron. */
16
42
  icon?: Component;
17
43
  class?: ClassValue;
18
- /** @deprecated Use listClass instead */
19
- listclass?: ClassValue;
44
+ /** Classes on the `<ol>`. */
20
45
  listClass?: ClassValue;
21
- /** @deprecated Use itemClass instead */
22
- itemclass?: ClassValue;
46
+ /** Classes on each `<li>` item. */
23
47
  itemClass?: ClassValue;
24
- /** @deprecated Use separatorClass instead */
25
- separatorclass?: ClassValue;
48
+ /** Classes on the separator span. */
26
49
  separatorClass?: ClassValue;
27
- /** @deprecated Use wrapperClass instead */
28
- wrapperclass?: ClassValue;
50
+ /** Classes on the inner item wrapper (icon + label). */
29
51
  wrapperClass?: ClassValue;
30
52
  testId?: string;
31
53
  };
54
+ /**
55
+ * Props for `<PageHeader>` — the top-of-page title block. Combines a
56
+ * heading, optional subtitle, breadcrumbs, and a children slot for
57
+ * page-level actions (Save, Export, etc.).
58
+ *
59
+ * @example
60
+ * ```svelte
61
+ * <PageHeader
62
+ * title="Q1 2026 report"
63
+ * subtitle="Generated 2 hours ago"
64
+ * breadcrumbs={[
65
+ * { label: 'Home', href: '/' },
66
+ * { label: 'Reports', href: '/reports' }
67
+ * ]}
68
+ * >
69
+ * <Button color="primary">Export PDF</Button>
70
+ * </PageHeader>
71
+ * ```
72
+ */
32
73
  export type PageHeaderProps = {
74
+ /** Page title — main heading. */
33
75
  title: string;
76
+ /** Short subtitle below the title. */
34
77
  subtitle?: string;
78
+ /** Optional crumb trail rendered above the title. */
35
79
  breadcrumbs?: BreadcrumbItem[];
80
+ /**
81
+ * Right-aligned (horizontal layout) or below-the-title (vertical)
82
+ * content — typically page-level action buttons.
83
+ */
36
84
  children?: Snippet;
37
85
  class?: ClassValue;
38
- /** @deprecated Use titleClass instead */
39
- titleclass?: ClassValue;
86
+ /** Classes on the title element. */
40
87
  titleClass?: ClassValue;
88
+ /**
89
+ * - `'vertical'` (default): title above, actions below
90
+ * - `'horizontal'`: title left, actions right (md+ breakpoint)
91
+ */
41
92
  layout?: 'vertical' | 'horizontal';
42
93
  testId?: string;
43
94
  };
package/dist/index.d.ts CHANGED
@@ -1,10 +1,16 @@
1
1
  import { ChartColor, Color, Size } from './variants.js';
2
2
  /**
3
3
  * Size System:
4
- * - Size.*: Component dimensions (XS, SM, BASE, LG, XL, XXL)
4
+ * - Size.*: Component dimensions (XS, SM, MD, LG, XL, XXL)
5
5
  */
6
6
  export type VariantSizes = (typeof Size)[keyof typeof Size];
7
7
  export type VariantColors = (typeof Color)[keyof typeof Color];
8
+ /**
9
+ * Border-radius scale. Matches Tailwind's `rounded-*` utility suffixes
10
+ * plus `'none'` for no corners and `'full'` for fully rounded (pills,
11
+ * avatar badges). Use on any component that exposes a `rounded` prop.
12
+ */
13
+ export type RoundedSizes = 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'full';
8
14
  /**
9
15
  * Color System:
10
16
  * - Color.*: UI component colors (buttons, text, backgrounds)
@@ -19,6 +25,7 @@ export type { ClassValue } from 'tailwind-variants';
19
25
  export type { BadgeProps } from './elements/badge/badge-types.js';
20
26
  export type { BaseButtonProps, ButtonHTMLProps, AnchorHTMLProps, ButtonProps } from './button/button-types.js';
21
27
  export type { ModalProps } from './modal/modal-types.js';
28
+ export type { ConfirmDialogProps } from './modal/confirm-dialog-types.js';
22
29
  export type { DrawerProps } from './drawer/drawer-types.js';
23
30
  export type { DropdownItem, DropSection, DropHeaderConfig, DropdownMenuProps, SelectItem, SelectProps } from './elements/dropdown/dropdown-types.js';
24
31
  export type { CardProps, AlertProps, MetricDetail, MetricCardProps } from './layout/card/card-types.js';
@@ -29,7 +36,7 @@ export type { TabItem, TabProps, TabsGroupProps, TabContentProps } from './layou
29
36
  export type { NavbarLinkItem, NavbarProps } from './layout/navbar/navbar-types.js';
30
37
  export type { MenuBar, BaseNavigationItem, WithIcon, Activatable, LinkItem, ParentItem, DividerItem, NavigationItem, LogoType, NavGroupProps, NavItemProps, SidebarProps } from './layout/sidebar/sidebar-types.js';
31
38
  export type { ChartColorKey, ChartColorValue, ChartColors, ChartType, ChartColorString, XAxisConfig, YAxisConfig, SeriesConfig, ChartThreshold, ChartAnnotation, GridConfig, LegendConfig, TooltipConfig, ToolboxConfig, ChartConfig, PointClickType, ChartRenderType, ChartProps } from './charts/chart-types.js';
32
- export type { FormProps, InputProps, RadioOption, CheckboxProps, ToggleProps, CurrencyOption, NumberInputProps, DateRangeProps, DateSelectEvent, TagsProps, SliderMode, NotationType, EnumOption, SliderProps, SegmentedOption, SegmentedControlProps } from './forms/form-types.js';
39
+ export type { FormProps, InputProps, TextareaProps, RadioOption, RadioGroupProps, CheckboxProps, ToggleProps, CurrencyOption, NumberInputProps, DateRangeProps, DateSelectEvent, TagsProps, SliderMode, NotationType, EnumOption, SliderProps, SliderTick, SegmentedOption, SegmentedControlProps } from './forms/form-types.js';
33
40
  export type { CountryCode } from './forms/market/country-data.js';
34
41
  export type { MarketCode } from './forms/market/market.js';
35
42
  export { ALL_COUNTRY_CODES, COUNTRY_NAMES } from './forms/market/country-data.js';
@@ -38,22 +45,31 @@ export type { MarketSelectorProps } from './forms/market/market-selector-types.j
38
45
  export { countryCodeToFlagEmoji } from './forms/market/flag-emoji.js';
39
46
  export type { ProgressSegment, ProgressProps } from './elements/progress/progress-types.js';
40
47
  export type { SpinnerProps } from './elements/spinner/spinner-types.js';
48
+ export type { SkeletonProps, SkeletonVariant } from './elements/skeleton/skeleton-types.js';
41
49
  export type { EmptyStateProps, EmptyStateSize } from './elements/empty-state/empty-state-types.js';
42
- export type { TooltipProps, TooltipPlacement } from './elements/tooltip/tooltip-types.js';
50
+ export type { TooltipProps, TooltipPlacement, TooltipSize, TooltipVariant } from './elements/tooltip/tooltip-types.js';
51
+ export type { PopoverProps, PopoverPlacement, PopoverTrigger } from './elements/popover/popover-types.js';
52
+ export type { CalendarProps, CalendarMode } from './forms/calendar/calendar-types.js';
53
+ export type { DatePickerProps } from './forms/date-picker/date-picker-types.js';
54
+ export type { ComboBoxProps, ComboBoxItem } from './elements/combobox/combobox-types.js';
55
+ export type { ContextMenuProps, ContextMenuItem } from './elements/context-menu/context-menu-types.js';
43
56
  export type { AccordionProps } from './elements/accordion/accordion-types.js';
44
- export type { FilterTab, FilterGroup, CompactFiltersProps } from './filters/filter-types.js';
57
+ export type { FilterTab, FilterGroup, FilterSelectionValue, DatePreset, DateRangeConfig, DateRangeValue, CompactFiltersProps } from './filters/filter-types.js';
58
+ export { defaultDatePresets, toIsoDate, fromIsoDate } from './filters/date-presets.js';
59
+ export type { StepperProps, StepperStep, StepState, StepperOrientation } from './layout/stepper/stepper-types.js';
45
60
  export type { ActivityItemBadge, ActivityItemAction, ActivityItem, ActivityListProps, ActivityListSize } from './layout/activity-list/activity-list-types.js';
46
61
  export type { FileUploadProps, FileUploadSize, FilePreviewProps, UploadedFile, StagedFile } from './elements/file-upload/file-upload-types.js';
47
62
  export type { ChatMessageType, StreamingCallback, ChatAction, ChatMessage, ChatResponse, QuickAction, FileBrowserProps } from './ai/ai-types.js';
48
- export type { GetUsersOptions, GetUsersResult, UserEmail, UserPhone, User, Permission, Role, UserTableProps, UserModalProps, UserViewModalProps, UserManagementAdapter, UserManagementProps, FormErrors } from './user-management/user-management-types.js';
63
+ export type { GetUsersOptions, GetUsersResult, UserEmail, UserPhone, User, Permission, Role, UserTableProps, UserModalProps, UserModalSavePayload, UserViewModalProps, UserManagementAdapter, UserManagementProps, FormErrors } from './user-management/user-management-types.js';
49
64
  export { tv, cn } from './helper/cls.js';
50
65
  export { isRouteActive } from './helper/nav.svelte.js';
51
66
  export { default as Button } from './button/Button.svelte';
52
67
  export { default as Modal } from './modal/Modal.svelte';
53
68
  export { default as ModalFooter } from './modal/ModalFooter.svelte';
69
+ export { default as ConfirmDialog } from './modal/ConfirmDialog.svelte';
54
70
  export { default as Pipeline } from './pipeline/Pipeline.svelte';
55
71
  export { pipelineVariants } from './pipeline/pipeline.js';
56
- export type { PipelineStage, PipelineStageColor, PipelineStageEvent, PipelineStageClickEvent, PipelineStagePointerEvent, PipelineProps } from './pipeline/pipeline-types.js';
72
+ export type { PipelineStage, PipelineStageEvent, PipelineStageClickEvent, PipelineStagePointerEvent, PipelineProps } from './pipeline/pipeline-types.js';
57
73
  export { default as Drawer } from './drawer/Drawer.svelte';
58
74
  export { default as PageHeader } from './header/PageHeader.svelte';
59
75
  export { default as Breadcrumbs } from './header/Breadcrumbs.svelte';
@@ -70,34 +86,44 @@ export { default as Tab } from './layout/tabs/Tab.svelte';
70
86
  export { default as TabContent } from './layout/tabs/TabContent.svelte';
71
87
  export { default as TabGroup } from './layout/tabs/TabGroup.svelte';
72
88
  export { default as Table } from './layout/table/Table.svelte';
73
- export { default as Cells } from './layout/table/Cells.svelte';
89
+ export * as Cells from './layout/table/Cells.svelte';
74
90
  export { default as Navbar } from './layout/navbar/Navbar.svelte';
75
91
  export { default as Sidebar } from './layout/sidebar/Sidebar.svelte';
76
92
  export { default as NavItem } from './layout/sidebar/NavItem.svelte';
77
93
  export { default as NavGroup } from './layout/sidebar/NavGroup.svelte';
78
94
  export { default as ActivityList } from './layout/activity-list/ActivityList.svelte';
95
+ export { default as Stepper } from './layout/stepper/Stepper.svelte';
79
96
  export { default as Progress } from './elements/progress/Progress.svelte';
80
97
  export { default as Spinner } from './elements/spinner/Spinner.svelte';
98
+ export { default as Skeleton } from './elements/skeleton/Skeleton.svelte';
81
99
  export { spinner as spinnerVariants } from './elements/spinner/spinner.js';
82
100
  export { default as EmptyState } from './elements/empty-state/EmptyState.svelte';
83
101
  export { emptyState as emptyStateVariants } from './elements/empty-state/empty-state.js';
84
102
  export { default as Tooltip } from './elements/tooltip/Tooltip.svelte';
103
+ export { default as Popover } from './elements/popover/Popover.svelte';
104
+ export { default as ComboBox } from './elements/combobox/ComboBox.svelte';
105
+ export { default as ContextMenu } from './elements/context-menu/ContextMenu.svelte';
85
106
  export { default as Accordion } from './elements/accordion/Accordion.svelte';
86
107
  export { default as Chart } from './charts/Chart.svelte';
87
108
  export { default as FileUpload } from './elements/file-upload/FileUpload.svelte';
88
109
  export { default as FilesPreview } from './elements/file-upload/FilesPreview.svelte';
89
- export { default as Toaster } from './sonner/sonner.svelte';
110
+ export { Toaster, toast } from './sonner/index.js';
111
+ export type { ToasterProps, ToastT } from './sonner/index.js';
90
112
  export { default as AIChatInterface } from './ai/AIChatInterface.svelte';
91
113
  export { default as MermaidRenderer } from './ai/MermaidRenderer.svelte';
92
114
  export { default as CodeRenderer } from './ai/CodeRenderer.svelte';
93
115
  export * from './ai/content-detector.js';
94
116
  export { default as Form } from './forms/Form.svelte';
95
117
  export { default as Input } from './forms/Input.svelte';
118
+ export { default as Textarea } from './forms/Textarea.svelte';
119
+ export { default as RadioGroup } from './forms/RadioGroup.svelte';
96
120
  export { default as Checkbox } from './forms/Checkbox.svelte';
97
121
  export { default as Toggle } from './forms/Toggle.svelte';
98
122
  export { default as Slider } from './forms/Slider.svelte';
99
123
  export { default as NumberInput } from './forms/NumberInput.svelte';
100
124
  export { default as DateRange } from './forms/DateRange.svelte';
125
+ export { default as Calendar } from './forms/calendar/Calendar.svelte';
126
+ export { default as DatePicker } from './forms/date-picker/DatePicker.svelte';
101
127
  export { default as Tags } from './forms/Tags.svelte';
102
128
  export { default as SegmentedControl } from './forms/SegmentedControl.svelte';
103
129
  export { default as MarketSelector } from './forms/MarketSelector.svelte';
@@ -114,7 +140,7 @@ export { activityList } from './layout/activity-list/activity-list.js';
114
140
  export { slider } from './forms/slider.js';
115
141
  export type { SegmentAppearance } from './forms/segmented-control.js';
116
142
  export { segmentedTrack, segmentClasses, segmentedLabelClasses } from './forms/segmented-control.js';
117
- export { CompactFilters } from './filters/index.js';
143
+ export { CompactFilters, FilterPopover, FilterBar, syncFiltersToUrl } from './filters/index.js';
118
144
  export * from './file-browser/index.js';
119
145
  export * from './adapters/storage/index.js';
120
146
  export * from './adapters/ai/index.js';