@aspect-ops/exon-ui 0.0.1 → 0.0.3

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 (178) hide show
  1. package/README.md +438 -0
  2. package/dist/components/ActionSheet/ActionSheet.svelte +270 -0
  3. package/dist/components/ActionSheet/ActionSheet.svelte.d.ts +12 -0
  4. package/dist/components/ActionSheet/ActionSheetItem.svelte +151 -0
  5. package/dist/components/ActionSheet/ActionSheetItem.svelte.d.ts +10 -0
  6. package/dist/components/ActionSheet/index.d.ts +3 -0
  7. package/dist/components/ActionSheet/index.js +2 -0
  8. package/dist/components/Alert/Alert.svelte +165 -0
  9. package/dist/components/Alert/Alert.svelte.d.ts +11 -0
  10. package/dist/components/Alert/index.d.ts +1 -0
  11. package/dist/components/Alert/index.js +1 -0
  12. package/dist/components/AspectRatio/AspectRatio.svelte +42 -0
  13. package/dist/components/AspectRatio/AspectRatio.svelte.d.ts +9 -0
  14. package/dist/components/AspectRatio/index.d.ts +1 -0
  15. package/dist/components/AspectRatio/index.js +1 -0
  16. package/dist/components/Avatar/Avatar.svelte +147 -0
  17. package/dist/components/Avatar/Avatar.svelte.d.ts +12 -0
  18. package/dist/components/Avatar/AvatarGroup.svelte +153 -0
  19. package/dist/components/Avatar/AvatarGroup.svelte.d.ts +12 -0
  20. package/dist/components/Avatar/index.d.ts +2 -0
  21. package/dist/components/Avatar/index.js +2 -0
  22. package/dist/components/BottomSheet/BottomSheet.svelte +230 -0
  23. package/dist/components/BottomSheet/BottomSheet.svelte.d.ts +7 -0
  24. package/dist/components/BottomSheet/BottomSheetBody.svelte +20 -0
  25. package/dist/components/BottomSheet/BottomSheetBody.svelte.d.ts +7 -0
  26. package/dist/components/BottomSheet/BottomSheetHeader.svelte +27 -0
  27. package/dist/components/BottomSheet/BottomSheetHeader.svelte.d.ts +7 -0
  28. package/dist/components/BottomSheet/index.d.ts +3 -0
  29. package/dist/components/BottomSheet/index.js +3 -0
  30. package/dist/components/Box/Box.svelte +41 -0
  31. package/dist/components/Box/Box.svelte.d.ts +7 -0
  32. package/dist/components/Box/index.d.ts +1 -0
  33. package/dist/components/Box/index.js +1 -0
  34. package/dist/components/Card/Card.svelte +95 -0
  35. package/dist/components/Card/Card.svelte.d.ts +10 -0
  36. package/dist/components/Card/CardBody.svelte +32 -0
  37. package/dist/components/Card/CardBody.svelte.d.ts +7 -0
  38. package/dist/components/Card/CardFooter.svelte +34 -0
  39. package/dist/components/Card/CardFooter.svelte.d.ts +7 -0
  40. package/dist/components/Card/CardHeader.svelte +67 -0
  41. package/dist/components/Card/CardHeader.svelte.d.ts +9 -0
  42. package/dist/components/Card/index.d.ts +4 -0
  43. package/dist/components/Card/index.js +4 -0
  44. package/dist/components/Center/Center.svelte +28 -0
  45. package/dist/components/Center/Center.svelte.d.ts +8 -0
  46. package/dist/components/Center/index.d.ts +1 -0
  47. package/dist/components/Center/index.js +1 -0
  48. package/dist/components/Container/Container.svelte +58 -0
  49. package/dist/components/Container/Container.svelte.d.ts +10 -0
  50. package/dist/components/Container/index.d.ts +1 -0
  51. package/dist/components/Container/index.js +1 -0
  52. package/dist/components/Divider/Divider.svelte +38 -0
  53. package/dist/components/Divider/Divider.svelte.d.ts +9 -0
  54. package/dist/components/Divider/index.d.ts +1 -0
  55. package/dist/components/Divider/index.js +1 -0
  56. package/dist/components/EmptyState/EmptyState.svelte +164 -0
  57. package/dist/components/EmptyState/EmptyState.svelte.d.ts +12 -0
  58. package/dist/components/EmptyState/index.d.ts +1 -0
  59. package/dist/components/EmptyState/index.js +1 -0
  60. package/dist/components/FAB/FAB.svelte +242 -0
  61. package/dist/components/FAB/FAB.svelte.d.ts +9 -0
  62. package/dist/components/FAB/FABGroup.svelte +449 -0
  63. package/dist/components/FAB/FABGroup.svelte.d.ts +9 -0
  64. package/dist/components/FAB/index.d.ts +3 -0
  65. package/dist/components/FAB/index.js +2 -0
  66. package/dist/components/Grid/Grid.svelte +136 -0
  67. package/dist/components/Grid/Grid.svelte.d.ts +12 -0
  68. package/dist/components/Grid/GridItem.svelte +21 -0
  69. package/dist/components/Grid/GridItem.svelte.d.ts +7 -0
  70. package/dist/components/Grid/index.d.ts +2 -0
  71. package/dist/components/Grid/index.js +2 -0
  72. package/dist/components/List/List.svelte +42 -0
  73. package/dist/components/List/List.svelte.d.ts +18 -0
  74. package/dist/components/List/ListItem.svelte +139 -0
  75. package/dist/components/List/ListItem.svelte.d.ts +36 -0
  76. package/dist/components/List/index.d.ts +2 -0
  77. package/dist/components/List/index.js +2 -0
  78. package/dist/components/Modal/Modal.svelte +204 -0
  79. package/dist/components/Modal/Modal.svelte.d.ts +7 -0
  80. package/dist/components/Modal/ModalBody.svelte +50 -0
  81. package/dist/components/Modal/ModalBody.svelte.d.ts +7 -0
  82. package/dist/components/Modal/ModalFooter.svelte +37 -0
  83. package/dist/components/Modal/ModalFooter.svelte.d.ts +7 -0
  84. package/dist/components/Modal/ModalHeader.svelte +73 -0
  85. package/dist/components/Modal/ModalHeader.svelte.d.ts +7 -0
  86. package/dist/components/Modal/index.d.ts +4 -0
  87. package/dist/components/Modal/index.js +4 -0
  88. package/dist/components/Popover/Popover.svelte +14 -0
  89. package/dist/components/Popover/Popover.svelte.d.ts +7 -0
  90. package/dist/components/Popover/PopoverContent.svelte +63 -0
  91. package/dist/components/Popover/PopoverContent.svelte.d.ts +7 -0
  92. package/dist/components/Popover/PopoverTrigger.svelte +14 -0
  93. package/dist/components/Popover/PopoverTrigger.svelte.d.ts +7 -0
  94. package/dist/components/Popover/index.d.ts +3 -0
  95. package/dist/components/Popover/index.js +3 -0
  96. package/dist/components/Progress/ProgressBar.svelte +86 -0
  97. package/dist/components/Progress/ProgressBar.svelte.d.ts +11 -0
  98. package/dist/components/Progress/ProgressCircle.svelte +134 -0
  99. package/dist/components/Progress/ProgressCircle.svelte.d.ts +12 -0
  100. package/dist/components/Progress/Spinner.svelte +68 -0
  101. package/dist/components/Progress/Spinner.svelte.d.ts +8 -0
  102. package/dist/components/Progress/index.d.ts +3 -0
  103. package/dist/components/Progress/index.js +3 -0
  104. package/dist/components/PullToRefresh/PullToRefresh.svelte +304 -0
  105. package/dist/components/PullToRefresh/PullToRefresh.svelte.d.ts +20 -0
  106. package/dist/components/PullToRefresh/index.d.ts +1 -0
  107. package/dist/components/PullToRefresh/index.js +1 -0
  108. package/dist/components/SafeArea/SafeArea.svelte +33 -0
  109. package/dist/components/SafeArea/SafeArea.svelte.d.ts +7 -0
  110. package/dist/components/Select/Select.svelte +55 -12
  111. package/dist/components/Skeleton/Skeleton.svelte +59 -0
  112. package/dist/components/Skeleton/Skeleton.svelte.d.ts +10 -0
  113. package/dist/components/Skeleton/index.d.ts +1 -0
  114. package/dist/components/Skeleton/index.js +1 -0
  115. package/dist/components/Spacer/Spacer.svelte +56 -0
  116. package/dist/components/Spacer/Spacer.svelte.d.ts +6 -0
  117. package/dist/components/Spacer/index.d.ts +1 -0
  118. package/dist/components/Spacer/index.js +1 -0
  119. package/dist/components/Stack/Stack.svelte +117 -0
  120. package/dist/components/Stack/Stack.svelte.d.ts +13 -0
  121. package/dist/components/Stack/index.d.ts +1 -0
  122. package/dist/components/Stack/index.js +1 -0
  123. package/dist/components/SwipeActions/SwipeAction.svelte +43 -0
  124. package/dist/components/SwipeActions/SwipeAction.svelte.d.ts +8 -0
  125. package/dist/components/SwipeActions/SwipeActions.svelte +193 -0
  126. package/dist/components/SwipeActions/SwipeActions.svelte.d.ts +9 -0
  127. package/dist/components/SwipeActions/index.d.ts +2 -0
  128. package/dist/components/SwipeActions/index.js +2 -0
  129. package/dist/components/Switch/Switch.svelte +29 -9
  130. package/dist/components/Table/Table.svelte +175 -0
  131. package/dist/components/Table/Table.svelte.d.ts +38 -0
  132. package/dist/components/Table/TableBody.svelte +26 -0
  133. package/dist/components/Table/TableBody.svelte.d.ts +13 -0
  134. package/dist/components/Table/TableCell.svelte +85 -0
  135. package/dist/components/Table/TableCell.svelte.d.ts +28 -0
  136. package/dist/components/Table/TableHead.svelte +36 -0
  137. package/dist/components/Table/TableHead.svelte.d.ts +13 -0
  138. package/dist/components/Table/TableHeader.svelte +217 -0
  139. package/dist/components/Table/TableHeader.svelte.d.ts +32 -0
  140. package/dist/components/Table/TableRow.svelte +92 -0
  141. package/dist/components/Table/TableRow.svelte.d.ts +28 -0
  142. package/dist/components/Table/index.d.ts +6 -0
  143. package/dist/components/Table/index.js +6 -0
  144. package/dist/components/Tag/Tag.svelte +189 -0
  145. package/dist/components/Tag/Tag.svelte.d.ts +13 -0
  146. package/dist/components/Tag/index.d.ts +1 -0
  147. package/dist/components/Tag/index.js +1 -0
  148. package/dist/components/Toast/Toast.svelte +241 -0
  149. package/dist/components/Toast/Toast.svelte.d.ts +18 -0
  150. package/dist/components/Toast/ToastContainer.svelte +110 -0
  151. package/dist/components/Toast/ToastContainer.svelte.d.ts +8 -0
  152. package/dist/components/Toast/index.d.ts +3 -0
  153. package/dist/components/Toast/index.js +3 -0
  154. package/dist/components/Toast/toast.d.ts +13 -0
  155. package/dist/components/Toast/toast.js +55 -0
  156. package/dist/components/Tooltip/Tooltip.svelte +71 -0
  157. package/dist/components/Tooltip/Tooltip.svelte.d.ts +7 -0
  158. package/dist/components/Tooltip/index.d.ts +2 -0
  159. package/dist/components/Tooltip/index.js +1 -0
  160. package/dist/index.d.ts +29 -1
  161. package/dist/index.js +32 -0
  162. package/dist/styles/tokens.css +5 -0
  163. package/dist/types/data-display.d.ts +93 -0
  164. package/dist/types/data-display.js +1 -0
  165. package/dist/types/feedback.d.ts +92 -0
  166. package/dist/types/feedback.js +1 -0
  167. package/dist/types/index.d.ts +4 -0
  168. package/dist/types/layout.d.ts +57 -0
  169. package/dist/types/layout.js +1 -0
  170. package/dist/types/mobile.d.ts +91 -0
  171. package/dist/types/mobile.js +1 -0
  172. package/dist/utils/gestures.d.ts +219 -0
  173. package/dist/utils/gestures.js +492 -0
  174. package/dist/utils/haptics.d.ts +89 -0
  175. package/dist/utils/haptics.js +198 -0
  176. package/dist/utils/platform.d.ts +47 -0
  177. package/dist/utils/platform.js +156 -0
  178. package/package.json +1 -1
