@makolabs/ripple 0.0.1-dev.3 → 0.0.1-dev.30

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 +538 -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 +57 -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 +130 -0
  27. package/dist/elements/file-upload/FileUpload.svelte.d.ts +4 -0
  28. package/dist/elements/file-upload/FilesPreview.svelte +93 -0
  29. package/dist/elements/file-upload/FilesPreview.svelte.d.ts +4 -0
  30. package/dist/elements/progress/Progress.svelte +145 -0
  31. package/dist/elements/progress/Progress.svelte.d.ts +4 -0
  32. package/dist/elements/timeline/Timeline.svelte +92 -0
  33. package/dist/elements/timeline/Timeline.svelte.d.ts +7 -0
  34. package/dist/forms/Checkbox.svelte +54 -0
  35. package/dist/forms/Checkbox.svelte.d.ts +4 -0
  36. package/dist/forms/DateRange.svelte +493 -0
  37. package/dist/forms/DateRange.svelte.d.ts +4 -0
  38. package/dist/forms/Form.svelte +39 -0
  39. package/dist/forms/Form.svelte.d.ts +4 -0
  40. package/dist/forms/Input.svelte +86 -0
  41. package/dist/forms/Input.svelte.d.ts +4 -0
  42. package/dist/forms/NumberInput.svelte +159 -0
  43. package/dist/forms/NumberInput.svelte.d.ts +4 -0
  44. package/dist/forms/RadioInputs.svelte +64 -0
  45. package/dist/forms/RadioInputs.svelte.d.ts +4 -0
  46. package/dist/forms/RadioPill.svelte +66 -0
  47. package/dist/forms/RadioPill.svelte.d.ts +4 -0
  48. package/dist/forms/Slider.svelte +342 -0
  49. package/dist/forms/Slider.svelte.d.ts +4 -0
  50. package/dist/forms/Tags.svelte +181 -0
  51. package/dist/forms/Tags.svelte.d.ts +4 -0
  52. package/dist/forms/Toggle.svelte +132 -0
  53. package/dist/forms/Toggle.svelte.d.ts +4 -0
  54. package/dist/forms/slider.d.ts +143 -0
  55. package/dist/forms/slider.js +62 -0
  56. package/dist/header/Breadcrumbs.svelte +73 -0
  57. package/dist/header/Breadcrumbs.svelte.d.ts +4 -0
  58. package/dist/header/PageHeader.svelte +30 -0
  59. package/dist/header/PageHeader.svelte.d.ts +4 -0
  60. package/dist/header/breadcrumbs.d.ts +226 -0
  61. package/dist/header/breadcrumbs.js +87 -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 +734 -1
  69. package/dist/index.js +66 -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 +266 -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 +191 -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 +284 -0
  93. package/dist/layout/table/table.js +141 -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 -102
  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
