@makolabs/ripple 2.5.8 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +403 -497
- package/dist/adapters/storage/S3Adapter.d.ts +49 -1
- package/dist/adapters/storage/S3Adapter.js +38 -1
- package/dist/adapters/storage/types.d.ts +20 -0
- package/dist/ai/AIChatInterface.svelte +2 -1
- package/dist/ai/AIChatInterface.svelte.d.ts +2 -1
- package/dist/ai/CodeRenderer.svelte +7 -2
- package/dist/ai/CodeRenderer.svelte.d.ts +2 -1
- package/dist/ai/ComposeDropdown.svelte +1 -1
- package/dist/ai/MessageBox.svelte +3 -3
- package/dist/ai/MessageBox.svelte.d.ts +3 -2
- package/dist/ai/ThinkingDisplay.svelte +4 -3
- package/dist/ai/ThinkingDisplay.svelte.d.ts +2 -1
- package/dist/ai/ai-types.d.ts +55 -1
- package/dist/button/Button.svelte +5 -5
- package/dist/button/button-types.d.ts +49 -4
- package/dist/button/button.d.ts +9 -9
- package/dist/button/button.js +6 -6
- package/dist/charts/Chart.svelte +8 -16
- package/dist/charts/chart-types.d.ts +78 -1
- package/dist/drawer/Drawer.svelte +6 -26
- package/dist/drawer/drawer-types.d.ts +33 -12
- package/dist/drawer/drawer.d.ts +3 -3
- package/dist/drawer/drawer.js +1 -1
- package/dist/elements/accordion/Accordion.svelte +6 -17
- package/dist/elements/accordion/accordion-types.d.ts +53 -6
- package/dist/elements/alert/Alert.svelte +3 -0
- package/dist/elements/badge/Badge.svelte +1 -1
- package/dist/elements/badge/badge-types.d.ts +22 -0
- package/dist/elements/badge/badge.d.ts +3 -3
- package/dist/elements/badge/badge.js +1 -1
- package/dist/elements/combobox/ComboBox.svelte +247 -0
- package/dist/elements/combobox/ComboBox.svelte.d.ts +4 -0
- package/dist/elements/combobox/combobox-types.d.ts +41 -0
- package/dist/elements/combobox/combobox-types.js +1 -0
- package/dist/elements/context-menu/ContextMenu.svelte +137 -0
- package/dist/elements/context-menu/ContextMenu.svelte.d.ts +4 -0
- package/dist/elements/context-menu/context-menu-types.d.ts +40 -0
- package/dist/elements/context-menu/context-menu-types.js +1 -0
- package/dist/elements/dropdown/Dropdown.svelte +1 -1
- package/dist/elements/dropdown/Select.svelte +4 -1
- package/dist/elements/dropdown/dropdown-types.d.ts +114 -0
- package/dist/elements/dropdown/dropdown.d.ts +3 -3
- package/dist/elements/dropdown/dropdown.js +2 -2
- package/dist/elements/dropdown/select.d.ts +3 -3
- package/dist/elements/dropdown/select.js +2 -2
- package/dist/elements/empty-state/EmptyState.svelte +1 -1
- package/dist/elements/empty-state/empty-state-types.d.ts +32 -1
- package/dist/elements/empty-state/empty-state.d.ts +3 -3
- package/dist/elements/empty-state/empty-state.js +2 -2
- package/dist/elements/file-upload/FileUpload.svelte +5 -0
- package/dist/elements/file-upload/file-upload-types.d.ts +59 -0
- package/dist/elements/pagination/Pagination.svelte +53 -21
- package/dist/elements/pagination/Pagination.svelte.d.ts +33 -5
- package/dist/elements/popover/Popover.svelte +234 -0
- package/dist/elements/popover/Popover.svelte.d.ts +4 -0
- package/dist/elements/popover/index.d.ts +2 -0
- package/dist/elements/popover/index.js +1 -0
- package/dist/elements/popover/popover-types.d.ts +60 -0
- package/dist/elements/popover/popover-types.js +1 -0
- package/dist/elements/progress/Progress.svelte +32 -7
- package/dist/elements/progress/progress-types.d.ts +48 -1
- package/dist/elements/skeleton/Skeleton.svelte +56 -0
- package/dist/elements/skeleton/Skeleton.svelte.d.ts +4 -0
- package/dist/elements/skeleton/index.d.ts +2 -0
- package/dist/elements/skeleton/index.js +1 -0
- package/dist/elements/skeleton/skeleton-types.d.ts +50 -0
- package/dist/elements/skeleton/skeleton-types.js +1 -0
- package/dist/elements/spinner/Spinner.svelte +1 -1
- package/dist/elements/spinner/spinner-types.d.ts +20 -0
- package/dist/elements/spinner/spinner.d.ts +3 -3
- package/dist/elements/spinner/spinner.js +2 -2
- package/dist/elements/tooltip/Tooltip.svelte +108 -11
- package/dist/elements/tooltip/tooltip-types.d.ts +49 -1
- package/dist/file-browser/FileBrowser.svelte +21 -12
- package/dist/filters/CompactFilters.svelte +221 -33
- package/dist/filters/CompactFilters.svelte.d.ts +1 -1
- package/dist/filters/FilterBar.svelte +184 -0
- package/dist/filters/FilterBar.svelte.d.ts +4 -0
- package/dist/filters/FilterPopover.svelte +346 -0
- package/dist/filters/FilterPopover.svelte.d.ts +4 -0
- package/dist/filters/date-presets.d.ts +15 -0
- package/dist/filters/date-presets.js +107 -0
- package/dist/filters/filter-types.d.ts +69 -3
- package/dist/filters/index.d.ts +5 -0
- package/dist/filters/index.js +4 -0
- package/dist/filters/sync-filters-to-url.svelte.d.ts +37 -0
- package/dist/filters/sync-filters-to-url.svelte.js +114 -0
- package/dist/forms/DateRange.svelte +4 -2
- package/dist/forms/Input.svelte +2 -2
- package/dist/forms/MarketSelector.svelte +8 -3
- package/dist/forms/NumberInput.svelte +4 -4
- package/dist/forms/RadioGroup.svelte +123 -0
- package/dist/forms/RadioGroup.svelte.d.ts +4 -0
- package/dist/forms/SegmentedControl.svelte +11 -4
- package/dist/forms/Slider.svelte +72 -3
- package/dist/forms/Tags.svelte +14 -5
- package/dist/forms/Textarea.svelte +126 -0
- package/dist/forms/Textarea.svelte.d.ts +4 -0
- package/dist/forms/Toggle.svelte +8 -8
- package/dist/forms/calendar/Calendar.svelte +218 -0
- package/dist/forms/calendar/Calendar.svelte.d.ts +4 -0
- package/dist/forms/calendar/calendar-types.d.ts +46 -0
- package/dist/forms/calendar/calendar-types.js +1 -0
- package/dist/forms/calendar/index.d.ts +2 -0
- package/dist/forms/calendar/index.js +1 -0
- package/dist/forms/date-picker/DatePicker.svelte +144 -0
- package/dist/forms/date-picker/DatePicker.svelte.d.ts +4 -0
- package/dist/forms/date-picker/date-picker-types.d.ts +29 -0
- package/dist/forms/date-picker/date-picker-types.js +1 -0
- package/dist/forms/form-types.d.ts +425 -6
- package/dist/forms/market/market-selector-types.d.ts +52 -1
- package/dist/forms/segmented-control.d.ts +5 -2
- package/dist/forms/segmented-control.js +16 -5
- package/dist/forms/slider.d.ts +3 -3
- package/dist/forms/slider.js +2 -2
- package/dist/funcs/user-management.remote.d.ts +1 -1
- package/dist/funcs/user-management.remote.js +2 -2
- package/dist/header/Breadcrumbs.svelte +4 -20
- package/dist/header/PageHeader.svelte +6 -14
- package/dist/header/breadcrumbs.d.ts +3 -11
- package/dist/header/breadcrumbs.js +10 -5
- package/dist/header/header-types.d.ts +62 -11
- package/dist/index.d.ts +35 -9
- package/dist/index.js +24 -4
- package/dist/layout/activity-list/ActivityList.svelte +13 -7
- package/dist/layout/activity-list/activity-list-types.d.ts +46 -7
- package/dist/layout/card/Card.svelte +12 -15
- package/dist/layout/card/MetricCard.svelte +50 -32
- package/dist/layout/card/card-types.d.ts +114 -4
- package/dist/layout/navbar/navbar-types.d.ts +48 -0
- package/dist/layout/navbar/navbar.d.ts +3 -3
- package/dist/layout/navbar/navbar.js +2 -2
- package/dist/layout/sidebar/Sidebar.svelte +87 -11
- package/dist/layout/sidebar/sidebar-types.d.ts +60 -1
- package/dist/layout/stepper/Stepper.svelte +288 -0
- package/dist/layout/stepper/Stepper.svelte.d.ts +4 -0
- package/dist/layout/stepper/stepper-types.d.ts +80 -0
- package/dist/layout/stepper/stepper-types.js +1 -0
- package/dist/layout/table/Table.svelte +91 -85
- package/dist/layout/table/table-types.d.ts +148 -24
- package/dist/layout/table/table.d.ts +3 -3
- package/dist/layout/table/table.js +2 -2
- package/dist/layout/tabs/Tab.svelte +6 -2
- package/dist/layout/tabs/Tab.svelte.d.ts +4 -1
- package/dist/layout/tabs/TabGroup.svelte +9 -2
- package/dist/layout/tabs/tabs-types.d.ts +63 -0
- package/dist/layout/tabs/tabs.d.ts +3 -3
- package/dist/layout/tabs/tabs.js +12 -6
- package/dist/modal/ConfirmDialog.svelte +65 -0
- package/dist/modal/ConfirmDialog.svelte.d.ts +4 -0
- package/dist/modal/Modal.svelte +6 -26
- package/dist/modal/confirm-dialog-types.d.ts +39 -0
- package/dist/modal/confirm-dialog-types.js +1 -0
- package/dist/modal/modal-types.d.ts +51 -12
- package/dist/modal/modal.d.ts +3 -3
- package/dist/modal/modal.js +3 -3
- package/dist/pipeline/Pipeline.svelte +8 -3
- package/dist/pipeline/pipeline-types.d.ts +55 -3
- package/dist/pipeline/pipeline.d.ts +18 -3
- package/dist/pipeline/pipeline.js +7 -2
- package/dist/server/s3.d.ts +35 -3
- package/dist/sonner/Toaster.svelte +29 -0
- package/dist/sonner/Toaster.svelte.d.ts +4 -0
- package/dist/sonner/index.d.ts +21 -0
- package/dist/sonner/index.js +20 -0
- package/dist/user-management/UserManagement.svelte +22 -16
- package/dist/user-management/UserModal.svelte +10 -7
- package/dist/user-management/UserTable.svelte +16 -17
- package/dist/user-management/UserViewModal.svelte +11 -11
- package/dist/user-management/user-management-types.d.ts +118 -31
- package/dist/variants.d.ts +1 -1
- package/dist/variants.js +1 -1
- package/package.json +7 -4
- package/dist/config/ai.d.ts +0 -13
- package/dist/config/ai.js +0 -44
- package/dist/elements/empty-state/EmptyStateTestWrapper.svelte +0 -25
- package/dist/elements/empty-state/EmptyStateTestWrapper.svelte.d.ts +0 -8
- package/dist/elements/tooltip/TooltipTestWrapper.svelte +0 -14
- package/dist/elements/tooltip/TooltipTestWrapper.svelte.d.ts +0 -7
- package/dist/helper/deprecation.d.ts +0 -14
- package/dist/helper/deprecation.js +0 -24
- package/dist/modal/ModalFooterTestWrapper.svelte +0 -17
- package/dist/modal/ModalFooterTestWrapper.svelte.d.ts +0 -8
package/dist/charts/Chart.svelte
CHANGED
|
@@ -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
|
-
|
|
479
|
-
|
|
480
|
-
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
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
|
-
/**
|
|
12
|
-
backdropclass?: ClassValue;
|
|
35
|
+
/** Classes on the backdrop overlay. */
|
|
13
36
|
backdropClass?: ClassValue;
|
|
14
|
-
/**
|
|
15
|
-
contentclass?: ClassValue;
|
|
37
|
+
/** Classes on the dialog container. */
|
|
16
38
|
contentClass?: ClassValue;
|
|
17
|
-
/**
|
|
18
|
-
headerclass?: ClassValue;
|
|
39
|
+
/** Classes on the header row. */
|
|
19
40
|
headerClass?: ClassValue;
|
|
20
|
-
/**
|
|
21
|
-
bodyclass?: ClassValue;
|
|
41
|
+
/** Classes on the body content area. */
|
|
22
42
|
bodyClass?: ClassValue;
|
|
23
|
-
/**
|
|
24
|
-
titleclass?: ClassValue;
|
|
43
|
+
/** Classes on the title element. */
|
|
25
44
|
titleClass?: ClassValue;
|
|
26
|
-
/**
|
|
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
|
};
|
package/dist/drawer/drawer.d.ts
CHANGED
|
@@ -28,7 +28,7 @@ export declare const drawer: import("tailwind-variants").TVReturnType<{
|
|
|
28
28
|
sm: {
|
|
29
29
|
contentWrapper: string;
|
|
30
30
|
};
|
|
31
|
-
|
|
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
|
-
|
|
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
|
-
|
|
137
|
+
md: {
|
|
138
138
|
contentWrapper: string;
|
|
139
139
|
};
|
|
140
140
|
lg: {
|
package/dist/drawer/drawer.js
CHANGED
|
@@ -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
|
-
|
|
21
|
-
|
|
22
|
-
bodyclass,
|
|
23
|
-
bodyClass = bodyclass ?? '',
|
|
21
|
+
titleClass = '',
|
|
22
|
+
bodyClass = '',
|
|
24
23
|
contentClass,
|
|
25
|
-
|
|
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
|
-
/**
|
|
19
|
-
titleclass?: ClassValue;
|
|
61
|
+
/** Classes for the title text only. */
|
|
20
62
|
titleClass?: ClassValue;
|
|
21
|
-
/**
|
|
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
|
-
/**
|
|
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}
|
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
131
|
+
md: {
|
|
132
132
|
base: string;
|
|
133
133
|
icon: string;
|
|
134
134
|
};
|