@aspect-ops/exon-ui 0.0.2 → 0.1.0

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 (237) hide show
  1. package/README.md +793 -43
  2. package/dist/components/Accordion/Accordion.svelte +79 -0
  3. package/dist/components/Accordion/Accordion.svelte.d.ts +10 -0
  4. package/dist/components/Accordion/AccordionItem.svelte +198 -0
  5. package/dist/components/Accordion/AccordionItem.svelte.d.ts +10 -0
  6. package/dist/components/Accordion/index.d.ts +2 -0
  7. package/dist/components/Accordion/index.js +2 -0
  8. package/dist/components/ActionSheet/ActionSheet.svelte +270 -0
  9. package/dist/components/ActionSheet/ActionSheet.svelte.d.ts +12 -0
  10. package/dist/components/ActionSheet/ActionSheetItem.svelte +151 -0
  11. package/dist/components/ActionSheet/ActionSheetItem.svelte.d.ts +10 -0
  12. package/dist/components/ActionSheet/index.d.ts +3 -0
  13. package/dist/components/ActionSheet/index.js +2 -0
  14. package/dist/components/Alert/Alert.svelte +165 -0
  15. package/dist/components/Alert/Alert.svelte.d.ts +11 -0
  16. package/dist/components/Alert/index.d.ts +1 -0
  17. package/dist/components/Alert/index.js +1 -0
  18. package/dist/components/AspectRatio/AspectRatio.svelte +42 -0
  19. package/dist/components/AspectRatio/AspectRatio.svelte.d.ts +9 -0
  20. package/dist/components/AspectRatio/index.d.ts +1 -0
  21. package/dist/components/AspectRatio/index.js +1 -0
  22. package/dist/components/Avatar/Avatar.svelte +147 -0
  23. package/dist/components/Avatar/Avatar.svelte.d.ts +12 -0
  24. package/dist/components/Avatar/AvatarGroup.svelte +153 -0
  25. package/dist/components/Avatar/AvatarGroup.svelte.d.ts +12 -0
  26. package/dist/components/Avatar/index.d.ts +2 -0
  27. package/dist/components/Avatar/index.js +2 -0
  28. package/dist/components/BottomSheet/BottomSheet.svelte +230 -0
  29. package/dist/components/BottomSheet/BottomSheet.svelte.d.ts +7 -0
  30. package/dist/components/BottomSheet/BottomSheetBody.svelte +20 -0
  31. package/dist/components/BottomSheet/BottomSheetBody.svelte.d.ts +7 -0
  32. package/dist/components/BottomSheet/BottomSheetHeader.svelte +27 -0
  33. package/dist/components/BottomSheet/BottomSheetHeader.svelte.d.ts +7 -0
  34. package/dist/components/BottomSheet/index.d.ts +3 -0
  35. package/dist/components/BottomSheet/index.js +3 -0
  36. package/dist/components/Box/Box.svelte +41 -0
  37. package/dist/components/Box/Box.svelte.d.ts +7 -0
  38. package/dist/components/Box/index.d.ts +1 -0
  39. package/dist/components/Box/index.js +1 -0
  40. package/dist/components/Card/Card.svelte +95 -0
  41. package/dist/components/Card/Card.svelte.d.ts +10 -0
  42. package/dist/components/Card/CardBody.svelte +32 -0
  43. package/dist/components/Card/CardBody.svelte.d.ts +7 -0
  44. package/dist/components/Card/CardFooter.svelte +34 -0
  45. package/dist/components/Card/CardFooter.svelte.d.ts +7 -0
  46. package/dist/components/Card/CardHeader.svelte +67 -0
  47. package/dist/components/Card/CardHeader.svelte.d.ts +9 -0
  48. package/dist/components/Card/index.d.ts +4 -0
  49. package/dist/components/Card/index.js +4 -0
  50. package/dist/components/Carousel/Carousel.svelte +454 -0
  51. package/dist/components/Carousel/Carousel.svelte.d.ts +14 -0
  52. package/dist/components/Carousel/CarouselSlide.svelte +22 -0
  53. package/dist/components/Carousel/CarouselSlide.svelte.d.ts +7 -0
  54. package/dist/components/Carousel/index.d.ts +2 -0
  55. package/dist/components/Carousel/index.js +2 -0
  56. package/dist/components/Center/Center.svelte +28 -0
  57. package/dist/components/Center/Center.svelte.d.ts +8 -0
  58. package/dist/components/Center/index.d.ts +1 -0
  59. package/dist/components/Center/index.js +1 -0
  60. package/dist/components/Chip/Chip.svelte +461 -0
  61. package/dist/components/Chip/Chip.svelte.d.ts +17 -0
  62. package/dist/components/Chip/ChipGroup.svelte +76 -0
  63. package/dist/components/Chip/ChipGroup.svelte.d.ts +9 -0
  64. package/dist/components/Chip/index.d.ts +2 -0
  65. package/dist/components/Chip/index.js +2 -0
  66. package/dist/components/Container/Container.svelte +58 -0
  67. package/dist/components/Container/Container.svelte.d.ts +10 -0
  68. package/dist/components/Container/index.d.ts +1 -0
  69. package/dist/components/Container/index.js +1 -0
  70. package/dist/components/DatePicker/DatePicker.svelte +746 -0
  71. package/dist/components/DatePicker/DatePicker.svelte.d.ts +19 -0
  72. package/dist/components/DatePicker/index.d.ts +1 -0
  73. package/dist/components/DatePicker/index.js +1 -0
  74. package/dist/components/Divider/Divider.svelte +38 -0
  75. package/dist/components/Divider/Divider.svelte.d.ts +9 -0
  76. package/dist/components/Divider/index.d.ts +1 -0
  77. package/dist/components/Divider/index.js +1 -0
  78. package/dist/components/EmptyState/EmptyState.svelte +164 -0
  79. package/dist/components/EmptyState/EmptyState.svelte.d.ts +12 -0
  80. package/dist/components/EmptyState/index.d.ts +1 -0
  81. package/dist/components/EmptyState/index.js +1 -0
  82. package/dist/components/FAB/FAB.svelte +242 -0
  83. package/dist/components/FAB/FAB.svelte.d.ts +9 -0
  84. package/dist/components/FAB/FABGroup.svelte +449 -0
  85. package/dist/components/FAB/FABGroup.svelte.d.ts +9 -0
  86. package/dist/components/FAB/index.d.ts +3 -0
  87. package/dist/components/FAB/index.js +2 -0
  88. package/dist/components/FileUpload/FileUpload.svelte +484 -0
  89. package/dist/components/FileUpload/FileUpload.svelte.d.ts +16 -0
  90. package/dist/components/FileUpload/index.d.ts +1 -0
  91. package/dist/components/FileUpload/index.js +1 -0
  92. package/dist/components/Grid/Grid.svelte +136 -0
  93. package/dist/components/Grid/Grid.svelte.d.ts +12 -0
  94. package/dist/components/Grid/GridItem.svelte +21 -0
  95. package/dist/components/Grid/GridItem.svelte.d.ts +7 -0
  96. package/dist/components/Grid/index.d.ts +2 -0
  97. package/dist/components/Grid/index.js +2 -0
  98. package/dist/components/Image/Image.svelte +223 -0
  99. package/dist/components/Image/Image.svelte.d.ts +19 -0
  100. package/dist/components/Image/index.d.ts +1 -0
  101. package/dist/components/Image/index.js +1 -0
  102. package/dist/components/List/List.svelte +42 -0
  103. package/dist/components/List/List.svelte.d.ts +18 -0
  104. package/dist/components/List/ListItem.svelte +139 -0
  105. package/dist/components/List/ListItem.svelte.d.ts +36 -0
  106. package/dist/components/List/index.d.ts +2 -0
  107. package/dist/components/List/index.js +2 -0
  108. package/dist/components/Modal/Modal.svelte +204 -0
  109. package/dist/components/Modal/Modal.svelte.d.ts +7 -0
  110. package/dist/components/Modal/ModalBody.svelte +50 -0
  111. package/dist/components/Modal/ModalBody.svelte.d.ts +7 -0
  112. package/dist/components/Modal/ModalFooter.svelte +37 -0
  113. package/dist/components/Modal/ModalFooter.svelte.d.ts +7 -0
  114. package/dist/components/Modal/ModalHeader.svelte +73 -0
  115. package/dist/components/Modal/ModalHeader.svelte.d.ts +7 -0
  116. package/dist/components/Modal/index.d.ts +4 -0
  117. package/dist/components/Modal/index.js +4 -0
  118. package/dist/components/OTPInput/OTPInput.svelte +312 -0
  119. package/dist/components/OTPInput/OTPInput.svelte.d.ts +57 -0
  120. package/dist/components/OTPInput/index.d.ts +1 -0
  121. package/dist/components/OTPInput/index.js +1 -0
  122. package/dist/components/Popover/Popover.svelte +14 -0
  123. package/dist/components/Popover/Popover.svelte.d.ts +7 -0
  124. package/dist/components/Popover/PopoverContent.svelte +63 -0
  125. package/dist/components/Popover/PopoverContent.svelte.d.ts +7 -0
  126. package/dist/components/Popover/PopoverTrigger.svelte +14 -0
  127. package/dist/components/Popover/PopoverTrigger.svelte.d.ts +7 -0
  128. package/dist/components/Popover/index.d.ts +3 -0
  129. package/dist/components/Popover/index.js +3 -0
  130. package/dist/components/Progress/ProgressBar.svelte +86 -0
  131. package/dist/components/Progress/ProgressBar.svelte.d.ts +11 -0
  132. package/dist/components/Progress/ProgressCircle.svelte +134 -0
  133. package/dist/components/Progress/ProgressCircle.svelte.d.ts +12 -0
  134. package/dist/components/Progress/Spinner.svelte +68 -0
  135. package/dist/components/Progress/Spinner.svelte.d.ts +8 -0
  136. package/dist/components/Progress/index.d.ts +3 -0
  137. package/dist/components/Progress/index.js +3 -0
  138. package/dist/components/PullToRefresh/PullToRefresh.svelte +304 -0
  139. package/dist/components/PullToRefresh/PullToRefresh.svelte.d.ts +20 -0
  140. package/dist/components/PullToRefresh/index.d.ts +1 -0
  141. package/dist/components/PullToRefresh/index.js +1 -0
  142. package/dist/components/Rating/Rating.svelte +316 -0
  143. package/dist/components/Rating/Rating.svelte.d.ts +16 -0
  144. package/dist/components/Rating/index.d.ts +1 -0
  145. package/dist/components/Rating/index.js +1 -0
  146. package/dist/components/SafeArea/SafeArea.svelte +33 -0
  147. package/dist/components/SafeArea/SafeArea.svelte.d.ts +7 -0
  148. package/dist/components/SearchInput/SearchInput.svelte +480 -0
  149. package/dist/components/SearchInput/SearchInput.svelte.d.ts +22 -0
  150. package/dist/components/SearchInput/index.d.ts +1 -0
  151. package/dist/components/SearchInput/index.js +1 -0
  152. package/dist/components/Select/Select.svelte +55 -12
  153. package/dist/components/Skeleton/Skeleton.svelte +59 -0
  154. package/dist/components/Skeleton/Skeleton.svelte.d.ts +10 -0
  155. package/dist/components/Skeleton/index.d.ts +1 -0
  156. package/dist/components/Skeleton/index.js +1 -0
  157. package/dist/components/Slider/Slider.svelte +324 -0
  158. package/dist/components/Slider/Slider.svelte.d.ts +14 -0
  159. package/dist/components/Slider/index.d.ts +1 -0
  160. package/dist/components/Slider/index.js +1 -0
  161. package/dist/components/Spacer/Spacer.svelte +56 -0
  162. package/dist/components/Spacer/Spacer.svelte.d.ts +6 -0
  163. package/dist/components/Spacer/index.d.ts +1 -0
  164. package/dist/components/Spacer/index.js +1 -0
  165. package/dist/components/Stack/Stack.svelte +117 -0
  166. package/dist/components/Stack/Stack.svelte.d.ts +13 -0
  167. package/dist/components/Stack/index.d.ts +1 -0
  168. package/dist/components/Stack/index.js +1 -0
  169. package/dist/components/Stepper/Stepper.svelte +100 -0
  170. package/dist/components/Stepper/Stepper.svelte.d.ts +11 -0
  171. package/dist/components/Stepper/StepperStep.svelte +391 -0
  172. package/dist/components/Stepper/StepperStep.svelte.d.ts +13 -0
  173. package/dist/components/Stepper/index.d.ts +2 -0
  174. package/dist/components/Stepper/index.js +2 -0
  175. package/dist/components/SwipeActions/SwipeAction.svelte +43 -0
  176. package/dist/components/SwipeActions/SwipeAction.svelte.d.ts +8 -0
  177. package/dist/components/SwipeActions/SwipeActions.svelte +193 -0
  178. package/dist/components/SwipeActions/SwipeActions.svelte.d.ts +9 -0
  179. package/dist/components/SwipeActions/index.d.ts +2 -0
  180. package/dist/components/SwipeActions/index.js +2 -0
  181. package/dist/components/Switch/Switch.svelte +29 -9
  182. package/dist/components/Table/Table.svelte +175 -0
  183. package/dist/components/Table/Table.svelte.d.ts +38 -0
  184. package/dist/components/Table/TableBody.svelte +26 -0
  185. package/dist/components/Table/TableBody.svelte.d.ts +13 -0
  186. package/dist/components/Table/TableCell.svelte +85 -0
  187. package/dist/components/Table/TableCell.svelte.d.ts +28 -0
  188. package/dist/components/Table/TableHead.svelte +36 -0
  189. package/dist/components/Table/TableHead.svelte.d.ts +13 -0
  190. package/dist/components/Table/TableHeader.svelte +217 -0
  191. package/dist/components/Table/TableHeader.svelte.d.ts +32 -0
  192. package/dist/components/Table/TableRow.svelte +92 -0
  193. package/dist/components/Table/TableRow.svelte.d.ts +28 -0
  194. package/dist/components/Table/index.d.ts +6 -0
  195. package/dist/components/Table/index.js +6 -0
  196. package/dist/components/Tag/Tag.svelte +189 -0
  197. package/dist/components/Tag/Tag.svelte.d.ts +13 -0
  198. package/dist/components/Tag/index.d.ts +1 -0
  199. package/dist/components/Tag/index.js +1 -0
  200. package/dist/components/TimePicker/TimePicker.svelte +803 -0
  201. package/dist/components/TimePicker/TimePicker.svelte.d.ts +17 -0
  202. package/dist/components/TimePicker/index.d.ts +1 -0
  203. package/dist/components/TimePicker/index.js +1 -0
  204. package/dist/components/Toast/Toast.svelte +241 -0
  205. package/dist/components/Toast/Toast.svelte.d.ts +18 -0
  206. package/dist/components/Toast/ToastContainer.svelte +110 -0
  207. package/dist/components/Toast/ToastContainer.svelte.d.ts +8 -0
  208. package/dist/components/Toast/index.d.ts +3 -0
  209. package/dist/components/Toast/index.js +3 -0
  210. package/dist/components/Toast/toast.d.ts +13 -0
  211. package/dist/components/Toast/toast.js +55 -0
  212. package/dist/components/Tooltip/Tooltip.svelte +71 -0
  213. package/dist/components/Tooltip/Tooltip.svelte.d.ts +7 -0
  214. package/dist/components/Tooltip/index.d.ts +2 -0
  215. package/dist/components/Tooltip/index.js +1 -0
  216. package/dist/index.d.ts +38 -1
  217. package/dist/index.js +41 -0
  218. package/dist/styles/tokens.css +5 -0
  219. package/dist/types/data-display.d.ts +161 -0
  220. package/dist/types/data-display.js +1 -0
  221. package/dist/types/feedback.d.ts +92 -0
  222. package/dist/types/feedback.js +1 -0
  223. package/dist/types/index.d.ts +6 -1
  224. package/dist/types/input.d.ts +67 -0
  225. package/dist/types/input.js +2 -0
  226. package/dist/types/layout.d.ts +57 -0
  227. package/dist/types/layout.js +1 -0
  228. package/dist/types/mobile.d.ts +91 -0
  229. package/dist/types/mobile.js +1 -0
  230. package/dist/types/navigation.d.ts +15 -0
  231. package/dist/utils/gestures.d.ts +219 -0
  232. package/dist/utils/gestures.js +492 -0
  233. package/dist/utils/haptics.d.ts +89 -0
  234. package/dist/utils/haptics.js +198 -0
  235. package/dist/utils/platform.d.ts +47 -0
  236. package/dist/utils/platform.js +156 -0
  237. package/package.json +1 -1
