@salmexio/ui 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 (82) hide show
  1. package/README.md +7 -0
  2. package/dist/app.html +11 -0
  3. package/dist/feedback/Alert/Alert.svelte +538 -0
  4. package/dist/feedback/Alert/Alert.svelte.d.ts +30 -0
  5. package/dist/feedback/Alert/Alert.svelte.d.ts.map +1 -0
  6. package/dist/feedback/Alert/index.d.ts +2 -0
  7. package/dist/feedback/Alert/index.d.ts.map +1 -0
  8. package/dist/feedback/Alert/index.js +1 -0
  9. package/dist/feedback/Spinner/Spinner.svelte +421 -0
  10. package/dist/feedback/Spinner/Spinner.svelte.d.ts +25 -0
  11. package/dist/feedback/Spinner/Spinner.svelte.d.ts.map +1 -0
  12. package/dist/feedback/Spinner/index.d.ts +2 -0
  13. package/dist/feedback/Spinner/index.d.ts.map +1 -0
  14. package/dist/feedback/Spinner/index.js +1 -0
  15. package/dist/feedback/index.d.ts +3 -0
  16. package/dist/feedback/index.d.ts.map +1 -0
  17. package/dist/feedback/index.js +2 -0
  18. package/dist/forms/TextInput/TextInput.svelte +576 -0
  19. package/dist/forms/TextInput/TextInput.svelte.d.ts +50 -0
  20. package/dist/forms/TextInput/TextInput.svelte.d.ts.map +1 -0
  21. package/dist/forms/TextInput/index.d.ts +2 -0
  22. package/dist/forms/TextInput/index.d.ts.map +1 -0
  23. package/dist/forms/TextInput/index.js +1 -0
  24. package/dist/forms/index.d.ts +2 -0
  25. package/dist/forms/index.d.ts.map +1 -0
  26. package/dist/forms/index.js +1 -0
  27. package/dist/index.d.ts +7 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +6 -0
  30. package/dist/layout/Card/Card.svelte +283 -0
  31. package/dist/layout/Card/Card.svelte.d.ts +35 -0
  32. package/dist/layout/Card/Card.svelte.d.ts.map +1 -0
  33. package/dist/layout/Card/index.d.ts +2 -0
  34. package/dist/layout/Card/index.d.ts.map +1 -0
  35. package/dist/layout/Card/index.js +1 -0
  36. package/dist/layout/Container/Container.svelte +202 -0
  37. package/dist/layout/Container/Container.svelte.d.ts +25 -0
  38. package/dist/layout/Container/Container.svelte.d.ts.map +1 -0
  39. package/dist/layout/Container/index.d.ts +2 -0
  40. package/dist/layout/Container/index.d.ts.map +1 -0
  41. package/dist/layout/Container/index.js +1 -0
  42. package/dist/layout/index.d.ts +3 -0
  43. package/dist/layout/index.d.ts.map +1 -0
  44. package/dist/layout/index.js +2 -0
  45. package/dist/navigation/Tabs/Tabs.svelte +448 -0
  46. package/dist/navigation/Tabs/Tabs.svelte.d.ts +59 -0
  47. package/dist/navigation/Tabs/Tabs.svelte.d.ts.map +1 -0
  48. package/dist/navigation/Tabs/index.d.ts +3 -0
  49. package/dist/navigation/Tabs/index.d.ts.map +1 -0
  50. package/dist/navigation/Tabs/index.js +1 -0
  51. package/dist/navigation/index.d.ts +3 -0
  52. package/dist/navigation/index.d.ts.map +1 -0
  53. package/dist/navigation/index.js +1 -0
  54. package/dist/primitives/Badge/Badge.svelte +351 -0
  55. package/dist/primitives/Badge/Badge.svelte.d.ts +35 -0
  56. package/dist/primitives/Badge/Badge.svelte.d.ts.map +1 -0
  57. package/dist/primitives/Badge/index.d.ts +2 -0
  58. package/dist/primitives/Badge/index.d.ts.map +1 -0
  59. package/dist/primitives/Badge/index.js +1 -0
  60. package/dist/primitives/Button/Button.svelte +383 -0
  61. package/dist/primitives/Button/Button.svelte.d.ts +47 -0
  62. package/dist/primitives/Button/Button.svelte.d.ts.map +1 -0
  63. package/dist/primitives/Button/index.d.ts +2 -0
  64. package/dist/primitives/Button/index.d.ts.map +1 -0
  65. package/dist/primitives/Button/index.js +1 -0
  66. package/dist/primitives/index.d.ts +3 -0
  67. package/dist/primitives/index.d.ts.map +1 -0
  68. package/dist/primitives/index.js +2 -0
  69. package/dist/routes/+layout.svelte +5 -0
  70. package/dist/routes/+layout.svelte.d.ts +6 -0
  71. package/dist/routes/+layout.svelte.d.ts.map +1 -0
  72. package/dist/routes/+page.svelte +6 -0
  73. package/dist/routes/+page.svelte.d.ts +27 -0
  74. package/dist/routes/+page.svelte.d.ts.map +1 -0
  75. package/dist/styles/tokens.css +340 -0
  76. package/dist/utils/cn.d.ts +9 -0
  77. package/dist/utils/cn.d.ts.map +1 -0
  78. package/dist/utils/cn.js +29 -0
  79. package/dist/utils/index.d.ts +2 -0
  80. package/dist/utils/index.d.ts.map +1 -0
  81. package/dist/utils/index.js +1 -0
  82. package/package.json +84 -0