@@ -0,0 +1,143 @@
1
+ import { Size } from '../variants.js';
2
+ export declare const slider: import("tailwind-variants").TVReturnType<{
3
+ size: {
4
+ [Size.SM]: {
5
+ track: string;
6
+ thumb: string;
7
+ mark: string;
8
+ label: string;
9
+ value: string;
10
+ };
11
+ [Size.BASE]: {
12
+ track: string;
13
+ thumb: string;
14
+ mark: string;
15
+ label: string;
16
+ value: string;
17
+ };
18
+ [Size.LG]: {
19
+ track: string;
20
+ thumb: string;
21
+ mark: string;
22
+ label: string;
23
+ value: string;
24
+ };
25
+ };
26
+ disabled: {
27
+ true: {
28
+ base: string;
29
+ thumb: string;
30
+ };
31
+ };
32
+ hasError: {
33
+ true: {
34
+ track: string;
35
+ range: string;
36
+ thumb: string;
37
+ label: string;
38
+ value: string;
39
+ };
40
+ };
41
+ }, {
42
+ base: string;
43
+ track: string;
44
+ range: string;
45
+ thumb: string[];
46
+ mark: string;
47
+ label: string;
48
+ value: string;
49
+ }, undefined, {
50
+ size: {
51
+ [Size.SM]: {
52
+ track: string;
53
+ thumb: string;
54
+ mark: string;
55
+ label: string;
56
+ value: string;
57
+ };
58
+ [Size.BASE]: {
59
+ track: string;
60
+ thumb: string;
61
+ mark: string;
62
+ label: string;
63
+ value: string;
64
+ };
65
+ [Size.LG]: {
66
+ track: string;
67
+ thumb: string;
68
+ mark: string;
69
+ label: string;
70
+ value: string;
71
+ };
72
+ };
73
+ disabled: {
74
+ true: {
75
+ base: string;
76
+ thumb: string;
77
+ };
78
+ };
79
+ hasError: {
80
+ true: {
81
+ track: string;
82
+ range: string;
83
+ thumb: string;
84
+ label: string;
85
+ value: string;
86
+ };
87
+ };
88
+ }, {
89
+ base: string;
90
+ track: string;
91
+ range: string;
92
+ thumb: string[];
93
+ mark: string;
94
+ label: string;
95
+ value: string;
96
+ }, import("tailwind-variants").TVReturnType<{
97
+ size: {
98
+ [Size.SM]: {
99
+ track: string;
100
+ thumb: string;
101
+ mark: string;
102
+ label: string;
103
+ value: string;
104
+ };
105
+ [Size.BASE]: {
106
+ track: string;
107
+ thumb: string;
108
+ mark: string;
109
+ label: string;
110
+ value: string;
111
+ };
112
+ [Size.LG]: {
113
+ track: string;
114
+ thumb: string;
115
+ mark: string;
116
+ label: string;
117
+ value: string;
118
+ };
119
+ };
120
+ disabled: {
121
+ true: {
122
+ base: string;
123
+ thumb: string;
124
+ };
125
+ };
126
+ hasError: {
127
+ true: {
128
+ track: string;
129
+ range: string;
130
+ thumb: string;
131
+ label: string;
132
+ value: string;
133
+ };
134
+ };
135
+ }, {
136
+ base: string;
137
+ track: string;
138
+ range: string;
139
+ thumb: string[];
140
+ mark: string;
141
+ label: string;
142
+ value: string;
143
+ }, undefined, unknown, unknown, undefined>>;
@@ -0,0 +1,62 @@
1
+ import { tv } from 'tailwind-variants';
2
+ import { Color, Size } from '../variants.js';
3
+ export const slider = tv({
4
+ slots: {
5
+ base: 'relative w-full',
6
+ track: 'absolute h-2 w-full rounded-full bg-default-200 cursor-pointer',
7
+ range: 'absolute h-full rounded-full bg-primary-500',
8
+ thumb: [
9
+ 'absolute top-1/2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-white border-2 border-primary-500',
10
+ 'focus:outline-none focus:ring-2 focus:ring-primary-500 focus:ring-offset-2',
11
+ 'hover:scale-110 transition-transform cursor-pointer'
12
+ ],
13
+ mark: 'absolute text-sm text-default-500 -translate-x-1/2',
14
+ label: 'mb-2 block text-sm font-medium text-default-700',
15
+ value: 'mt-1 text-sm text-default-500'
16
+ },
17
+ variants: {
18
+ size: {
19
+ [Size.SM]: {
20
+ track: 'h-1',
21
+ thumb: 'w-3 h-3',
22
+ mark: 'text-xs top-4',
23
+ label: 'text-xs',
24
+ value: 'text-xs'
25
+ },
26
+ [Size.BASE]: {
27
+ track: 'h-2',
28
+ thumb: 'w-4 h-4',
29
+ mark: 'text-sm top-6',
30
+ label: 'text-sm',
31
+ value: 'text-sm'
32
+ },
33
+ [Size.LG]: {
34
+ track: 'h-3',
35
+ thumb: 'w-5 h-5',
36
+ mark: 'text-base top-7',
37
+ label: 'text-base',
38
+ value: 'text-base'
39
+ }
40
+ },
41
+ disabled: {
42
+ true: {
43
+ base: 'opacity-50 cursor-not-allowed',
44
+ thumb: 'cursor-not-allowed hover:scale-100 active:scale-100'
45
+ }
46
+ },
47
+ hasError: {
48
+ true: {
49
+ track: 'bg-danger-200',
50
+ range: 'bg-danger-500',
51
+ thumb: 'border-danger-500 focus:ring-danger-500',
52
+ label: 'text-danger-600',
53
+ value: 'text-danger-600'
54
+ }
55
+ }
56
+ },
57
+ defaultVariants: {
58
+ size: Size.BASE,
59
+ disabled: false,
60
+ hasError: false
61
+ }
62
+ });
@@ -0,0 +1,73 @@
1
+ <script lang="ts">
2
+ import { cn } from '../helper/cls.js';
3
+ import { breadcrumbs } from './breadcrumbs.js';
4
+ import type { BreadcrumbsProps } from '../index.js';
5
+
6
+ let {
7
+ items = [],
8
+ size = 'sm',
9
+ color = 'default',
10
+ weight = 'medium',
11
+ icon: Icon,
12
+ class: className = '',
13
+ listclass: listClassName = '',
14
+ itemclass: itemClassName = '',
15
+ separatorclass: separatorClassName = '',
16
+ wrapperclass: wrapperClassName = ''
17
+ }: BreadcrumbsProps = $props();
18
+
19
+ // Get the slots from the breadcrumbs
20
+ const { base, list, item, separator, wrapper } = $derived(
21
+ breadcrumbs({
22
+ size,
23
+ weight,
24
+ color
25
+ })
26
+ );
27
+
28
+ const baseClass = $derived(cn(base(), className));
29
+ const listClass = $derived(cn(list(), listClassName));
30
+ const itemClasses = $derived(cn(item(), itemClassName));
31
+ const separatorClasses = $derived(cn(separator(), separatorClassName));
32
+ const wrapperClasses = $derived(cn(wrapper(), wrapperClassName));
33
+ </script>
34
+
35
+ <nav class={baseClass} aria-label="Breadcrumb">
36
+ <ol role="list" class={listClass}>
37
+ {#each items as breadcrumbItem, index (index)}
38
+ <li>
39
+ <div class={wrapperClasses}>
40
+ {#if index > 0}
41
+ <span class={separatorClasses}>
42
+ {#if Icon}
43
+ <Icon />
44
+ {:else}
45
+ <svg
46
+ xmlns="http://www.w3.org/2000/svg"
47
+ width="0.8em"
48
+ height="0.8em"
49
+ viewBox="0 0 16 16"
50
+ >
51
+ <path
52
+ fill="currentColor"
53
+ d="M5.74 3.2a.75.75 0 0 0-.04 1.06L9.227 8L5.7 11.74a.75.75 0 1 0 1.1 1.02l4-4.25a.75.75 0 0 0 0-1.02l-4-4.25a.75.75 0 0 0-1.06-.04"
54
+ />
55
+ </svg>
56
+ {/if}
57
+ </span>
58
+ {/if}
59
+ <a
60
+ href={breadcrumbItem.href}
61
+ class={cn(
62
+ itemClasses,
63
+ breadcrumbItem.current ? breadcrumbs({ active: true }).item() : ''
64
+ )}
65
+ aria-current={breadcrumbItem.current ? 'page' : undefined}
66
+ >
67
+ {breadcrumbItem.label}
68
+ </a>
69
+ </div>
70
+ </li>
71
+ {/each}
72
+ </ol>
73
+ </nav>
@@ -0,0 +1,4 @@
1
+ import type { BreadcrumbsProps } from '../index.js';
2
+ declare const Breadcrumbs: import("svelte").Component<BreadcrumbsProps, {}, "">;
3
+ type Breadcrumbs = ReturnType<typeof Breadcrumbs>;
4
+ export default Breadcrumbs;
@@ -0,0 +1,30 @@
1
+ <script lang="ts">
2
+ import { cn } from '../helper/cls.js';
3
+ import type { PageHeaderProps } from '../index.js';
4
+ import Breadcrumbs from './Breadcrumbs.svelte';
5
+
6
+ let {
7
+ title,
8
+ breadcrumbs = [],
9
+ children,
10
+ class: className = '',
11
+ titleclass: titleClassName = ''
12
+ }: PageHeaderProps = $props();
13
+
14
+ const defaultTitleClasses =
15
+ 'font-bold text-default-900 sm:tracking-tight sm:truncate text-2xl/7 sm:text-3xl mt-1';
16
+ const headerClasses = $derived(cn('space-y-3', className));
17
+ const hasBreadcrumbs = $derived(breadcrumbs && breadcrumbs.length > 0);
18
+ const titleClasses = $derived(cn(defaultTitleClasses, titleClassName));
19
+ </script>
20
+
21
+ <div class={headerClasses}>
22
+ <div class="flex-1 min-w-0">
23
+ {#if hasBreadcrumbs}
24
+ <Breadcrumbs items={breadcrumbs} />
25
+ {/if}
26
+ <h2 class={titleClasses}>{title}</h2>
27
+ </div>
28
+
29
+ {@render children?.()}
30
+ </div>
@@ -0,0 +1,4 @@
1
+ import type { PageHeaderProps } from '../index.js';
2
+ declare const PageHeader: import("svelte").Component<PageHeaderProps, {}, "">;
3
+ type PageHeader = ReturnType<typeof PageHeader>;
4
+ export default PageHeader;
@@ -0,0 +1,226 @@
1
+ type BreadcrumbItem = {
2
+ label: string;
3
+ href: string;
4
+ current?: boolean;
5
+ };
6
+ export declare const breadcrumbs: import("tailwind-variants").TVReturnType<{
7
+ size: {
8
+ xs: {
9
+ base: string;
10
+ };
11
+ sm: {
12
+ base: string;
13
+ };
14
+ base: {
15
+ base: string;
16
+ };
17
+ lg: {
18
+ base: string;
19
+ };
20
+ };
21
+ weight: {
22
+ normal: {
23
+ item: string;
24
+ };
25
+ medium: {
26
+ item: string;
27
+ };
28
+ semibold: {
29
+ item: string;
30
+ };
31
+ bold: {
32
+ item: string;
33
+ };
34
+ };
35
+ color: {
36
+ default: {
37
+ item: string;
38
+ wrapper: string;
39
+ };
40
+ primary: {
41
+ item: string;
42
+ wrapper: string;
43
+ };
44
+ secondary: {
45
+ item: string;
46
+ wrapper: string;
47
+ };
48
+ info: {
49
+ item: string;
50
+ wrapper: string;
51
+ };
52
+ success: {
53
+ item: string;
54
+ wrapper: string;
55
+ };
56
+ warning: {
57
+ item: string;
58
+ wrapper: string;
59
+ };
60
+ danger: {
61
+ item: string;
62
+ wrapper: string;
63
+ };
64
+ };
65
+ active: {
66
+ true: {
67
+ item: string;
68
+ };
69
+ false: {
70
+ item: string;
71
+ };
72
+ };
73
+ }, {
74
+ base: string;
75
+ list: string;
76
+ item: string;
77
+ separator: string;
78
+ wrapper: string;
79
+ }, undefined, {
80
+ size: {
81
+ xs: {
82
+ base: string;
83
+ };
84
+ sm: {
85
+ base: string;
86
+ };
87
+ base: {
88
+ base: string;
89
+ };
90
+ lg: {
91
+ base: string;
92
+ };
93
+ };
94
+ weight: {
95
+ normal: {
96
+ item: string;
97
+ };
98
+ medium: {
99
+ item: string;
100
+ };
101
+ semibold: {
102
+ item: string;
103
+ };
104
+ bold: {
105
+ item: string;
106
+ };
107
+ };
108
+ color: {
109
+ default: {
110
+ item: string;
111
+ wrapper: string;
112
+ };
113
+ primary: {
114
+ item: string;
115
+ wrapper: string;
116
+ };
117
+ secondary: {
118
+ item: string;
119
+ wrapper: string;
120
+ };
121
+ info: {
122
+ item: string;
123
+ wrapper: string;
124
+ };
125
+ success: {
126
+ item: string;
127
+ wrapper: string;
128
+ };
129
+ warning: {
130
+ item: string;
131
+ wrapper: string;
132
+ };
133
+ danger: {
134
+ item: string;
135
+ wrapper: string;
136
+ };
137
+ };
138
+ active: {
139
+ true: {
140
+ item: string;
141
+ };
142
+ false: {
143
+ item: string;
144
+ };
145
+ };
146
+ }, {
147
+ base: string;
148
+ list: string;
149
+ item: string;
150
+ separator: string;
151
+ wrapper: string;
152
+ }, import("tailwind-variants").TVReturnType<{
153
+ size: {
154
+ xs: {
155
+ base: string;
156
+ };
157
+ sm: {
158
+ base: string;
159
+ };
160
+ base: {
161
+ base: string;
162
+ };
163
+ lg: {
164
+ base: string;
165
+ };
166
+ };
167
+ weight: {
168
+ normal: {
169
+ item: string;
170
+ };
171
+ medium: {
172
+ item: string;
173
+ };
174
+ semibold: {
175
+ item: string;
176
+ };
177
+ bold: {
178
+ item: string;
179
+ };
180
+ };
181
+ color: {
182
+ default: {
183
+ item: string;
184
+ wrapper: string;
185
+ };
186
+ primary: {
187
+ item: string;
188
+ wrapper: string;
189
+ };
190
+ secondary: {
191
+ item: string;
192
+ wrapper: string;
193
+ };
194
+ info: {
195
+ item: string;
196
+ wrapper: string;
197
+ };
198
+ success: {
199
+ item: string;
200
+ wrapper: string;
201
+ };
202
+ warning: {
203
+ item: string;
204
+ wrapper: string;
205
+ };
206
+ danger: {
207
+ item: string;
208
+ wrapper: string;
209
+ };
210
+ };
211
+ active: {
212
+ true: {
213
+ item: string;
214
+ };
215
+ false: {
216
+ item: string;
217
+ };
218
+ };
219
+ }, {
220
+ base: string;
221
+ list: string;
222
+ item: string;
223
+ separator: string;
224
+ wrapper: string;
225
+ }, undefined, unknown, unknown, undefined>>;
226
+ export type { BreadcrumbItem };
@@ -0,0 +1,87 @@
1
+ import { tv } from 'tailwind-variants';
2
+ export const breadcrumbs = tv({
3
+ slots: {
4
+ base: 'flex',
5
+ list: 'flex flex-wrap items-center space-x-2.5',
6
+ item: 'flex items-center whitespace-nowrap',
7
+ separator: 'flex items-center',
8
+ wrapper: 'flex items-center gap-2.5'
9
+ },
10
+ variants: {
11
+ size: {
12
+ xs: {
13
+ base: 'items-center text-xs'
14
+ },
15
+ sm: {
16
+ base: 'items-center text-sm'
17
+ },
18
+ base: {
19
+ base: 'items-center text-base'
20
+ },
21
+ lg: {
22
+ base: 'items-center text-lg'
23
+ }
24
+ },
25
+ weight: {
26
+ normal: {
27
+ item: 'font-normal'
28
+ },
29
+ medium: {
30
+ item: 'font-medium'
31
+ },
32
+ semibold: {
33
+ item: 'font-semibold'
34
+ },
35
+ bold: {
36
+ item: 'font-bold'
37
+ }
38
+ },
39
+ color: {
40
+ default: {
41
+ item: 'hover:text-default-700',
42
+ wrapper: 'text-default-500'
43
+ },
44
+ primary: {
45
+ item: 'hover:text-primary-700',
46
+ wrapper: 'text-primary-500'
47
+ },
48
+ secondary: {
49
+ item: 'hover:text-secondary-700',
50
+ wrapper: 'text-secondary-500'
51
+ },
52
+ info: {
53
+ item: 'hover:text-info-700',
54
+ wrapper: 'text-info-500'
55
+ },
56
+ success: {
57
+ item: 'hover:text-success-700',
58
+ wrapper: 'text-success-500'
59
+ },
60
+ warning: {
61
+ item: 'hover:text-warning-700',
62
+ wrapper: 'text-warning-500'
63
+ },
64
+ danger: {
65
+ item: 'hover:text-danger-700',
66
+ wrapper: 'text-danger-500'
67
+ }
68
+ },
69
+ active: {
70
+ true: {
71
+ item: 'text-current font-semibold'
72
+ },
73
+ false: {
74
+ item: ''
75
+ }
76
+ }
77
+ },
78
+ compoundVariants: [
79
+ // Additional compound variants can be added here if needed
80
+ ],
81
+ defaultVariants: {
82
+ size: 'sm',
83
+ weight: 'medium',
84
+ color: 'default',
85
+ active: false
86
+ }
87
+ });
@@ -1,2 +1,3 @@
1
1
  import { type ClassValue } from 'clsx';
2
2
  export declare function cn(...inputs: ClassValue[]): string;
3
+ export declare const tv: import("tailwind-variants").CreateTV;
@@ -1,5 +1,9 @@
1
1
  import { clsx } from 'clsx';
2
2
  import { twMerge } from 'tailwind-merge';
3
+ import { createTV } from 'tailwind-variants';
3
4
  export function cn(...inputs) {
4
5
  return twMerge(clsx(inputs));
5
6
  }
7
+ export const tv = createTV({
8
+ twMerge: true
9
+ });
@@ -0,0 +1,7 @@
1
+ export declare const DATE_FORMAT: {
2
+ ISO: string;
3
+ READABLE: string;
4
+ SHORT: string;
5
+ };
6
+ export declare function formatDateTime(time: Date | string, format?: string): string;
7
+ export declare function getRelativeTime(time: Date | string): string;
@@ -0,0 +1,15 @@
1
+ import dayjs from 'dayjs';
2
+ import relativeTime from 'dayjs/plugin/relativeTime.js';
3
+ dayjs.extend(relativeTime);
4
+ export const DATE_FORMAT = {
5
+ ISO: 'YYYY-MM-DDTHH:mm:ssZ',
6
+ READABLE: 'MMM D, YYYY h:mm A',
7
+ SHORT: 'MM/DD/YYYY HH:mm'
8
+ };
9
+ export function formatDateTime(time, format = DATE_FORMAT.READABLE) {
10
+ return dayjs(time).format(format);
11
+ }
12
+ export function getRelativeTime(time) {
13
+ const date = dayjs(time);
14
+ return date.fromNow();
15
+ }
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Check if a URL matches the current route
3
+ * @param href - The URL to check
4
+ * @param exact - Whether to require an exact match
5
+ */
6
+ export declare function isRouteActive(href: string, exact?: boolean): boolean;
@@ -0,0 +1,23 @@
1
+ import { page } from '$app/state';
2
+ /**
3
+ * Check if a URL matches the current route
4
+ * @param href - The URL to check
5
+ * @param exact - Whether to require an exact match
6
+ */
7
+ export function isRouteActive(href, exact = false) {
8
+ const currentPath = page.url.pathname;
9
+ if (exact) {
10
+ return currentPath === href;
11
+ }
12
+ // Home page special case
13
+ if (href === '/' && currentPath === '/') {
14
+ return true;
15
+ }
16
+ // Check if the current path starts with href, but ensure it's a complete segment
17
+ if (href !== '/' && currentPath.startsWith(href)) {
18
+ // Check if the next character after href is a slash or the end of the string
19
+ const nextChar = currentPath.charAt(href.length);
20
+ return nextChar === '' || nextChar === '/';
21
+ }
22
+ return false;
23
+ }