@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.
Files changed (136) hide show
  1. package/README.md +394 -54
  2. package/dist/button/Button.svelte +5 -3
  3. package/dist/button/Button.svelte.d.ts +1 -1
  4. package/dist/button/button.d.ts +40 -63
  5. package/dist/button/button.js +15 -14
  6. package/dist/charts/Chart.svelte +545 -0
  7. package/dist/charts/Chart.svelte.d.ts +4 -0
  8. package/dist/drawer/Drawer.svelte +13 -2
  9. package/dist/drawer/Drawer.svelte.d.ts +1 -1
  10. package/dist/drawer/drawer.d.ts +0 -17
  11. package/dist/drawer/drawer.js +3 -3
  12. package/dist/elements/accordion/Accordion.svelte +98 -0
  13. package/dist/elements/accordion/Accordion.svelte.d.ts +4 -0
  14. package/dist/elements/accordion/accordion.d.ts +227 -0
  15. package/dist/elements/accordion/accordion.js +138 -0
  16. package/dist/elements/alert/Alert.svelte +57 -0
  17. package/dist/elements/alert/Alert.svelte.d.ts +4 -0
  18. package/dist/elements/badge/Badge.svelte +13 -5
  19. package/dist/elements/badge/Badge.svelte.d.ts +1 -1
  20. package/dist/elements/badge/badge.d.ts +0 -12
  21. package/dist/elements/dropdown/Dropdown.svelte +100 -138
  22. package/dist/elements/dropdown/Dropdown.svelte.d.ts +1 -1
  23. package/dist/elements/dropdown/Select.svelte +167 -66
  24. package/dist/elements/dropdown/Select.svelte.d.ts +1 -1
  25. package/dist/elements/dropdown/dropdown.d.ts +34 -57
  26. package/dist/elements/dropdown/dropdown.js +11 -5
  27. package/dist/elements/dropdown/select.d.ts +34 -54
  28. package/dist/elements/dropdown/select.js +24 -16
  29. package/dist/elements/file-upload/FileUpload.svelte +135 -0
  30. package/dist/elements/file-upload/FileUpload.svelte.d.ts +4 -0
  31. package/dist/elements/file-upload/FilesPreview.svelte +93 -0
  32. package/dist/elements/file-upload/FilesPreview.svelte.d.ts +4 -0
  33. package/dist/elements/progress/Progress.svelte +145 -0
  34. package/dist/elements/progress/Progress.svelte.d.ts +4 -0
  35. package/dist/elements/timeline/Timeline.svelte +92 -0
  36. package/dist/elements/timeline/Timeline.svelte.d.ts +7 -0
  37. package/dist/forms/Checkbox.svelte +54 -0
  38. package/dist/forms/Checkbox.svelte.d.ts +4 -0
  39. package/dist/forms/DateRange.svelte +493 -0
  40. package/dist/forms/DateRange.svelte.d.ts +4 -0
  41. package/dist/forms/Form.svelte +39 -0
  42. package/dist/forms/Form.svelte.d.ts +4 -0
  43. package/dist/forms/Input.svelte +86 -0
  44. package/dist/forms/Input.svelte.d.ts +4 -0
  45. package/dist/forms/NumberInput.svelte +159 -0
  46. package/dist/forms/NumberInput.svelte.d.ts +4 -0
  47. package/dist/forms/RadioInputs.svelte +64 -0
  48. package/dist/forms/RadioInputs.svelte.d.ts +4 -0
  49. package/dist/forms/RadioPill.svelte +66 -0
  50. package/dist/forms/RadioPill.svelte.d.ts +4 -0
  51. package/dist/forms/Slider.svelte +342 -0
  52. package/dist/forms/Slider.svelte.d.ts +4 -0
  53. package/dist/forms/Tags.svelte +181 -0
  54. package/dist/forms/Tags.svelte.d.ts +4 -0
  55. package/dist/forms/Toggle.svelte +132 -0
  56. package/dist/forms/Toggle.svelte.d.ts +4 -0
  57. package/dist/forms/slider.d.ts +143 -0
  58. package/dist/forms/slider.js +62 -0
  59. package/dist/header/Breadcrumbs.svelte +2 -1
  60. package/dist/header/Breadcrumbs.svelte.d.ts +1 -1
  61. package/dist/header/PageHeader.svelte +2 -2
  62. package/dist/header/PageHeader.svelte.d.ts +1 -1
  63. package/dist/header/breadcrumbs.d.ts +20 -14
  64. package/dist/header/breadcrumbs.js +6 -0
  65. package/dist/helper/date.d.ts +7 -0
  66. package/dist/helper/date.js +15 -0
  67. package/dist/index.d.ts +811 -9
  68. package/dist/index.js +69 -16
  69. package/dist/layout/card/Card.svelte +5 -8
  70. package/dist/layout/card/Card.svelte.d.ts +1 -1
  71. package/dist/layout/card/StatsCard.svelte +119 -89
  72. package/dist/layout/card/StatsCard.svelte.d.ts +1 -1
  73. package/dist/layout/card/card.d.ts +22 -33
  74. package/dist/layout/card/card.js +9 -8
  75. package/dist/layout/card/stats-card.d.ts +22 -39
  76. package/dist/layout/card/stats-card.js +14 -14
  77. package/dist/layout/navbar/navbar.d.ts +0 -23
  78. package/dist/layout/sidebar/NavGroup.svelte +38 -47
  79. package/dist/layout/sidebar/NavGroup.svelte.d.ts +1 -1
  80. package/dist/layout/sidebar/NavItem.svelte +3 -3
  81. package/dist/layout/sidebar/NavItem.svelte.d.ts +1 -1
  82. package/dist/layout/sidebar/Sidebar.svelte +101 -72
  83. package/dist/layout/sidebar/Sidebar.svelte.d.ts +1 -1
  84. package/dist/layout/table/Table.svelte +464 -87
  85. package/dist/layout/table/Table.svelte.d.ts +1 -1
  86. package/dist/layout/table/table.d.ts +0 -47
  87. package/dist/layout/table/table.js +0 -8
  88. package/dist/layout/tabs/Tab.svelte +9 -6
  89. package/dist/layout/tabs/Tab.svelte.d.ts +1 -1
  90. package/dist/layout/tabs/TabContent.svelte +1 -2
  91. package/dist/layout/tabs/TabContent.svelte.d.ts +1 -1
  92. package/dist/layout/tabs/TabGroup.svelte +10 -5
  93. package/dist/layout/tabs/TabGroup.svelte.d.ts +2 -2
  94. package/dist/layout/tabs/tabs.d.ts +61 -76
  95. package/dist/layout/tabs/tabs.js +170 -28
  96. package/dist/modal/Modal.svelte +2 -1
  97. package/dist/modal/Modal.svelte.d.ts +1 -1
  98. package/dist/modal/modal.d.ts +0 -23
  99. package/dist/modal/modal.js +3 -3
  100. package/dist/sonner/sonner.svelte +13 -0
  101. package/dist/sonner/sonner.svelte.d.ts +4 -0
  102. package/dist/types/variants.d.ts +1 -21
  103. package/dist/types/variants.js +1 -19
  104. package/dist/utils/Portal.svelte +108 -0
  105. package/dist/utils/Portal.svelte.d.ts +8 -0
  106. package/dist/variants.d.ts +30 -0
  107. package/dist/variants.js +36 -0
  108. package/package.json +7 -3
  109. package/dist/button/index.d.ts +0 -1
  110. package/dist/button/index.js +0 -1
  111. package/dist/drawer/index.d.ts +0 -2
  112. package/dist/drawer/index.js +0 -1
  113. package/dist/elements/badge/index.d.ts +0 -2
  114. package/dist/elements/badge/index.js +0 -2
  115. package/dist/elements/dropdown/index.d.ts +0 -3
  116. package/dist/elements/dropdown/index.js +0 -2
  117. package/dist/header/index.d.ts +0 -4
  118. package/dist/header/index.js +0 -2
  119. package/dist/header/pageheaders.d.ts +0 -10
  120. package/dist/header/pageheaders.js +0 -1
  121. package/dist/layout/card/index.d.ts +0 -4
  122. package/dist/layout/card/index.js +0 -2
  123. package/dist/layout/index.d.ts +0 -5
  124. package/dist/layout/index.js +0 -5
  125. package/dist/layout/navbar/index.d.ts +0 -2
  126. package/dist/layout/navbar/index.js +0 -2
  127. package/dist/layout/sidebar/index.d.ts +0 -2
  128. package/dist/layout/sidebar/index.js +0 -1
  129. package/dist/layout/sidebar/sidebar.d.ts +0 -46
  130. package/dist/layout/sidebar/sidebar.js +0 -1
  131. package/dist/layout/table/index.d.ts +0 -3
  132. package/dist/layout/table/index.js +0 -2
  133. package/dist/layout/tabs/index.d.ts +0 -3
  134. package/dist/layout/tabs/index.js +0 -3
  135. package/dist/modal/index.d.ts +0 -1
  136. package/dist/modal/index.js +0 -1
