@salmexio/ui 0.1.1 → 0.2.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 (45) hide show
  1. package/dist/dialogs/Modal/Modal.svelte +140 -140
  2. package/dist/dialogs/Modal/Modal.svelte.d.ts.map +1 -1
  3. package/dist/feedback/Alert/Alert.svelte +63 -63
  4. package/dist/feedback/Alert/Alert.svelte.d.ts.map +1 -1
  5. package/dist/feedback/Spinner/Spinner.svelte +55 -55
  6. package/dist/feedback/Spinner/Spinner.svelte.d.ts.map +1 -1
  7. package/dist/forms/Checkbox/Checkbox.svelte +64 -64
  8. package/dist/forms/Checkbox/Checkbox.svelte.d.ts.map +1 -1
  9. package/dist/forms/TextInput/TextInput.svelte +141 -141
  10. package/dist/forms/TextInput/TextInput.svelte.d.ts.map +1 -1
  11. package/dist/index.d.ts +1 -0
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +1 -0
  14. package/dist/layout/Card/Card.svelte +59 -59
  15. package/dist/layout/Card/Card.svelte.d.ts.map +1 -1
  16. package/dist/layout/Container/Container.svelte +34 -34
  17. package/dist/layout/Container/Container.svelte.d.ts.map +1 -1
  18. package/dist/navigation/Tabs/Tabs.svelte +100 -101
  19. package/dist/navigation/Tabs/Tabs.svelte.d.ts.map +1 -1
  20. package/dist/primitives/Badge/Badge.svelte +35 -42
  21. package/dist/primitives/Badge/Badge.svelte.d.ts.map +1 -1
  22. package/dist/primitives/Button/Button.svelte +47 -47
  23. package/dist/primitives/Button/Button.svelte.d.ts.map +1 -1
  24. package/dist/routes/+layout.svelte +1 -1
  25. package/dist/styles/tokens.css +92 -86
  26. package/dist/utils/keyboard.js +3 -3
  27. package/dist/windowing/Window/Window.svelte +602 -0
  28. package/dist/windowing/Window/Window.svelte.d.ts +65 -0
  29. package/dist/windowing/Window/Window.svelte.d.ts.map +1 -0
  30. package/dist/windowing/Window/index.d.ts +2 -0
  31. package/dist/windowing/Window/index.d.ts.map +1 -0
  32. package/dist/windowing/Window/index.js +1 -0
  33. package/dist/windowing/WindowManager/WindowManager.svelte +410 -0
  34. package/dist/windowing/WindowManager/WindowManager.svelte.d.ts +38 -0
  35. package/dist/windowing/WindowManager/WindowManager.svelte.d.ts.map +1 -0
  36. package/dist/windowing/WindowManager/index.d.ts +2 -0
  37. package/dist/windowing/WindowManager/index.d.ts.map +1 -0
  38. package/dist/windowing/WindowManager/index.js +1 -0
  39. package/dist/windowing/index.d.ts +5 -0
  40. package/dist/windowing/index.d.ts.map +1 -0
  41. package/dist/windowing/index.js +3 -0
  42. package/dist/windowing/windowStore.svelte.d.ts +49 -0
  43. package/dist/windowing/windowStore.svelte.d.ts.map +1 -0
  44. package/dist/windowing/windowStore.svelte.js +170 -0
  45. package/package.json +1 -1
@@ -5,40 +5,40 @@
5
5
  Sharp edges, no rounded corners; supports semantic elements.
6
6
  -->
7
7
  <script lang="ts">
