@spaethtech/svelte-ui 0.1.10 → 0.3.1-dev.3.e16df24

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 (208) hide show
  1. package/README.md +180 -42
  2. package/dist/components/Alert.svelte +119 -0
  3. package/dist/components/Alert.svelte.d.ts +29 -0
  4. package/dist/components/Badge/Badge.svelte +142 -69
  5. package/dist/components/Badge/Badge.svelte.d.ts +26 -6
  6. package/dist/components/Badge/index.d.ts +1 -1
  7. package/dist/components/Badge/index.js +1 -1
  8. package/dist/components/Banner.svelte +133 -0
  9. package/dist/components/Banner.svelte.d.ts +31 -0
  10. package/dist/components/Button.svelte +240 -0
  11. package/dist/components/Button.svelte.d.ts +33 -0
  12. package/dist/components/ButtonDropdown.svelte +145 -0
  13. package/dist/components/ButtonDropdown.svelte.d.ts +31 -0
  14. package/dist/components/Calendar.svelte +259 -0
  15. package/dist/components/Calendar.svelte.d.ts +27 -0
  16. package/dist/components/Card.svelte +78 -0
  17. package/dist/components/Card.svelte.d.ts +17 -0
  18. package/dist/components/CardBody.svelte +41 -0
  19. package/dist/components/CardBody.svelte.d.ts +17 -0
  20. package/dist/components/CardFooter.svelte +49 -0
  21. package/dist/components/CardFooter.svelte.d.ts +16 -0
  22. package/dist/components/CardHeader.svelte +49 -0
  23. package/dist/components/CardHeader.svelte.d.ts +16 -0
  24. package/dist/components/Checkbox.svelte +131 -0
  25. package/dist/components/Checkbox.svelte.d.ts +16 -0
  26. package/dist/components/DataTable.svelte +518 -0
  27. package/dist/components/DataTable.svelte.d.ts +74 -0
  28. package/dist/components/DatePicker.svelte +312 -0
  29. package/dist/components/DatePicker.svelte.d.ts +32 -0
  30. package/dist/components/DateTimeInput.svelte +93 -0
  31. package/dist/components/DateTimeInput.svelte.d.ts +20 -0
  32. package/dist/components/Dialog.svelte +132 -0
  33. package/dist/components/Dialog.svelte.d.ts +24 -0
  34. package/dist/components/{EmailInput/EmailInput.svelte → EmailInput.svelte} +17 -8
  35. package/dist/components/EmailInput.svelte.d.ts +21 -0
  36. package/dist/components/Input.svelte +369 -0
  37. package/dist/components/Input.svelte.d.ts +35 -0
  38. package/dist/components/{List/List.svelte → List.svelte} +194 -133
  39. package/dist/components/{List/List.svelte.d.ts → List.svelte.d.ts} +9 -1
  40. package/dist/components/Menu.svelte +117 -0
  41. package/dist/components/Menu.svelte.d.ts +20 -0
  42. package/dist/components/NotesEditor.svelte +127 -0
  43. package/dist/components/NotesEditor.svelte.d.ts +17 -0
  44. package/dist/components/{NumberInput/NumberInput.svelte → NumberInput.svelte} +146 -105
  45. package/dist/components/{NumberInput/NumberInput.svelte.d.ts → NumberInput.svelte.d.ts} +11 -4
  46. package/dist/components/PasswordInput.svelte +52 -0
  47. package/dist/components/PasswordInput.svelte.d.ts +20 -0
  48. package/dist/components/Popup.svelte +140 -0
  49. package/dist/components/Popup.svelte.d.ts +31 -0
  50. package/dist/components/Query.svelte +284 -0
  51. package/dist/components/Query.svelte.d.ts +15 -0
  52. package/dist/components/{Rating/Rating.svelte → Rating.svelte} +19 -10
  53. package/dist/components/Rating.svelte.d.ts +13 -0
  54. package/dist/components/{SearchInput/SearchInput.svelte → SearchInput.svelte} +19 -8
  55. package/dist/components/{SearchInput/SearchInput.svelte.d.ts → SearchInput.svelte.d.ts} +9 -2
  56. package/dist/components/{Select/Select.svelte → Select.svelte} +48 -76
  57. package/dist/components/{Select/Select.svelte.d.ts → Select.svelte.d.ts} +11 -1
  58. package/dist/components/SideBarMenu/SideBarMenu.svelte +724 -0
  59. package/dist/components/SideBarMenu/SideBarMenu.svelte.d.ts +109 -0
  60. package/dist/components/SideBarMenu/index.d.ts +2 -0
  61. package/dist/components/SideBarMenu/index.js +1 -0
  62. package/dist/components/TabStrip/TabStrip.svelte +384 -0
  63. package/dist/components/TabStrip/TabStrip.svelte.d.ts +50 -0
  64. package/dist/components/TabStrip/index.d.ts +3 -0
  65. package/dist/components/TabStrip/index.js +2 -0
  66. package/dist/components/{TextArea/TextArea.svelte → TextArea.svelte} +143 -112
  67. package/dist/components/TextArea.svelte.d.ts +38 -0
  68. package/dist/components/ThemeSelector.svelte +81 -0
  69. package/dist/components/ThemeSelector.svelte.d.ts +10 -0
  70. package/dist/components/TimePicker.svelte +148 -0
  71. package/dist/components/TimePicker.svelte.d.ts +28 -0
  72. package/dist/components/TimeRangeInput.svelte +203 -0
  73. package/dist/components/TimeRangeInput.svelte.d.ts +29 -0
  74. package/dist/components/TimeSpinner.svelte +202 -0
  75. package/dist/components/TimeSpinner.svelte.d.ts +26 -0
  76. package/dist/components/Toast/Toaster.svelte +51 -0
  77. package/dist/components/Toast/Toaster.svelte.d.ts +12 -0
  78. package/dist/components/Toast/toast.svelte.d.ts +29 -0
  79. package/dist/components/Toast/toast.svelte.js +27 -0
  80. package/dist/components/Toggle.svelte +93 -0
  81. package/dist/components/Toggle.svelte.d.ts +15 -0
  82. package/dist/data/dataset.d.ts +42 -0
  83. package/dist/data/dataset.js +3 -0
  84. package/dist/data/index.d.ts +3 -0
  85. package/dist/data/index.js +3 -0
  86. package/dist/data/query/ast.d.ts +62 -0
  87. package/dist/data/query/ast.js +12 -0
  88. package/dist/data/query/index.d.ts +3 -0
  89. package/dist/data/query/index.js +3 -0
  90. package/dist/data/query/lexer.d.ts +33 -0
  91. package/dist/data/query/lexer.js +225 -0
  92. package/dist/data/query/parser.d.ts +11 -0
  93. package/dist/data/query/parser.js +252 -0
  94. package/dist/data/table/grid.svelte.d.ts +57 -0
  95. package/dist/data/table/grid.svelte.js +139 -0
  96. package/dist/data/table/index.d.ts +2 -0
  97. package/dist/data/table/index.js +2 -0
  98. package/dist/data/table/types.d.ts +79 -0
  99. package/dist/index.d.ts +48 -22
  100. package/dist/index.js +45 -21
  101. package/dist/positioning/anchored.d.ts +61 -0
  102. package/dist/positioning/anchored.js +122 -0
  103. package/dist/positioning/tooltip.d.ts +41 -0
  104. package/dist/positioning/tooltip.js +147 -0
  105. package/dist/theme.css +205 -0
  106. package/dist/types/breakpoints.d.ts +24 -0
  107. package/dist/types/breakpoints.js +13 -0
  108. package/dist/types/responsive.d.ts +32 -0
  109. package/dist/types/responsive.js +54 -0
  110. package/dist/types/sizes.d.ts +10 -3
  111. package/dist/types/time.d.ts +19 -0
  112. package/dist/types/time.js +10 -0
  113. package/dist/types/variants.d.ts +8 -1
  114. package/dist/types/variants.js +16 -1
  115. package/package.json +93 -63
  116. package/dist/components/Button/Button.svelte +0 -172
  117. package/dist/components/Button/Button.svelte.d.ts +0 -32
  118. package/dist/components/Button/index.d.ts +0 -1
  119. package/dist/components/Button/index.js +0 -1
  120. package/dist/components/Dialog/Dialog.svelte +0 -101
  121. package/dist/components/Dialog/Dialog.svelte.d.ts +0 -18
  122. package/dist/components/Dialog/index.d.ts +0 -1
  123. package/dist/components/Dialog/index.js +0 -1
  124. package/dist/components/ElementManager/ElementManager.svelte +0 -397
  125. package/dist/components/ElementManager/ElementManager.svelte.d.ts +0 -43
  126. package/dist/components/ElementManager/index.d.ts +0 -1
  127. package/dist/components/ElementManager/index.js +0 -1
  128. package/dist/components/EmailInput/EmailInput.svelte.d.ts +0 -14
  129. package/dist/components/EmailInput/index.d.ts +0 -1
  130. package/dist/components/EmailInput/index.js +0 -1
  131. package/dist/components/Icon/Icon.svelte +0 -74
  132. package/dist/components/Icon/Icon.svelte.d.ts +0 -13
  133. package/dist/components/Icon/index.d.ts +0 -1
  134. package/dist/components/Icon/index.js +0 -1
  135. package/dist/components/Input/Input.svelte +0 -268
  136. package/dist/components/Input/Input.svelte.d.ts +0 -18
  137. package/dist/components/Input/index.d.ts +0 -1
  138. package/dist/components/Input/index.js +0 -1
  139. package/dist/components/List/index.d.ts +0 -1
  140. package/dist/components/List/index.js +0 -1
  141. package/dist/components/ListItem/ListItem.svelte +0 -175
  142. package/dist/components/ListItem/ListItem.svelte.d.ts +0 -24
  143. package/dist/components/ListItem/index.d.ts +0 -2
  144. package/dist/components/ListItem/index.js +0 -2
  145. package/dist/components/ListView/ListView.svelte +0 -463
  146. package/dist/components/ListView/ListView.svelte.d.ts +0 -37
  147. package/dist/components/ListView/index.d.ts +0 -2
  148. package/dist/components/ListView/index.js +0 -2
  149. package/dist/components/NodeGraph/BaseNode.d.ts +0 -57
  150. package/dist/components/NodeGraph/BaseNode.js +0 -30
  151. package/dist/components/NodeGraph/Edge.svelte +0 -60
  152. package/dist/components/NodeGraph/Edge.svelte.d.ts +0 -16
  153. package/dist/components/NodeGraph/ExpressionEvaluator.d.ts +0 -82
  154. package/dist/components/NodeGraph/ExpressionEvaluator.js +0 -152
  155. package/dist/components/NodeGraph/Node.svelte +0 -100
  156. package/dist/components/NodeGraph/Node.svelte.d.ts +0 -10
  157. package/dist/components/NodeGraph/NodeGraph.svelte +0 -52
  158. package/dist/components/NodeGraph/NodeGraph.svelte.d.ts +0 -14
  159. package/dist/components/NodeGraph/NodeInstance.svelte.d.ts +0 -80
  160. package/dist/components/NodeGraph/NodeInstance.svelte.js +0 -241
  161. package/dist/components/NodeGraph/NodePort.svelte +0 -75
  162. package/dist/components/NodeGraph/NodePort.svelte.d.ts +0 -11
  163. package/dist/components/NodeGraph/decorators.d.ts +0 -81
  164. package/dist/components/NodeGraph/decorators.js +0 -148
  165. package/dist/components/NodeGraph/index.d.ts +0 -9
  166. package/dist/components/NodeGraph/index.js +0 -9
  167. package/dist/components/NodeGraph/types.d.ts +0 -94
  168. package/dist/components/NodeGraph/types.js +0 -33
  169. package/dist/components/NotesEditor/NotesEditor.svelte +0 -203
  170. package/dist/components/NotesEditor/NotesEditor.svelte.d.ts +0 -9
  171. package/dist/components/NotesEditor/index.d.ts +0 -1
  172. package/dist/components/NotesEditor/index.js +0 -1
  173. package/dist/components/NumberInput/index.d.ts +0 -1
  174. package/dist/components/NumberInput/index.js +0 -1
  175. package/dist/components/PasswordInput/PasswordInput.svelte +0 -41
  176. package/dist/components/PasswordInput/PasswordInput.svelte.d.ts +0 -13
  177. package/dist/components/PasswordInput/index.d.ts +0 -1
  178. package/dist/components/PasswordInput/index.js +0 -1
  179. package/dist/components/Popup/index.d.ts +0 -1
  180. package/dist/components/Popup/index.js +0 -1
  181. package/dist/components/Rating/Rating.svelte.d.ts +0 -7
  182. package/dist/components/Rating/index.d.ts +0 -1
  183. package/dist/components/Rating/index.js +0 -1
  184. package/dist/components/ScrollView/ScrollView.svelte +0 -285
  185. package/dist/components/ScrollView/ScrollView.svelte.d.ts +0 -19
  186. package/dist/components/ScrollView/index.d.ts +0 -1
  187. package/dist/components/ScrollView/index.js +0 -1
  188. package/dist/components/SearchInput/index.d.ts +0 -1
  189. package/dist/components/SearchInput/index.js +0 -1
  190. package/dist/components/Select/index.d.ts +0 -1
  191. package/dist/components/Select/index.js +0 -1
  192. package/dist/components/TextArea/TextArea.svelte.d.ts +0 -19
  193. package/dist/components/TextArea/index.d.ts +0 -1
  194. package/dist/components/TextArea/index.js +0 -1
  195. package/dist/components/ThemeSelector/ThemeSelector.svelte +0 -64
  196. package/dist/components/ThemeSelector/ThemeSelector.svelte.d.ts +0 -3
  197. package/dist/components/ThemeSelector/index.d.ts +0 -1
  198. package/dist/components/ThemeSelector/index.js +0 -1
  199. package/dist/components/TooltipHandler/TooltipHandler.svelte +0 -593
  200. package/dist/components/TooltipHandler/TooltipHandler.svelte.d.ts +0 -10
  201. package/dist/components/TooltipHandler/index.d.ts +0 -1
  202. package/dist/components/TooltipHandler/index.js +0 -1
  203. package/dist/styles/sizes.d.ts +0 -78
  204. package/dist/styles/sizes.js +0 -120
  205. package/dist/styles/variants.d.ts +0 -106
  206. package/dist/styles/variants.js +0 -194
  207. package/dist/types/ManagerTypes.d.ts +0 -42
  208. /package/dist/{types/ManagerTypes.js → data/table/types.js} +0 -0