package/dist/index.js CHANGED
@@ -1,18 +1,71 @@
1
- // Button components
2
- export * from './button/index.js';
3
- // Modal components
4
- export * from './modal/index.js';
5
- // Drawer components
6
- export * from './drawer/index.js';
7
- // Header components
8
- export * from './header/index.js';
9
- // Layout components
10
- export * from './layout/index.js';
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 * from './helper/nav.svelte.js';
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, type CardProps } from './card.js';
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 = 'default',
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,4 +1,4 @@
1
- import { type CardProps } from './card.js';
1
+ import type { CardProps } from '../../index.js';
2
2
  declare const Card: import("svelte").Component<CardProps, {}, "">;
3
3
  type Card = ReturnType<typeof Card>;
4
4
  export default Card;
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
2
  import { cn } from '../../helper/cls.js';
3
- import { statsCard, type StatsCardProps } from './stats-card.js';
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 = 'default',
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
- const cleanedStr = val.replace(/,/g, '');
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
- const numValue = parseFloat(cleanedStr);
53
- return formatValue(numValue);
65
+ numValue = parseFloat(cleanedStr);
66
+ } else {
67
+ // Not a number we can format
68
+ return val;
54
69
  }
55
- return val;
70
+ } else {
71
+ // Already a number
72
+ numValue = val;
56
73
  }