8
- import type { Snippet } from 'svelte';
9
- import type { HTMLAttributes } from 'svelte/elements';
10
- import { cn } from '../../utils/cn.js';
11
-
12
- type ContainerSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'prose' | 'full';
13
- type ContainerPadding = 'none' | 'sm' | 'md' | 'lg' | 'xl';
14
-
15
- interface Props extends Omit<HTMLAttributes<HTMLDivElement>, 'class'> {
16
- size?: ContainerSize;
17
- paddingX?: ContainerPadding;
18
- paddingY?: ContainerPadding;
19
- padding?: ContainerPadding;
20
- centered?: boolean;
21
- as?: 'div' | 'main' | 'section' | 'article';
22
- id?: string;
23
- class?: string;
24
- children?: Snippet;
25
- }
26
-
27
- let {
28
- size = 'xl',
29
- paddingX,
30
- paddingY,
31
- padding = 'md',
32
- centered = true,
33
- as = 'div',
34
- id,
35
- class: className = '',
36
- children,
37
- ...restProps
38
- }: Props = $props();
39
-
40
- const resolvedPaddingX = $derived(paddingX ?? padding);
41
- const resolvedPaddingY = $derived(paddingY ?? 'none');
8
+ import type { Snippet } from 'svelte';
9
+ import type { HTMLAttributes } from 'svelte/elements';
10
+ import { cn } from '../../utils/cn.js';
11
+
12
+ type ContainerSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'prose' | 'full';
13
+ type ContainerPadding = 'none' | 'sm' | 'md' | 'lg' | 'xl';
14
+
15
+ interface Props extends Omit<HTMLAttributes<HTMLDivElement>, 'class'> {
16
+ size?: ContainerSize;
17
+ paddingX?: ContainerPadding;
18
+ paddingY?: ContainerPadding;
19
+ padding?: ContainerPadding;
20
+ centered?: boolean;
21
+ as?: 'div' | 'main' | 'section' | 'article';
22
+ id?: string;
23
+ class?: string;
24
+ children?: Snippet;
25
+ }
26
+
27
+ let {
28
+ size = 'xl',
29
+ paddingX,
30
+ paddingY,
31
+ padding = 'md',
32
+ centered = true,
33
+ as = 'div',
34
+ id,
35
+ class: className = '',
36
+ children,
37
+ ...restProps
38
+ }: Props = $props();
39
+
40
+ const resolvedPaddingX = $derived(paddingX ?? padding);
41
+ const resolvedPaddingY = $derived(paddingY ?? 'none');
42
42
  </script>
43
43
 
44
44
  <svelte:element
@@ -1 +1 @@
1
- {"version":3,"file":"Container.svelte.d.ts","sourceRoot":"","sources":["../../../src/layout/Container/Container.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAIrD,KAAK,aAAa,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,CAAC;AACjF,KAAK,gBAAgB,GAAG,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE3D,UAAU,KAAM,SAAQ,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IACpE,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,EAAE,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC;IAC5C,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;CACnB;AA4CF;;;;;GAKG;AACH,QAAA,MAAM,SAAS,2CAAwC,CAAC;AACxD,KAAK,SAAS,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC;AAC9C,eAAe,SAAS,CAAC"}
1
+ {"version":3,"file":"Container.svelte.d.ts","sourceRoot":"","sources":["../../../src/layout/Container/Container.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAItD,KAAK,aAAa,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,CAAC;AACjF,KAAK,gBAAgB,GAAG,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE3D,UAAU,KAAM,SAAQ,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IACpE,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,EAAE,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC;IAC5C,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;CACnB;AA4CD;;;;;GAKG;AACH,QAAA,MAAM,SAAS,2CAAwC,CAAC;AACxD,KAAK,SAAS,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC;AAC9C,eAAe,SAAS,CAAC"}
@@ -20,107 +20,106 @@
20
20
  </Tabs>
21
21
  -->
22
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
- }
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 = event.key === 'ArrowRight' || event.key === 'End' ? nextIndex + 1 : nextIndex - 1;
113
+ if (nextIndex >= tabs.length) nextIndex = 0;
114
+ if (nextIndex < 0) nextIndex = tabs.length - 1;
115
+ }
116
+
117
+ if (!tabs[nextIndex]?.disabled) {
118
+ activateTab(nextIndex);
119
+ const el = document.getElementById(getTabId(nextIndex));
120
+ el?.focus();
121
+ }
122
+ }
124
123
  </script>
125
124
 
126
125
  <div class={cn('salmex-tabs-root', className)} data-testid={testId} {id}>
@@ -1 +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"}
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;AAItC,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;AA8GD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,QAAA,MAAM,IAAI,2CAAwC,CAAC;AACnD,KAAK,IAAI,GAAG,UAAU,CAAC,OAAO,IAAI,CAAC,CAAC;AACpC,eAAe,IAAI,CAAC"}
@@ -9,48 +9,41 @@
9
9
  <Badge status="warning" size="lg" dot />
10
10
  -->
11
11
  <script lang="ts">
