@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.
- package/README.md +180 -42
- package/dist/components/Alert.svelte +119 -0
- package/dist/components/Alert.svelte.d.ts +29 -0
- package/dist/components/Badge/Badge.svelte +142 -69
- package/dist/components/Badge/Badge.svelte.d.ts +26 -6
- package/dist/components/Badge/index.d.ts +1 -1
- package/dist/components/Badge/index.js +1 -1
- package/dist/components/Banner.svelte +133 -0
- package/dist/components/Banner.svelte.d.ts +31 -0
- package/dist/components/Button.svelte +240 -0
- package/dist/components/Button.svelte.d.ts +33 -0
- package/dist/components/ButtonDropdown.svelte +145 -0
- package/dist/components/ButtonDropdown.svelte.d.ts +31 -0
- package/dist/components/Calendar.svelte +259 -0
- package/dist/components/Calendar.svelte.d.ts +27 -0
- package/dist/components/Card.svelte +78 -0
- package/dist/components/Card.svelte.d.ts +17 -0
- package/dist/components/CardBody.svelte +41 -0
- package/dist/components/CardBody.svelte.d.ts +17 -0
- package/dist/components/CardFooter.svelte +49 -0
- package/dist/components/CardFooter.svelte.d.ts +16 -0
- package/dist/components/CardHeader.svelte +49 -0
- package/dist/components/CardHeader.svelte.d.ts +16 -0
- package/dist/components/Checkbox.svelte +131 -0
- package/dist/components/Checkbox.svelte.d.ts +16 -0
- package/dist/components/DataTable.svelte +518 -0
- package/dist/components/DataTable.svelte.d.ts +74 -0
- package/dist/components/DatePicker.svelte +312 -0
- package/dist/components/DatePicker.svelte.d.ts +32 -0
- package/dist/components/DateTimeInput.svelte +93 -0
- package/dist/components/DateTimeInput.svelte.d.ts +20 -0
- package/dist/components/Dialog.svelte +132 -0
- package/dist/components/Dialog.svelte.d.ts +24 -0
- package/dist/components/{EmailInput/EmailInput.svelte → EmailInput.svelte} +17 -8
- package/dist/components/EmailInput.svelte.d.ts +21 -0
- package/dist/components/Input.svelte +369 -0
- package/dist/components/Input.svelte.d.ts +35 -0
- package/dist/components/{List/List.svelte → List.svelte} +194 -133
- package/dist/components/{List/List.svelte.d.ts → List.svelte.d.ts} +9 -1
- package/dist/components/Menu.svelte +117 -0
- package/dist/components/Menu.svelte.d.ts +20 -0
- package/dist/components/NotesEditor.svelte +127 -0
- package/dist/components/NotesEditor.svelte.d.ts +17 -0
- package/dist/components/{NumberInput/NumberInput.svelte → NumberInput.svelte} +146 -105
- package/dist/components/{NumberInput/NumberInput.svelte.d.ts → NumberInput.svelte.d.ts} +11 -4
- package/dist/components/PasswordInput.svelte +52 -0
- package/dist/components/PasswordInput.svelte.d.ts +20 -0
- package/dist/components/Popup.svelte +140 -0
- package/dist/components/Popup.svelte.d.ts +31 -0
- package/dist/components/Query.svelte +284 -0
- package/dist/components/Query.svelte.d.ts +15 -0
- package/dist/components/{Rating/Rating.svelte → Rating.svelte} +19 -10
- package/dist/components/Rating.svelte.d.ts +13 -0
- package/dist/components/{SearchInput/SearchInput.svelte → SearchInput.svelte} +19 -8
- package/dist/components/{SearchInput/SearchInput.svelte.d.ts → SearchInput.svelte.d.ts} +9 -2
- package/dist/components/{Select/Select.svelte → Select.svelte} +48 -76
- package/dist/components/{Select/Select.svelte.d.ts → Select.svelte.d.ts} +11 -1
- package/dist/components/SideBarMenu/SideBarMenu.svelte +724 -0
- package/dist/components/SideBarMenu/SideBarMenu.svelte.d.ts +109 -0
- package/dist/components/SideBarMenu/index.d.ts +2 -0
- package/dist/components/SideBarMenu/index.js +1 -0
- package/dist/components/TabStrip/TabStrip.svelte +384 -0
- package/dist/components/TabStrip/TabStrip.svelte.d.ts +50 -0
- package/dist/components/TabStrip/index.d.ts +3 -0
- package/dist/components/TabStrip/index.js +2 -0
- package/dist/components/{TextArea/TextArea.svelte → TextArea.svelte} +143 -112
- package/dist/components/TextArea.svelte.d.ts +38 -0
- package/dist/components/ThemeSelector.svelte +81 -0
- package/dist/components/ThemeSelector.svelte.d.ts +10 -0
- package/dist/components/TimePicker.svelte +148 -0
- package/dist/components/TimePicker.svelte.d.ts +28 -0
- package/dist/components/TimeRangeInput.svelte +203 -0
- package/dist/components/TimeRangeInput.svelte.d.ts +29 -0
- package/dist/components/TimeSpinner.svelte +202 -0
- package/dist/components/TimeSpinner.svelte.d.ts +26 -0
- package/dist/components/Toast/Toaster.svelte +51 -0
- package/dist/components/Toast/Toaster.svelte.d.ts +12 -0
- package/dist/components/Toast/toast.svelte.d.ts +29 -0
- package/dist/components/Toast/toast.svelte.js +27 -0
- package/dist/components/Toggle.svelte +93 -0
- package/dist/components/Toggle.svelte.d.ts +15 -0
- package/dist/data/dataset.d.ts +42 -0
- package/dist/data/dataset.js +3 -0
- package/dist/data/index.d.ts +3 -0
- package/dist/data/index.js +3 -0
- package/dist/data/query/ast.d.ts +62 -0
- package/dist/data/query/ast.js +12 -0
- package/dist/data/query/index.d.ts +3 -0
- package/dist/data/query/index.js +3 -0
- package/dist/data/query/lexer.d.ts +33 -0
- package/dist/data/query/lexer.js +225 -0
- package/dist/data/query/parser.d.ts +11 -0
- package/dist/data/query/parser.js +252 -0
- package/dist/data/table/grid.svelte.d.ts +57 -0
- package/dist/data/table/grid.svelte.js +139 -0
- package/dist/data/table/index.d.ts +2 -0
- package/dist/data/table/index.js +2 -0
- package/dist/data/table/types.d.ts +79 -0
- package/dist/index.d.ts +48 -22
- package/dist/index.js +45 -21
- package/dist/positioning/anchored.d.ts +61 -0
- package/dist/positioning/anchored.js +122 -0
- package/dist/positioning/tooltip.d.ts +41 -0
- package/dist/positioning/tooltip.js +147 -0
- package/dist/theme.css +205 -0
- package/dist/types/breakpoints.d.ts +24 -0
- package/dist/types/breakpoints.js +13 -0
- package/dist/types/responsive.d.ts +32 -0
- package/dist/types/responsive.js +54 -0
- package/dist/types/sizes.d.ts +10 -3
- package/dist/types/time.d.ts +19 -0
- package/dist/types/time.js +10 -0
- package/dist/types/variants.d.ts +8 -1
- package/dist/types/variants.js +16 -1
- package/package.json +93 -63
- package/dist/components/Button/Button.svelte +0 -172
- package/dist/components/Button/Button.svelte.d.ts +0 -32
- package/dist/components/Button/index.d.ts +0 -1
- package/dist/components/Button/index.js +0 -1
- package/dist/components/Dialog/Dialog.svelte +0 -101
- package/dist/components/Dialog/Dialog.svelte.d.ts +0 -18
- package/dist/components/Dialog/index.d.ts +0 -1
- package/dist/components/Dialog/index.js +0 -1
- package/dist/components/ElementManager/ElementManager.svelte +0 -397
- package/dist/components/ElementManager/ElementManager.svelte.d.ts +0 -43
- package/dist/components/ElementManager/index.d.ts +0 -1
- package/dist/components/ElementManager/index.js +0 -1
- package/dist/components/EmailInput/EmailInput.svelte.d.ts +0 -14
- package/dist/components/EmailInput/index.d.ts +0 -1
- package/dist/components/EmailInput/index.js +0 -1
- package/dist/components/Icon/Icon.svelte +0 -74
- package/dist/components/Icon/Icon.svelte.d.ts +0 -13
- package/dist/components/Icon/index.d.ts +0 -1
- package/dist/components/Icon/index.js +0 -1
- package/dist/components/Input/Input.svelte +0 -268
- package/dist/components/Input/Input.svelte.d.ts +0 -18
- package/dist/components/Input/index.d.ts +0 -1
- package/dist/components/Input/index.js +0 -1
- package/dist/components/List/index.d.ts +0 -1
- package/dist/components/List/index.js +0 -1
- package/dist/components/ListItem/ListItem.svelte +0 -175
- package/dist/components/ListItem/ListItem.svelte.d.ts +0 -24
- package/dist/components/ListItem/index.d.ts +0 -2
- package/dist/components/ListItem/index.js +0 -2
- package/dist/components/ListView/ListView.svelte +0 -463
- package/dist/components/ListView/ListView.svelte.d.ts +0 -37
- package/dist/components/ListView/index.d.ts +0 -2
- package/dist/components/ListView/index.js +0 -2
- package/dist/components/NodeGraph/BaseNode.d.ts +0 -57
- package/dist/components/NodeGraph/BaseNode.js +0 -30
- package/dist/components/NodeGraph/Edge.svelte +0 -60
- package/dist/components/NodeGraph/Edge.svelte.d.ts +0 -16
- package/dist/components/NodeGraph/ExpressionEvaluator.d.ts +0 -82
- package/dist/components/NodeGraph/ExpressionEvaluator.js +0 -152
- package/dist/components/NodeGraph/Node.svelte +0 -100
- package/dist/components/NodeGraph/Node.svelte.d.ts +0 -10
- package/dist/components/NodeGraph/NodeGraph.svelte +0 -52
- package/dist/components/NodeGraph/NodeGraph.svelte.d.ts +0 -14
- package/dist/components/NodeGraph/NodeInstance.svelte.d.ts +0 -80
- package/dist/components/NodeGraph/NodeInstance.svelte.js +0 -241
- package/dist/components/NodeGraph/NodePort.svelte +0 -75
- package/dist/components/NodeGraph/NodePort.svelte.d.ts +0 -11
- package/dist/components/NodeGraph/decorators.d.ts +0 -81
- package/dist/components/NodeGraph/decorators.js +0 -148
- package/dist/components/NodeGraph/index.d.ts +0 -9
- package/dist/components/NodeGraph/index.js +0 -9
- package/dist/components/NodeGraph/types.d.ts +0 -94
- package/dist/components/NodeGraph/types.js +0 -33
- package/dist/components/NotesEditor/NotesEditor.svelte +0 -203
- package/dist/components/NotesEditor/NotesEditor.svelte.d.ts +0 -9
- package/dist/components/NotesEditor/index.d.ts +0 -1
- package/dist/components/NotesEditor/index.js +0 -1
- package/dist/components/NumberInput/index.d.ts +0 -1
- package/dist/components/NumberInput/index.js +0 -1
- package/dist/components/PasswordInput/PasswordInput.svelte +0 -41
- package/dist/components/PasswordInput/PasswordInput.svelte.d.ts +0 -13
- package/dist/components/PasswordInput/index.d.ts +0 -1
- package/dist/components/PasswordInput/index.js +0 -1
- package/dist/components/Popup/index.d.ts +0 -1
- package/dist/components/Popup/index.js +0 -1
- package/dist/components/Rating/Rating.svelte.d.ts +0 -7
- package/dist/components/Rating/index.d.ts +0 -1
- package/dist/components/Rating/index.js +0 -1
- package/dist/components/ScrollView/ScrollView.svelte +0 -285
- package/dist/components/ScrollView/ScrollView.svelte.d.ts +0 -19
- package/dist/components/ScrollView/index.d.ts +0 -1
- package/dist/components/ScrollView/index.js +0 -1
- package/dist/components/SearchInput/index.d.ts +0 -1
- package/dist/components/SearchInput/index.js +0 -1
- package/dist/components/Select/index.d.ts +0 -1
- package/dist/components/Select/index.js +0 -1
- package/dist/components/TextArea/TextArea.svelte.d.ts +0 -19
- package/dist/components/TextArea/index.d.ts +0 -1
- package/dist/components/TextArea/index.js +0 -1
- package/dist/components/ThemeSelector/ThemeSelector.svelte +0 -64
- package/dist/components/ThemeSelector/ThemeSelector.svelte.d.ts +0 -3
- package/dist/components/ThemeSelector/index.d.ts +0 -1
- package/dist/components/ThemeSelector/index.js +0 -1
- package/dist/components/TooltipHandler/TooltipHandler.svelte +0 -593
- package/dist/components/TooltipHandler/TooltipHandler.svelte.d.ts +0 -10
- package/dist/components/TooltipHandler/index.d.ts +0 -1
- package/dist/components/TooltipHandler/index.js +0 -1
- package/dist/styles/sizes.d.ts +0 -78
- package/dist/styles/sizes.js +0 -120
- package/dist/styles/variants.d.ts +0 -106
- package/dist/styles/variants.js +0 -194
- package/dist/types/ManagerTypes.d.ts +0 -42
- /package/dist/{types/ManagerTypes.js → data/table/types.js} +0 -0
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import
|
|
2
|
+
import type { Snippet } from "svelte";
|
|
3
|
+
import ChevronDown from "~icons/mdi/chevron-down";
|
|
4
|
+
import Input from "./Input.svelte";
|
|
5
|
+
import List from "./List.svelte";
|
|
6
|
+
import Popup from "./Popup.svelte";
|
|
7
|
+
import type { Size } from "../types/sizes.js";
|
|
8
|
+
import type { Responsive } from "../types/responsive.js";
|
|
9
|
+
import type { Variant } from "../types/variants.js";
|
|
7
10
|
|
|
8
11
|
type Option = Record<string, any> & {
|
|
9
12
|
value: string;
|
|
@@ -37,6 +40,8 @@
|
|
|
37
40
|
onLoadEnd,
|
|
38
41
|
onSelection,
|
|
39
42
|
disabled = false,
|
|
43
|
+
size = "md",
|
|
44
|
+
name,
|
|
40
45
|
...restProps
|
|
41
46
|
}: {
|
|
42
47
|
options?: Option[];
|
|
@@ -65,9 +70,17 @@
|
|
|
65
70
|
onLoadEnd?: () => void;
|
|
66
71
|
onSelection?: (option: Option) => void;
|
|
67
72
|
disabled?: boolean;
|
|
73
|
+
/** Shared size axis — forwarded to the underlying Input trigger. */
|
|
74
|
+
size?: Responsive<Size>;
|
|
75
|
+
/** Shared variant/borderless axes — forwarded to the underlying Input trigger. */
|
|
76
|
+
variant?: Variant;
|
|
77
|
+
borderless?: boolean;
|
|
78
|
+
/** When set, render a hidden <input name> carrying the value so the Select submits in a form. */
|
|
79
|
+
name?: string;
|
|
68
80
|
} & Record<string, any> = $props();
|
|
69
81
|
|
|
70
82
|
let isOpen = $state(false);
|
|
83
|
+
let containerElement = $state<HTMLElement>();
|
|
71
84
|
let inputElement = $state<HTMLInputElement>();
|
|
72
85
|
let listElement = $state<any>();
|
|
73
86
|
|
|
@@ -76,27 +89,23 @@
|
|
|
76
89
|
if (multiSelect && Array.isArray(value)) {
|
|
77
90
|
if (value.length === 0) return "";
|
|
78
91
|
if (value.length === 1) {
|
|
79
|
-
const selectedOption = options.find(option => option.value === value[0]);
|
|
92
|
+
const selectedOption = options.find((option) => option.value === value[0]);
|
|
80
93
|
return selectedOption?.label || "";
|
|
81
94
|
}
|
|
82
95
|
return `${value.length} items selected`;
|
|
83
96
|
} else {
|
|
84
|
-
const selectedOption = options.find(option => option.value === value);
|
|
97
|
+
const selectedOption = options.find((option) => option.value === value);
|
|
85
98
|
return selectedOption?.label || "";
|
|
86
99
|
}
|
|
87
100
|
});
|
|
88
101
|
|
|
89
|
-
// Global dropdown manager - only one dropdown open at a time
|
|
90
|
-
let dropdownId = Math.random().toString(36).substring(2, 9);
|
|
91
|
-
let zIndex = $state(50);
|
|
92
|
-
|
|
93
102
|
function toggleDropdown(event?: MouseEvent | KeyboardEvent) {
|
|
94
103
|
event?.stopPropagation();
|
|
95
104
|
event?.preventDefault(); // Prevent text selection
|
|
96
105
|
if (disabled) return;
|
|
97
|
-
|
|
106
|
+
|
|
98
107
|
isOpen = !isOpen;
|
|
99
|
-
|
|
108
|
+
|
|
100
109
|
if (isOpen) {
|
|
101
110
|
// Set focus to the selected item in the list
|
|
102
111
|
setTimeout(() => {
|
|
@@ -122,17 +131,17 @@
|
|
|
122
131
|
if (!multiSelect) {
|
|
123
132
|
isOpen = false;
|
|
124
133
|
}
|
|
125
|
-
|
|
134
|
+
|
|
126
135
|
if (onSelection) {
|
|
127
136
|
onSelection(option);
|
|
128
137
|
}
|
|
129
|
-
|
|
138
|
+
|
|
130
139
|
if (!multiSelect && autoAdvance) {
|
|
131
140
|
// Move to next focusable element (only in single-select mode)
|
|
132
141
|
setTimeout(() => {
|
|
133
142
|
if (inputElement) {
|
|
134
143
|
const focusableElements = document.querySelectorAll(
|
|
135
|
-
'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'
|
|
144
|
+
'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])',
|
|
136
145
|
);
|
|
137
146
|
const currentIndex = Array.from(focusableElements).indexOf(inputElement);
|
|
138
147
|
const nextElement = focusableElements[currentIndex + 1] as HTMLElement;
|
|
@@ -146,10 +155,10 @@
|
|
|
146
155
|
}
|
|
147
156
|
|
|
148
157
|
function handleKeydown(event: KeyboardEvent) {
|
|
149
|
-
if (event.key ===
|
|
158
|
+
if (event.key === "Escape") {
|
|
150
159
|
isOpen = false;
|
|
151
160
|
inputElement?.focus();
|
|
152
|
-
} else if (event.key ===
|
|
161
|
+
} else if (event.key === "Enter") {
|
|
153
162
|
if (isOpen) {
|
|
154
163
|
// Close dropdown and allow Enter to propagate for form submission
|
|
155
164
|
isOpen = false;
|
|
@@ -159,10 +168,10 @@
|
|
|
159
168
|
event.preventDefault();
|
|
160
169
|
toggleDropdown(event);
|
|
161
170
|
}
|
|
162
|
-
} else if (event.key ===
|
|
171
|
+
} else if (event.key === " ") {
|
|
163
172
|
event.preventDefault();
|
|
164
173
|
toggleDropdown(event);
|
|
165
|
-
} else if (event.key ===
|
|
174
|
+
} else if (event.key === "ArrowDown" && !isOpen) {
|
|
166
175
|
event.preventDefault();
|
|
167
176
|
isOpen = true;
|
|
168
177
|
}
|
|
@@ -178,50 +187,21 @@
|
|
|
178
187
|
listElement.focus();
|
|
179
188
|
}
|
|
180
189
|
}, 50);
|
|
181
|
-
}
|
|
190
|
+
},
|
|
182
191
|
};
|
|
183
192
|
});
|
|
184
|
-
|
|
185
|
-
// Close dropdown when clicking outside or when another dropdown opens
|
|
186
|
-
$effect(() => {
|
|
187
|
-
if (isOpen) {
|
|
188
|
-
// Increment z-index for newly opened dropdown
|
|
189
|
-
zIndex = 50 + Date.now() % 1000;
|
|
190
|
-
|
|
191
|
-
// Set this as the active dropdown
|
|
192
|
-
document.dispatchEvent(new CustomEvent('dropdown-opened', { detail: { id: dropdownId } }));
|
|
193
|
-
|
|
194
|
-
const handleClickOutside = (event: MouseEvent) => {
|
|
195
|
-
const target = event.target as Element;
|
|
196
|
-
if (!target.closest('.select-container')) {
|
|
197
|
-
isOpen = false;
|
|
198
|
-
}
|
|
199
|
-
};
|
|
200
|
-
|
|
201
|
-
const handleOtherDropdownOpen = (event: CustomEvent) => {
|
|
202
|
-
if (event.detail.id !== dropdownId) {
|
|
203
|
-
isOpen = false;
|
|
204
|
-
}
|
|
205
|
-
};
|
|
206
|
-
|
|
207
|
-
document.addEventListener('click', handleClickOutside);
|
|
208
|
-
document.addEventListener('dropdown-opened', handleOtherDropdownOpen as EventListener);
|
|
209
|
-
|
|
210
|
-
return () => {
|
|
211
|
-
document.removeEventListener('click', handleClickOutside);
|
|
212
|
-
document.removeEventListener('dropdown-opened', handleOtherDropdownOpen as EventListener);
|
|
213
|
-
};
|
|
214
|
-
}
|
|
215
|
-
});
|
|
216
193
|
</script>
|
|
217
194
|
|
|
218
|
-
<div class="relative select-container {className}">
|
|
195
|
+
<div bind:this={containerElement} class="relative select-container {className}">
|
|
196
|
+
<!-- Hidden field so the Select participates in native/remote forms (submits the value, not the label). -->
|
|
197
|
+
{#if name}
|
|
198
|
+
<input type="hidden" {name} value={Array.isArray(value) ? value.join(",") : (value ?? "")} />
|
|
199
|
+
{/if}
|
|
219
200
|
<Input
|
|
220
201
|
bind:element={inputElement}
|
|
221
202
|
value={selectedLabel()}
|
|
222
203
|
{placeholder}
|
|
223
204
|
readonly={true}
|
|
224
|
-
icon={faChevronDown}
|
|
225
205
|
iconPosition="right"
|
|
226
206
|
iconClickable={true}
|
|
227
207
|
onIconClick={toggleDropdown}
|
|
@@ -229,16 +209,20 @@
|
|
|
229
209
|
ondblclick={handleInputDoubleClick}
|
|
230
210
|
onkeydown={handleKeydown}
|
|
231
211
|
{disabled}
|
|
212
|
+
{size}
|
|
232
213
|
class={inputClass}
|
|
233
214
|
inputClass={disabled ? "!cursor-default select-none" : "!cursor-pointer select-none"}
|
|
234
215
|
{...restProps}
|
|
235
|
-
/>
|
|
236
|
-
|
|
237
|
-
<!-- Always render List to maintain cache, show/hide with CSS -->
|
|
238
|
-
<div
|
|
239
|
-
class="absolute w-full {isOpen ? '' : 'opacity-0 pointer-events-none'}"
|
|
240
|
-
style="z-index: {isOpen ? zIndex : -1}; top: calc(100% + 0.25rem);"
|
|
241
216
|
>
|
|
217
|
+
{#snippet icon()}<ChevronDown />{/snippet}
|
|
218
|
+
</Input>
|
|
219
|
+
|
|
220
|
+
<!--
|
|
221
|
+
Dropdown lives on the browser top layer (Popover API) via Popup, positioned by the shared
|
|
222
|
+
`anchored` engine — so it flips up/down against the viewport, is never clipped, and reserves
|
|
223
|
+
no layout space. Popup keeps the List mounted (hidden) while closed, preserving its cache.
|
|
224
|
+
-->
|
|
225
|
+
<Popup anchor={containerElement} bind:open={isOpen} matchWidth offset={4}>
|
|
242
226
|
<List
|
|
243
227
|
bind:this={listElement}
|
|
244
228
|
{options}
|
|
@@ -246,6 +230,7 @@
|
|
|
246
230
|
{multiSelect}
|
|
247
231
|
{maxVisibleItems}
|
|
248
232
|
{itemHeight}
|
|
233
|
+
{size}
|
|
249
234
|
{itemSnippet}
|
|
250
235
|
onSelection={handleSelection}
|
|
251
236
|
class={dropdownClass}
|
|
@@ -261,18 +246,5 @@
|
|
|
261
246
|
{onLoadStart}
|
|
262
247
|
{onLoadEnd}
|
|
263
248
|
/>
|
|
264
|
-
</
|
|
265
|
-
|
|
266
|
-
<!-- Transition effect overlay -->
|
|
267
|
-
{#if isOpen}
|
|
268
|
-
<div
|
|
269
|
-
class="absolute w-full pointer-events-none"
|
|
270
|
-
style="z-index: {zIndex + 1}; top: calc(100% + 0.25rem);"
|
|
271
|
-
transition:slide={{ duration: 200 }}
|
|
272
|
-
>
|
|
273
|
-
<div style="height: {maxVisibleItems * itemHeight}px; opacity: 0;">
|
|
274
|
-
<!-- Invisible placeholder for slide transition -->
|
|
275
|
-
</div>
|
|
276
|
-
</div>
|
|
277
|
-
{/if}
|
|
278
|
-
</div>
|
|
249
|
+
</Popup>
|
|
250
|
+
</div>
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
import type { Snippet } from
|
|
1
|
+
import type { Snippet } from "svelte";
|
|
2
|
+
import type { Size } from "../types/sizes.js";
|
|
3
|
+
import type { Responsive } from "../types/responsive.js";
|
|
4
|
+
import type { Variant } from "../types/variants.js";
|
|
2
5
|
type Option = Record<string, any> & {
|
|
3
6
|
value: string;
|
|
4
7
|
label: string;
|
|
@@ -29,6 +32,13 @@ type $$ComponentProps = {
|
|
|
29
32
|
onLoadEnd?: () => void;
|
|
30
33
|
onSelection?: (option: Option) => void;
|
|
31
34
|
disabled?: boolean;
|
|
35
|
+
/** Shared size axis — forwarded to the underlying Input trigger. */
|
|
36
|
+
size?: Responsive<Size>;
|
|
37
|
+
/** Shared variant/borderless axes — forwarded to the underlying Input trigger. */
|
|
38
|
+
variant?: Variant;
|
|
39
|
+
borderless?: boolean;
|
|
40
|
+
/** When set, render a hidden <input name> carrying the value so the Select submits in a form. */
|
|
41
|
+
name?: string;
|
|
32
42
|
} & Record<string, any>;
|
|
33
43
|
declare const Select: import("svelte").Component<$$ComponentProps, {}, "value" | "searchTerm" | "methods">;
|
|
34
44
|
type Select = ReturnType<typeof Select>;
|