@@ -1,268 +0,0 @@
1
- <script lang="ts">
2
- import Icon from '../Icon/Icon.svelte';
3
- import type { IconDefinition } from '@fortawesome/fontawesome-svg-core';
4
- import type { HTMLInputAttributes } from 'svelte/elements';
5
-
6
- interface Props extends HTMLInputAttributes {
7
- value: string;
8
- icon?: IconDefinition;
9
- iconPosition?: 'left' | 'right';
10
- iconClickable?: boolean;
11
- onIconClick?: () => void;
12
- class?: string;
13
- inputClass?: string;
14
- validate?: (value: string) => boolean | string;
15
- valid?: boolean;
16
- touched?: boolean;
17
- element?: HTMLInputElement;
18
- }
19
-
20
- let {
21
- value = $bindable(),
22
- icon,
23
- iconPosition = 'right',
24
- iconClickable = false,
25
- onIconClick,
26
- class: containerClass = '',
27
- inputClass = '',
28
- validate,
29
- valid = $bindable(true),
30
- touched = $bindable(false),
31
- element = $bindable(),
32
- type = 'text',
33
- disabled = false,
34
- readonly = false,
35
- ...restProps
36
- }: Props = $props();
37
-
38
- let inputElement: HTMLInputElement;
39
-
40
- // Sync element binding
41
- $effect(() => {
42
- element = inputElement;
43
- });
44
-
45
- // Validation logic
46
- let validationResult = $state<boolean | string>(true);
47
-
48
- function runValidation() {
49
- if (!validate) {
50
- valid = true;
51
- validationResult = true;
52
- return;
53
- }
54
-
55
- const result = validate(value);
56
- validationResult = result;
57
- valid = result === true;
58
- }
59
-
60
- // Run validation when value changes
61
- $effect(() => {
62
- runValidation();
63
- });
64
-
65
- // Computed classes
66
- let containerClasses = $derived.by(() => {
67
- const base = 'relative w-full';
68
- return `${base} ${containerClass}`.trim();
69
- });
70
-
71
- let wrapperClasses = $derived.by(() => {
72
- const base = 'w-full h-8 flex items-center rounded-md';
73
-
74
- // Calculate padding based on icon presence and position
75
- let paddingClasses = '';
76
- if (icon) {
77
- // Icon present - only pad the side without icon
78
- if (iconPosition === 'left') {
79
- paddingClasses = 'pl-0 pr-2'; // Icon on left, pad right only
80
- } else {
81
- paddingClasses = 'pl-2 pr-0'; // Icon on right, pad left only
82
- }
83
- } else {
84
- // No icon - pad both sides
85
- paddingClasses = 'px-2';
86
- }
87
-
88
- // Use new semantic color system with transparent background
89
- const themeStyles = [
90
- 'bg-transparent',
91
- 'border-2',
92
- paddingClasses,
93
- '[border-color:var(--color-secondary)]',
94
- 'hover:[border-color:color-mix(in_srgb,var(--color-secondary)_80%,black)]',
95
- 'focus-within:[border-color:color-mix(in_srgb,var(--color-secondary)_90%,black)]',
96
- 'focus-within:[outline:2px_solid_color-mix(in_srgb,currentColor_70%,transparent)]',
97
- 'focus-within:[outline-offset:0px]'
98
- ].join(' ');
99
-
100
- // Validation state overrides
101
- let validationStyles = '';
102
- if (touched && !valid) {
103
- validationStyles = '[border-color:var(--color-danger)] focus-within:[ring-color:var(--color-danger)]';
104
- }
105
-
106
- // Disabled and readonly state (with padding compensation for 1px border)
107
- let disabledStyles = '';
108
- if (disabled || readonly) {
109
- let disabledPadding = '';
110
- if (icon) {
111
- // Icon present - adjust padding for 1px border compensation
112
- if (iconPosition === 'left') {
113
- disabledPadding = '!pl-[1px] !pr-[calc(0.5rem+1px)]'; // Icon on left
114
- } else {
115
- disabledPadding = '!pl-[calc(0.5rem+1px)] !pr-[1px]'; // Icon on right
116
- }
117
- } else {
118
- // No icon - pad both sides with compensation
119
- disabledPadding = '!px-[calc(0.5rem+1px)]';
120
- }
121
-
122
- disabledStyles = disabled
123
- ? `![background-color:color-mix(in_srgb,var(--color-text)_5%,transparent)] [border-color:color-mix(in_srgb,var(--color-secondary)_50%,transparent)] !border ${disabledPadding} cursor-not-allowed`
124
- : `[border-color:var(--color-secondary)] !border ${disabledPadding}`;
125
- }
126
-
127
- return `${base} ${themeStyles} ${validationStyles} ${disabledStyles}`.trim();
128
- });
129
-
130
- let inputClasses = $derived.by(() => {
131
- const base = 'flex-1 h-full bg-transparent border-none outline-none text-sm leading-tight p-0 min-w-0';
132
-
133
- // Use new semantic color system
134
- const themeStyles = [
135
- '[color:var(--color-text)]',
136
- 'placeholder:[color:var(--color-secondary)]',
137
- 'disabled:bg-transparent',
138
- 'disabled:[color:color-mix(in_srgb,var(--color-text)_40%,transparent)]',
139
- 'disabled:cursor-not-allowed'
140
- ].join(' ');
141
-
142
- return `${base} ${themeStyles} ${inputClass}`.trim();
143
- });
144
-
145
- let iconClasses = $derived.by(() => {
146
- const base = 'w-8 h-8 flex items-center justify-center flex-shrink-0 select-none';
147
-
148
- const interactive = iconClickable
149
- ? 'cursor-pointer focus:outline-none transition-colors group'
150
- : 'pointer-events-none';
151
-
152
- return `${base} ${interactive}`.trim();
153
- });
154
-
155
- // Event handlers
156
- function handleInput(event: Event & { currentTarget: EventTarget & HTMLInputElement }) {
157
- const target = event.target as HTMLInputElement;
158
- value = target.value;
159
- if (restProps.oninput) restProps.oninput(event);
160
- }
161
-
162
- function handleFocus(event: FocusEvent & { currentTarget: EventTarget & HTMLInputElement }) {
163
- touched = true;
164
- if (restProps.onfocus) restProps.onfocus(event);
165
- }
166
-
167
- function handleIconKeydown(event: KeyboardEvent) {
168
- if (event.key === 'Enter' || event.key === ' ') {
169
- event.preventDefault();
170
- onIconClick?.();
171
- }
172
- }
173
-
174
- function handleIconMouseDown(event: MouseEvent) {
175
- event.preventDefault(); // Prevent text selection on double-click
176
- event.stopPropagation(); // Prevent event from bubbling
177
- }
178
-
179
- function handleIconSelectStart(event: Event) {
180
- event.preventDefault(); // Prevent text selection
181
- return false;
182
- }
183
-
184
- function handleIconDoubleClick(event: MouseEvent) {
185
- event.preventDefault();
186
- event.stopPropagation();
187
- return false;
188
- }
189
-
190
- // Override browser validation
191
- $effect(() => {
192
- if (inputElement) {
193
- inputElement.setCustomValidity('');
194
- if (touched && !valid && typeof validationResult === 'string') {
195
- inputElement.setCustomValidity(validationResult);
196
- }
197
- }
198
- });
199
- </script>
200
-
201
- <div class={containerClasses}>
202
- <div class={wrapperClasses} style="user-select: none;">
203
- {#if icon && iconPosition === 'left'}
204
- {#if iconClickable}
205
- <div
206
- class={iconClasses}
207
- onclick={onIconClick}
208
- onkeydown={handleIconKeydown}
209
- onmousedown={handleIconMouseDown}
210
- ondblclick={handleIconDoubleClick}
211
- onselectstart={handleIconSelectStart}
212
- role="button"
213
- tabindex="0"
214
- style="user-select: none; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none;"
215
- >
216
- {#key icon}
217
- <Icon {icon} class="w-4 h-4 [color:var(--color-secondary)!important] group-hover:[color:color-mix(in_srgb,var(--color-secondary)_80%,black)!important] group-focus:[color:color-mix(in_srgb,currentColor_70%,transparent)!important] transition-colors" />
218
- {/key}
219
- </div>
220
- {:else}
221
- <div class={iconClasses}>
222
- {#key icon}
223
- <Icon {icon} class="w-4 h-4 [color:var(--color-secondary)!important] group-hover:[color:color-mix(in_srgb,var(--color-secondary)_80%,black)!important] group-focus:[color:color-mix(in_srgb,currentColor_70%,transparent)!important] transition-colors" />
224
- {/key}
225
- </div>
226
- {/if}
227
- {/if}
228
-
229
- <input
230
- bind:this={inputElement}
231
- {type}
232
- {value}
233
- {disabled}
234
- {readonly}
235
- oninput={handleInput}
236
- onfocus={handleFocus}
237
- {...restProps}
238
- class={inputClasses}
239
- style="border: none !important; box-shadow: none !important; user-select: text !important;"
240
- />
241
-
242
- {#if icon && iconPosition === 'right'}
243
- {#if iconClickable}
244
- <div
245
- class={iconClasses}
246
- onclick={onIconClick}
247
- onkeydown={handleIconKeydown}
248
- onmousedown={handleIconMouseDown}
249
- ondblclick={handleIconDoubleClick}
250
- onselectstart={handleIconSelectStart}
251
- role="button"
252
- tabindex="0"
253
- style="user-select: none; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none;"
254
- >
255
- {#key icon}
256
- <Icon {icon} class="w-4 h-4 [color:var(--color-secondary)!important] group-hover:[color:color-mix(in_srgb,var(--color-secondary)_80%,black)!important] group-focus:[color:color-mix(in_srgb,currentColor_70%,transparent)!important] transition-colors" />
257
- {/key}
258
- </div>
259
- {:else}
260
- <div class={iconClasses}>
261
- {#key icon}
262
- <Icon {icon} class="w-4 h-4 [color:var(--color-secondary)!important] group-hover:[color:color-mix(in_srgb,var(--color-secondary)_80%,black)!important] group-focus:[color:color-mix(in_srgb,currentColor_70%,transparent)!important] transition-colors" />
263
- {/key}
264
- </div>
265
- {/if}
266
- {/if}
267
- </div>
268
- </div>
@@ -1,18 +0,0 @@
1
- import type { IconDefinition } from '@fortawesome/fontawesome-svg-core';
2
- import type { HTMLInputAttributes } from 'svelte/elements';
3
- interface Props extends HTMLInputAttributes {
4
- value: string;
5
- icon?: IconDefinition;
6
- iconPosition?: 'left' | 'right';
7
- iconClickable?: boolean;
8
- onIconClick?: () => void;
9
- class?: string;
10
- inputClass?: string;
11
- validate?: (value: string) => boolean | string;
12
- valid?: boolean;
13
- touched?: boolean;
14
- element?: HTMLInputElement;
15
- }
16
- declare const Input: import("svelte").Component<Props, {}, "element" | "value" | "valid" | "touched">;
17
- type Input = ReturnType<typeof Input>;
18
- export default Input;
@@ -1 +0,0 @@
1
- export { default } from './Input.svelte';
@@ -1 +0,0 @@
1
- export { default } from './Input.svelte';
@@ -1 +0,0 @@
1
- export { default } from './List.svelte';
@@ -1 +0,0 @@
1
- export { default } from './List.svelte';
@@ -1,175 +0,0 @@
1
- <script lang="ts">
2
- import type { Snippet } from "svelte";
3
- import type { IconDefinition } from "@fortawesome/free-solid-svg-icons";
4
- import type { Variant } from "../../types/variants.js";
5
- import Icon from "../Icon/Icon.svelte";
6
- import { getVariantClasses } from "../../styles/variants.js";
7
-
8
- interface Props {
9
- value: string;
10
- label?: string;
11
- secondaryText?: string;
12
- icon?: IconDefinition;
13
- prefix?: string;
14
- suffix?: string;
15
- variant?: Variant;
16
- disabled?: boolean;
17
- selected?: boolean;
18
- focused?: boolean;
19
- showCheckbox?: boolean;
20
- class?: string;
21
- children?: Snippet;
22
- onclick?: (event: MouseEvent) => void;
23
- onfocus?: (event: FocusEvent) => void;
24
- onblur?: (event: FocusEvent) => void;
25
- }
26
-
27
- let {
28
- value,
29
- label,
30
- secondaryText,
31
- icon,
32
- prefix,
33
- suffix,
34
- variant = "ghost",
35
- disabled = false,
36
- selected = false,
37
- focused = false,
38
- showCheckbox = false,
39
- class: className = "",
40
- children,
41
- onclick,
42
- onfocus,
43
- onblur,
44
- }: Props = $props();
45
-
46
- // Determine background classes based on state and variant
47
- const backgroundClasses = $derived(() => {
48
- // Checkbox mode: no selection highlighting, only focus/hover
49
- if (showCheckbox) {
50
- if (focused) {
51
- return "[background-color:var(--color-secondary)]";
52
- }
53
- return "bg-transparent hover:[background-color:var(--color-secondary)]";
54
- }
55
-
56
- // Selected state: darker secondary background
57
- if (selected) {
58
- return "[background-color:color-mix(in_srgb,var(--color-secondary)_80%,black)] hover:[background-color:color-mix(in_srgb,var(--color-secondary)_80%,black)]";
59
- }
60
-
61
- // Focused (not selected)
62
- if (focused) {
63
- return "[background-color:var(--color-secondary)]";
64
- }
65
-
66
- // Default: transparent with hover
67
- return "bg-transparent hover:[background-color:var(--color-secondary)]";
68
- });
69
-
70
- const textClasses = $derived(() => {
71
- if (disabled) {
72
- return "[color:color-mix(in_srgb,var(--color-text)_40%,transparent)]";
73
- }
74
-
75
- // For selected items, check if variant needs specific text color
76
- if (selected && variant !== "ghost") {
77
- // Variants with solid backgrounds need white text
78
- return "text-white";
79
- }
80
-
81
- return "[color:var(--color-text)]";
82
- });
83
-
84
- const cursorClass = $derived(
85
- disabled ? "cursor-not-allowed" : "cursor-pointer",
86
- );
87
- </script>
88
-
89
- <button
90
- type="button"
91
- class="w-full overflow-hidden text-left focus:outline-none flex items-center transition-colors duration-150 {backgroundClasses()} {textClasses()} {cursorClass} {className}"
92
- style="height: var(--list-item-height, 32px); border: none; border-radius: 0;"
93
- {onclick}
94
- {onfocus}
95
- {onblur}
96
- tabindex="-1"
97
- role="option"
98
- aria-selected={selected}
99
- aria-disabled={disabled}
100
- aria-label={label || "List item"}
101
- {disabled}
102
- data-value={value}
103
- >
104
- {#if children}
105
- {@render children()}
106
- {:else if showCheckbox}
107
- <div class="flex items-center gap-3 px-3 w-full">
108
- <div class="relative flex-shrink-0 mt-1">
109
- <input
110
- type="checkbox"
111
- checked={selected}
112
- {disabled}
113
- class="w-4 h-4 rounded [border-color:var(--color-secondary)] {selected
114
- ? '[background-color:var(--color-primary)] [border-color:var(--color-primary)]'
115
- : '[background-color:var(--color-background)]'} {disabled
116
- ? 'opacity-50 cursor-not-allowed'
117
- : 'cursor-pointer'}"
118
- tabindex="-1"
119
- readonly
120
- />
121
- {#if selected}
122
- <svg
123
- class="absolute inset-0 w-4 h-4 text-white pointer-events-none"
124
- fill="currentColor"
125
- viewBox="0 0 20 20"
126
- >
127
- <path
128
- fill-rule="evenodd"
129
- d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z"
130
- clip-rule="evenodd"
131
- />
132
- </svg>
133
- {/if}
134
- </div>
135
- <div class="flex-1 min-w-0">
136
- {#if secondaryText}
137
- <div class="font-medium text-sm truncate">{label}</div>
138
- <div
139
- class="text-xs [color:color-mix(in_srgb,var(--color-text)_60%,transparent)] truncate"
140
- >
141
- {secondaryText}
142
- </div>
143
- {:else}
144
- <span class="text-sm truncate block">{label}</span>
145
- {/if}
146
- </div>
147
- </div>
148
- {:else}
149
- <div class="flex items-center gap-2 px-3 w-full min-w-0">
150
- {#if prefix}
151
- <span class="flex-shrink-0 text-lg">{prefix}</span>
152
- {/if}
153
- {#if icon}
154
- <span class="flex-shrink-0"><Icon {icon} size="sm" /></span>
155
- {/if}
156
- {#if label || secondaryText}
157
- <div class="flex-1 min-w-0">
158
- {#if secondaryText}
159
- <div class="font-medium text-sm truncate">{label}</div>
160
- <div
161
- class="text-xs [color:color-mix(in_srgb,var(--color-text)_60%,transparent)] truncate"
162
- >
163
- {secondaryText}
164
- </div>
165
- {:else}
166
- <span class="text-sm truncate block">{label}</span>
167
- {/if}
168
- </div>
169
- {/if}
170
- {#if suffix}
171
- <span class="flex-shrink-0 text-sm ml-auto">{suffix}</span>
172
- {/if}
173
- </div>
174
- {/if}
175
- </button>
@@ -1,24 +0,0 @@
1
- import type { Snippet } from "svelte";
2
- import type { IconDefinition } from "@fortawesome/free-solid-svg-icons";
3
- import type { Variant } from "../../types/variants.js";
4
- interface Props {
5
- value: string;
6
- label?: string;
7
- secondaryText?: string;
8
- icon?: IconDefinition;
9
- prefix?: string;
10
- suffix?: string;
11
- variant?: Variant;
12
- disabled?: boolean;
13
- selected?: boolean;
14
- focused?: boolean;
15
- showCheckbox?: boolean;
16
- class?: string;
17
- children?: Snippet;
18
- onclick?: (event: MouseEvent) => void;
19
- onfocus?: (event: FocusEvent) => void;
20
- onblur?: (event: FocusEvent) => void;
21
- }
22
- declare const ListItem: import("svelte").Component<Props, {}, "">;
23
- type ListItem = ReturnType<typeof ListItem>;
24
- export default ListItem;
@@ -1,2 +0,0 @@
1
- export { default } from "./ListItem.svelte";
2
- export { default as ListItem } from "./ListItem.svelte";
@@ -1,2 +0,0 @@
1
- export { default } from "./ListItem.svelte";
2
- export { default as ListItem } from "./ListItem.svelte";