@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
@@ -101,15 +101,15 @@
101
101
  let resizeObserver: ResizeObserver;
102
102
  let resizeTimeoutId: ReturnType<typeof setTimeout>;
103
103
 
104
- const chartColors: ChartColors = { ...defaultChartColors, ...colors };
105
- const baseColors = [
104
+ const chartColors: ChartColors = $derived({ ...defaultChartColors, ...colors });
105
+ const baseColors = $derived([
106
106
  chartColors.health,
107
107
  chartColors.other,
108
108
  chartColors.property,
109
109
  chartColors.auto,
110
110
  chartColors.life,
111
111
  chartColors.default
112
- ];
112
+ ]);
113
113
 
114
114
  function getColor(color?: ChartColorString): string | undefined {
115
115
  return color ? chartColors[color as keyof ChartColors] || color : undefined;
@@ -474,18 +474,10 @@
474
474
  barCategoryGap: '20%',
475
475
  barGap: '10%',
476
476
  color: getColor(seriesConfig.color),
477
- itemStyle: (() => {
478
- const baseHex = getColor(seriesConfig.color) ?? '#6366f1';
479
- const isStacked = !!seriesConfig.stack;
480
- const isLastInStack = isStacked
481
- ? series.filter((s) => s.stack === seriesConfig.stack).at(-1) === seriesConfig
482
- : true;
483
- return {
484
- color: barGradient(baseHex, isStacked),
485
- borderRadius: isLastInStack ? [4, 4, 0, 0] : [0, 0, 0, 0],
486
- opacity: seriesConfig.opacity ?? 1
487
- };
488
- })()
477
+ itemStyle: {
478
+ color: barGradient(getColor(seriesConfig.color) ?? '#6366f1', !!seriesConfig.stack),
479
+ opacity: seriesConfig.opacity ?? 1
480
+ }
489
481
  }),
490
482
 