@@ -0,0 +1,26 @@
1
+ <script lang="ts">
2
+ interface Props {
3
+ /**
4
+ * Additional CSS classes
5
+ */
6
+ class?: string;
7
+ /**
8
+ * Table rows content
9
+ */
10
+ children?: import('svelte').Snippet;
11
+ }
12
+
13
+ let { class: className = '', children }: Props = $props();
14
+ </script>
15
+
16
+ <tbody class="table-body {className}">
17
+ {#if children}
18
+ {@render children()}
19
+ {/if}
20
+ </tbody>
21
+
22
+ <style>
23
+ .table-body {
24
+ font-family: inherit;
25
+ }
26
+ </style>
@@ -0,0 +1,13 @@
1
+ interface Props {
2
+ /**
3
+ * Additional CSS classes
4
+ */
5
+ class?: string;
6
+ /**
7
+ * Table rows content
8
+ */
9
+ children?: import('svelte').Snippet;
10
+ }
11
+ declare const TableBody: import("svelte").Component<Props, {}, "">;
12
+ type TableBody = ReturnType<typeof TableBody>;
13
+ export default TableBody;
@@ -0,0 +1,85 @@
1
+ <script lang="ts">
2
+ interface Props {
3
+ /**
4
+ * Text alignment
5
+ * @default 'left'
6
+ */
7
+ align?: 'left' | 'center' | 'right';
8
+ /**
9
+ * Truncate long text with ellipsis
10
+ * @default false
11
+ */
12
+ truncate?: boolean;
13
+ /**
14
+ * Prevent text wrapping
15
+ * @default false
16
+ */
17
+ nowrap?: boolean;
18
+ /**
19
+ * Additional CSS classes
20
+ */
21
+ class?: string;
22
+ /**
23
+ * Cell content
24
+ */
25
+ children?: import('svelte').Snippet;
26
+ }
27
+
28
+ let {
29
+ align = 'left',
30
+ truncate = false,
31
+ nowrap = false,
32
+ class: className = '',
33
+ children
34
+ }: Props = $props();
35
+
36
+ // Build modifier classes
37
+ let modifierClasses = $derived(
38
+ [
39
+ align !== 'left' ? `table-cell--align-${align}` : '',
40
+ truncate ? 'table-cell--truncate' : '',
41
+ nowrap ? 'table-cell--nowrap' : ''
42
+ ]
43
+ .filter(Boolean)
44
+ .join(' ')
45
+ );
46
+ </script>
47
+
48
+ <td class="table-cell {modifierClasses} {className}">
49
+ {#if children}
50
+ {@render children()}
51
+ {/if}
52
+ </td>
53
+
54
+ <style>
55
+ .table-cell {
56
+ padding: 0.75rem; /* 12px */
57
+ font-family: inherit;
58
+ font-size: 0.875rem; /* 14px */
59
+ color: var(--color-text, var(--gray-12, inherit));
60
+ border-bottom: 1px solid var(--color-border, var(--gray-6, #e5e7eb));
61
+ vertical-align: middle;
62
+ }
63
+
64
+ /* Alignment modifiers */
65
+ .table-cell--align-center {
66
+ text-align: center;
67
+ }
68
+
69
+ .table-cell--align-right {
70
+ text-align: right;
71
+ }
72
+
73
+ /* Truncate modifier - truncate long text with ellipsis */
74
+ .table-cell--truncate {
75
+ max-width: 12.5rem; /* 200px */
76
+ overflow: hidden;
77
+ text-overflow: ellipsis;
78
+ white-space: nowrap;
79
+ }
80
+
81
+ /* Nowrap modifier - prevent text wrapping */
82
+ .table-cell--nowrap {
83
+ white-space: nowrap;
84
+ }
85
+ </style>
@@ -0,0 +1,28 @@
1
+ interface Props {
2
+ /**
3
+ * Text alignment
4
+ * @default 'left'
5
+ */
6
+ align?: 'left' | 'center' | 'right';
7
+ /**
8
+ * Truncate long text with ellipsis
9
+ * @default false
10
+ */
11
+ truncate?: boolean;
12
+ /**
13
+ * Prevent text wrapping
14
+ * @default false
15
+ */
16
+ nowrap?: boolean;
17
+ /**
18
+ * Additional CSS classes
19
+ */
20
+ class?: string;
21
+ /**
22
+ * Cell content
23
+ */
24
+ children?: import('svelte').Snippet;
25
+ }
26
+ declare const TableCell: import("svelte").Component<Props, {}, "">;
27
+ type TableCell = ReturnType<typeof TableCell>;
28
+ export default TableCell;
@@ -0,0 +1,36 @@
1
+ <script lang="ts">
2
+ interface Props {
3
+ /**
4
+ * Additional CSS classes
5
+ */
6
+ class?: string;
7
+ /**
8
+ * Header rows content (TableHeader components)
9
+ */
10
+ children?: import('svelte').Snippet;
11
+ }
12
+
13
+ let { class: className = '', children }: Props = $props();
14
+ </script>
15
+
16
+ <thead class="table-head {className}">
17
+ {#if children}
18
+ {@render children()}
19
+ {/if}
20
+ </thead>
21
+
22
+ <style>
23
+ .table-head {
24
+ font-family: inherit;
25
+ }
26
+
27
+ .table-head :global(th) {
28
+ font-weight: 600;
29
+ color: var(--color-text-muted, var(--gray-11, inherit));
30
+ background-color: var(--color-bg-muted, var(--gray-2, #f9fafb));
31
+ border-bottom: 2px solid var(--color-border, var(--gray-6, #e5e7eb));
32
+ padding: 0.75rem; /* 12px */
33
+ text-align: left;
34
+ vertical-align: middle;
35
+ }
36
+ </style>
@@ -0,0 +1,13 @@
1
+ interface Props {
2
+ /**
3
+ * Additional CSS classes
4
+ */
5
+ class?: string;
6
+ /**
7
+ * Header rows content (TableHeader components)
8
+ */
9
+ children?: import('svelte').Snippet;
10
+ }
11
+ declare const TableHead: import("svelte").Component<Props, {}, "">;
12
+ type TableHead = ReturnType<typeof TableHead>;
13
+ export default TableHead;
@@ -0,0 +1,217 @@
1
+ <script lang="ts">
2
+ interface Props {
3
+ /**
4
+ * Enable sortable functionality with click/keyboard interaction
5
+ * @default false
6
+ */
7
+ sortable?: boolean;
8
+ /**
9
+ * Current sort direction (when sortable is true)
10
+ * @default null
11
+ */
12
+ sortDirection?: 'asc' | 'desc' | null;
13
+ /**
14
+ * Callback fired when sort is triggered (click or keyboard)
15
+ */
16
+ onsort?: () => void;
17
+ /**
18
+ * Text alignment
19
+ * @default 'left'
20
+ */
21
+ align?: 'left' | 'center' | 'right';
22
+ /**
23
+ * Additional CSS classes
24
+ */
25
+ class?: string;
26
+ /**
27
+ * Header cell content
28
+ */
29
+ children?: import('svelte').Snippet;
30
+ }
31
+
32
+ let {
33
+ sortable = false,
34
+ sortDirection = null,
35
+ onsort,
36
+ align = 'left',
37
+ class: className = '',
38
+ children
39
+ }: Props = $props();
40
+
41
+ function handleClick() {
42
+ if (sortable && onsort) {
43
+ onsort();
44
+ }
45
+ }
46
+
47
+ function handleKeydown(event: KeyboardEvent) {
48
+ if (sortable && (event.key === 'Enter' || event.key === ' ')) {
49
+ event.preventDefault();
50
+ if (onsort) {
51
+ onsort();
52
+ }
53
+ }
54
+ }
55
+
56
+ // Build modifier classes
57
+ let modifierClasses = $derived(
58
+ [
59
+ sortable ? 'table-header--sortable' : '',
60
+ sortDirection ? `table-header--sorted-${sortDirection}` : '',
61
+ align !== 'left' ? `table-header--align-${align}` : ''
62
+ ]
63
+ .filter(Boolean)
64
+ .join(' ')
65
+ );
66
+ </script>
67
+
68
+ <th
69
+ scope="col"
70
+ class="table-header {modifierClasses} {className}"
71
+ role={sortable ? 'button' : undefined}
72
+ tabindex={sortable ? 0 : undefined}
73
+ aria-sort={sortDirection === 'asc'
74
+ ? 'ascending'
75
+ : sortDirection === 'desc'
76
+ ? 'descending'
77
+ : undefined}
78
+ onclick={handleClick}
79
+ onkeydown={handleKeydown}
80
+ >
81
+ <div class="table-header__content">
82
+ {#if children}
83
+ {@render children()}
84
+ {/if}
85
+ {#if sortable}
86
+ <span class="table-header__sort-indicator" aria-hidden="true">
87
+ <svg
88
+ class="table-header__sort-icon table-header__sort-icon--asc"
89
+ width="12"
90
+ height="12"
91
+ viewBox="0 0 12 12"
92
+ fill="none"
93
+ xmlns="http://www.w3.org/2000/svg"
94
+ >
95
+ <path d="M6 3L9 7H3L6 3Z" fill="currentColor" />
96
+ </svg>
97
+ <svg
98
+ class="table-header__sort-icon table-header__sort-icon--desc"
99
+ width="12"
100
+ height="12"
101
+ viewBox="0 0 12 12"
102
+ fill="none"
103
+ xmlns="http://www.w3.org/2000/svg"
104
+ >
105
+ <path d="M6 9L3 5H9L6 9Z" fill="currentColor" />
106
+ </svg>
107
+ </span>
108
+ {/if}
109
+ </div>
110
+ </th>
111
+
112
+ <style>
113
+ .table-header {
114
+ font-family: inherit;
115
+ position: relative;
116
+ user-select: none;
117
+ }
118
+
119
+ .table-header__content {
120
+ display: flex;
121
+ align-items: center;
122
+ gap: 0.5rem; /* 8px */
123
+ min-height: 2.75rem; /* 44px minimum touch target */
124
+ }
125
+
126
+ /* Sortable styles */
127
+ .table-header--sortable {
128
+ cursor: pointer;
129
+ transition: background-color var(--transition-fast, 150ms ease);
130
+ }
131
+
132
+ .table-header--sortable:hover {
133
+ background-color: var(--color-bg-hover, rgba(0, 0, 0, 0.04));
134
+ }
135
+
136
+ .table-header--sortable:active {
137
+ background-color: var(--color-bg-active, rgba(0, 0, 0, 0.08));
138
+ }
139
+
140
+ .table-header--sortable:focus-visible {
141
+ outline: 2px solid var(--color-primary, #3b82f6);
142
+ outline-offset: -2px;
143
+ }
144
+
145
+ /* Sort indicator */
146
+ .table-header__sort-indicator {
147
+ display: flex;
148
+ flex-direction: column;
149
+ gap: 0.0625rem; /* 1px */
150
+ flex-shrink: 0;
151
+ opacity: 0.4;
152
+ transition: opacity var(--transition-fast, 150ms ease);
153
+ }
154
+
155
+ .table-header--sortable:hover .table-header__sort-indicator {
156
+ opacity: 0.6;
157
+ }
158
+
159
+ .table-header__sort-icon {
160
+ display: block;
161
+ width: 0.75rem; /* 12px */
162
+ height: 0.75rem; /* 12px */
163
+ color: currentColor;
164
+ transition: opacity var(--transition-fast, 150ms ease);
165
+ }
166
+
167
+ /* Default state - both arrows visible but dimmed */
168
+ .table-header__sort-icon--asc,
169
+ .table-header__sort-icon--desc {
170
+ opacity: 0.5;
171
+ }
172
+
173
+ /* Ascending state - highlight up arrow */
174
+ .table-header--sorted-asc .table-header__sort-indicator {
175
+ opacity: 1;
176
+ }
177
+
178
+ .table-header--sorted-asc .table-header__sort-icon--asc {
179
+ opacity: 1;
180
+ color: var(--color-primary, #3b82f6);
181
+ }
182
+
183
+ .table-header--sorted-asc .table-header__sort-icon--desc {
184
+ opacity: 0.2;
185
+ }
186
+
187
+ /* Descending state - highlight down arrow */
188
+ .table-header--sorted-desc .table-header__sort-indicator {
189
+ opacity: 1;
190
+ }
191
+
192
+ .table-header--sorted-desc .table-header__sort-icon--desc {
193
+ opacity: 1;
194
+ color: var(--color-primary, #3b82f6);
195
+ }
196
+
197
+ .table-header--sorted-desc .table-header__sort-icon--asc {
198
+ opacity: 0.2;
199
+ }
200
+
201
+ /* Alignment modifiers */
202
+ .table-header--align-center {
203
+ text-align: center;
204
+ }
205
+
206
+ .table-header--align-center .table-header__content {
207
+ justify-content: center;
208
+ }
209
+
210
+ .table-header--align-right {
211
+ text-align: right;
212
+ }
213
+
214
+ .table-header--align-right .table-header__content {
215
+ justify-content: flex-end;
216
+ }
217
+ </style>
@@ -0,0 +1,32 @@
1
+ interface Props {
2
+ /**
3
+ * Enable sortable functionality with click/keyboard interaction
4
+ * @default false
5
+ */
6
+ sortable?: boolean;
7
+ /**
8
+ * Current sort direction (when sortable is true)
9
+ * @default null
10
+ */
11
+ sortDirection?: 'asc' | 'desc' | null;
12
+ /**
13
+ * Callback fired when sort is triggered (click or keyboard)
14
+ */
15
+ onsort?: () => void;
16
+ /**
17
+ * Text alignment
18
+ * @default 'left'
19
+ */
20
+ align?: 'left' | 'center' | 'right';
21
+ /**
22
+ * Additional CSS classes
23
+ */
24
+ class?: string;
25
+ /**
26
+ * Header cell content
27
+ */
28
+ children?: import('svelte').Snippet;
29
+ }
30
+ declare const TableHeader: import("svelte").Component<Props, {}, "">;
31
+ type TableHeader = ReturnType<typeof TableHeader>;
32
+ export default TableHeader;
@@ -0,0 +1,92 @@
1
+ <script lang="ts">
2
+ interface Props {
3
+ /**
4
+ * Marks the row as selected
5
+ * @default false
6
+ */
7
+ selected?: boolean;
8
+ /**
9
+ * Makes the row interactive with hover/active states
10
+ * @default false
11
+ */
12
+ clickable?: boolean;
13
+ /**
14
+ * Disables the row
15
+ * @default false
16
+ */
17
+ disabled?: boolean;
18
+ /**
19
+ * Additional CSS classes
20
+ */
21
+ class?: string;
22
+ /**
23
+ * Table cells content
24
+ */
25
+ children?: import('svelte').Snippet;
26
+ }
27
+
28
+ let {
29
+ selected = false,
30
+ clickable = false,
31
+ disabled = false,
32
+ class: className = '',
33
+ children
34
+ }: Props = $props();
35
+ </script>
36
+
37
+ <tr
38
+ class="table-row {selected ? 'table-row--selected' : ''} {clickable
39
+ ? 'table-row--clickable'
40
+ : ''} {disabled ? 'table-row--disabled' : ''} {className}"
41
+ role={clickable ? 'button' : undefined}
42
+ aria-selected={selected ? 'true' : undefined}
43
+ aria-disabled={disabled ? 'true' : undefined}
44
+ tabindex={clickable && !disabled ? 0 : undefined}
45
+ >
46
+ {#if children}
47
+ {@render children()}
48
+ {/if}
49
+ </tr>
50
+
51
+ <style>
52
+ .table-row {
53
+ font-family: inherit;
54
+ transition: background-color var(--transition-fast, 150ms ease);
55
+ }
56
+
57
+ /* Selected state */
58
+ .table-row--selected {
59
+ background-color: var(--color-primary-bg, rgba(59, 130, 246, 0.1));
60
+ }
61
+
62
+ /* Clickable state */
63
+ .table-row--clickable {
64
+ cursor: pointer;
65
+ user-select: none;
66
+ }
67
+
68
+ .table-row--clickable:hover:not(.table-row--disabled) {
69
+ background-color: var(--color-bg-hover, rgba(0, 0, 0, 0.04));
70
+ }
71
+
72
+ .table-row--clickable:active:not(.table-row--disabled) {
73
+ background-color: var(--color-bg-active, rgba(0, 0, 0, 0.08));
74
+ }
75
+
76
+ .table-row--clickable:focus-visible {
77
+ outline: 2px solid var(--color-primary, #3b82f6);
78
+ outline-offset: -2px;
79
+ }
80
+
81
+ /* Selected + Clickable hover state */
82
+ .table-row--selected.table-row--clickable:hover:not(.table-row--disabled) {
83
+ background-color: var(--color-primary-bg-hover, rgba(59, 130, 246, 0.15));
84
+ }
85
+
86
+ /* Disabled state */
87
+ .table-row--disabled {
88
+ opacity: 0.5;
89
+ pointer-events: none;
90
+ cursor: not-allowed;
91
+ }
92
+ </style>
@@ -0,0 +1,28 @@
1
+ interface Props {
2
+ /**
3
+ * Marks the row as selected
4
+ * @default false
5
+ */
6
+ selected?: boolean;
7
+ /**
8
+ * Makes the row interactive with hover/active states
9
+ * @default false
10
+ */
11
+ clickable?: boolean;
12
+ /**
13
+ * Disables the row
14
+ * @default false
15
+ */
16
+ disabled?: boolean;
17
+ /**
18
+ * Additional CSS classes
19
+ */
20
+ class?: string;
21
+ /**
22
+ * Table cells content
23
+ */
24
+ children?: import('svelte').Snippet;
25
+ }
26
+ declare const TableRow: import("svelte").Component<Props, {}, "">;
27
+ type TableRow = ReturnType<typeof TableRow>;
28
+ export default TableRow;
@@ -0,0 +1,6 @@
1
+ export { default as Table } from './Table.svelte';
2
+ export { default as TableHead } from './TableHead.svelte';
3
+ export { default as TableHeader } from './TableHeader.svelte';
4
+ export { default as TableBody } from './TableBody.svelte';
5
+ export { default as TableRow } from './TableRow.svelte';
6
+ export { default as TableCell } from './TableCell.svelte';
@@ -0,0 +1,6 @@
1
+ export { default as Table } from './Table.svelte';
2
+ export { default as TableHead } from './TableHead.svelte';
3
+ export { default as TableHeader } from './TableHeader.svelte';
4
+ export { default as TableBody } from './TableBody.svelte';
5
+ export { default as TableRow } from './TableRow.svelte';
6
+ export { default as TableCell } from './TableCell.svelte';