@@ -0,0 +1,461 @@
1
+ <script lang="ts">
2
+ import type { ChipVariant, ChipColor, ChipSize } from '../../types/index.js';
3
+
4
+ interface Props {
5
+ variant?: ChipVariant;
6
+ color?: ChipColor;
7
+ size?: ChipSize;
8
+ removable?: boolean;
9
+ selected?: boolean;
10
+ disabled?: boolean;
11
+ class?: string;
12
+ onclick?: () => void;
13
+ onremove?: () => void;
14
+ children?: import('svelte').Snippet;
15
+ leadingIcon?: import('svelte').Snippet;
16
+ }
17
+
18
+ let {
19
+ variant = 'filled',
20
+ color = 'default',
21
+ size = 'md',
22
+ removable = false,
23
+ selected = false,
24
+ disabled = false,
25
+ class: className = '',
26
+ onclick,
27
+ onremove,
28
+ children,
29
+ leadingIcon
30
+ }: Props = $props();
31
+
32
+ const isClickable = $derived(!!onclick && !disabled);
33
+
34
+ function handleClick() {
35
+ if (!disabled && onclick) {
36
+ onclick();
37
+ }
38
+ }
39
+
40
+ function handleRemove(event: MouseEvent) {
41
+ event.stopPropagation();
42
+ if (!disabled && onremove) {
43
+ onremove();
44
+ }
45
+ }
46
+
47
+ function handleKeydown(event: KeyboardEvent) {
48
+ if (event.key === 'Enter' || event.key === ' ') {
49
+ event.preventDefault();
50
+ handleClick();
51
+ }
52
+ }
53
+ </script>
54
+
55
+ <!-- svelte-ignore a11y_no_noninteractive_tabindex -->
56
+ <span
57
+ class="chip chip--{variant} chip--{color} chip--{size} {selected
58
+ ? 'chip--selected'
59
+ : ''} {isClickable ? 'chip--clickable' : ''} {disabled ? 'chip--disabled' : ''} {className}"
60
+ role={isClickable ? 'button' : undefined}
61
+ aria-pressed={isClickable ? selected : undefined}
62
+ aria-disabled={disabled || undefined}
63
+ tabindex={isClickable && !disabled ? 0 : -1}
64
+ onclick={isClickable ? handleClick : undefined}
65
+ onkeydown={isClickable ? handleKeydown : undefined}
66
+ >
67
+ {#if leadingIcon}
68
+ <span class="chip__icon" aria-hidden="true">
69
+ {@render leadingIcon()}
70
+ </span>
71
+ {/if}
72
+ <span class="chip__label">
73
+ {#if children}
74
+ {@render children()}
75
+ {/if}
76
+ </span>
77
+ {#if removable}
78
+ <button
79
+ type="button"
80
+ class="chip__remove"
81
+ onclick={handleRemove}
82
+ aria-label="Remove"
83
+ {disabled}
84
+ >
85
+ ×
86
+ </button>
87
+ {/if}
88
+ </span>
89
+
90
+ <style>
91
+ .chip {
92
+ display: inline-flex;
93
+ align-items: center;
94
+ gap: var(--space-xs, 0.25rem);
95
+ min-height: var(--touch-target-min, 44px);
96
+ padding: 0.25rem 0.75rem;
97
+ border: 1px solid transparent;
98
+ border-radius: var(--radius-full, 9999px);
99
+ font-family: inherit;
100
+ font-size: var(--text-sm, 0.875rem);
101
+ font-weight: 500;
102
+ line-height: 1;
103
+ white-space: nowrap;
104
+ transition: all var(--transition-fast, 150ms ease);
105
+ -webkit-tap-highlight-color: transparent;
106
+ background: transparent;
107
+ text-align: left;
108
+ }
109
+
110
+ .chip__label {
111
+ flex: 1;
112
+ min-width: 0;
113
+ }
114
+
115
+ .chip__icon {
116
+ display: flex;
117
+ align-items: center;
118
+ justify-content: center;
119
+ flex-shrink: 0;
120
+ width: 1rem;
121
+ height: 1rem;
122
+ }
123
+
124
+ .chip__remove {
125
+ display: flex;
126
+ align-items: center;
127
+ justify-content: center;
128
+ flex-shrink: 0;
129
+ width: 2.75rem;
130
+ height: 2.75rem;
131
+ margin: -0.25rem -0.25rem -0.25rem 0;
132
+ padding: 0;
133
+ border: none;
134
+ border-radius: var(--radius-full, 9999px);
135
+ background: transparent;
136
+ font-family: inherit;
137
+ font-size: 1.25rem;
138
+ line-height: 1;
139
+ color: inherit;
140
+ cursor: pointer;
141
+ transition: background-color var(--transition-fast, 150ms ease);
142
+ }
143
+
144
+ .chip__remove:hover:not(:disabled) {
145
+ background-color: rgba(0, 0, 0, 0.1);
146
+ }
147
+
148
+ .chip__remove:focus-visible {
149
+ outline: 2px solid currentColor;
150
+ outline-offset: 2px;
151
+ }
152
+
153
+ .chip__remove:disabled {
154
+ opacity: 0.5;
155
+ cursor: not-allowed;
156
+ }
157
+
158
+ /* Clickable state */
159
+ .chip--clickable {
160
+ cursor: pointer;
161
+ }
162
+
163
+ .chip--clickable:focus-visible {
164
+ outline: 2px solid var(--color-primary, #3b82f6);
165
+ outline-offset: 2px;
166
+ }
167
+
168
+ /* Disabled state */
169
+ .chip--disabled {
170
+ opacity: 0.5;
171
+ cursor: not-allowed;
172
+ pointer-events: none;
173
+ }
174
+
175
+ /* Size variants - all meet 44px touch target */
176
+ .chip--sm {
177
+ min-height: var(--touch-target-min, 44px);
178
+ padding: 0.25rem 0.75rem;
179
+ font-size: var(--text-xs, 0.75rem);
180
+ }
181
+
182
+ .chip--sm .chip__icon {
183
+ width: 0.875rem;
184
+ height: 0.875rem;
185
+ }
186
+
187
+ .chip--sm .chip__remove {
188
+ width: 2.5rem;
189
+ height: 2.5rem;
190
+ font-size: 1rem;
191
+ }
192
+
193
+ .chip--md {
194
+ min-height: var(--touch-target-min, 44px);
195
+ padding: 0.375rem 1rem;
196
+ font-size: var(--text-sm, 0.875rem);
197
+ }
198
+
199
+ .chip--md .chip__icon {
200
+ width: 1rem;
201
+ height: 1rem;
202
+ }
203
+
204
+ .chip--md .chip__remove {
205
+ width: 2.75rem;
206
+ height: 2.75rem;
207
+ font-size: 1.25rem;
208
+ }
209
+
210
+ .chip--lg {
211
+ min-height: 3rem;
212
+ padding: 0.5rem 1.25rem;
213
+ font-size: var(--text-base, 1rem);
214
+ }
215
+
216
+ .chip--lg .chip__icon {
217
+ width: 1.25rem;
218
+ height: 1.25rem;
219
+ }
220
+
221
+ .chip--lg .chip__remove {
222
+ width: 3rem;
223
+ height: 3rem;
224
+ font-size: 1.5rem;
225
+ }
226
+
227
+ /* Filled variant - default */
228
+ .chip--filled.chip--default {
229
+ background: var(--color-bg-muted, #f3f4f6);
230
+ color: var(--color-text, #1f2937);
231
+ border-color: transparent;
232
+ }
233
+
234
+ .chip--filled.chip--default.chip--clickable:hover:not(.chip--disabled) {
235
+ background: var(--color-border, #e5e7eb);
236
+ }
237
+
238
+ .chip--filled.chip--default .chip__remove:hover:not(:disabled) {
239
+ background-color: rgba(0, 0, 0, 0.1);
240
+ }
241
+
242
+ .chip--filled.chip--primary {
243
+ background: var(--color-primary, #3b82f6);
244
+ color: var(--color-text-inverse, #ffffff);
245
+ border-color: transparent;
246
+ }
247
+
248
+ .chip--filled.chip--primary.chip--clickable:hover:not(.chip--disabled) {
249
+ background: var(--color-primary-hover, #2563eb);
250
+ }
251
+
252
+ .chip--filled.chip--primary .chip__remove:hover:not(:disabled) {
253
+ background-color: rgba(255, 255, 255, 0.2);
254
+ }
255
+
256
+ .chip--filled.chip--success {
257
+ background: var(--color-success, #10b981);
258
+ color: var(--color-text-inverse, #ffffff);
259
+ border-color: transparent;
260
+ }
261
+
262
+ .chip--filled.chip--success.chip--clickable:hover:not(.chip--disabled) {
263
+ background: var(--color-success-hover, #059669);
264
+ }
265
+
266
+ .chip--filled.chip--success .chip__remove:hover:not(:disabled) {
267
+ background-color: rgba(255, 255, 255, 0.2);
268
+ }
269
+
270
+ .chip--filled.chip--warning {
271
+ background: var(--color-warning, #f59e0b);
272
+ color: var(--color-text, #1f2937);
273
+ border-color: transparent;
274
+ }
275
+
276
+ .chip--filled.chip--warning.chip--clickable:hover:not(.chip--disabled) {
277
+ background: var(--color-warning-hover, #d97706);
278
+ }
279
+
280
+ .chip--filled.chip--warning .chip__remove:hover:not(:disabled) {
281
+ background-color: rgba(0, 0, 0, 0.1);
282
+ }
283
+
284
+ .chip--filled.chip--error {
285
+ background: var(--color-error, #ef4444);
286
+ color: var(--color-text-inverse, #ffffff);
287
+ border-color: transparent;
288
+ }
289
+
290
+ .chip--filled.chip--error.chip--clickable:hover:not(.chip--disabled) {
291
+ background: var(--color-error-hover, #dc2626);
292
+ }
293
+
294
+ .chip--filled.chip--error .chip__remove:hover:not(:disabled) {
295
+ background-color: rgba(255, 255, 255, 0.2);
296
+ }
297
+
298
+ /* Outlined variant */
299
+ .chip--outlined.chip--default {
300
+ background: transparent;
301
+ color: var(--color-text, #1f2937);
302
+ border-color: var(--color-border, #e5e7eb);
303
+ }
304
+
305
+ .chip--outlined.chip--default.chip--clickable:hover:not(.chip--disabled) {
306
+ background: var(--color-bg-muted, #f3f4f6);
307
+ border-color: var(--color-border-hover, #d1d5db);
308
+ }
309
+
310
+ .chip--outlined.chip--default .chip__remove:hover:not(:disabled) {
311
+ background-color: rgba(0, 0, 0, 0.1);
312
+ }
313
+
314
+ .chip--outlined.chip--primary {
315
+ background: transparent;
316
+ color: var(--color-primary, #3b82f6);
317
+ border-color: var(--color-primary, #3b82f6);
318
+ }
319
+
320
+ .chip--outlined.chip--primary.chip--clickable:hover:not(.chip--disabled) {
321
+ background: rgba(59, 130, 246, 0.1);
322
+ border-color: var(--color-primary-hover, #2563eb);
323
+ }
324
+
325
+ .chip--outlined.chip--primary .chip__remove:hover:not(:disabled) {
326
+ background-color: rgba(59, 130, 246, 0.1);
327
+ }
328
+
329
+ .chip--outlined.chip--success {
330
+ background: transparent;
331
+ color: var(--color-success, #10b981);
332
+ border-color: var(--color-success, #10b981);
333
+ }
334
+
335
+ .chip--outlined.chip--success.chip--clickable:hover:not(.chip--disabled) {
336
+ background: rgba(16, 185, 129, 0.1);
337
+ border-color: var(--color-success-hover, #059669);
338
+ }
339
+
340
+ .chip--outlined.chip--success .chip__remove:hover:not(:disabled) {
341
+ background-color: rgba(16, 185, 129, 0.1);
342
+ }
343
+
344
+ .chip--outlined.chip--warning {
345
+ background: transparent;
346
+ color: var(--color-warning, #f59e0b);
347
+ border-color: var(--color-warning, #f59e0b);
348
+ }
349
+
350
+ .chip--outlined.chip--warning.chip--clickable:hover:not(.chip--disabled) {
351
+ background: rgba(245, 158, 11, 0.1);
352
+ border-color: var(--color-warning-hover, #d97706);
353
+ }
354
+
355
+ .chip--outlined.chip--warning .chip__remove:hover:not(:disabled) {
356
+ background-color: rgba(245, 158, 11, 0.1);
357
+ }
358
+
359
+ .chip--outlined.chip--error {
360
+ background: transparent;
361
+ color: var(--color-error, #ef4444);
362
+ border-color: var(--color-error, #ef4444);
363
+ }
364
+
365
+ .chip--outlined.chip--error.chip--clickable:hover:not(.chip--disabled) {
366
+ background: rgba(239, 68, 68, 0.1);
367
+ border-color: var(--color-error-hover, #dc2626);
368
+ }
369
+
370
+ .chip--outlined.chip--error .chip__remove:hover:not(:disabled) {
371
+ background-color: rgba(239, 68, 68, 0.1);
372
+ }
373
+
374
+ /* Soft variant */
375
+ .chip--soft.chip--default {
376
+ background: rgba(107, 114, 128, 0.1);
377
+ color: var(--color-text, #1f2937);
378
+ border-color: transparent;
379
+ }
380
+
381
+ .chip--soft.chip--default.chip--clickable:hover:not(.chip--disabled) {
382
+ background: rgba(107, 114, 128, 0.2);
383
+ }
384
+
385
+ .chip--soft.chip--default .chip__remove:hover:not(:disabled) {
386
+ background-color: rgba(0, 0, 0, 0.1);
387
+ }
388
+
389
+ .chip--soft.chip--primary {
390
+ background: rgba(59, 130, 246, 0.15);
391
+ color: var(--color-primary, #3b82f6);
392
+ border-color: transparent;
393
+ }
394
+
395
+ .chip--soft.chip--primary.chip--clickable:hover:not(.chip--disabled) {
396
+ background: rgba(59, 130, 246, 0.25);
397
+ }
398
+
399
+ .chip--soft.chip--primary .chip__remove:hover:not(:disabled) {
400
+ background-color: rgba(59, 130, 246, 0.2);
401
+ }
402
+
403
+ .chip--soft.chip--success {
404
+ background: rgba(16, 185, 129, 0.15);
405
+ color: var(--color-success, #10b981);
406
+ border-color: transparent;
407
+ }
408
+
409
+ .chip--soft.chip--success.chip--clickable:hover:not(.chip--disabled) {
410
+ background: rgba(16, 185, 129, 0.25);
411
+ }
412
+
413
+ .chip--soft.chip--success .chip__remove:hover:not(:disabled) {
414
+ background-color: rgba(16, 185, 129, 0.2);
415
+ }
416
+
417
+ .chip--soft.chip--warning {
418
+ background: rgba(245, 158, 11, 0.15);
419
+ color: var(--color-warning, #f59e0b);
420
+ border-color: transparent;
421
+ }
422
+
423
+ .chip--soft.chip--warning.chip--clickable:hover:not(.chip--disabled) {
424
+ background: rgba(245, 158, 11, 0.25);
425
+ }
426
+
427
+ .chip--soft.chip--warning .chip__remove:hover:not(:disabled) {
428
+ background-color: rgba(245, 158, 11, 0.2);
429
+ }
430
+
431
+ .chip--soft.chip--error {
432
+ background: rgba(239, 68, 68, 0.15);
433
+ color: var(--color-error, #ef4444);
434
+ border-color: transparent;
435
+ }
436
+
437
+ .chip--soft.chip--error.chip--clickable:hover:not(.chip--disabled) {
438
+ background: rgba(239, 68, 68, 0.25);
439
+ }
440
+
441
+ .chip--soft.chip--error .chip__remove:hover:not(:disabled) {
442
+ background-color: rgba(239, 68, 68, 0.2);
443
+ }
444
+
445
+ /* Selected state */
446
+ .chip--selected.chip--outlined,
447
+ .chip--selected.chip--soft {
448
+ border-width: 2px;
449
+ padding: calc(0.375rem - 1px) calc(1rem - 1px);
450
+ }
451
+
452
+ .chip--selected.chip--outlined.chip--sm,
453
+ .chip--selected.chip--soft.chip--sm {
454
+ padding: calc(0.25rem - 1px) calc(0.75rem - 1px);
455
+ }
456
+
457
+ .chip--selected.chip--outlined.chip--lg,
458
+ .chip--selected.chip--soft.chip--lg {
459
+ padding: calc(0.5rem - 1px) calc(1.25rem - 1px);
460
+ }
461
+ </style>
@@ -0,0 +1,17 @@
1
+ import type { ChipVariant, ChipColor, ChipSize } from '../../types/index.js';
2
+ interface Props {
3
+ variant?: ChipVariant;
4
+ color?: ChipColor;
5
+ size?: ChipSize;
6
+ removable?: boolean;
7
+ selected?: boolean;
8
+ disabled?: boolean;
9
+ class?: string;
10
+ onclick?: () => void;
11
+ onremove?: () => void;
12
+ children?: import('svelte').Snippet;
13
+ leadingIcon?: import('svelte').Snippet;
14
+ }
15
+ declare const Chip: import("svelte").Component<Props, {}, "">;
16
+ type Chip = ReturnType<typeof Chip>;
17
+ export default Chip;
@@ -0,0 +1,76 @@
1
+ <script lang="ts">
2
+ import { setContext } from 'svelte';
3
+
4
+ interface Props {
5
+ value?: string | string[];
6
+ multiple?: boolean;
7
+ class?: string;
8
+ children?: import('svelte').Snippet;
9
+ }
10
+
11
+ let {
12
+ value = $bindable([]),
13
+ multiple = false,
14
+ class: className = '',
15
+ children
16
+ }: Props = $props();
17
+
18
+ // Normalize value to always be an array internally
19
+ let selectedValues = $derived.by(() => {
20
+ if (Array.isArray(value)) {
21
+ return value;
22
+ }
23
+ return value ? [value] : [];
24
+ });
25
+
26
+ function isSelected(chipValue: string): boolean {
27
+ return selectedValues.includes(chipValue);
28
+ }
29
+
30
+ function toggleSelection(chipValue: string) {
31
+ if (multiple) {
32
+ // Multiple selection mode
33
+ if (Array.isArray(value)) {
34
+ if (selectedValues.includes(chipValue)) {
35
+ value = selectedValues.filter((v) => v !== chipValue);
36
+ } else {
37
+ value = [...selectedValues, chipValue];
38
+ }
39
+ } else {
40
+ // Convert to array if not already
41
+ value = selectedValues.includes(chipValue) ? [] : [chipValue];
42
+ }
43
+ } else {
44
+ // Single selection mode
45
+ if (Array.isArray(value)) {
46
+ value = selectedValues.includes(chipValue) ? [] : [chipValue];
47
+ } else {
48
+ value = value === chipValue ? '' : chipValue;
49
+ }
50
+ }
51
+ }
52
+
53
+ // Provide context for child chips
54
+ setContext('chipGroup', {
55
+ isSelected,
56
+ toggleSelection,
57
+ get multiple() {
58
+ return multiple;
59
+ }
60
+ });
61
+ </script>
62
+
63
+ <div class="chip-group {className}" role="group">
64
+ {#if children}
65
+ {@render children()}
66
+ {/if}
67
+ </div>
68
+
69
+ <style>
70
+ .chip-group {
71
+ display: flex;
72
+ flex-wrap: wrap;
73
+ gap: var(--space-sm, 0.5rem);
74
+ align-items: center;
75
+ }
76
+ </style>
@@ -0,0 +1,9 @@
1
+ interface Props {
2
+ value?: string | string[];
3
+ multiple?: boolean;
4
+ class?: string;
5
+ children?: import('svelte').Snippet;
6
+ }
7
+ declare const ChipGroup: import("svelte").Component<Props, {}, "value">;
8
+ type ChipGroup = ReturnType<typeof ChipGroup>;
9
+ export default ChipGroup;
@@ -0,0 +1,2 @@
1
+ export { default as Chip } from './Chip.svelte';
2
+ export { default as ChipGroup } from './ChipGroup.svelte';
@@ -0,0 +1,2 @@
1
+ export { default as Chip } from './Chip.svelte';
2
+ export { default as ChipGroup } from './ChipGroup.svelte';
@@ -0,0 +1,58 @@
1
+ <script lang="ts">
2
+ import type { ContainerSize } from '../../types/index.js';
3
+
4
+ interface Props {
5
+ size?: ContainerSize;
6
+ centered?: boolean;
7
+ class?: string;
8
+ children?: import('svelte').Snippet;
9
+ }
10
+
11
+ let { size = 'lg', centered = true, class: className = '', children }: Props = $props();
12
+ </script>
13
+
14
+ <div class="container {className}" data-size={size} data-centered={centered}>
15
+ {#if children}
16
+ {@render children()}
17
+ {/if}
18
+ </div>
19
+
20
+ <style>
21
+ .container {
22
+ width: 100%;
23
+ padding: var(--space-md, 1rem);
24
+ font-family: inherit;
25
+ }
26
+
27
+ .container[data-centered='true'] {
28
+ margin: 0 auto;
29
+ }
30
+
31
+ /* Size variants - responsive max-widths */
32
+ .container[data-size='sm'] {
33
+ max-width: 40rem; /* 640px */
34
+ }
35
+
36
+ .container[data-size='md'] {
37
+ max-width: 48rem; /* 768px */
38
+ }
39
+
40
+ .container[data-size='lg'] {
41
+ max-width: 64rem; /* 1024px */
42
+ }
43
+
44
+ .container[data-size='xl'] {
45
+ max-width: 80rem; /* 1280px */
46
+ }
47
+
48
+ .container[data-size='full'] {
49
+ max-width: 100%;
50
+ }
51
+
52
+ /* Responsive padding - larger screens get more padding */
53
+ @media (min-width: 768px) {
54
+ .container {
55
+ padding: var(--space-lg, 1.5rem);
56
+ }
57
+ }
58
+ </style>
@@ -0,0 +1,10 @@
1
+ import type { ContainerSize } from '../../types/index.js';
2
+ interface Props {
3
+ size?: ContainerSize;
4
+ centered?: boolean;
5
+ class?: string;
6
+ children?: import('svelte').Snippet;
7
+ }
8
+ declare const Container: import("svelte").Component<Props, {}, "">;
9
+ type Container = ReturnType<typeof Container>;
10
+ export default Container;
@@ -0,0 +1 @@
1
+ export { default as Container } from './Container.svelte';
@@ -0,0 +1 @@
1
+ export { default as Container } from './Container.svelte';