12
- import type { Snippet } from 'svelte';
13
- import { cn } from '../../utils/cn.js';
14
-
15
- type BadgeSize = 'sm' | 'md' | 'lg';
16
- type BadgeStatus =
17
- | 'neutral'
18
- | 'primary'
19
- | 'success'
20
- | 'warning'
21
- | 'error'
22
- | 'info'
23
- | 'outline';
24
-
25
- interface Props {
26
- /** Semantic status / variant */
27
- status?: BadgeStatus;
28
- /** Size */
29
- size?: BadgeSize;
30
- /** Pill shape (fully rounded) — we use minimal radius by default */
31
- pill?: boolean;
32
- /** Dot-only indicator (no text), use with aria-label for a11y */
33
- dot?: boolean;
34
- /** Optional icon before label */
35
- icon?: Snippet;
36
- /** Additional class names */
37
- class?: string;
38
- /** Badge content (ignored when dot) */
39
- children?: Snippet;
40
- /** Accessible label when dot (required when dot for a11y) */
41
- 'aria-label'?: string;
42
- }
43
-
44
- let {
45
- status = 'neutral',
46
- size = 'md',
47
- pill = false,
48
- dot = false,
49
- icon,
50
- class: className = '',
51
- children,
52
- 'aria-label': ariaLabel
53
- }: Props = $props();
12
+ import type { Snippet } from 'svelte';
13
+ import { cn } from '../../utils/cn.js';
14
+
15
+ type BadgeSize = 'sm' | 'md' | 'lg';
16
+ type BadgeStatus = 'neutral' | 'primary' | 'success' | 'warning' | 'error' | 'info' | 'outline';
17
+
18
+ interface Props {
19
+ /** Semantic status / variant */
20
+ status?: BadgeStatus;
21
+ /** Size */
22
+ size?: BadgeSize;
23
+ /** Pill shape (fully rounded) — we use minimal radius by default */
24
+ pill?: boolean;
25
+ /** Dot-only indicator (no text), use with aria-label for a11y */
26
+ dot?: boolean;
27
+ /** Optional icon before label */
28
+ icon?: Snippet;
29
+ /** Additional class names */
30
+ class?: string;
31
+ /** Badge content (ignored when dot) */
32
+ children?: Snippet;
33
+ /** Accessible label when dot (required when dot for a11y) */
34
+ 'aria-label'?: string;
35
+ }
36
+
37
+ let {
38
+ status = 'neutral',
39
+ size = 'md',
40
+ pill = false,
41
+ dot = false,
42
+ icon,
43
+ class: className = '',
44
+ children,
45
+ 'aria-label': ariaLabel
46
+ }: Props = $props();
54
47
  </script>
55
48
 