@@ -0,0 +1,448 @@
1
+ <!--
2
+ @component Tabs
3
+
4
+ Win2K × Basquiat tabbed interface with 3D beveled tabs.
5
+ Bold structure, expressive colors, world-class accessibility.
6
+
7
+ @example
8
+ <Tabs
9
+ label="Content sections"
10
+ tabs={[
11
+ { value: 'one', label: 'First', badge: 3 },
12
+ { value: 'two', label: 'Second' }
13
+ ]}
14
+ value={activeTab}
15
+ onchange={(v) => setActiveTab(v)}
16
+ >
17
+ {#snippet children(activeValue)}
18
+ {#if activeValue === 'one'} <Content /> {/if}
19
+ {/snippet}
20
+ </Tabs>
21
+ -->
22
+ <script lang="ts">
23
+ import type { Snippet } from 'svelte';
24
+ import { cn } from '../../utils/cn.js';
25
+
26
+ type TabsSize = 'sm' | 'md' | 'lg';
27
+
28
+ export interface TabOption {
29
+ /** Unique value for the tab */
30
+ value: string;
31
+ /** Display label */
32
+ label: string;
33
+ /** Optional icon snippet */
34
+ icon?: Snippet;
35
+ /** Optional badge (count or label) */
36
+ badge?: number | string;
37
+ /** Whether this tab is disabled */
38
+ disabled?: boolean;
39
+ }
40
+
41
+ interface Props {
42
+ /** Unique identifier */
43
+ id?: string;
44
+ /** Accessible label for tablist (required for screen readers) */
45
+ label: string;
46
+ /** Tab definitions */
47
+ tabs: TabOption[];
48
+ /** Currently selected tab value */
49
+ value?: string;
50
+ /** Size variant */
51
+ size?: TabsSize;
52
+ /** Additional CSS classes */
53
+ class?: string;
54
+ /** Change handler */
55
+ onchange?: (value: string) => void;
56
+ /** Panel content - receives active tab value */
57
+ children?: Snippet<[activeValue: string]>;
58
+ /** Test ID */
59
+ testId?: string;
60
+ }
61
+
62
+ let {
63
+ id = `tabs-${Math.random().toString(36).substr(2, 9)}`,
64
+ label,
65
+ tabs,
66
+ value = '',
67
+ size = 'md',
68
+ class: className = '',
69
+ onchange,
70
+ children,
71
+ testId
72
+ }: Props = $props();
73
+
74
+ function getTabId(index: number) {
75
+ return `${id}-tab-${index}`;
76
+ }
77
+
78
+ function getPanelId(index: number) {
79
+ return `${id}-panel-${index}`;
80
+ }
81
+
82
+ function activateTab(index: number) {
83
+ const tab = tabs[index];
84
+ if (!tab || tab.disabled) return;
85
+ if (value === tab.value) return;
86
+ onchange?.(tab.value);
87
+ }
88
+
89
+ function handleKeydown(event: KeyboardEvent, currentIndex: number) {
90
+ let nextIndex = currentIndex;
91
+
92
+ if (event.key === 'ArrowRight') {
93
+ event.preventDefault();
94
+ nextIndex = currentIndex + 1;
95
+ if (nextIndex >= tabs.length) nextIndex = 0;
96
+ } else if (event.key === 'ArrowLeft') {
97
+ event.preventDefault();
98
+ nextIndex = currentIndex - 1;
99
+ if (nextIndex < 0) nextIndex = tabs.length - 1;
100
+ } else if (event.key === 'Home') {
101
+ event.preventDefault();
102
+ nextIndex = 0;
103
+ } else if (event.key === 'End') {
104
+ event.preventDefault();
105
+ nextIndex = tabs.length - 1;
106
+ } else {
107
+ return;
108
+ }
109
+
110
+ // Skip disabled tabs
111
+ while (tabs[nextIndex]?.disabled && nextIndex !== currentIndex) {
112
+ nextIndex =
113
+ event.key === 'ArrowRight' || event.key === 'End' ? nextIndex + 1 : nextIndex - 1;
114
+ if (nextIndex >= tabs.length) nextIndex = 0;
115
+ if (nextIndex < 0) nextIndex = tabs.length - 1;
116
+ }
117
+
118
+ if (!tabs[nextIndex]?.disabled) {
119
+ activateTab(nextIndex);
120
+ const el = document.getElementById(getTabId(nextIndex));
121
+ el?.focus();
122
+ }
123
+ }
124
+ </script>
125
+
126
+ <div class={cn('salmex-tabs-root', className)} data-testid={testId} {id}>
127
+ <div class={cn('salmex-tabs-list', `salmex-tabs-list-${size}`)} role="tablist" aria-label={label}>
128
+ {#each tabs as tab, index (tab.value)}
129
+ {@const isSelected = value === tab.value}
130
+ {@const isDisabled = tab.disabled}
131
+ <button
132
+ type="button"
133
+ id={getTabId(index)}
134
+ role="tab"
135
+ tabindex={isSelected ? 0 : -1}
136
+ aria-selected={isSelected}
137
+ aria-controls={getPanelId(index)}
138
+ aria-disabled={isDisabled}
139
+ disabled={isDisabled}
140
+ class={cn(
141
+ 'salmex-tab',
142
+ `salmex-tab-${size}`,
143
+ isSelected && 'salmex-tab-selected',
144
+ isDisabled && 'salmex-tab-disabled'
145
+ )}
146
+ onclick={() => activateTab(index)}
147
+ onkeydown={(e) => handleKeydown(e, index)}
148
+ >
149
+ {#if tab.icon}
150
+ <span class="salmex-tab-icon" aria-hidden="true">
151
+ {@render tab.icon()}
152
+ </span>
153
+ {/if}
154
+ <span class="salmex-tab-label">{tab.label}</span>
155
+ {#if tab.badge !== undefined && tab.badge !== null && tab.badge !== ''}
156
+ <span class="salmex-tab-badge" aria-hidden="true">{tab.badge}</span>
157
+ {/if}
158
+ </button>
159
+ {/each}
160
+ </div>
161
+
162
+ {#each tabs as tab, index (tab.value)}
163
+ {@const isSelected = value === tab.value}
164
+ <div
165
+ id={getPanelId(index)}
166
+ role="tabpanel"
167
+ aria-labelledby={getTabId(index)}
168
+ hidden={!isSelected}
169
+ tabindex={0}
170
+ class={cn('salmex-tabs-panel', !isSelected && 'salmex-tabs-panel-hidden')}
171
+ >
172
+ {#if isSelected && children}
173
+ {@render children(tab.value)}
174
+ {/if}
175
+ </div>
176
+ {/each}
177
+ </div>
178
+
179
+ <style>
180
+ /* ========================================
181
+ ROOT
182
+ ======================================== */
183
+ .salmex-tabs-root {
184
+ display: block;
185
+ width: 100%;
186
+ position: relative;
187
+ }
188
+
189
+ /* ========================================
190
+ TABLIST - Tabs sit ON the panel edge
191
+ ======================================== */
192
+ .salmex-tabs-list {
193
+ display: flex;
194
+ gap: var(--salmex-space-3);
195
+ padding: var(--salmex-space-2) var(--salmex-space-2) 6px;
196
+ margin-bottom: -6px;
197
+ overflow-x: auto;
198
+ overflow-y: hidden;
199
+ -webkit-overflow-scrolling: touch;
200
+ scrollbar-width: thin;
201
+ position: relative;
202
+ z-index: 2;
203
+ }
204
+
205
+ .salmex-tabs-list-sm {
206
+ min-height: 52px;
207
+ }
208
+
209
+ .salmex-tabs-list-md {
210
+ min-height: 58px;
211
+ }
212
+
213
+ .salmex-tabs-list-lg {
214
+ min-height: 64px;
215
+ }
216
+
217
+ /* ========================================
218
+ TAB - Bold 3D Win2K button style matching Button component
219
+ ======================================== */
220
+ .salmex-tab {
221
+ display: inline-flex;
222
+ align-items: center;
223
+ gap: var(--salmex-space-2);
224
+ background: rgb(var(--salmex-button-face));
225
+ padding: var(--salmex-space-2) var(--salmex-space-4);
226
+ font-family: var(--salmex-font-system);
227
+ font-weight: 700;
228
+ text-transform: uppercase;
229
+ letter-spacing: 0.3px;
230
+ cursor: pointer;
231
+ white-space: nowrap;
232
+ user-select: none;
233
+ -webkit-tap-highlight-color: transparent;
234
+ color: rgb(var(--salmex-text-primary));
235
+ position: relative;
236
+
237
+ /* Keep consistent height - unselected tabs float higher above */
238
+ margin-bottom: 0;
239
+
240
+ /* Move all unselected tabs up more */
241
+ transform: translateY(-8px);
242
+
243
+ /* Simplified 3D - just 2px inset, cleaner look */
244
+ box-shadow:
245
+ /* Top-left highlight */
246
+ inset 2px 2px 0 rgb(var(--salmex-button-highlight)),
247
+ /* Bottom-right shadow */
248
+ inset -2px -2px 0 rgb(var(--salmex-button-shadow)),
249
+ /* Flat shadow - Basquiat style */
250
+ 3px 3px 0 rgb(0 0 0 / 0.2);
251
+
252
+ /* Always account for focus border space (transparent when not focused) */
253
+ outline: 2px dashed transparent;
254
+ outline-offset: 2px;
255
+
256
+ border-radius: 0;
257
+ transition: all var(--salmex-transition-fast);
258
+ }
259
+
260
+ .salmex-tab-sm {
261
+ height: auto;
262
+ font-size: var(--salmex-font-size-xs);
263
+ padding: 6px var(--salmex-space-3);
264
+ }
265
+
266
+ .salmex-tab-md {
267
+ height: auto;
268
+ font-size: var(--salmex-font-size-sm);
269
+ }
270
+
271
+ .salmex-tab-lg {
272
+ height: auto;
273
+ font-size: var(--salmex-font-size-base);
274
+ padding: var(--salmex-space-3) var(--salmex-space-5);
275
+ }
276
+
277
+ .salmex-tab:hover:not(.salmex-tab-disabled):not(.salmex-tab-selected) {
278
+ background: rgb(var(--salmex-button-light));
279
+ transform: translateY(-6px);
280
+ box-shadow:
281
+ inset 2px 2px 0 rgb(var(--salmex-button-highlight)),
282
+ inset -2px -2px 0 rgb(var(--salmex-button-shadow)),
283
+ 4px 4px 0 rgb(0 0 0 / 0.25);
284
+ }
285
+
286
+ /* Active (pressed) state - inverted shadow for tactile feedback */
287
+ .salmex-tab:active:not(.salmex-tab-disabled):not(.salmex-tab-selected) {
288
+ box-shadow:
289
+ /* Inverted shadows for pressed effect */
290
+ inset -2px -2px 0 rgb(var(--salmex-button-highlight)),
291
+ inset 2px 2px 0 rgb(var(--salmex-button-shadow)),
292
+ /* Reduced flat shadow */
293
+ 1px 1px 0 rgb(0 0 0 / 0.3);
294
+
295
+ /* Shift down for pressed effect - relative to hover position */
296
+ transform: translate(1px, -5px);
297
+ }
298
+
299
+ /* Selected tab - merges with panel using transform */
300
+ .salmex-tab-selected {
301
+ /* Match panel background */
302
+ background: rgb(var(--salmex-window-surface));
303
+ color: rgb(var(--salmex-electric-blue));
304
+ font-weight: 900;
305
+ z-index: 3;
306
+
307
+ /* Use transform to move down and merge - extends further into panel */
308
+ transform: translateY(2px);
309
+
310
+ /* No bottom border */
311
+ border-bottom: none;
312
+
313
+ /* Subtle 3D on sides only - merges at bottom */
314
+ box-shadow:
315
+ inset 2px 2px 0 rgb(var(--salmex-button-highlight)),
316
+ inset -2px 0 0 rgb(var(--salmex-button-shadow));
317
+ }
318
+
319
+ /* Dark mode selected - bright blue text with lighter grey shadow */
320
+ :global([data-theme='dark']) .salmex-tab-selected {
321
+ color: rgb(var(--salmex-primary-light));
322
+ text-shadow:
323
+ 0.5px 0.5px 0 rgb(var(--salmex-border-default)),
324
+ -0.5px -0.5px 0 rgb(var(--salmex-border-default));
325
+ }
326
+
327
+ /* Focus - yellow ring, visible in light and dark */
328
+ .salmex-tab:focus-visible {
329
+ outline: none;
330
+ box-shadow:
331
+ inset 2px 2px 0 rgb(var(--salmex-button-highlight)),
332
+ inset -2px -2px 0 rgb(var(--salmex-button-shadow)),
333
+ 3px 3px 0 rgb(0 0 0 / 0.2),
334
+ 0 0 0 2px rgb(var(--salmex-midnight-black)),
335
+ 0 0 0 5px rgb(var(--salmex-crown-yellow));
336
+ z-index: 10;
337
+ }
338
+
339
+ :global([data-theme='dark']) .salmex-tab:focus-visible {
340
+ box-shadow:
341
+ inset 2px 2px 0 rgb(var(--salmex-button-highlight)),
342
+ inset -2px -2px 0 rgb(var(--salmex-button-shadow)),
343
+ 3px 3px 0 rgb(0 0 0 / 0.2),
344
+ 0 0 0 3px rgb(var(--salmex-crown-yellow));
345
+ }
346
+
347
+ .salmex-tab-disabled {
348
+ cursor: not-allowed;
349
+ opacity: 0.5;
350
+ color: rgb(var(--salmex-text-disabled));
351
+ }
352
+
353
+ .salmex-tab-icon {
354
+ display: inline-flex;
355
+ flex-shrink: 0;
356
+ align-items: center;
357
+ justify-content: center;
358
+ line-height: 0;
359
+ }
360
+
361
+ .salmex-tab-label {
362
+ overflow: hidden;
363
+ text-overflow: ellipsis;
364
+ }
365
+
366
+ .salmex-tab-badge {
367
+ display: inline-flex;
368
+ align-items: center;
369
+ justify-content: center;
370
+ min-width: 18px;
371
+ height: 18px;
372
+ padding: 0 6px;
373
+ background: rgb(var(--salmex-bg-tertiary));
374
+ border: 1px solid rgb(var(--salmex-border-default));
375
+ font-size: 11px;
376
+ font-weight: 700;
377
+ color: rgb(var(--salmex-text-secondary));
378
+ border-radius: 0;
379
+ }
380
+
381
+ .salmex-tab-selected .salmex-tab-badge {
382
+ background: rgb(var(--salmex-crown-yellow) / 0.2);
383
+ color: rgb(var(--salmex-electric-blue));
384
+ border-color: rgb(var(--salmex-electric-blue));
385
+ }
386
+
387
+ :global([data-theme='dark']) .salmex-tab-selected .salmex-tab-badge {
388
+ background: rgb(var(--salmex-crown-yellow) / 0.3);
389
+ color: rgb(var(--salmex-crown-yellow));
390
+ border-color: rgb(var(--salmex-crown-yellow));
391
+ }
392
+
393
+ /* ========================================
394
+ TABPANEL - Bold panel matching Button component style
395
+ ======================================== */
396
+ .salmex-tabs-panel {
397
+ min-height: 0;
398
+ overflow: auto;
399
+ padding: var(--salmex-space-6);
400
+ margin-top: 0;
401
+ background: rgb(var(--salmex-window-surface));
402
+ position: relative;
403
+ z-index: 1;
404
+
405
+ /* Simplified inset 3D effect */
406
+ box-shadow:
407
+ /* Inner shadows for depth */
408
+ inset 2px 2px 0 rgb(var(--salmex-button-shadow)),
409
+ inset -2px -2px 0 rgb(var(--salmex-button-highlight));
410
+ }
411
+
412
+ .salmex-tabs-panel-hidden {
413
+ display: none !important;
414
+ }
415
+
416
+ .salmex-tabs-panel:focus {
417
+ outline: none;
418
+ }
419
+
420
+ /* ========================================
421
+ SCROLLBAR STYLING
422
+ ======================================== */
423
+ .salmex-tabs-list::-webkit-scrollbar {
424
+ height: 8px;
425
+ }
426
+
427
+ .salmex-tabs-list::-webkit-scrollbar-track {
428
+ background: rgb(var(--salmex-bg-tertiary));
429
+ }
430
+
431
+ .salmex-tabs-list::-webkit-scrollbar-thumb {
432
+ background: rgb(var(--salmex-button-shadow));
433
+ border: 1px solid rgb(var(--salmex-border-default));
434
+ }
435
+
436
+ .salmex-tabs-list::-webkit-scrollbar-thumb:hover {
437
+ background: rgb(var(--salmex-button-dark-edge));
438
+ }
439
+
440
+ /* ========================================
441
+ REDUCED MOTION
442
+ ======================================== */
443
+ @media (prefers-reduced-motion: reduce) {
444
+ .salmex-tab {
445
+ transition: none;
446
+ }
447
+ }
448
+ </style>
@@ -0,0 +1,59 @@
1
+ import type { Snippet } from 'svelte';
2
+ type TabsSize = 'sm' | 'md' | 'lg';
3
+ export interface TabOption {
4
+ /** Unique value for the tab */
5
+ value: string;
6
+ /** Display label */
7
+ label: string;
8
+ /** Optional icon snippet */
9
+ icon?: Snippet;
10
+ /** Optional badge (count or label) */
11
+ badge?: number | string;
12
+ /** Whether this tab is disabled */
13
+ disabled?: boolean;
14
+ }
15
+ interface Props {
16
+ /** Unique identifier */
17
+ id?: string;
18
+ /** Accessible label for tablist (required for screen readers) */
19
+ label: string;
20
+ /** Tab definitions */
21
+ tabs: TabOption[];
22
+ /** Currently selected tab value */
23
+ value?: string;
24
+ /** Size variant */
25
+ size?: TabsSize;
26
+ /** Additional CSS classes */
27
+ class?: string;
28
+ /** Change handler */
29
+ onchange?: (value: string) => void;
30
+ /** Panel content - receives active tab value */
31
+ children?: Snippet<[activeValue: string]>;
32
+ /** Test ID */
33
+ testId?: string;
34
+ }
35
+ /**
36
+ * Tabs
37
+ *
38
+ * Win2K × Basquiat tabbed interface with 3D beveled tabs.
39
+ * Bold structure, expressive colors, world-class accessibility.
40
+ *
41
+ * @example
42
+ * <Tabs
43
+ * label="Content sections"
44
+ * tabs={[
45
+ * { value: 'one', label: 'First', badge: 3 },
46
+ * { value: 'two', label: 'Second' }
47
+ * ]}
48
+ * value={activeTab}
49
+ * onchange={(v) => setActiveTab(v)}
50
+ * >
51
+ * {#snippet children(activeValue)}
52
+ * {#if activeValue === 'one'} <Content /> {/if}
53
+ * {/snippet}
54
+ * </Tabs>
55
+ */
56
+ declare const Tabs: import("svelte").Component<Props, {}, "">;
57
+ type Tabs = ReturnType<typeof Tabs>;
58
+ export default Tabs;
59
+ //# sourceMappingURL=Tabs.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tabs.svelte.d.ts","sourceRoot":"","sources":["../../../src/navigation/Tabs/Tabs.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAIrC,KAAK,QAAQ,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAEnC,MAAM,WAAW,SAAS;IACzB,+BAA+B;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,oBAAoB;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,4BAA4B;IAC5B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,mCAAmC;IACnC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,UAAU,KAAK;IACd,wBAAwB;IACxB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,iEAAiE;IACjE,KAAK,EAAE,MAAM,CAAC;IACd,sBAAsB;IACtB,IAAI,EAAE,SAAS,EAAE,CAAC;IAClB,mCAAmC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mBAAmB;IACnB,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,6BAA6B;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,gDAAgD;IAChD,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;IAC1C,cAAc;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AA+GF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,QAAA,MAAM,IAAI,2CAAwC,CAAC;AACnD,KAAK,IAAI,GAAG,UAAU,CAAC,OAAO,IAAI,CAAC,CAAC;AACpC,eAAe,IAAI,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { default as Tabs } from './Tabs.svelte';
2
+ export type { TabOption } from './Tabs.svelte';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/navigation/Tabs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,eAAe,CAAC;AAChD,YAAY,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1 @@
1
+ export { default as Tabs } from './Tabs.svelte';
@@ -0,0 +1,3 @@
1
+ export { Tabs } from './Tabs/index.js';
2
+ export type { TabOption } from './Tabs/index.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/navigation/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1 @@
1
+ export { Tabs } from './Tabs/index.js';