491
483
  label: {
@@ -690,7 +682,7 @@
690
682
  type: 'value',
691
683
  name: axis.label,
692
684
  nameLocation: 'middle',
693
- nameGap: 50,
685
+ nameGap: axis.nameGap ?? 75,
694
686
  nameRotate: 90,
695
687
  nameTextStyle: { color: '#6b7280', fontSize: 12 },
696
688
  position: axis.position || (index === 0 ? 'left' : 'right'),
@@ -6,7 +6,12 @@ export type ChartColorValue = (typeof ChartColor)[ChartColorKey];
6
6
  export type ChartColors = {
7
7
  [K in ChartColorValue]: string;
8
8
  };
9
- export type ChartType = 'line' | 'bar' | 'horizontal-bar' | 'pie' | 'stacked-bar';
9
+ /**
10
+ * Chart series type. Note: stacked bars are done with `type: 'bar'` + a
11
+ * `stack` key on the series config — there's no separate `'stacked-bar'`
12
+ * type (ECharts doesn't ship one).
13
+ */
14
+ export type ChartType = 'line' | 'bar' | 'horizontal-bar' | 'pie';
10
15
  export type ChartColorString = `#${string}` | keyof ChartColors;
11
16
  export type ChartThreshold = {
12
17
  value: number | string;
@@ -45,6 +50,13 @@ export type YAxisConfig<T> = {
45
50
  position?: 'left' | 'right';
46
51
  min?: number;
47
52
  max?: number;
53
+ /**
54
+ * Distance in pixels between the axis line and the rotated axis name.
55
+ * The default clears typical currency labels like `'CHF 400K'`. Bump
56
+ * higher (e.g. 95) for wider labels (`'$1,234,567'`) or lower (e.g. 45)
57
+ * for short ones (`'42'`). @default 75
58
+ */
59
+ nameGap?: number;
48
60
  axisLine?: {
49
61
  show?: boolean;
50
62
  lineStyle?: {
@@ -136,14 +148,79 @@ export interface ChartRenderType<T> {
136
148
  options: ChartConfig<T>;
137
149
  };
138
150
  }
151
+ /**
152
+ * Props for `<Chart>` — a flexible ECharts wrapper supporting line, bar,
153
+ * stacked bar, horizontal bar, area, pie, and donut variants. Pass
154
+ * `data` (any array of records) and a `config` describing the axes +
155
+ * series.
156
+ *
157
+ * For per-axis overflow tuning, see `YAxisConfig.nameGap`. For
158
+ * negative-value bar styling (rounded corners on the bottom), no config
159
+ * needed — `<Chart>` infers it from the data sign.
160
+ *
161
+ * @example
162
+ * ```svelte
163
+ * <script lang="ts">
164
+ * import { Chart, ChartColor } from '@makolabs/ripple';
165
+ * const data = [
166
+ * { month: 'Jan', revenue: 12000 },
167
+ * { month: 'Feb', revenue: 18500 }
168
+ * ];
169
+ * </script>
170
+ *
171
+ * <Chart
172
+ * {data}
173
+ * config={{
174
+ * xAxis: { dataKey: 'month' },
175
+ * yAxis: [{ dataKey: 'revenue', label: 'Revenue ($)' }],
176
+ * series: [{ dataKey: 'revenue', type: 'bar', color: ChartColor.PROPERTY }]
177
+ * }}
178
+ * height="320px"
179
+ * />
180
+ * ```
181
+ *
182
+ * @example
183
+ * ```svelte
184
+ * <!-- Mixed line + bar with two Y axes -->
185
+ * <Chart
186
+ * {data}
187
+ * config={{
188
+ * xAxis: { dataKey: 'month' },
189
+ * yAxis: [
190
+ * { dataKey: 'orders', label: 'Orders' },
191
+ * { dataKey: 'revenue', label: 'Revenue ($)', position: 'right' }
192
+ * ],
193
+ * series: [
194
+ * { dataKey: 'orders', type: 'bar', name: 'Orders' },
195
+ * { dataKey: 'revenue', type: 'line', name: 'Revenue', yAxisIndex: 1 }
196
+ * ]
197
+ * }}
198
+ * onpointclick={({ detail }) => console.log(detail.originalData)}
199
+ * />
200
+ * ```
201
+ */
139
202
  export interface ChartProps<T> {
203
+ /** Source data — typically an array of records. */
140
204
  data: T[];
205
+ /** Axis + series configuration. See `ChartConfig`. */
141
206
  config: ChartConfig<T>;
207
+ /**
208
+ * Override default chart color palette. Merged with built-in defaults
209
+ * (so partial overrides work — only specify the colors you want to change).
210
+ */
142
211
  colors?: Partial<ChartColors>;
212
+ /** CSS height. @default '300px' */
143
213
  height?: string;
214
+ /** CSS width. @default '100%' */
144
215
  width?: string;
145
216
  class?: ClassValue;
217
+ /** Fires when the user clicks a data point (bar, line vertex, pie slice). */
146
218
  onpointclick?: (event: PointClickType<T>) => void;
219
+ /**
220
+ * Fires after the chart has rendered. Receives the underlying ECharts
221
+ * instance — escape hatch for advanced consumers needing direct
222
+ * access (custom plugins, imperative animation triggers, etc.).
223
+ */
147
224
  onchartrender?: (event: ChartRenderType<T>) => void;
148
225
  testId?: string;
149
226
  }
@@ -5,7 +5,6 @@
5
5
  import { quintOut } from 'svelte/easing';
6
6
  import { cn } from '../helper/cls.js';
7
7
  import { buildTestId } from '../helper/testid.js';
8
- import { warnDeprecatedProps } from '../helper/deprecation.js';
9
8
  import { drawer } from './drawer.js';
10
9
  import type { DrawerProps } from '../index.js';
11
10
 
@@ -19,34 +18,15 @@
19
18
  header,
20
19
  footer,
21
20
  class: className = '',
22
- backdropclass,
23
- backdropClass = backdropclass ?? '',
24
- contentclass,
25
- contentClass = contentclass ?? '',
26
- headerclass,
27
- headerClass = headerclass ?? '',
28
- bodyclass,
29
- bodyClass = bodyclass ?? '',
30
- titleclass,
31
- titleClass = titleclass ?? '',
32
- footerclass,
33
- footerClass = footerclass ?? '',
21
+ backdropClass = '',
22
+ contentClass = '',
23
+ headerClass = '',
24
+ bodyClass = '',
25
+ titleClass = '',
26
+ footerClass = '',
34
27
  testId
35
28
  }: DrawerProps = $props();
36
29
 
37
- warnDeprecatedProps(
38
- 'Drawer',
39
- { backdropclass, contentclass, headerclass, bodyclass, titleclass, footerclass },
40
- {
41
- backdropclass: 'backdropClass',
42
- contentclass: 'contentClass',
43
- headerclass: 'headerClass',
44
- bodyclass: 'bodyClass',
45
- titleclass: 'titleClass',
46
- footerclass: 'footerClass'
47
- }
48
- );
49
-
50
30
  let drawerElement: HTMLDivElement | undefined = $state();
51
31
 
52
32
  const {
@@ -1,33 +1,54 @@
1
1
  import type { ClassValue } from 'tailwind-variants';
2
2
  import type { Snippet } from 'svelte';
3
3
  import type { VariantSizes } from '../index.js';
4
+ /**
5
+ * Props for `<Drawer>` — a side-anchored sliding panel. Use for
6
+ * supplementary content that shouldn't take over the page (filters,
7
+ * settings, details panels). For modal dialogs (forms, confirmations)
8
+ * prefer `<Modal>`; for transient feedback use `toast()`.
9
+ *
10
+ * @example
11
+ * ```svelte
12
+ * <Drawer bind:open title="Filters" position="right">
13
+ * <FilterPanel bind:filters />
14
+ * {#snippet footer()}
15
+ * <div class="flex justify-end gap-2 p-4">
16
+ * <Button variant="outline" onclick={() => (open = false)}>Cancel</Button>
17
+ * <Button onclick={apply}>Apply</Button>
18
+ * </div>
19
+ * {/snippet}
20
+ * </Drawer>
21
+ * ```
22
+ */
4
23
  export type DrawerProps = {
24
+ /** Bindable open state. @default false */
5
25
  open?: boolean;
26
+ /** Fires when the drawer dismisses (backdrop click, Escape). */
6
27
  onclose?: () => void;
28
+ /** Header title text. Ignored if a `header` snippet is provided. */
7
29
  title?: string;
30
+ /** Side the drawer slides in from. @default 'right' */
8
31
  position?: 'left' | 'right';
32
+ /** @default 'sm' */
9
33
  size?: VariantSizes;
10
34
  class?: ClassValue;
11
- /** @deprecated Use backdropClass instead */
12
- backdropclass?: ClassValue;
35
+ /** Classes on the backdrop overlay. */
13
36
  backdropClass?: ClassValue;
14
- /** @deprecated Use contentClass instead */
15
- contentclass?: ClassValue;
37
+ /** Classes on the dialog container. */
16
38
  contentClass?: ClassValue;
17
- /** @deprecated Use headerClass instead */
18
- headerclass?: ClassValue;
39
+ /** Classes on the header row. */
19
40
  headerClass?: ClassValue;
20
- /** @deprecated Use bodyClass instead */
21
- bodyclass?: ClassValue;
41
+ /** Classes on the body content area. */
22
42
  bodyClass?: ClassValue;
23
- /** @deprecated Use titleClass instead */
24
- titleclass?: ClassValue;
43
+ /** Classes on the title element. */
25
44
  titleClass?: ClassValue;
26
- /** @deprecated Use footerClass instead */
27
- footerclass?: ClassValue;
45
+ /** Classes on the footer area. */
28
46
  footerClass?: ClassValue;
47
+ /** Body content. */
29
48
  children?: Snippet;
49
+ /** Replace the default title bar. */
30
50
  header?: Snippet;
51
+ /** Footer content (usually action buttons). */
31
52
  footer?: Snippet;
32
53
  testId?: string;
33
54
  };
@@ -28,7 +28,7 @@ export declare const drawer: import("tailwind-variants").TVReturnType<{
28
28
  sm: {
29
29
  contentWrapper: string;
30
30
  };
31
- base: {
31
+ md: {
32
32
  contentWrapper: string;
33
33
  };
34
34
  lg: {
@@ -81,7 +81,7 @@ export declare const drawer: import("tailwind-variants").TVReturnType<{
81
81
  sm: {
82
82
  contentWrapper: string;
83
83
  };
84
- base: {
84
+ md: {
85
85
  contentWrapper: string;
86
86
  };
87
87
  lg: {
@@ -134,7 +134,7 @@ export declare const drawer: import("tailwind-variants").TVReturnType<{
134
134
  sm: {
135
135
  contentWrapper: string;
136
136
  };
137
- base: {
137
+ md: {
138
138
  contentWrapper: string;
139
139
  };
140
140
  lg: {
@@ -42,7 +42,7 @@ export const drawer = tv({
42
42
  [Size.SM]: {
43
43
  contentWrapper: 'w-80'
44
44
  },
45
- [Size.BASE]: {
45
+ [Size.MD]: {
46
46
  contentWrapper: 'w-96'
47
47
  },
48
48
  [Size.LG]: {
@@ -1,8 +1,9 @@
1
1
  <script lang="ts">
2
2
  import { cn } from '../../helper/cls.js';
3
3
  import { buildTestId } from '../../helper/testid.js';
4
- import { warnDeprecatedProps } from '../../helper/deprecation.js';
5
4
  import { accordion } from './accordion.js';
5
+ import { slide } from 'svelte/transition';
6
+ import { quintOut } from 'svelte/easing';
6
7
  import type { AccordionProps } from '../../index.js';
7
8
 
8
9
  let {
@@ -17,13 +18,10 @@
17
18
  oncollapse,
18
19
  ontoggle,
19
20
  class: className,
20
- titleclass,
21
- titleClass = titleclass ?? '',
22
- bodyclass,
23
- bodyClass = bodyclass ?? '',
21
+ titleClass = '',
22
+ bodyClass = '',
24
23
  contentClass,
25
- headerclass,
26
- headerClass = headerclass ?? '',
24
+ headerClass = '',
27
25
  summary,
28
26
  header,
29
27
  children,
@@ -31,16 +29,6 @@
31
29
  testId
32
30
  }: AccordionProps = $props();
33
31
 
34
- warnDeprecatedProps(
35
- 'Accordion',
36
- { titleclass, bodyclass, headerclass },
37
- {
38
- titleclass: 'titleClass',
39
- bodyclass: 'bodyClass',
40
- headerclass: 'headerClass'
41
- }
42
- );
43
-
44
32
  const styles = $derived(
45
33
  accordion({
46
34
  color,
@@ -103,6 +91,7 @@
103
91
  class={cn(styles.body(), bodyClass, contentClass)}
104
92
  {id}
105
93
  data-testid={buildTestId('accordion', 'content', testId)}
94
+ transition:slide={{ duration: 300, easing: quintOut }}
106
95
  >
107
96
  {@render children()}
108
97
  </div>
@@ -2,34 +2,81 @@ 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
+ /**
6
+ * Props for `<Accordion>` — a collapsible section with a clickable
7
+ * header and a slide-animated body. Use when you have optional detail
8
+ * that should default to hidden (FAQs, advanced settings).
9
+ *
10
+ * For multiple independent collapsibles on one page, render multiple
11
+ * `<Accordion>`s side-by-side. For a mutually-exclusive "only one open"
12
+ * group, track the open state yourself with `bind:open`.
13
+ *
14
+ * @example
15
+ * ```svelte
16
+ * <Accordion title="How does billing work?">
17
+ * <p>We charge monthly on the first of the month…</p>
18
+ * </Accordion>
19
+ * ```
20
+ *
21
+ * @example
22
+ * ```svelte
23
+ * <!-- Custom header snippet receives the open state -->
24
+ * <Accordion bind:open>
25
+ * {#snippet header({ open })}
26
+ * <span>Advanced options</span>
27
+ * <Badge>{open ? 'Hide' : 'Show'}</Badge>
28
+ * {/snippet}
29
+ * <form>…</form>
30
+ * </Accordion>
31
+ * ```
32
+ */
5
33
  export type AccordionProps = {
6
34
  id?: string;
35
+ /** Plain-text header. Ignored if the `header` snippet is provided. */
7
36
  title?: string;
37
+ /** Short sub-header rendered under the title. */
8
38
  description?: string;
39
+ /** Body content — rendered only when open. */
9
40
  children?: Snippet;
41
+ /**
42
+ * Short text rendered inline in the collapsed header (e.g. current
43
+ * selection summary). Distinct from `description`, which is shown
44
+ * above the body when expanded.
45
+ */
10
46
  summary?: Snippet;
47
+ /**
48
+ * Fully custom header snippet. Receives the current open state so you
49
+ * can render different text / icons per state.
50
+ */
11
51
  header?: Snippet<[{
12
52
  open: boolean;
13
53
  }]>;
54
+ /** Bindable open state. @default false */
14
55
  open?: boolean;
56
+ /** Disable expansion. */
15
57
  disabled?: boolean;
58
+ /** Background/border tint. @default 'default' */
16
59
  color?: VariantColors;
17
60
  class?: ClassValue;
18
- /** @deprecated Use titleClass instead */
19
- titleclass?: ClassValue;
61
+ /** Classes for the title text only. */
20
62
  titleClass?: ClassValue;
21
- /** @deprecated Use bodyClass instead */
22
- bodyclass?: ClassValue;
63
+ /** Alias for `contentClass` body container classes. */
23
64
  bodyClass?: ClassValue;
65
+ /** Classes for the content/body container. */
24
66
  contentClass?: ClassValue;
25
- /** @deprecated Use headerClass instead */
26
- headerclass?: ClassValue;
67
+ /** Classes for the clickable header row. */
27
68
  headerClass?: ClassValue;
69
+ /** Optional icon rendered next to the title. */
28
70
  icon?: Component;
71
+ /** Which side of the title to render the icon on. @default 'start' */
29
72
  iconPosition?: 'start' | 'end';
73
+ /** Show a border around the whole accordion. @default true */
30
74
  bordered?: boolean;
75
+ /** Fires when the accordion expands (transitions from closed to open). */
31
76
  onexpand?: () => void;
77
+ /** Fires when the accordion collapses. */
32
78
  oncollapse?: () => void;
79
+ /** Fires on any toggle, receives the new open state. */
33
80
  ontoggle?: (open: boolean) => void;
34
81
  testId?: string;
35
82
  };
@@ -2,6 +2,8 @@
2
2
  import { cn } from '../../helper/cls.js';
3
3
  import { buildTestId } from '../../helper/testid.js';
4
4
  import { Color } from '../../variants.js';
5
+ import { fade } from 'svelte/transition';
6
+ import { quintOut } from 'svelte/easing';
5
7
  import type { AlertProps, VariantColors } from '../../index.js';
6
8
 
7
9
  let {
@@ -34,6 +36,7 @@
34
36
  role="alert"
35
37
  class={cn('relative rounded-lg border p-4', colorClasses[color], className)}
36
38
  data-testid={buildTestId('alert', undefined, testId)}
39
+ transition:fade={{ duration: 1000, easing: quintOut }}
37
40
  >
38
41
  <div class="flex items-start justify-between gap-4">
39
42
  {#if Icon}
@@ -6,7 +6,7 @@
6
6
  import type { BadgeProps } from '../../index.js';
7
7
 
8
8
  let {
9
- size = Size.BASE,
9
+ size = Size.MD,
10
10
  color = Color.DEFAULT,
11
11
  class: className = '',
12
12
  children,
@@ -1,11 +1,33 @@
1
1
  import type { ClassValue } from 'tailwind-variants';
2
2
  import type { Snippet } from 'svelte';
3
3
  import type { VariantColors, VariantSizes } from '../../index.js';
4
+ /**
5
+ * Props for `<Badge>` — a small rounded pill used for statuses, counts,
6
+ * tags, and inline labels. Pass `onclose` to make it dismissable with a ×.
7
+ *
8
+ * @example
9
+ * ```svelte
10
+ * <Badge color="success">Active</Badge>
11
+ * ```
12
+ *
13
+ * @example
14
+ * ```svelte
15
+ * <!-- Dismissable tag -->
16
+ * <Badge color="info" onclose={() => removeTag('react')}>react</Badge>
17
+ * ```
18
+ */
4
19
  export type BadgeProps = {
20
+ /** @default 'sm' */
5
21
  size?: VariantSizes;
22
+ /** @default 'default' */
6
23
  color?: VariantColors;
7
24
  class?: ClassValue;
25
+ /** Badge content (usually short text). */
8
26
  children: Snippet;
27
+ /**
28
+ * When provided, renders a × dismiss button and calls this handler
29
+ * when clicked. Use for removable tag UIs.
30
+ */
9
31
  onclose?: (event: MouseEvent) => void;
10
32
  testId?: string;
11
33
  };
@@ -8,7 +8,7 @@ export declare const badge: import("tailwind-variants").TVReturnType<{
8
8
  base: string;
9
9
  icon: string;
10
10
  };
11
- base: {
11
+ md: {
12
12
  base: string;
13
13
  icon: string;
14
14
  };
@@ -68,7 +68,7 @@ export declare const badge: import("tailwind-variants").TVReturnType<{
68
68
  base: string;
69
69
  icon: string;
70
70
  };
71
- base: {
71
+ md: {
72
72
  base: string;
73
73
  icon: string;
74
74
  };
@@ -128,7 +128,7 @@ export declare const badge: import("tailwind-variants").TVReturnType<{
128
128
  base: string;
129
129
  icon: string;
130
130
  };
131
- base: {
131
+ md: {
132
132
  base: string;
133
133
  icon: string;
134
134
  };
@@ -15,7 +15,7 @@ export const badge = tv({
15
15
  base: 'h-5 px-2 text-xs rounded gap-1',
16
16
  icon: 'h-3 w-3'
17
17
  },
18
- [Size.BASE]: {
18
+ [Size.MD]: {
19
19
  base: 'h-6 px-2.5 text-sm rounded-md gap-1.5',
20
20
  icon: 'h-3.5 w-3.5'
21
21
  },