56
49
  {#if dot}
@@ -1 +1 @@
1
- {"version":3,"file":"Badge.svelte.d.ts","sourceRoot":"","sources":["../../../src/primitives/Badge/Badge.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAIrC,KAAK,SAAS,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AACpC,KAAK,WAAW,GACb,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,OAAO,GACP,MAAM,GACN,SAAS,CAAC;AAEb,UAAU,KAAK;IACd,gCAAgC;IAChC,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,WAAW;IACX,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,oEAAoE;IACpE,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,iEAAiE;IACjE,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,iCAAiC;IACjC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,6BAA6B;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,6DAA6D;IAC7D,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB;AAuDF;;;;;;;;;GASG;AACH,QAAA,MAAM,KAAK,2CAAwC,CAAC;AACpD,KAAK,KAAK,GAAG,UAAU,CAAC,OAAO,KAAK,CAAC,CAAC;AACtC,eAAe,KAAK,CAAC"}
1
+ {"version":3,"file":"Badge.svelte.d.ts","sourceRoot":"","sources":["../../../src/primitives/Badge/Badge.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAItC,KAAK,SAAS,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AACpC,KAAK,WAAW,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;AAEhG,UAAU,KAAK;IACd,gCAAgC;IAChC,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,WAAW;IACX,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,oEAAoE;IACpE,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,iEAAiE;IACjE,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,iCAAiC;IACjC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,6BAA6B;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,6DAA6D;IAC7D,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB;AAuDD;;;;;;;;;GASG;AACH,QAAA,MAAM,KAAK,2CAAwC,CAAC;AACpD,KAAK,KAAK,GAAG,UAAU,CAAC,OAAO,KAAK,CAAC,CAAC;AACtC,eAAe,KAAK,CAAC"}
@@ -16,53 +16,53 @@
16
16
  </Button>
17
17
  -->
18
18
  <script lang="ts">
19
- import type { Snippet } from 'svelte';
20
- import type { HTMLButtonAttributes } from 'svelte/elements';
21
- import { cn } from '../../utils/cn.js';
22
-
23
- type ButtonSize = 'sm' | 'md' | 'lg';
24
- type ButtonVariant = 'default' | 'primary' | 'flat';
25
-
26
- interface Props extends Omit<HTMLButtonAttributes, 'class'> {
27
- /** Visual variant of the button */
28
- variant?: ButtonVariant;
29
- /** Size of the button */
30
- size?: ButtonSize;
31
- /** Whether the button takes full width */
32
- fullWidth?: boolean;
33
- /** Icon to display on the left */
34
- iconLeft?: Snippet;
35
- /** Icon to display on the right */
36
- iconRight?: Snippet;
37
- /** Whether this is an icon-only button (requires aria-label) */
38
- iconOnly?: boolean;
39
- /** Additional CSS classes */
40
- class?: string;
41
- /** Button content */
42
- children?: Snippet;
43
- /** Test ID for e2e testing */
44
- testId?: string;
45
- /** Keyboard shortcut hint (e.g., "Ctrl+S") */
46
- shortcut?: string;
47
- }
48
-
49
- let {
50
- variant = 'default',
51
- size = 'md',
52
- fullWidth = false,
53
- disabled = false,
54
- type = 'button',
55
- iconLeft,
56
- iconRight,
57
- iconOnly = false,
58
- class: className = '',
59
- children,
60
- testId,
61
- shortcut,
62
- ...restProps
63
- }: Props = $props();
64
-
65
- const isDisabled = $derived(disabled);
19
+ import type { Snippet } from 'svelte';
20
+ import type { HTMLButtonAttributes } from 'svelte/elements';
21
+ import { cn } from '../../utils/cn.js';
22
+
23
+ type ButtonSize = 'sm' | 'md' | 'lg';
24
+ type ButtonVariant = 'default' | 'primary' | 'flat';
25
+
26
+ interface Props extends Omit<HTMLButtonAttributes, 'class'> {
27
+ /** Visual variant of the button */
28
+ variant?: ButtonVariant;
29
+ /** Size of the button */
30
+ size?: ButtonSize;
31
+ /** Whether the button takes full width */
32
+ fullWidth?: boolean;
33
+ /** Icon to display on the left */
34
+ iconLeft?: Snippet;
35
+ /** Icon to display on the right */
36
+ iconRight?: Snippet;
37
+ /** Whether this is an icon-only button (requires aria-label) */
38
+ iconOnly?: boolean;
39
+ /** Additional CSS classes */
40
+ class?: string;
41
+ /** Button content */
42
+ children?: Snippet;
43
+ /** Test ID for e2e testing */
44
+ testId?: string;
45
+ /** Keyboard shortcut hint (e.g., "Ctrl+S") */
46
+ shortcut?: string;
47
+ }
48
+
49
+ let {
50
+ variant = 'default',
51
+ size = 'md',
52
+ fullWidth = false,
53
+ disabled = false,
54
+ type = 'button',
55
+ iconLeft,
56
+ iconRight,
57
+ iconOnly = false,
58
+ class: className = '',
59
+ children,
60
+ testId,
61
+ shortcut,
62
+ ...restProps
63
+ }: Props = $props();
64
+
65
+ const isDisabled = $derived(disabled);
66
66
  </script>
67
67
 
68
68
  <button
@@ -1 +1 @@
1
- {"version":3,"file":"Button.svelte.d.ts","sourceRoot":"","sources":["../../../src/primitives/Button/Button.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAI3D,KAAK,UAAU,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AACrC,KAAK,aAAa,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;AAEpD,UAAU,KAAM,SAAQ,IAAI,CAAC,oBAAoB,EAAE,OAAO,CAAC;IAC1D,mCAAmC;IACnC,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,yBAAyB;IACzB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,0CAA0C;IAC1C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,kCAAkC;IAClC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,mCAAmC;IACnC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gEAAgE;IAChE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,6BAA6B;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,8BAA8B;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB;AAkEF;;;;;;;;;;;;;;;;GAgBG;AACH,QAAA,MAAM,MAAM,2CAAwC,CAAC;AACrD,KAAK,MAAM,GAAG,UAAU,CAAC,OAAO,MAAM,CAAC,CAAC;AACxC,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"Button.svelte.d.ts","sourceRoot":"","sources":["../../../src/primitives/Button/Button.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAI5D,KAAK,UAAU,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AACrC,KAAK,aAAa,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;AAEpD,UAAU,KAAM,SAAQ,IAAI,CAAC,oBAAoB,EAAE,OAAO,CAAC;IAC1D,mCAAmC;IACnC,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,yBAAyB;IACzB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,0CAA0C;IAC1C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,kCAAkC;IAClC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,mCAAmC;IACnC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gEAAgE;IAChE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,6BAA6B;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,8BAA8B;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB;AAkED;;;;;;;;;;;;;;;;GAgBG;AACH,QAAA,MAAM,MAAM,2CAAwC,CAAC;AACrD,KAAK,MAAM,GAAG,UAAU,CAAC,OAAO,MAAM,CAAC,CAAC;AACxC,eAAe,MAAM,CAAC"}
@@ -1,5 +1,5 @@
1
1
  <script lang="ts">
2
- let { children } = $props();
2
+ let { children } = $props();
3
3
  </script>
4
4
 
5
5
  {@render children()}