@api-client/ui 0.5.24 → 0.5.25
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/.cursor/rules/lit-best-practices.mdc +12 -1
- package/.github/instructions/lit-best-practices.instructions.md +2 -0
- package/build/src/md/dropdown-list/internals/UiDropdownList.d.ts.map +1 -1
- package/build/src/md/dropdown-list/internals/UiDropdownList.js +4 -3
- package/build/src/md/dropdown-list/internals/UiDropdownList.js.map +1 -1
- package/build/src/md/input/Input.d.ts +8 -4
- package/build/src/md/input/Input.d.ts.map +1 -1
- package/build/src/md/input/Input.js +8 -36
- package/build/src/md/input/Input.js.map +1 -1
- package/build/src/md/list/internals/List.d.ts +3 -1
- package/build/src/md/list/internals/List.d.ts.map +1 -1
- package/build/src/md/list/internals/List.js +9 -4
- package/build/src/md/list/internals/List.js.map +1 -1
- package/build/src/md/menu/internal/Menu.d.ts +8 -7
- package/build/src/md/menu/internal/Menu.d.ts.map +1 -1
- package/build/src/md/menu/internal/Menu.js +26 -29
- package/build/src/md/menu/internal/Menu.js.map +1 -1
- package/build/src/md/select/index.d.ts +4 -0
- package/build/src/md/select/index.d.ts.map +1 -0
- package/build/src/md/select/index.js +3 -0
- package/build/src/md/select/index.js.map +1 -0
- package/build/src/md/select/internals/Option.d.ts +125 -0
- package/build/src/md/select/internals/Option.d.ts.map +1 -0
- package/build/src/md/select/internals/Option.js +242 -0
- package/build/src/md/select/internals/Option.js.map +1 -0
- package/build/src/md/select/internals/Option.styles.d.ts +3 -0
- package/build/src/md/select/internals/Option.styles.d.ts.map +1 -0
- package/build/src/md/select/internals/Option.styles.js +139 -0
- package/build/src/md/select/internals/Option.styles.js.map +1 -0
- package/build/src/md/select/internals/Select.d.ts +250 -0
- package/build/src/md/select/internals/Select.d.ts.map +1 -0
- package/build/src/md/select/internals/Select.js +606 -0
- package/build/src/md/select/internals/Select.js.map +1 -0
- package/build/src/md/select/internals/Select.styles.d.ts +3 -0
- package/build/src/md/select/internals/Select.styles.d.ts.map +1 -0
- package/build/src/md/select/internals/Select.styles.js +22 -0
- package/build/src/md/select/internals/Select.styles.js.map +1 -0
- package/build/src/md/select/ui-option.d.ts +12 -0
- package/build/src/md/select/ui-option.d.ts.map +1 -0
- package/build/src/md/select/ui-option.js +29 -0
- package/build/src/md/select/ui-option.js.map +1 -0
- package/build/src/md/select/ui-select.d.ts +12 -0
- package/build/src/md/select/ui-select.d.ts.map +1 -0
- package/build/src/md/select/ui-select.js +27 -0
- package/build/src/md/select/ui-select.js.map +1 -0
- package/build/src/md/text-field/internals/TextField.d.ts.map +1 -1
- package/build/src/md/text-field/internals/TextField.js +1 -0
- package/build/src/md/text-field/internals/TextField.js.map +1 -1
- package/demo/md/index.html +2 -0
- package/demo/md/inputs/input.ts +4 -0
- package/demo/md/select/index.html +16 -0
- package/demo/md/select/index.ts +202 -0
- package/package.json +1 -1
- package/src/md/dropdown-list/internals/UiDropdownList.ts +4 -3
- package/src/md/input/Input.ts +8 -37
- package/src/md/list/internals/List.ts +12 -5
- package/src/md/menu/internal/Menu.ts +27 -18
- package/src/md/select/index.ts +3 -0
- package/src/md/select/internals/Option.styles.ts +139 -0
- package/src/md/select/internals/Option.ts +210 -0
- package/src/md/select/internals/Select.styles.ts +22 -0
- package/src/md/select/internals/Select.ts +534 -0
- package/src/md/select/ui-option.ts +18 -0
- package/src/md/select/ui-select.ts +17 -0
- package/src/md/text-field/internals/TextField.ts +1 -0
- package/test/md/menu/SubMenu.test.ts +2 -3
- package/test/md/select/Select.test.ts +667 -0
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
import { LitElement, PropertyValues, TemplateResult } from 'lit';
|
|
2
|
+
import type UiOption from './Option.js';
|
|
3
|
+
import type { UiMenuElement } from '../../menu/ui-menu.js';
|
|
4
|
+
import '../../text-field/ui-outlined-text-field.js';
|
|
5
|
+
import '../../menu/ui-menu.js';
|
|
6
|
+
import '../../icons/ui-icon.js';
|
|
7
|
+
import '@material/web/focus/md-focus-ring.js';
|
|
8
|
+
export interface UiSelectChangeEvent {
|
|
9
|
+
value: string | undefined;
|
|
10
|
+
item: UiOption | null;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Material Design 3 Select component that behaves like an outlined text field with dropdown.
|
|
14
|
+
*
|
|
15
|
+
* @fires change - Dispatched when the selection changes. The event is non-bubbling and non-cancelable.
|
|
16
|
+
* The `event.detail` object contains the `value` and `item` properties.
|
|
17
|
+
* @fires open - Dispatched when the dropdown opens
|
|
18
|
+
* @fires close - Dispatched when the dropdown closes
|
|
19
|
+
*/
|
|
20
|
+
export default class UiSelect extends LitElement {
|
|
21
|
+
#private;
|
|
22
|
+
static readonly formAssociated = true;
|
|
23
|
+
/**
|
|
24
|
+
* The currently selected value. Corresponds to the `value` attribute of the selected `ui-option`.
|
|
25
|
+
* When set programmatically, it will update the selected option if a matching option exists.
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* ```html
|
|
29
|
+
* <ui-select value="apple">
|
|
30
|
+
* <ui-option value="apple">Apple</ui-option>
|
|
31
|
+
* <ui-option value="banana">Banana</ui-option>
|
|
32
|
+
* </ui-select>
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
get value(): string | undefined;
|
|
36
|
+
set value(newValue: string | undefined);
|
|
37
|
+
/**
|
|
38
|
+
* The name attribute for form submission. This value will be used as the key
|
|
39
|
+
* when the form is submitted.
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* ```html
|
|
43
|
+
* <ui-select name="country" value="us">
|
|
44
|
+
* <ui-option value="us">United States</ui-option>
|
|
45
|
+
* </ui-select>
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
48
|
+
accessor name: string | undefined;
|
|
49
|
+
/**
|
|
50
|
+
* The label text displayed in the select field. Provides accessible labeling
|
|
51
|
+
* and is shown as the floating label in the outlined text field.
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* ```html
|
|
55
|
+
* <ui-select label="Select a country">
|
|
56
|
+
* <ui-option value="us">United States</ui-option>
|
|
57
|
+
* </ui-select>
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
60
|
+
accessor label: string | undefined;
|
|
61
|
+
/**
|
|
62
|
+
* Whether the select is required for form validation. When true, the select
|
|
63
|
+
* must have a value selected for the form to be valid.
|
|
64
|
+
*
|
|
65
|
+
* @default false
|
|
66
|
+
* @example
|
|
67
|
+
* ```html
|
|
68
|
+
* <ui-select required label="Required field">
|
|
69
|
+
* <ui-option value="option1">Option 1</ui-option>
|
|
70
|
+
* </ui-select>
|
|
71
|
+
* ```
|
|
72
|
+
*/
|
|
73
|
+
accessor required: boolean;
|
|
74
|
+
/**
|
|
75
|
+
* Whether the select is in an invalid state. This is typically set automatically
|
|
76
|
+
* during validation, but can be set manually to indicate validation errors.
|
|
77
|
+
*
|
|
78
|
+
* @example
|
|
79
|
+
* ```html
|
|
80
|
+
* <ui-select invalid invalidText="Please select a valid option">
|
|
81
|
+
* <ui-option value="option1">Option 1</ui-option>
|
|
82
|
+
* </ui-select>
|
|
83
|
+
* ```
|
|
84
|
+
*/
|
|
85
|
+
accessor invalid: boolean | undefined;
|
|
86
|
+
/**
|
|
87
|
+
* The error message to display when the select is invalid. This text is shown
|
|
88
|
+
* below the select field when `invalid` is true.
|
|
89
|
+
*
|
|
90
|
+
* @example
|
|
91
|
+
* ```html
|
|
92
|
+
* <ui-select invalid invalidText="This field is required">
|
|
93
|
+
* <ui-option value="option1">Option 1</ui-option>
|
|
94
|
+
* </ui-select>
|
|
95
|
+
* ```
|
|
96
|
+
*/
|
|
97
|
+
accessor invalidText: string | undefined;
|
|
98
|
+
/**
|
|
99
|
+
* Whether the select is disabled. When disabled, the select cannot be interacted
|
|
100
|
+
* with and will not receive focus or respond to user input.
|
|
101
|
+
*
|
|
102
|
+
* @default false
|
|
103
|
+
* @example
|
|
104
|
+
* ```html
|
|
105
|
+
* <ui-select disabled label="Disabled select">
|
|
106
|
+
* <ui-option value="option1">Option 1</ui-option>
|
|
107
|
+
* </ui-select>
|
|
108
|
+
* ```
|
|
109
|
+
*/
|
|
110
|
+
accessor disabled: boolean;
|
|
111
|
+
/**
|
|
112
|
+
* Whether the dropdown menu is currently open. This property reflects the
|
|
113
|
+
* current state of the dropdown and can be set programmatically to open/close it.
|
|
114
|
+
*
|
|
115
|
+
* @default false
|
|
116
|
+
* @example
|
|
117
|
+
* ```javascript
|
|
118
|
+
* // Open the dropdown programmatically
|
|
119
|
+
* selectElement.open = true;
|
|
120
|
+
*
|
|
121
|
+
* // Close the dropdown
|
|
122
|
+
* selectElement.open = false;
|
|
123
|
+
* ```
|
|
124
|
+
*/
|
|
125
|
+
accessor open: boolean;
|
|
126
|
+
accessor selectedOption: UiOption | null;
|
|
127
|
+
accessor ariaActiveDescendant: string | undefined;
|
|
128
|
+
accessor menu: UiMenuElement;
|
|
129
|
+
/**
|
|
130
|
+
* Returns the currently selected option element. This provides access to the
|
|
131
|
+
* full `ui-option` element, not just its value.
|
|
132
|
+
*
|
|
133
|
+
* @readonly
|
|
134
|
+
* @example
|
|
135
|
+
* ```javascript
|
|
136
|
+
* const select = document.querySelector('ui-select');
|
|
137
|
+
* const selectedItem = select.selectedItem;
|
|
138
|
+
* if (selectedItem) {
|
|
139
|
+
* console.log('Selected option:', selectedItem.textContent);
|
|
140
|
+
* }
|
|
141
|
+
* ```
|
|
142
|
+
*/
|
|
143
|
+
get selectedItem(): UiOption | null;
|
|
144
|
+
/**
|
|
145
|
+
* Returns the text content that should be displayed in the select field.
|
|
146
|
+
* This is the rendered value of the currently selected option.
|
|
147
|
+
*
|
|
148
|
+
* @readonly
|
|
149
|
+
* @example
|
|
150
|
+
* ```javascript
|
|
151
|
+
* const select = document.querySelector('ui-select');
|
|
152
|
+
* console.log('Display text:', select.renderValue);
|
|
153
|
+
* ```
|
|
154
|
+
*/
|
|
155
|
+
get renderValue(): string;
|
|
156
|
+
/**
|
|
157
|
+
* Returns the form element that contains this select, if any.
|
|
158
|
+
* Part of the form-associated custom element API.
|
|
159
|
+
*
|
|
160
|
+
* @readonly
|
|
161
|
+
*/
|
|
162
|
+
get form(): HTMLFormElement | null;
|
|
163
|
+
/**
|
|
164
|
+
* Returns the validity state of the select element.
|
|
165
|
+
* Part of the form-associated custom element API.
|
|
166
|
+
*
|
|
167
|
+
* @readonly
|
|
168
|
+
*/
|
|
169
|
+
get validity(): ValidityState;
|
|
170
|
+
/**
|
|
171
|
+
* Returns the validation message for the select element.
|
|
172
|
+
* Part of the form-associated custom element API.
|
|
173
|
+
*
|
|
174
|
+
* @readonly
|
|
175
|
+
*/
|
|
176
|
+
get validationMessage(): string;
|
|
177
|
+
/**
|
|
178
|
+
* Returns whether the select element will be validated when the form is submitted.
|
|
179
|
+
* Part of the form-associated custom element API.
|
|
180
|
+
*
|
|
181
|
+
* @readonly
|
|
182
|
+
*/
|
|
183
|
+
get willValidate(): boolean;
|
|
184
|
+
/**
|
|
185
|
+
* Checks the validity of the select element and returns true if valid.
|
|
186
|
+
* Part of the form-associated custom element API.
|
|
187
|
+
*
|
|
188
|
+
* @returns {boolean} True if the element is valid, false otherwise
|
|
189
|
+
* @example
|
|
190
|
+
* ```javascript
|
|
191
|
+
* const select = document.querySelector('ui-select');
|
|
192
|
+
* if (!select.checkValidity()) {
|
|
193
|
+
* console.log('Select is invalid:', select.validationMessage);
|
|
194
|
+
* }
|
|
195
|
+
* ```
|
|
196
|
+
*/
|
|
197
|
+
checkValidity(): boolean;
|
|
198
|
+
constructor();
|
|
199
|
+
connectedCallback(): void;
|
|
200
|
+
/**
|
|
201
|
+
* Resets the select to its initial state. Called automatically when the parent
|
|
202
|
+
* form is reset. Part of the form-associated custom element API.
|
|
203
|
+
*
|
|
204
|
+
* @example
|
|
205
|
+
* ```javascript
|
|
206
|
+
* const select = document.querySelector('ui-select');
|
|
207
|
+
* select.formResetCallback(); // Clears the selection
|
|
208
|
+
* ```
|
|
209
|
+
*/
|
|
210
|
+
formResetCallback(): void;
|
|
211
|
+
/**
|
|
212
|
+
* Restores the select's state from saved form data. Called automatically when
|
|
213
|
+
* the browser restores form state. Part of the form-associated custom element API.
|
|
214
|
+
*
|
|
215
|
+
* @param {string | null} state - The saved state to restore
|
|
216
|
+
*/
|
|
217
|
+
formStateRestoreCallback(state: string | null): void;
|
|
218
|
+
/**
|
|
219
|
+
* Validates the select element and updates its validity state. This is called
|
|
220
|
+
* automatically during property changes, but can be called manually to trigger validation.
|
|
221
|
+
*
|
|
222
|
+
* @example
|
|
223
|
+
* ```javascript
|
|
224
|
+
* const select = document.querySelector('ui-select');
|
|
225
|
+
* select.validate();
|
|
226
|
+
* if (select.invalid) {
|
|
227
|
+
* console.log('Validation failed:', select.invalidText);
|
|
228
|
+
* }
|
|
229
|
+
* ```
|
|
230
|
+
*/
|
|
231
|
+
validate(): void;
|
|
232
|
+
protected willUpdate(changedProperties: PropertyValues<this>): void;
|
|
233
|
+
protected setCurrentOption(): Promise<void>;
|
|
234
|
+
protected handleKeydown(e: KeyboardEvent): void;
|
|
235
|
+
protected handleBlur(e: FocusEvent): void;
|
|
236
|
+
protected handleClick(e: Event): void;
|
|
237
|
+
protected handleOpenChange(): Promise<void>;
|
|
238
|
+
handleSelect(e: CustomEvent<{
|
|
239
|
+
item: UiOption;
|
|
240
|
+
}>): void;
|
|
241
|
+
handleHighlightChange(e: CustomEvent<{
|
|
242
|
+
item: UiOption | null;
|
|
243
|
+
}>): void;
|
|
244
|
+
handleMenuClose(): void;
|
|
245
|
+
render(): TemplateResult;
|
|
246
|
+
protected renderInput(): TemplateResult;
|
|
247
|
+
protected renderMenu(): TemplateResult;
|
|
248
|
+
protected renderFocusRing(): TemplateResult;
|
|
249
|
+
}
|
|
250
|
+
//# sourceMappingURL=Select.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Select.d.ts","sourceRoot":"","sources":["../../../../../src/md/select/internals/Select.ts"],"names":[],"mappings":"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"}
|