@makolabs/ripple 0.0.1-dev → 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 +574 -8
  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 +32 -4
  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,224 @@
1
+ <script lang="ts">
2
+ import { onMount, onDestroy, tick } from 'svelte';
3
+ import { browser } from '$app/environment';
4
+ import { fade, fly } from 'svelte/transition';
5
+ import { quintOut } from 'svelte/easing';
6
+ import { cn } from '../helper/cls.js';
7
+ import { drawer } from './drawer.js';
8
+ import type { DrawerProps } from '../index.js';
9
+
10
+ let {
11
+ open = $bindable(false),
12
+ onclose: onClose = () => {},
13
+ title,
14
+ position = 'right',
15
+ size = 'sm',
16
+ children,
17
+ header,
18
+ footer,
19
+ class: className = '',
20
+ backdropclass: backdropClassName = '',
21
+ contentclass: contentClassName = '',
22
+ headerclass: headerClassName = '',
23
+ bodyclass: bodyClassName = '',
24
+ titleclass: titleClassName = '',
25
+ footerclass: footerClassName = ''
26
+ }: DrawerProps = $props();
27
+
28
+ let drawerElement: HTMLDivElement | undefined = $state();
29
+
30
+ const {
31
+ base,
32
+ backdrop,
33
+ contentWrapper,
34
+ content,
35
+ header: headerVClass,
36
+ body,
37
+ footer: footerVClass,
38
+ title: titleClass,
39
+ closeButton
40
+ } = $derived(
41
+ drawer({
42
+ open,
43
+ position,
44
+ size
45
+ })
46
+ );
47
+
48
+ const baseClass = $derived(cn(base(), className));
49
+ const backdropClass = $derived(cn(backdrop(), backdropClassName));
50
+ const contentWrapperClass = $derived(cn(contentWrapper(), contentClassName));
51
+ const contentClass = $derived(cn(content(), ''));
52
+ const headerClass = $derived(cn(headerVClass(), headerClassName));
53
+ const bodyClass = $derived(cn(body(), bodyClassName));
54
+ const titleClasses = $derived(cn(titleClass(), titleClassName));
55
+ const closeButtonClasses = $derived(cn(closeButton(), ''));
56
+ const footerClass = $derived(cn(footerVClass(), 'mt-auto', footerClassName));
57
+
58
+ function handleBackdropClick(e: MouseEvent) {
59
+ if (e.target === e.currentTarget) {
60
+ onClose();
61
+ }
62
+ }
63
+
64
+ function handleEscapeKey(e: KeyboardEvent) {
65
+ if (e.key === 'Escape' && open) {
66
+ onClose();
67
+ }
68
+ }
69
+
70
+ function handleCloseClick() {
71
+ onClose();
72
+ }
73
+
74
+ let previouslyFocusedElement: HTMLElement | null = null;
75
+
76
+ function trapFocus(element: HTMLElement) {
77
+ const focusableElements = element.querySelectorAll(
78
+ 'a[href], button, input, textarea, select, details, [tabindex]:not([tabindex="-1"])'
79
+ );
80
+
81
+ if (focusableElements.length === 0) return;
82
+
83
+ const firstElement = focusableElements[0] as HTMLElement;
84
+ const lastElement = focusableElements[focusableElements.length - 1] as HTMLElement;
85
+
86
+ function handleTabKey(e: KeyboardEvent) {
87
+ if (e.key !== 'Tab') return;
88
+
89
+ if (e.shiftKey) {
90
+ if (document.activeElement === firstElement) {
91
+ lastElement.focus();
92
+ e.preventDefault();
93
+ }
94
+ } else {
95
+ if (document.activeElement === lastElement) {
96
+ firstElement.focus();
97
+ e.preventDefault();
98
+ }
99
+ }
100
+ }
101
+
102
+ element.addEventListener('keydown', handleTabKey);
103
+ firstElement.focus();
104
+
105
+ return () => {
106
+ element.removeEventListener('keydown', handleTabKey);
107
+ };
108
+ }
109
+
110
+ onMount(() => {
111
+ document.addEventListener('keydown', handleEscapeKey);
112
+ return () => {
113
+ document.removeEventListener('keydown', handleEscapeKey);
114
+ };
115
+ });
116
+
117
+ $effect(() => {
118
+ if (!browser) return;
119
+ if (open) {
120
+ previouslyFocusedElement = document.activeElement as HTMLElement;
121
+ document.body.style.overflow = 'hidden';
122
+
123
+ tick().then(() => {
124
+ if (drawerElement) {
125
+ trapFocus(drawerElement);
126
+ }
127
+ });
128
+ } else {
129
+ document.body.style.overflow = '';
130
+ if (previouslyFocusedElement) {
131
+ previouslyFocusedElement.focus();
132
+ }
133
+ }
134
+ });
135
+
136
+ onDestroy(() => {
137
+ if (browser && document.body.style.overflow === 'hidden') {
138
+ document.body.style.overflow = '';
139
+ }
140
+ });
141
+
142
+ function getTransition() {
143
+ const duration = 300;
144
+ const options = { duration, easing: quintOut };
145
+
146
+ switch (position) {
147
+ case 'left':
148
+ return { x: -300, ...options };
149
+ case 'right':
150
+ return { x: 300, ...options };
151
+ default:
152
+ return { x: 300, ...options };
153
+ }
154
+ }
155
+ </script>
156
+
157
+ {#if browser}
158
+ <div
159
+ class={baseClass}
160
+ bind:this={drawerElement}
161
+ role="dialog"
162
+ aria-modal="true"
163
+ aria-labelledby={title ? 'drawer-title' : undefined}
164
+ >
165
+ {#key open}
166
+ <!-- Backdrop -->
167
+ <button
168
+ class={backdropClass}
169
+ onclick={handleBackdropClick}
170
+ transition:fade={{ duration: 200 }}
171
+ aria-label="Close drawer"
172
+ ></button>
173
+
174
+ <!-- Drawer content -->
175
+ <div class={contentWrapperClass} transition:fly={getTransition()}>
176
+ <div class={contentClass}>
177
+ <!-- Header -->
178
+ {#if header || title}
179
+ <div class={headerClass}>
180
+ {#if header}
181
+ {@render header()}
182
+ {:else}
183
+ {#if title}
184
+ <h3 id="drawer-title" class={titleClasses}>{title}</h3>
185
+ {/if}
186
+ <button
187
+ type="button"
188
+ class={closeButtonClasses}
189
+ onclick={handleCloseClick}
190
+ aria-label="Close drawer"
191
+ >
192
+ <svg
193
+ xmlns="http://www.w3.org/2000/svg"
194
+ width="12"
195
+ height="12"
196
+ viewBox="0 0 12 12"
197
+ >
198
+ <path
199
+ fill="currentColor"
200
+ d="m1.897 2.054l.073-.084a.75.75 0 0 1 .976-.073l.084.073L6 4.939l2.97-2.97a.75.75 0 1 1 1.06 1.061L7.061 6l2.97 2.97a.75.75 0 0 1 .072.976l-.073.084a.75.75 0 0 1-.976.073l-.084-.073L6 7.061l-2.97 2.97A.75.75 0 1 1 1.97 8.97L4.939 6l-2.97-2.97a.75.75 0 0 1-.072-.976l.073-.084z"
201
+ />
202
+ </svg>
203
+ </button>
204
+ {/if}
205
+ </div>
206
+ {/if}
207
+
208
+ <div class={bodyClass}>
209
+ {#if children}
210
+ {@render children()}
211
+ {/if}
212
+ </div>
213
+
214
+ <!-- Add footer section -->
215
+ {#if footer}
216
+ <div class={footerClass}>
217
+ {@render footer()}
218
+ </div>
219
+ {/if}
220
+ </div>
221
+ </div>
222
+ {/key}
223
+ </div>
224
+ {/if}
@@ -0,0 +1,4 @@
1
+ import type { DrawerProps } from '../index.js';
2
+ declare const Drawer: import("svelte").Component<DrawerProps, {}, "open">;
3
+ type Drawer = ReturnType<typeof Drawer>;
4
+ export default Drawer;
@@ -0,0 +1,160 @@
1
+ export declare const drawer: import("tailwind-variants").TVReturnType<{
2
+ open: {
3
+ true: {
4
+ base: string;
5
+ backdrop: string;
6
+ contentWrapper: string;
7
+ };
8
+ false: {
9
+ base: string;
10
+ backdrop: string;
11
+ contentWrapper: string;
12
+ };
13
+ };
14
+ position: {
15
+ left: {
16
+ contentWrapper: string;
17
+ content: string;
18
+ };
19
+ right: {
20
+ contentWrapper: string;
21
+ content: string;
22
+ };
23
+ };
24
+ size: {
25
+ xs: {
26
+ contentWrapper: string;
27
+ };
28
+ sm: {
29
+ contentWrapper: string;
30
+ };
31
+ base: {
32
+ contentWrapper: string;
33
+ };
34
+ lg: {
35
+ contentWrapper: string;
36
+ };
37
+ xl: {
38
+ contentWrapper: string;
39
+ };
40
+ '2xl': {
41
+ contentWrapper: string;
42
+ };
43
+ };
44
+ }, {
45
+ base: string;
46
+ backdrop: string;
47
+ contentWrapper: string;
48
+ content: string;
49
+ header: string;
50
+ body: string;
51
+ footer: string;
52
+ title: string;
53
+ closeButton: string;
54
+ }, undefined, {
55
+ open: {
56
+ true: {
57
+ base: string;
58
+ backdrop: string;
59
+ contentWrapper: string;
60
+ };
61
+ false: {
62
+ base: string;
63
+ backdrop: string;
64
+ contentWrapper: string;
65
+ };
66
+ };
67
+ position: {
68
+ left: {
69
+ contentWrapper: string;
70
+ content: string;
71
+ };
72
+ right: {
73
+ contentWrapper: string;
74
+ content: string;
75
+ };
76
+ };
77
+ size: {
78
+ xs: {
79
+ contentWrapper: string;
80
+ };
81
+ sm: {
82
+ contentWrapper: string;
83
+ };
84
+ base: {
85
+ contentWrapper: string;
86
+ };
87
+ lg: {
88
+ contentWrapper: string;
89
+ };
90
+ xl: {
91
+ contentWrapper: string;
92
+ };
93
+ '2xl': {
94
+ contentWrapper: string;
95
+ };
96
+ };
97
+ }, {
98
+ base: string;
99
+ backdrop: string;
100
+ contentWrapper: string;
101
+ content: string;
102
+ header: string;
103
+ body: string;
104
+ footer: string;
105
+ title: string;
106
+ closeButton: string;
107
+ }, import("tailwind-variants").TVReturnType<{
108
+ open: {
109
+ true: {
110
+ base: string;
111
+ backdrop: string;
112
+ contentWrapper: string;
113
+ };
114
+ false: {
115
+ base: string;
116
+ backdrop: string;
117
+ contentWrapper: string;
118
+ };
119
+ };
120
+ position: {
121
+ left: {
122
+ contentWrapper: string;
123
+ content: string;
124
+ };
125
+ right: {
126
+ contentWrapper: string;
127
+ content: string;
128
+ };
129
+ };
130
+ size: {
131
+ xs: {
132
+ contentWrapper: string;
133
+ };
134
+ sm: {
135
+ contentWrapper: string;
136
+ };
137
+ base: {
138
+ contentWrapper: string;
139
+ };
140
+ lg: {
141
+ contentWrapper: string;
142
+ };
143
+ xl: {
144
+ contentWrapper: string;
145
+ };
146
+ '2xl': {
147
+ contentWrapper: string;
148
+ };
149
+ };
150
+ }, {
151
+ base: string;
152
+ backdrop: string;
153
+ contentWrapper: string;
154
+ content: string;
155
+ header: string;
156
+ body: string;
157
+ footer: string;
158
+ title: string;
159
+ closeButton: string;
160
+ }, undefined, unknown, unknown, undefined>>;
@@ -0,0 +1,80 @@
1
+ import { tv } from 'tailwind-variants';
2
+ export const drawer = tv({
3
+ slots: {
4
+ base: 'fixed inset-0 z-50 flex overflow-hidden',
5
+ backdrop: 'fixed inset-0 transition-opacity bg-black/50',
6
+ contentWrapper: 'absolute flex flex-col transform transition-transform',
7
+ content: 'flex flex-col h-full w-full overflow-y-auto bg-white',
8
+ header: 'flex items-center justify-between px-4 py-3 border-b border-gray-200',
9
+ body: 'flex-1 overflow-y-auto p-4',
10
+ footer: 'flex justify-end border-t border-gray-200 p-4',
11
+ title: 'text-default-900 leading-6 text-base font-semibold',
12
+ closeButton: 'text-gray-400 hover:text-gray-500 rounded-md cursor-pointer'
13
+ },
14
+ variants: {
15
+ open: {
16
+ true: {
17
+ base: 'visible',
18
+ backdrop: 'visible opacity-100',
19
+ contentWrapper: 'visible translate-x-0 translate-y-0'
20
+ },
21
+ false: {
22
+ base: 'invisible',
23
+ backdrop: 'invisible opacity-0',
24
+ contentWrapper: 'invisible'
25
+ }
26
+ },
27
+ position: {
28
+ left: {
29
+ contentWrapper: 'left-0 h-full',
30
+ content: 'rounded-r-lg'
31
+ },
32
+ right: {
33
+ contentWrapper: 'right-0 h-full',
34
+ content: 'rounded-l-lg'
35
+ }
36
+ },
37
+ size: {
38
+ xs: {
39
+ contentWrapper: 'w-64'
40
+ },
41
+ sm: {
42
+ contentWrapper: 'w-80'
43
+ },
44
+ base: {
45
+ contentWrapper: 'w-96'
46
+ },
47
+ lg: {
48
+ contentWrapper: 'w-[32rem]'
49
+ },
50
+ xl: {
51
+ contentWrapper: 'w-[40rem]'
52
+ },
53
+ '2xl': {
54
+ contentWrapper: 'w-[48rem]'
55
+ }
56
+ }
57
+ },
58
+ compoundVariants: [
59
+ // Position-specific transforms when closed
60
+ {
61
+ position: 'left',
62
+ open: false,
63
+ class: {
64
+ contentWrapper: '-translate-x-full'
65
+ }
66
+ },
67
+ {
68
+ position: 'right',
69
+ open: false,
70
+ class: {
71
+ contentWrapper: 'translate-x-full'
72
+ }
73
+ }
74
+ ],
75
+ defaultVariants: {
76
+ open: false,
77
+ position: 'right',
78
+ size: 'sm'
79
+ }
80
+ });
@@ -0,0 +1,53 @@
1
+ <script lang="ts">
2
+ import { cn } from '../../helper/cls.js';
3
+ import { Color } from '../../variants.js';
4
+ import type { AlertProps } from '../../index.js';
5
+
6
+ let {
7
+ title,
8
+ message,
9
+ color = Color.DEFAULT,
10
+ onclose,
11
+ class: className = ''
12
+ }: AlertProps = $props();
13
+
14
+ function handleClose() {
15
+ onclose?.();
16
+ }
17
+
18
+ const colorClasses = {
19
+ [Color.DEFAULT]: 'bg-gray-50 border-gray-200 text-gray-800',
20
+ [Color.PRIMARY]: 'bg-primary-50 border-primary-200 text-primary-800',
21
+ [Color.SUCCESS]: 'bg-success-50 border-success-200 text-success-800',
22
+ [Color.WARNING]: 'bg-warning-50 border-warning-200 text-warning-800',
23
+ [Color.DANGER]: 'bg-danger-50 border-danger-200 text-danger-800',
24
+ [Color.INFO]: 'bg-info-50 border-info-200 text-info-800'
25
+ };
26
+ </script>
27
+
28
+ <div class={cn('relative rounded-lg border p-4', colorClasses[color], className)}>
29
+ <div class="flex items-start justify-between gap-4">
30
+ <div class="flex-1">
31
+ {#if title}
32
+ <h4 class="mb-2 font-semibold">{title}</h4>
33
+ {/if}
34
+ <p class="text-sm">{message}</p>
35
+ </div>
36
+ {#if onclose}
37
+ <button
38
+ type="button"
39
+ class="flex-shrink-0 cursor-pointer rounded-md p-1 hover:bg-gray-200/20"
40
+ onclick={handleClose}
41
+ aria-label="Close alert"
42
+ >
43
+ <svg class="h-5 w-5" viewBox="0 0 20 20" fill="currentColor">
44
+ <path
45
+ fill-rule="evenodd"
46
+ d="M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z"
47
+ clip-rule="evenodd"
48
+ />
49
+ </svg>
50
+ </button>
51
+ {/if}
52
+ </div>
53
+ </div>
@@ -0,0 +1,4 @@
1
+ import type { AlertProps } from '../../index.js';
2
+ declare const Alert: import("svelte").Component<AlertProps, {}, "">;
3
+ type Alert = ReturnType<typeof Alert>;
4
+ export default Alert;
@@ -0,0 +1,43 @@
1
+ <script lang="ts">
2
+ import { cn } from '../../helper/cls.js';
3
+ import { badge } from './badge.js';
4
+ import type { BadgeProps } from '../../index.js';
5
+
6
+ let {
7
+ size = 'base',
8
+ color = 'default',
9
+ class: className = '',
10
+ children,
11
+ onclose: onClose
12
+ }: BadgeProps = $props();
13
+
14
+ const { base } = $derived(
15
+ badge({
16
+ size,
17
+ color
18
+ })
19
+ );
20
+
21
+ const baseClass = $derived(cn(base(), className));
22
+
23
+ function handleOnClose(event) {
24
+ event.preventDefault();
25
+ onClose();
26
+ }
27
+ </script>
28
+
29
+ <span class={baseClass}>
30
+ {@render children()}
31
+ {#if onClose}
32
+ <button
33
+ onclick={handleOnClose} class="cursor-pointer h-full flex items-center" aria-label="Close" title="Close"
34
+ tabindex="0" type="button">
35
+ <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32" class="size-2">
36
+ <path
37
+ fill="currentColor"
38
+ d="M26.113 4.116a1.25 1.25 0 0 1 1.768 1.768L17.766 15.999l10.115 10.114a1.25 1.25 0 1 1-1.768 1.768L16 17.766L5.884 27.881a1.25 1.25 0 1 1-1.768-1.768L14.231 16L4.116 5.884a1.25 1.25 0 1 1 1.768-1.768l10.115 10.115z"
39
+ />
40
+ </svg>
41
+ </button>
42
+ {/if}
43
+ </span>
@@ -0,0 +1,4 @@
1
+ import type { BadgeProps } from '../../index.js';
2
+ declare const Badge: import("svelte").Component<BadgeProps, {}, "">;
3
+ type Badge = ReturnType<typeof Badge>;
4
+ export default Badge;