57
74
 
58
- if (!formatLargeNumbers) return val.toString();
59
-
60
- if (Math.abs(val) >= 1_000_000) {
61
- return (val / 1_000_000).toFixed(1).replace(/\.0$/, '') + 'M';
62
- } else if (Math.abs(val) >= 1_000) {
63
- return (val / 1_000).toFixed(1).replace(/\.0$/, '') + 'K';
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 getChartColor() {
70
- switch (color) {
71
- case 'primary':
72
- return '#4F46E5';
73
- case 'secondary':
74
- return '#6B7280';
75
- case 'info':
76
- return '#3B82F6';
77
- case 'success':
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(previousValue !== undefined ? formatValue(previousValue) : undefined);
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-gray-500 mt-1'));
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
- // Chart color based on card color
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
- data: chartData,
148
- type: 'line',
149
- symbol: 'none',
150
- lineStyle: {
151
- color: chartColor,
152
- width: 2
153
- },
154
- areaStyle: {
155
- color: {
156
- type: 'linear',
157
- x: 0,
158
- y: 0,
159
- x2: 0,
160
- y2: 1,
161
- colorStops: [
162
- {
163
- offset: 0,
164
- color: chartColor + '40' // 25% opacity
165
- },
166
- {
167
- offset: 1,
168
- color: chartColor + '00' // 0% opacity
169
- }
170
- ]
171
- }
172
- },
173
- smooth: true
174
- }],
175
- animation: false
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 class={baseClass}>
195
- <!-- Header with label and trend -->
196
- <div class="flex justify-between items-center">
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
- <span class={trendClasses}>
202
- {trendFormatted}
203
- </span>
234
+ <span class={trendClasses}>
235
+ {trendFormatted}
236
+ </span>
204
237
  {/if}
205
238
  </div>
206
239
 
207
- <!-- Main content area with value and optional chart -->
208
- <div class="flex items-center mt-1">
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} {formattedPreviousValue}
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={chartContainerClasses} bind:this={chartContainer}></div>
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,4 +1,4 @@
1
- import { type StatsCardProps } from './stats-card.js';
1
+ import type { StatsCardProps } from '../../index.js';
2
2
  declare const StatsCard: import("svelte").Component<StatsCardProps, {}, "">;
