@synthaxai/ui 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +9 -0
- package/README.md +40 -220
- package/dist/data-display/DataTable/DataTable.svelte +14 -8
- package/dist/data-display/DataTable/DataTable.svelte.d.ts +64 -61
- package/dist/data-display/DataTable/DataTable.svelte.d.ts.map +1 -1
- package/dist/forms/DatePicker/DatePicker.svelte +1564 -0
- package/dist/forms/DatePicker/DatePicker.svelte.d.ts +129 -0
- package/dist/forms/DatePicker/DatePicker.svelte.d.ts.map +1 -0
- package/dist/forms/DatePicker/index.d.ts +8 -0
- package/dist/forms/DatePicker/index.d.ts.map +1 -0
- package/dist/forms/DatePicker/index.js +7 -0
- package/dist/forms/MultiSelect/MultiSelect.svelte +1651 -0
- package/dist/forms/MultiSelect/MultiSelect.svelte.d.ts +127 -0
- package/dist/forms/MultiSelect/MultiSelect.svelte.d.ts.map +1 -0
- package/dist/forms/MultiSelect/index.d.ts +9 -0
- package/dist/forms/MultiSelect/index.d.ts.map +1 -0
- package/dist/forms/MultiSelect/index.js +7 -0
- package/dist/forms/SearchInput/SearchInput.svelte +1319 -0
- package/dist/forms/SearchInput/SearchInput.svelte.d.ts +148 -0
- package/dist/forms/SearchInput/SearchInput.svelte.d.ts.map +1 -0
- package/dist/forms/SearchInput/index.d.ts +9 -0
- package/dist/forms/SearchInput/index.d.ts.map +1 -0
- package/dist/forms/SearchInput/index.js +7 -0
- package/dist/forms/TextInput/TextInput.svelte +763 -122
- package/dist/forms/TextInput/TextInput.svelte.d.ts +98 -13
- package/dist/forms/TextInput/TextInput.svelte.d.ts.map +1 -1
- package/dist/forms/TextInput/index.d.ts +7 -1
- package/dist/forms/TextInput/index.d.ts.map +1 -1
- package/dist/forms/TextInput/index.js +7 -1
- package/dist/forms/index.d.ts +3 -0
- package/dist/forms/index.d.ts.map +1 -1
- package/dist/forms/index.js +3 -0
- package/dist/index.d.ts +5 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/package.json +3 -3
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import type { Snippet } from 'svelte';
|
|
2
|
+
import type { HTMLInputAttributes } from 'svelte/elements';
|
|
3
|
+
import { Search } from 'lucide-svelte';
|
|
4
|
+
import type { InputMode, AutoComplete } from '../../types/index.js';
|
|
5
|
+
type InputSize = 'sm' | 'md' | 'lg';
|
|
6
|
+
/**
|
|
7
|
+
* Search option item with value, label, and optional metadata.
|
|
8
|
+
*/
|
|
9
|
+
export interface SearchOption {
|
|
10
|
+
/** Unique value for the option */
|
|
11
|
+
value: string;
|
|
12
|
+
/** Display label for the option */
|
|
13
|
+
label: string;
|
|
14
|
+
/** Whether the option is disabled */
|
|
15
|
+
disabled?: boolean;
|
|
16
|
+
/** Optional description shown below the label */
|
|
17
|
+
description?: string;
|
|
18
|
+
/** Optional icon or visual indicator */
|
|
19
|
+
icon?: typeof Search;
|
|
20
|
+
/** Optional metadata for custom rendering */
|
|
21
|
+
metadata?: Record<string, unknown>;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Grouped search options for categorized results.
|
|
25
|
+
*/
|
|
26
|
+
export interface SearchOptionGroup {
|
|
27
|
+
/** Group label */
|
|
28
|
+
label: string;
|
|
29
|
+
/** Options in this group */
|
|
30
|
+
options: SearchOption[];
|
|
31
|
+
}
|
|
32
|
+
type SearchOptions = SearchOption[] | SearchOptionGroup[];
|
|
33
|
+
interface Props extends Omit<HTMLInputAttributes, 'class' | 'size' | 'value' | 'onselect'> {
|
|
34
|
+
/** Unique identifier for the input */
|
|
35
|
+
id?: string;
|
|
36
|
+
/** Form field name */
|
|
37
|
+
name?: string;
|
|
38
|
+
/** Label text for the input */
|
|
39
|
+
label: string;
|
|
40
|
+
/** Current input value (the search query) */
|
|
41
|
+
value?: string;
|
|
42
|
+
/** Currently selected option */
|
|
43
|
+
selected?: SearchOption | null;
|
|
44
|
+
/** Placeholder text */
|
|
45
|
+
placeholder?: string;
|
|
46
|
+
/** Options to display (flat or grouped) */
|
|
47
|
+
options?: SearchOptions;
|
|
48
|
+
/** Whether the field is required */
|
|
49
|
+
required?: boolean;
|
|
50
|
+
/** Whether the field is disabled */
|
|
51
|
+
disabled?: boolean;
|
|
52
|
+
/** Whether the field is read-only */
|
|
53
|
+
readonly?: boolean;
|
|
54
|
+
/** Error message to display */
|
|
55
|
+
error?: string;
|
|
56
|
+
/** Hint text to display below the input */
|
|
57
|
+
hint?: string;
|
|
58
|
+
/** Success message when valid */
|
|
59
|
+
successMessage?: string;
|
|
60
|
+
/** Size of the input */
|
|
61
|
+
size?: InputSize;
|
|
62
|
+
/** Whether to hide the label visually (still accessible) */
|
|
63
|
+
hideLabel?: boolean;
|
|
64
|
+
/** Additional CSS classes for the wrapper */
|
|
65
|
+
class?: string;
|
|
66
|
+
/** Show loading spinner during async search */
|
|
67
|
+
loading?: boolean;
|
|
68
|
+
/** Message to show when no results found */
|
|
69
|
+
emptyMessage?: string;
|
|
70
|
+
/** Minimum characters before triggering search */
|
|
71
|
+
minSearchLength?: number;
|
|
72
|
+
/** Debounce delay for search in milliseconds */
|
|
73
|
+
debounceMs?: number;
|
|
74
|
+
/** Whether to show clear button when has value */
|
|
75
|
+
clearable?: boolean;
|
|
76
|
+
/** Whether to open dropdown on focus (even if empty) */
|
|
77
|
+
openOnFocus?: boolean;
|
|
78
|
+
/** Whether to auto-select first option */
|
|
79
|
+
autoSelect?: boolean;
|
|
80
|
+
/** Whether to allow free text (value not from options) */
|
|
81
|
+
allowFreeText?: boolean;
|
|
82
|
+
/** Icon to display on the left */
|
|
83
|
+
iconLeft?: Snippet;
|
|
84
|
+
/** Custom content for option rendering */
|
|
85
|
+
optionContent?: Snippet<[SearchOption]>;
|
|
86
|
+
/** Custom empty state content */
|
|
87
|
+
emptyContent?: Snippet;
|
|
88
|
+
/** Custom loading content */
|
|
89
|
+
loadingContent?: Snippet;
|
|
90
|
+
/** Input mode for mobile keyboards */
|
|
91
|
+
inputMode?: InputMode;
|
|
92
|
+
/** Autocomplete value */
|
|
93
|
+
autocomplete?: AutoComplete;
|
|
94
|
+
/** Called when search query changes (debounced) */
|
|
95
|
+
onsearch?: (query: string) => void;
|
|
96
|
+
/** Called when an option is selected */
|
|
97
|
+
onselect?: (option: SearchOption) => void;
|
|
98
|
+
/** Called when selection is cleared */
|
|
99
|
+
onclear?: () => void;
|
|
100
|
+
/** Called when input value changes */
|
|
101
|
+
oninput?: (event: Event) => void;
|
|
102
|
+
/** Called when input is focused */
|
|
103
|
+
onfocus?: (event: FocusEvent) => void;
|
|
104
|
+
/** Called when input loses focus */
|
|
105
|
+
onblur?: (event: FocusEvent) => void;
|
|
106
|
+
/** Test ID for e2e testing */
|
|
107
|
+
testId?: string;
|
|
108
|
+
/** Show validation state immediately */
|
|
109
|
+
validateOnMount?: boolean;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* SearchInput
|
|
113
|
+
*
|
|
114
|
+
* A fully accessible autocomplete/combobox component following WAI-ARIA 1.2 pattern.
|
|
115
|
+
* Supports async search, keyboard navigation, and custom option rendering.
|
|
116
|
+
*
|
|
117
|
+
* Designed for healthcare applications requiring patient, provider, or payer search.
|
|
118
|
+
*
|
|
119
|
+
* @example Basic usage
|
|
120
|
+
* <SearchInput
|
|
121
|
+
* id="patient-search"
|
|
122
|
+
* label="Search Patient"
|
|
123
|
+
* value={searchQuery}
|
|
124
|
+
* options={patients}
|
|
125
|
+
* onselect={(option) => handlePatientSelect(option)}
|
|
126
|
+
* onsearch={(query) => searchPatients(query)}
|
|
127
|
+
* />
|
|
128
|
+
*
|
|
129
|
+
* @example With custom rendering
|
|
130
|
+
* <SearchInput
|
|
131
|
+
* id="payer-search"
|
|
132
|
+
* label="Insurance Payer"
|
|
133
|
+
* value={payerQuery}
|
|
134
|
+
* options={payers}
|
|
135
|
+
* onselect={handlePayerSelect}
|
|
136
|
+
* >
|
|
137
|
+
* {#snippet optionContent(option)}
|
|
138
|
+
* <div class="flex items-center gap-2">
|
|
139
|
+
* <span class="font-medium">{option.label}</span>
|
|
140
|
+
* <span class="text-sm text-muted">{option.metadata?.type}</span>
|
|
141
|
+
* </div>
|
|
142
|
+
* {/snippet}
|
|
143
|
+
* </SearchInput>
|
|
144
|
+
*/
|
|
145
|
+
declare const SearchInput: import("svelte").Component<Props, {}, "value" | "selected">;
|
|
146
|
+
type SearchInput = ReturnType<typeof SearchInput>;
|
|
147
|
+
export default SearchInput;
|
|
148
|
+
//# sourceMappingURL=SearchInput.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SearchInput.svelte.d.ts","sourceRoot":"","sources":["../../../src/forms/SearchInput/SearchInput.svelte.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @synthaxai/ui - SearchInput Component
|
|
3
|
+
*
|
|
4
|
+
* A fully accessible autocomplete/combobox component following
|
|
5
|
+
* WAI-ARIA 1.2 combobox pattern for healthcare applications.
|
|
6
|
+
*/
|
|
7
|
+
export { default as SearchInput } from './SearchInput.svelte';
|
|
8
|
+
export type { SearchOption, SearchOptionGroup } from './SearchInput.svelte';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/forms/SearchInput/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC9D,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC"}
|