@makolabs/ripple 0.0.1-dev.1 → 0.0.1-dev.10

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