3
3
  type StatsCard = ReturnType<typeof StatsCard>;
4
4
  export default StatsCard;
@@ -1,39 +1,37 @@
1
- import type { ClassValue } from 'tailwind-variants';
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
- default: {
4
+ [Color.DEFAULT]: {
7
5
  base: string;
8
6
  title: string;
9
7
  body: string;
10
8
  };
11
- primary: {
9
+ [Color.PRIMARY]: {
12
10
  base: string;
13
11
  title: string;
14
12
  body: string;
15
13
  };
16
- secondary: {
14
+ [Color.SECONDARY]: {
17
15
  base: string;
18
16
  title: string;
19
17
  body: string;
20
18
  };
21
- info: {
19
+ [Color.INFO]: {
22
20
  base: string;
23
21
  title: string;
24
22
  body: string;
25
23
  };
26
- success: {
24
+ [Color.SUCCESS]: {
27
25
  base: string;
28
26
  title: string;
29
27
  body: string;
30
28
  };
31
- warning: {
29
+ [Color.WARNING]: {
32
30
  base: string;
33
31
  title: string;
34
32
  body: string;
35
33
  };
36
- danger: {
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
- default: {
46
+ [Color.DEFAULT]: {
49
47
  base: string;
50
48
  title: string;
51
49
  body: string;
52
50
  };
53
- primary: {
51
+ [Color.PRIMARY]: {
54
52
  base: string;
55
53
  title: string;
56
54
  body: string;
57
55
  };
58
- secondary: {
56
+ [Color.SECONDARY]: {
59
57
  base: string;
60
58
  title: string;
61
59
  body: string;
62
60
  };
63
- info: {
61
+ [Color.INFO]: {
64
62
  base: string;
65
63
  title: string;
66
64
  body: string;
67
65
  };
68
- success: {
66
+ [Color.SUCCESS]: {
69
67
  base: string;
70
68
  title: string;
71
69
  body: string;
72
70
  };
73
- warning: {
71
+ [Color.WARNING]: {
74
72
  base: string;
75
73
  title: string;
76
74
  body: string;
77
75
  };
78
- danger: {
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
- default: {
88
+ [Color.DEFAULT]: {
91
89
  base: string;
92
90
  title: string;
93
91
  body: string;
94
92
  };
95
- primary: {
93
+ [Color.PRIMARY]: {
96
94
  base: string;
97
95
  title: string;
98
96
  body: string;
99
97
  };
100
- secondary: {
98
+ [Color.SECONDARY]: {
101
99
  base: string;
102
100
  title: string;
103
101
  body: string;
104
102
  };
105
- info: {
103
+ [Color.INFO]: {
106
104
  base: string;
107
105
  title: string;
108
106
  body: string;
109
107
  };
110
- success: {
108
+ [Color.SUCCESS]: {
111
109
  base: string;
112
110
  title: string;
113
111
  body: string;
114
112
  };
115
- warning: {
113
+ [Color.WARNING]: {
116
114
  base: string;
117
115
  title: string;
118
116
  body: string;
119
117
  };
120
- danger: {
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
- };
@@ -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
- default: {
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
- primary: {
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
- secondary: {
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
- info: {
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
- success: {
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
- warning: {
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
- danger: {
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: 'default'
49
+ color: Color.DEFAULT
49
50
  }
50
51
  });