@makolabs/ripple 0.0.1-dev.6 → 0.0.1-dev.60
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 +394 -54
- package/dist/button/Button.svelte +5 -3
- package/dist/button/Button.svelte.d.ts +1 -1
- package/dist/button/button.d.ts +40 -63
- package/dist/button/button.js +15 -14
- package/dist/charts/Chart.svelte +545 -0
- package/dist/charts/Chart.svelte.d.ts +4 -0
- package/dist/drawer/Drawer.svelte +13 -2
- package/dist/drawer/Drawer.svelte.d.ts +1 -1
- package/dist/drawer/drawer.d.ts +0 -17
- package/dist/drawer/drawer.js +3 -3
- package/dist/elements/accordion/Accordion.svelte +98 -0
- package/dist/elements/accordion/Accordion.svelte.d.ts +4 -0
- package/dist/elements/accordion/accordion.d.ts +227 -0
- package/dist/elements/accordion/accordion.js +138 -0
- package/dist/elements/alert/Alert.svelte +57 -0
- package/dist/elements/alert/Alert.svelte.d.ts +4 -0
- package/dist/elements/badge/Badge.svelte +13 -5
- package/dist/elements/badge/Badge.svelte.d.ts +1 -1
- package/dist/elements/badge/badge.d.ts +0 -12
- package/dist/elements/dropdown/Dropdown.svelte +100 -138
- package/dist/elements/dropdown/Dropdown.svelte.d.ts +1 -1
- package/dist/elements/dropdown/Select.svelte +167 -66
- package/dist/elements/dropdown/Select.svelte.d.ts +1 -1
- package/dist/elements/dropdown/dropdown.d.ts +34 -57
- package/dist/elements/dropdown/dropdown.js +11 -5
- package/dist/elements/dropdown/select.d.ts +34 -54
- package/dist/elements/dropdown/select.js +24 -16
- package/dist/elements/file-upload/FileUpload.svelte +135 -0
- package/dist/elements/file-upload/FileUpload.svelte.d.ts +4 -0
- package/dist/elements/file-upload/FilesPreview.svelte +93 -0
- package/dist/elements/file-upload/FilesPreview.svelte.d.ts +4 -0
- package/dist/elements/progress/Progress.svelte +145 -0
- package/dist/elements/progress/Progress.svelte.d.ts +4 -0
- package/dist/elements/timeline/Timeline.svelte +92 -0
- package/dist/elements/timeline/Timeline.svelte.d.ts +7 -0
- package/dist/forms/Checkbox.svelte +54 -0
- package/dist/forms/Checkbox.svelte.d.ts +4 -0
- package/dist/forms/DateRange.svelte +493 -0
- package/dist/forms/DateRange.svelte.d.ts +4 -0
- package/dist/forms/Form.svelte +39 -0
- package/dist/forms/Form.svelte.d.ts +4 -0
- package/dist/forms/Input.svelte +86 -0
- package/dist/forms/Input.svelte.d.ts +4 -0
- package/dist/forms/NumberInput.svelte +159 -0
- package/dist/forms/NumberInput.svelte.d.ts +4 -0
- package/dist/forms/RadioInputs.svelte +64 -0
- package/dist/forms/RadioInputs.svelte.d.ts +4 -0
- package/dist/forms/RadioPill.svelte +66 -0
- package/dist/forms/RadioPill.svelte.d.ts +4 -0
- package/dist/forms/Slider.svelte +342 -0
- package/dist/forms/Slider.svelte.d.ts +4 -0
- package/dist/forms/Tags.svelte +181 -0
- package/dist/forms/Tags.svelte.d.ts +4 -0
- package/dist/forms/Toggle.svelte +132 -0
- package/dist/forms/Toggle.svelte.d.ts +4 -0
- package/dist/forms/slider.d.ts +143 -0
- package/dist/forms/slider.js +62 -0
- package/dist/header/Breadcrumbs.svelte +2 -1
- package/dist/header/Breadcrumbs.svelte.d.ts +1 -1
- package/dist/header/PageHeader.svelte +2 -2
- package/dist/header/PageHeader.svelte.d.ts +1 -1
- package/dist/header/breadcrumbs.d.ts +20 -14
- package/dist/header/breadcrumbs.js +6 -0
- package/dist/helper/date.d.ts +7 -0
- package/dist/helper/date.js +15 -0
- package/dist/index.d.ts +811 -9
- package/dist/index.js +69 -16
- package/dist/layout/card/Card.svelte +5 -8
- package/dist/layout/card/Card.svelte.d.ts +1 -1
- package/dist/layout/card/StatsCard.svelte +119 -89
- package/dist/layout/card/StatsCard.svelte.d.ts +1 -1
- package/dist/layout/card/card.d.ts +22 -33
- package/dist/layout/card/card.js +9 -8
- package/dist/layout/card/stats-card.d.ts +22 -39
- package/dist/layout/card/stats-card.js +14 -14
- package/dist/layout/navbar/navbar.d.ts +0 -23
- package/dist/layout/sidebar/NavGroup.svelte +38 -47
- package/dist/layout/sidebar/NavGroup.svelte.d.ts +1 -1
- package/dist/layout/sidebar/NavItem.svelte +3 -3
- package/dist/layout/sidebar/NavItem.svelte.d.ts +1 -1
- package/dist/layout/sidebar/Sidebar.svelte +101 -72
- package/dist/layout/sidebar/Sidebar.svelte.d.ts +1 -1
- package/dist/layout/table/Table.svelte +464 -87
- package/dist/layout/table/Table.svelte.d.ts +1 -1
- package/dist/layout/table/table.d.ts +0 -47
- package/dist/layout/table/table.js +0 -8
- package/dist/layout/tabs/Tab.svelte +9 -6
- package/dist/layout/tabs/Tab.svelte.d.ts +1 -1
- package/dist/layout/tabs/TabContent.svelte +1 -2
- package/dist/layout/tabs/TabContent.svelte.d.ts +1 -1
- package/dist/layout/tabs/TabGroup.svelte +10 -5
- package/dist/layout/tabs/TabGroup.svelte.d.ts +2 -2
- package/dist/layout/tabs/tabs.d.ts +61 -76
- package/dist/layout/tabs/tabs.js +170 -28
- package/dist/modal/Modal.svelte +2 -1
- package/dist/modal/Modal.svelte.d.ts +1 -1
- package/dist/modal/modal.d.ts +0 -23
- package/dist/modal/modal.js +3 -3
- package/dist/sonner/sonner.svelte +13 -0
- package/dist/sonner/sonner.svelte.d.ts +4 -0
- package/dist/types/variants.d.ts +1 -21
- package/dist/types/variants.js +1 -19
- package/dist/utils/Portal.svelte +108 -0
- package/dist/utils/Portal.svelte.d.ts +8 -0
- package/dist/variants.d.ts +30 -0
- package/dist/variants.js +36 -0
- package/package.json +7 -3
- package/dist/button/index.d.ts +0 -1
- package/dist/button/index.js +0 -1
- package/dist/drawer/index.d.ts +0 -2
- package/dist/drawer/index.js +0 -1
- package/dist/elements/badge/index.d.ts +0 -2
- package/dist/elements/badge/index.js +0 -2
- package/dist/elements/dropdown/index.d.ts +0 -3
- package/dist/elements/dropdown/index.js +0 -2
- package/dist/header/index.d.ts +0 -4
- package/dist/header/index.js +0 -2
- package/dist/header/pageheaders.d.ts +0 -10
- package/dist/header/pageheaders.js +0 -1
- package/dist/layout/card/index.d.ts +0 -4
- package/dist/layout/card/index.js +0 -2
- package/dist/layout/index.d.ts +0 -5
- package/dist/layout/index.js +0 -5
- package/dist/layout/navbar/index.d.ts +0 -2
- package/dist/layout/navbar/index.js +0 -2
- package/dist/layout/sidebar/index.d.ts +0 -2
- package/dist/layout/sidebar/index.js +0 -1
- package/dist/layout/sidebar/sidebar.d.ts +0 -46
- package/dist/layout/sidebar/sidebar.js +0 -1
- package/dist/layout/table/index.d.ts +0 -3
- package/dist/layout/table/index.js +0 -2
- package/dist/layout/tabs/index.d.ts +0 -3
- package/dist/layout/tabs/index.js +0 -3
- package/dist/modal/index.d.ts +0 -1
- package/dist/modal/index.js +0 -1
package/dist/index.js
CHANGED
|
@@ -1,18 +1,71 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
export
|
|
11
|
-
// Elements
|
|
12
|
-
export * from './elements/dropdown/index.js';
|
|
13
|
-
export * from './elements/badge/index.js';
|
|
14
|
-
// Types
|
|
15
|
-
export * from './types/variants.js';
|
|
1
|
+
import { ChartColor, Color, Size } from './variants.js';
|
|
2
|
+
/**
|
|
3
|
+
* Color System:
|
|
4
|
+
* - Color.*: UI component colors (buttons, text, backgrounds)
|
|
5
|
+
* Options: DEFAULT, PRIMARY, SECONDARY, INFO, SUCCESS, WARNING, DANGER
|
|
6
|
+
* - ChartColor.*: Chart-specific colors, only supported within series configurations (lines, areas, bars)
|
|
7
|
+
* Options: HEALTH, PROPERTY, AUTO, LIFE, OTHER, DEFAULT
|
|
8
|
+
* - ChartColors: Record type mapping ChartColor enum to string values
|
|
9
|
+
*/
|
|
10
|
+
export { Color, Size, ChartColor };
|
|
16
11
|
// Helper utilities
|
|
17
12
|
export { tv, cn } from './helper/cls.js';
|
|
18
|
-
export
|
|
13
|
+
export { isRouteActive } from './helper/nav.svelte.js';
|
|
14
|
+
// Direct Component Exports
|
|
15
|
+
// Button
|
|
16
|
+
export { default as Button } from './button/Button.svelte';
|
|
17
|
+
// Modal
|
|
18
|
+
export { default as Modal } from './modal/Modal.svelte';
|
|
19
|
+
// Drawer
|
|
20
|
+
export { default as Drawer } from './drawer/Drawer.svelte';
|
|
21
|
+
// Header
|
|
22
|
+
export { default as PageHeader } from './header/PageHeader.svelte';
|
|
23
|
+
export { default as Breadcrumbs } from './header/Breadcrumbs.svelte';
|
|
24
|
+
// Elements
|
|
25
|
+
export { default as Badge } from './elements/badge/Badge.svelte';
|
|
26
|
+
export { default as Dropdown } from './elements/dropdown/Dropdown.svelte';
|
|
27
|
+
export { default as Select } from './elements/dropdown/Select.svelte';
|
|
28
|
+
// Elements - Card
|
|
29
|
+
export { default as Card } from './layout/card/Card.svelte';
|
|
30
|
+
export { default as StatsCard } from './layout/card/StatsCard.svelte';
|
|
31
|
+
// Elements - Alert
|
|
32
|
+
export { default as Alert } from './elements/alert/Alert.svelte';
|
|
33
|
+
export { default as Tab } from './layout/tabs/Tab.svelte';
|
|
34
|
+
export { default as TabContent } from './layout/tabs/TabContent.svelte';
|
|
35
|
+
export { default as TabGroup } from './layout/tabs/TabGroup.svelte';
|
|
36
|
+
// Elements - Table
|
|
37
|
+
export { default as Table } from './layout/table/Table.svelte';
|
|
38
|
+
export { default as Cells } from './layout/table/Cells.svelte';
|
|
39
|
+
// Elements - Navbar
|
|
40
|
+
export { default as Navbar } from './layout/navbar/Navbar.svelte';
|
|
41
|
+
// Elements - Sidebar
|
|
42
|
+
export { default as Sidebar } from './layout/sidebar/Sidebar.svelte';
|
|
43
|
+
export { default as NavItem } from './layout/sidebar/NavItem.svelte';
|
|
44
|
+
export { default as NavGroup } from './layout/sidebar/NavGroup.svelte';
|
|
45
|
+
// Component Variant Utilities
|
|
46
|
+
export { dropdownMenu } from './elements/dropdown/dropdown.js';
|
|
47
|
+
export { badge } from './elements/badge/badge.js';
|
|
48
|
+
export { buttonVariants } from './button/button.js';
|
|
49
|
+
export { modal } from './modal/modal.js';
|
|
50
|
+
export { drawer } from './drawer/drawer.js';
|
|
51
|
+
export { selectTV } from './elements/dropdown/select.js';
|
|
52
|
+
export { breadcrumbs } from './header/breadcrumbs.js';
|
|
53
|
+
export { default as Chart } from './charts/Chart.svelte';
|
|
54
|
+
export { default as FileUpload } from './elements/file-upload/FileUpload.svelte';
|
|
55
|
+
export { default as FilesPreview } from './elements/file-upload/FilesPreview.svelte';
|
|
56
|
+
// Toaster: Should be registered in +layout.svelte
|
|
57
|
+
export { default as Toaster } from './sonner/sonner.svelte';
|
|
58
|
+
// Form Component Exports
|
|
59
|
+
export { default as Form } from './forms/Form.svelte';
|
|
60
|
+
export { default as Input } from './forms/Input.svelte';
|
|
61
|
+
export { default as RadioInputs } from './forms/RadioInputs.svelte';
|
|
62
|
+
export { default as Checkbox } from './forms/Checkbox.svelte';
|
|
63
|
+
export { default as Toggle } from './forms/Toggle.svelte';
|
|
64
|
+
export { default as Slider } from './forms/Slider.svelte';
|
|
65
|
+
export { default as NumberInput } from './forms/NumberInput.svelte';
|
|
66
|
+
export { default as DateRange } from './forms/DateRange.svelte';
|
|
67
|
+
export { default as Tags } from './forms/Tags.svelte';
|
|
68
|
+
export { default as RadioPill } from './forms/RadioPill.svelte';
|
|
69
|
+
export { default as Progress } from './elements/progress/Progress.svelte';
|
|
70
|
+
export { default as Accordion } from './elements/accordion/Accordion.svelte';
|
|
71
|
+
export { default as Timeline } from './elements/timeline/Timeline.svelte';
|
|
@@ -1,27 +1,24 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
import { cn } from '../../helper/cls.js';
|
|
3
|
-
import { card
|
|
3
|
+
import { card } from './card.js';
|
|
4
|
+
import type { CardProps } from '../../index.js';
|
|
5
|
+
import { Color } from '../../variants.js';
|
|
4
6
|
|
|
5
7
|
let {
|
|
6
8
|
children,
|
|
7
9
|
custom,
|
|
8
10
|
title,
|
|
9
|
-
color =
|
|
11
|
+
color = Color.DEFAULT,
|
|
10
12
|
class: className = '',
|
|
11
13
|
titleclass: titleClass = '',
|
|
12
14
|
bodyclass: bodyClass = ''
|
|
13
15
|
}: CardProps = $props();
|
|
14
16
|
|
|
15
|
-
// Get the slots from the card with fixed default settings
|
|
16
17
|
const {
|
|
17
18
|
base,
|
|
18
19
|
title: titleSlot,
|
|
19
20
|
body: bodySlot
|
|
20
|
-
} = $derived(
|
|
21
|
-
card({
|
|
22
|
-
color
|
|
23
|
-
})
|
|
24
|
-
);
|
|
21
|
+
} = $derived(card({ color }));
|
|
25
22
|
|
|
26
23
|
const baseClass = $derived(cn(base(), className));
|
|
27
24
|
const titleClasses = $derived(cn(titleSlot(), titleClass));
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
import { cn } from '../../helper/cls.js';
|
|
3
|
-
import { statsCard
|
|
3
|
+
import { statsCard } from './stats-card.js';
|
|
4
4
|
import { onMount } from 'svelte';
|
|
5
5
|
import * as echarts from 'echarts/core';
|
|
6
6
|
|
|
@@ -11,6 +11,8 @@
|
|
|
11
11
|
import { GridComponent } from 'echarts/components';
|
|
12
12
|
// @ts-expect-error - ECharts types are not available
|
|
13
13
|
import { SVGRenderer } from 'echarts/renderers';
|
|
14
|
+
import { Color } from '../../variants.js';
|
|
15
|
+
import type { StatsCardProps } from '../../index.js';
|
|
14
16
|
|
|
15
17
|
// @ts-expect-error - ECharts types are not available
|
|
16
18
|
echarts.use([LineChart, GridComponent, SVGRenderer]);
|
|
@@ -21,11 +23,11 @@
|
|
|
21
23
|
previousValue,
|
|
22
24
|
previousValuePrefix = 'from',
|
|
23
25
|
trend,
|
|
24
|
-
color =
|
|
26
|
+
color = Color.PRIMARY,
|
|
25
27
|
chartData,
|
|
26
28
|
children,
|
|
27
29
|
class: className = '',
|
|
28
|
-
formatLargeNumbers = true
|
|
30
|
+
formatLargeNumbers = true
|
|
29
31
|
}: StatsCardProps = $props();
|
|
30
32
|
|
|
31
33
|
// Chart container reference
|
|
@@ -37,8 +39,7 @@
|
|
|
37
39
|
if (trendX === undefined || trendX === null) return 'neutral';
|
|
38
40
|
if (trendX > 0) {
|
|
39
41
|
return 'up';
|
|
40
|
-
}
|
|
41
|
-
else if (trendX < 0) {
|
|
42
|
+
} else if (trendX < 0) {
|
|
42
43
|
return 'down';
|
|
43
44
|
}
|
|
44
45
|
return 'neutral';
|
|
@@ -46,56 +47,84 @@
|
|
|
46
47
|
|
|
47
48
|
function formatValue(val?: string | number): string {
|
|
48
49
|
if (val === undefined || val === null) return '';
|
|
50
|
+
|
|
51
|
+
let numValue: number;
|
|
52
|
+
let currencySymbol: string | null = null;
|
|
53
|
+
|
|
54
|
+
// Handle string inputs
|
|
49
55
|
if (typeof val === 'string') {
|
|
50
|
-
|
|
56
|
+
// Check for currency symbols
|
|
57
|
+
const currencyMatch = val.match(/^(\$|€|£|¥)/);
|
|
58
|
+
if (currencyMatch) {
|
|
59
|
+
currencySymbol = currencyMatch[0];
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// Extract the numeric value
|
|
63
|
+
const cleanedStr = val.replace(/[^0-9.-]/g, '');
|
|
51
64
|
if (/^-?\d+(\.\d+)?$/.test(cleanedStr)) {
|
|
52
|
-
|
|
53
|
-
|
|
65
|
+
numValue = parseFloat(cleanedStr);
|
|
66
|
+
} else {
|
|
67
|
+
// Not a number we can format
|
|
68
|
+
return val;
|
|
54
69
|
}
|
|
55
|
-
|
|
70
|
+
} else {
|
|
71
|
+
// Already a number
|
|
72
|
+
numValue = val;
|
|
56
73
|
}
|
|
57
74
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
return
|
|
62
|
-
|
|
63
|
-
|
|
75
|
+
// Format based on whether it's currency and size
|
|
76
|
+
if (currencySymbol) {
|
|
77
|
+
// Currency formatting with compact notation if needed
|
|
78
|
+
return new Intl.NumberFormat('en-US', {
|
|
79
|
+
style: 'currency',
|
|
80
|
+
currency: currencySymbolToCode(currencySymbol),
|
|
81
|
+
notation: formatLargeNumbers ? 'compact' : 'standard',
|
|
82
|
+
compactDisplay: 'short',
|
|
83
|
+
maximumFractionDigits: 1
|
|
84
|
+
}).format(numValue);
|
|
85
|
+
} else {
|
|
86
|
+
// Regular number formatting with compact notation if needed
|
|
87
|
+
return new Intl.NumberFormat('en-US', {
|
|
88
|
+
notation: formatLargeNumbers ? 'compact' : 'standard',
|
|
89
|
+
compactDisplay: 'short',
|
|
90
|
+
maximumFractionDigits: 1
|
|
91
|
+
}).format(numValue);
|
|
64
92
|
}
|
|
65
|
-
|
|
66
|
-
return val.toString();
|
|
67
93
|
}
|
|
68
94
|
|
|
69
|
-
function
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
return '#10B981';
|
|
79
|
-
case 'warning':
|
|
80
|
-
return '#F59E0B';
|
|
81
|
-
case 'danger':
|
|
82
|
-
return '#EF4444';
|
|
83
|
-
default:
|
|
84
|
-
return '#6B7280';
|
|
85
|
-
}
|
|
95
|
+
// Helper function to convert currency symbols to ISO codes
|
|
96
|
+
function currencySymbolToCode(symbol: string): string {
|
|
97
|
+
const map: Record<string, string> = {
|
|
98
|
+
$: 'USD',
|
|
99
|
+
'€': 'EUR',
|
|
100
|
+
'£': 'GBP',
|
|
101
|
+
'¥': 'JPY'
|
|
102
|
+
};
|
|
103
|
+
return map[symbol] || 'USD';
|
|
86
104
|
}
|
|
87
105
|
|
|
106
|
+
const chartColorMap = {
|
|
107
|
+
[Color.PRIMARY]: '#4F46E5',
|
|
108
|
+
[Color.SECONDARY]: '#6B7280',
|
|
109
|
+
[Color.INFO]: '#3B82F6',
|
|
110
|
+
[Color.SUCCESS]: '#10B981',
|
|
111
|
+
[Color.WARNING]: '#F59E0B',
|
|
112
|
+
[Color.DANGER]: '#EF4444',
|
|
113
|
+
[Color.DEFAULT]: '#6B7280'
|
|
114
|
+
};
|
|
115
|
+
|
|
88
116
|
const trendDirection = $derived(getTrendDirection(trend));
|
|
89
117
|
const formattedValue = $derived(formatValue(value));
|
|
90
|
-
const formattedPreviousValue = $derived(
|
|
118
|
+
const formattedPreviousValue = $derived(
|
|
119
|
+
previousValue !== undefined ? formatValue(previousValue) : undefined
|
|
120
|
+
);
|
|
91
121
|
|
|
92
122
|
const {
|
|
93
123
|
base,
|
|
94
124
|
label: labelSlot,
|
|
95
125
|
value: valueSlot,
|
|
96
126
|
trend: trendSlot,
|
|
97
|
-
previousValue: previousValueSlot
|
|
98
|
-
chartContainer: chartContainerSlot
|
|
127
|
+
previousValue: previousValueSlot
|
|
99
128
|
} = $derived(
|
|
100
129
|
statsCard({
|
|
101
130
|
color,
|
|
@@ -103,12 +132,10 @@
|
|
|
103
132
|
})
|
|
104
133
|
);
|
|
105
134
|
|
|
106
|
-
const baseClass = $derived(cn(base(), 'flex flex-col p-6 rounded-lg border border-gray-200 bg-white shadow-sm', className));
|
|
107
135
|
const labelClasses = $derived(cn(labelSlot(), 'text-sm font-medium mb-1'));
|
|
108
136
|
const valueClasses = $derived(cn(valueSlot(), 'text-4xl font-bold'));
|
|
109
137
|
const trendClasses = $derived(cn(trendSlot(), 'text-sm font-medium ml-2'));
|
|
110
|
-
const previousValueClasses = $derived(cn(previousValueSlot(), 'text-sm text-
|
|
111
|
-
const chartContainerClasses = $derived(cn(chartContainerSlot(), 'ml-auto h-10 w-32'));
|
|
138
|
+
const previousValueClasses = $derived(cn(previousValueSlot(), 'text-sm text-default-500 mt-1'));
|
|
112
139
|
|
|
113
140
|
const trendFormatted = $derived.by(() => {
|
|
114
141
|
if (trend === undefined || trend === null) return '';
|
|
@@ -117,8 +144,7 @@
|
|
|
117
144
|
return trend >= 0 ? `+${formattedValue}%` : `-${formattedValue}%`;
|
|
118
145
|
});
|
|
119
146
|
|
|
120
|
-
|
|
121
|
-
const chartColor = $derived(getChartColor());
|
|
147
|
+
const chartColor = $derived(chartColorMap[color] || chartColorMap[Color.DEFAULT]);
|
|
122
148
|
|
|
123
149
|
onMount(() => {
|
|
124
150
|
if (!chartData || chartData.length < 2 || !chartContainer) return;
|
|
@@ -143,41 +169,43 @@
|
|
|
143
169
|
type: 'value',
|
|
144
170
|
show: false
|
|
145
171
|
},
|
|
146
|
-
series: [
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
172
|
+
series: [
|
|
173
|
+
{
|
|
174
|
+
data: chartData,
|
|
175
|
+
type: 'line',
|
|
176
|
+
symbol: 'none',
|
|
177
|
+
lineStyle: {
|
|
178
|
+
color: chartColor,
|
|
179
|
+
width: 2
|
|
180
|
+
},
|
|
181
|
+
areaStyle: {
|
|
182
|
+
color: {
|
|
183
|
+
type: 'linear',
|
|
184
|
+
x: 0,
|
|
185
|
+
y: 0,
|
|
186
|
+
x2: 0,
|
|
187
|
+
y2: 1,
|
|
188
|
+
colorStops: [
|
|
189
|
+
{
|
|
190
|
+
offset: 0,
|
|
191
|
+
color: chartColor + '40' // 25% opacity
|
|
192
|
+
},
|
|
193
|
+
{
|
|
194
|
+
offset: 1,
|
|
195
|
+
color: chartColor + '00' // 0% opacity
|
|
196
|
+
}
|
|
197
|
+
]
|
|
198
|
+
}
|
|
199
|
+
},
|
|
200
|
+
smooth: true
|
|
201
|
+
}
|
|
202
|
+
],
|
|
203
|
+
animation: false,
|
|
204
|
+
animationDuration: 1000
|
|
176
205
|
};
|
|
177
206
|
|
|
178
207
|
chart.setOption(options);
|
|
179
208
|
|
|
180
|
-
// Handle resize
|
|
181
209
|
const resizeObserver = new ResizeObserver(() => {
|
|
182
210
|
chart && chart.resize();
|
|
183
211
|
});
|
|
@@ -191,40 +219,42 @@
|
|
|
191
219
|
});
|
|
192
220
|
</script>
|
|
193
221
|
|
|
194
|
-
<div
|
|
195
|
-
|
|
196
|
-
|
|
222
|
+
<div
|
|
223
|
+
class={cn(
|
|
224
|
+
base(),
|
|
225
|
+
'@container flex flex-col rounded-lg border border-default-200 bg-white p-6 shadow-sm',
|
|
226
|
+
className
|
|
227
|
+
)}
|
|
228
|
+
>
|
|
229
|
+
<div class="flex items-center justify-between">
|
|
197
230
|
{#if label}
|
|
198
231
|
<dt class={labelClasses}>{label}</dt>
|
|
199
232
|
{/if}
|
|
200
233
|
{#if trend !== undefined && trend !== null}
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
234
|
+
<span class={trendClasses}>
|
|
235
|
+
{trendFormatted}
|
|
236
|
+
</span>
|
|
204
237
|
{/if}
|
|
205
238
|
</div>
|
|
206
239
|
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
<!-- Value section -->
|
|
210
|
-
<div class="flex-grow">
|
|
240
|
+
<div class="mt-1 flex flex-row items-center overflow-clip">
|
|
241
|
+
<div class="w-full flex-grow">
|
|
211
242
|
{#if value !== undefined}
|
|
212
|
-
<dd class={valueClasses}>
|
|
243
|
+
<dd class={valueClasses} title={value}>
|
|
213
244
|
{formattedValue}
|
|
214
245
|
</dd>
|
|
215
246
|
{/if}
|
|
216
247
|
|
|
217
|
-
<!-- Previous value or tagline underneath -->
|
|
218
248
|
{#if previousValue !== undefined}
|
|
219
249
|
<div class={previousValueClasses}>
|
|
220
|
-
{previousValuePrefix}
|
|
250
|
+
{previousValuePrefix}
|
|
251
|
+
{formattedPreviousValue}
|
|
221
252
|
</div>
|
|
222
253
|
{/if}
|
|
223
254
|
</div>
|
|
224
255
|
|
|
225
|
-
<!-- ECharts chart -->
|
|
226
256
|
{#if chartData && chartData.length > 1}
|
|
227
|
-
<div class=
|
|
257
|
+
<div class="h-10 w-full min-w-32 @max-[212.862px]:hidden" bind:this={chartContainer}></div>
|
|
228
258
|
{/if}
|
|
229
259
|
</div>
|
|
230
260
|
|
|
@@ -233,4 +263,4 @@
|
|
|
233
263
|
{@render children()}
|
|
234
264
|
</div>
|
|
235
265
|
{/if}
|
|
236
|
-
</div>
|
|
266
|
+
</div>
|
|
@@ -1,39 +1,37 @@
|
|
|
1
|
-
import
|
|
2
|
-
import type { Snippet } from 'svelte';
|
|
3
|
-
import type { VariantColors } from '../../types/variants.js';
|
|
1
|
+
import { Color } from '../../variants.js';
|
|
4
2
|
export declare const card: import("tailwind-variants").TVReturnType<{
|
|
5
3
|
color: {
|
|
6
|
-
|
|
4
|
+
[Color.DEFAULT]: {
|
|
7
5
|
base: string;
|
|
8
6
|
title: string;
|
|
9
7
|
body: string;
|
|
10
8
|
};
|
|
11
|
-
|
|
9
|
+
[Color.PRIMARY]: {
|
|
12
10
|
base: string;
|
|
13
11
|
title: string;
|
|
14
12
|
body: string;
|
|
15
13
|
};
|
|
16
|
-
|
|
14
|
+
[Color.SECONDARY]: {
|
|
17
15
|
base: string;
|
|
18
16
|
title: string;
|
|
19
17
|
body: string;
|
|
20
18
|
};
|
|
21
|
-
|
|
19
|
+
[Color.INFO]: {
|
|
22
20
|
base: string;
|
|
23
21
|
title: string;
|
|
24
22
|
body: string;
|
|
25
23
|
};
|
|
26
|
-
|
|
24
|
+
[Color.SUCCESS]: {
|
|
27
25
|
base: string;
|
|
28
26
|
title: string;
|
|
29
27
|
body: string;
|
|
30
28
|
};
|
|
31
|
-
|
|
29
|
+
[Color.WARNING]: {
|
|
32
30
|
base: string;
|
|
33
31
|
title: string;
|
|
34
32
|
body: string;
|
|
35
33
|
};
|
|
36
|
-
|
|
34
|
+
[Color.DANGER]: {
|
|
37
35
|
base: string;
|
|
38
36
|
title: string;
|
|
39
37
|
body: string;
|
|
@@ -45,37 +43,37 @@ export declare const card: import("tailwind-variants").TVReturnType<{
|
|
|
45
43
|
body: string;
|
|
46
44
|
}, undefined, {
|
|
47
45
|
color: {
|
|
48
|
-
|
|
46
|
+
[Color.DEFAULT]: {
|
|
49
47
|
base: string;
|
|
50
48
|
title: string;
|
|
51
49
|
body: string;
|
|
52
50
|
};
|
|
53
|
-
|
|
51
|
+
[Color.PRIMARY]: {
|
|
54
52
|
base: string;
|
|
55
53
|
title: string;
|
|
56
54
|
body: string;
|
|
57
55
|
};
|
|
58
|
-
|
|
56
|
+
[Color.SECONDARY]: {
|
|
59
57
|
base: string;
|
|
60
58
|
title: string;
|
|
61
59
|
body: string;
|
|
62
60
|
};
|
|
63
|
-
|
|
61
|
+
[Color.INFO]: {
|
|
64
62
|
base: string;
|
|
65
63
|
title: string;
|
|
66
64
|
body: string;
|
|
67
65
|
};
|
|
68
|
-
|
|
66
|
+
[Color.SUCCESS]: {
|
|
69
67
|
base: string;
|
|
70
68
|
title: string;
|
|
71
69
|
body: string;
|
|
72
70
|
};
|
|
73
|
-
|
|
71
|
+
[Color.WARNING]: {
|
|
74
72
|
base: string;
|
|
75
73
|
title: string;
|
|
76
74
|
body: string;
|
|
77
75
|
};
|
|
78
|
-
|
|
76
|
+
[Color.DANGER]: {
|
|
79
77
|
base: string;
|
|
80
78
|
title: string;
|
|
81
79
|
body: string;
|
|
@@ -87,37 +85,37 @@ export declare const card: import("tailwind-variants").TVReturnType<{
|
|
|
87
85
|
body: string;
|
|
88
86
|
}, import("tailwind-variants").TVReturnType<{
|
|
89
87
|
color: {
|
|
90
|
-
|
|
88
|
+
[Color.DEFAULT]: {
|
|
91
89
|
base: string;
|
|
92
90
|
title: string;
|
|
93
91
|
body: string;
|
|
94
92
|
};
|
|
95
|
-
|
|
93
|
+
[Color.PRIMARY]: {
|
|
96
94
|
base: string;
|
|
97
95
|
title: string;
|
|
98
96
|
body: string;
|
|
99
97
|
};
|
|
100
|
-
|
|
98
|
+
[Color.SECONDARY]: {
|
|
101
99
|
base: string;
|
|
102
100
|
title: string;
|
|
103
101
|
body: string;
|
|
104
102
|
};
|
|
105
|
-
|
|
103
|
+
[Color.INFO]: {
|
|
106
104
|
base: string;
|
|
107
105
|
title: string;
|
|
108
106
|
body: string;
|
|
109
107
|
};
|
|
110
|
-
|
|
108
|
+
[Color.SUCCESS]: {
|
|
111
109
|
base: string;
|
|
112
110
|
title: string;
|
|
113
111
|
body: string;
|
|
114
112
|
};
|
|
115
|
-
|
|
113
|
+
[Color.WARNING]: {
|
|
116
114
|
base: string;
|
|
117
115
|
title: string;
|
|
118
116
|
body: string;
|
|
119
117
|
};
|
|
120
|
-
|
|
118
|
+
[Color.DANGER]: {
|
|
121
119
|
base: string;
|
|
122
120
|
title: string;
|
|
123
121
|
body: string;
|
|
@@ -128,12 +126,3 @@ export declare const card: import("tailwind-variants").TVReturnType<{
|
|
|
128
126
|
title: string;
|
|
129
127
|
body: string;
|
|
130
128
|
}, undefined, unknown, unknown, undefined>>;
|
|
131
|
-
export type CardProps = {
|
|
132
|
-
color?: VariantColors;
|
|
133
|
-
title?: string;
|
|
134
|
-
class?: ClassValue;
|
|
135
|
-
titleclass?: ClassValue;
|
|
136
|
-
bodyclass?: ClassValue;
|
|
137
|
-
children?: Snippet;
|
|
138
|
-
custom?: Snippet;
|
|
139
|
-
};
|
package/dist/layout/card/card.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { tv } from 'tailwind-variants';
|
|
2
|
+
import { Color } from '../../variants.js';
|
|
2
3
|
export const card = tv({
|
|
3
4
|
slots: {
|
|
4
5
|
base: 'flex flex-col p-4 gap-2 border rounded-md shadow-sm',
|
|
@@ -7,37 +8,37 @@ export const card = tv({
|
|
|
7
8
|
},
|
|
8
9
|
variants: {
|
|
9
10
|
color: {
|
|
10
|
-
|
|
11
|
+
[Color.DEFAULT]: {
|
|
11
12
|
base: 'bg-default-50 border-default-200',
|
|
12
13
|
title: 'text-default-900',
|
|
13
14
|
body: 'text-default-700'
|
|
14
15
|
},
|
|
15
|
-
|
|
16
|
+
[Color.PRIMARY]: {
|
|
16
17
|
base: 'bg-primary-50 border-primary-200',
|
|
17
18
|
title: 'text-primary-900',
|
|
18
19
|
body: 'text-primary-700'
|
|
19
20
|
},
|
|
20
|
-
|
|
21
|
+
[Color.SECONDARY]: {
|
|
21
22
|
base: 'bg-secondary-50 border-secondary-200',
|
|
22
23
|
title: 'text-secondary-900',
|
|
23
24
|
body: 'text-secondary-700'
|
|
24
25
|
},
|
|
25
|
-
|
|
26
|
+
[Color.INFO]: {
|
|
26
27
|
base: 'bg-info-50 border-info-200',
|
|
27
28
|
title: 'text-info-900',
|
|
28
29
|
body: 'text-info-700'
|
|
29
30
|
},
|
|
30
|
-
|
|
31
|
+
[Color.SUCCESS]: {
|
|
31
32
|
base: 'bg-success-50 border-success-200',
|
|
32
33
|
title: 'text-success-900',
|
|
33
34
|
body: 'text-success-700'
|
|
34
35
|
},
|
|
35
|
-
|
|
36
|
+
[Color.WARNING]: {
|
|
36
37
|
base: 'bg-warning-50 border-warning-200',
|
|
37
38
|
title: 'text-warning-900',
|
|
38
39
|
body: 'text-warning-700'
|
|
39
40
|
},
|
|
40
|
-
|
|
41
|
+
[Color.DANGER]: {
|
|
41
42
|
base: 'bg-danger-50 border-danger-200',
|
|
42
43
|
title: 'text-danger-900',
|
|
43
44
|
body: 'text-danger-700'
|
|
@@ -45,6 +46,6 @@ export const card = tv({
|
|
|
45
46
|
}
|
|
46
47
|
},
|
|
47
48
|
defaultVariants: {
|
|
48
|
-
color:
|
|
49
|
+
color: Color.DEFAULT
|
|
49
50
|
}
|
|
50
51
|
});
|