@proyecto-viviana/solidaria 0.2.4 → 0.2.8
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 +21 -0
- package/dist/actiongroup/createActionGroup.d.ts +29 -0
- package/dist/actiongroup/createActionGroup.d.ts.map +1 -0
- package/dist/actiongroup/index.d.ts +2 -0
- package/dist/actiongroup/index.d.ts.map +1 -0
- package/dist/autocomplete/createAutocomplete.d.ts +6 -2
- package/dist/autocomplete/createAutocomplete.d.ts.map +1 -1
- package/dist/breadcrumbs/createBreadcrumbs.d.ts +2 -0
- package/dist/breadcrumbs/createBreadcrumbs.d.ts.map +1 -1
- package/dist/button/createToggleButtonGroup.d.ts +32 -0
- package/dist/button/createToggleButtonGroup.d.ts.map +1 -0
- package/dist/button/index.d.ts +2 -0
- package/dist/button/index.d.ts.map +1 -1
- package/dist/calendar/createCalendarCell.d.ts +2 -0
- package/dist/calendar/createCalendarCell.d.ts.map +1 -1
- package/dist/calendar/createCalendarGrid.d.ts.map +1 -1
- package/dist/calendar/createRangeCalendarCell.d.ts +3 -1
- package/dist/calendar/createRangeCalendarCell.d.ts.map +1 -1
- package/dist/checkbox/createCheckboxGroup.d.ts +5 -1
- package/dist/checkbox/createCheckboxGroup.d.ts.map +1 -1
- package/dist/collections/index.d.ts +56 -0
- package/dist/collections/index.d.ts.map +1 -0
- package/dist/color/createColorArea.d.ts.map +1 -1
- package/dist/color/createColorSlider.d.ts.map +1 -1
- package/dist/color/createColorWheel.d.ts.map +1 -1
- package/dist/combobox/createComboBox.d.ts +6 -0
- package/dist/combobox/createComboBox.d.ts.map +1 -1
- package/dist/datepicker/createDatePicker.d.ts +6 -0
- package/dist/datepicker/createDatePicker.d.ts.map +1 -1
- package/dist/datepicker/createDateRangePicker.d.ts +40 -0
- package/dist/datepicker/createDateRangePicker.d.ts.map +1 -0
- package/dist/datepicker/createDateSegment.d.ts +1 -1
- package/dist/datepicker/createDateSegment.d.ts.map +1 -1
- package/dist/datepicker/createTimeSegment.d.ts +29 -0
- package/dist/datepicker/createTimeSegment.d.ts.map +1 -0
- package/dist/datepicker/index.d.ts +2 -0
- package/dist/datepicker/index.d.ts.map +1 -1
- package/dist/disclosure/createDisclosureGroup.d.ts +2 -1
- package/dist/disclosure/createDisclosureGroup.d.ts.map +1 -1
- package/dist/dnd/createDrag.d.ts.map +1 -1
- package/dist/dnd/createDraggableCollection.d.ts +4 -0
- package/dist/dnd/createDraggableCollection.d.ts.map +1 -1
- package/dist/dnd/createDraggableItem.d.ts.map +1 -1
- package/dist/dnd/createDrop.d.ts.map +1 -1
- package/dist/dnd/createDroppableCollection.d.ts +32 -1
- package/dist/dnd/createDroppableCollection.d.ts.map +1 -1
- package/dist/dnd/createDroppableItem.d.ts.map +1 -1
- package/dist/dnd/index.d.ts +1 -1
- package/dist/dnd/index.d.ts.map +1 -1
- package/dist/grid/createGrid.d.ts.map +1 -1
- package/dist/gridlist/createGridList.d.ts.map +1 -1
- package/dist/index.d.ts +6 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4659 -3452
- package/dist/index.js.map +1 -7
- package/dist/index.ssr.js +4659 -3452
- package/dist/index.ssr.js.map +1 -7
- package/dist/interactions/createFocus.d.ts.map +1 -1
- package/dist/interactions/createFocusWithin.d.ts.map +1 -1
- package/dist/link/createLink.d.ts +10 -0
- package/dist/link/createLink.d.ts.map +1 -1
- package/dist/listbox/createListBox.d.ts +1 -0
- package/dist/listbox/createListBox.d.ts.map +1 -1
- package/dist/listbox/createOption.d.ts.map +1 -1
- package/dist/menu/createMenu.d.ts +1 -0
- package/dist/menu/createMenu.d.ts.map +1 -1
- package/dist/meter/createMeter.d.ts.map +1 -1
- package/dist/numberfield/createNumberField.d.ts +18 -0
- package/dist/numberfield/createNumberField.d.ts.map +1 -1
- package/dist/overlays/createModal.d.ts +16 -0
- package/dist/overlays/createModal.d.ts.map +1 -1
- package/dist/overlays/createOverlay.d.ts.map +1 -1
- package/dist/overlays/index.d.ts +1 -1
- package/dist/overlays/index.d.ts.map +1 -1
- package/dist/popover/createOverlayPosition.d.ts.map +1 -1
- package/dist/popover/createPopover.d.ts.map +1 -1
- package/dist/progress/createProgressBar.d.ts.map +1 -1
- package/dist/radio/createRadioGroup.d.ts +2 -2
- package/dist/radio/createRadioGroup.d.ts.map +1 -1
- package/dist/searchfield/createSearchField.d.ts.map +1 -1
- package/dist/select/createHiddenSelect.d.ts.map +1 -1
- package/dist/select/createSelect.d.ts.map +1 -1
- package/dist/slider/createSlider.d.ts.map +1 -1
- package/dist/table/createTable.d.ts.map +1 -1
- package/dist/tabs/createTabs.d.ts +1 -1
- package/dist/tabs/createTabs.d.ts.map +1 -1
- package/dist/tag/createTag.d.ts.map +1 -1
- package/dist/tag/createTagGroup.d.ts.map +1 -1
- package/dist/toast/createToast.d.ts +4 -0
- package/dist/toast/createToast.d.ts.map +1 -1
- package/dist/toast/createToastRegion.d.ts.map +1 -1
- package/dist/toolbar/createToolbar.d.ts.map +1 -1
- package/dist/tooltip/createTooltipTrigger.d.ts.map +1 -1
- package/dist/tree/createTree.d.ts.map +1 -1
- package/dist/tree/createTreeItem.d.ts.map +1 -1
- package/dist/tree/types.d.ts +4 -0
- package/dist/tree/types.d.ts.map +1 -1
- package/dist/utils/env.d.ts +1 -1
- package/dist/utils/env.d.ts.map +1 -1
- package/dist/utils/platform.d.ts.map +1 -1
- package/dist/visually-hidden/createVisuallyHidden.d.ts.map +1 -1
- package/package.json +8 -6
- package/src/actiongroup/createActionGroup.ts +324 -0
- package/src/actiongroup/index.ts +8 -0
- package/src/autocomplete/createAutocomplete.ts +32 -9
- package/src/breadcrumbs/createBreadcrumbs.ts +10 -15
- package/src/button/createButton.ts +1 -1
- package/src/button/createToggleButtonGroup.ts +128 -0
- package/src/button/index.ts +9 -0
- package/src/calendar/createCalendarCell.ts +6 -4
- package/src/calendar/createCalendarGrid.ts +27 -18
- package/src/calendar/createRangeCalendarCell.ts +26 -9
- package/src/checkbox/createCheckboxGroup.ts +21 -4
- package/src/collections/index.ts +242 -0
- package/src/color/createColorArea.ts +380 -314
- package/src/color/createColorField.ts +137 -137
- package/src/color/createColorSlider.ts +286 -197
- package/src/color/createColorSwatch.ts +40 -40
- package/src/color/createColorWheel.ts +218 -208
- package/src/color/index.ts +24 -24
- package/src/color/types.ts +116 -116
- package/src/combobox/createComboBox.ts +670 -647
- package/src/combobox/index.ts +6 -6
- package/src/datepicker/createDatePicker.ts +54 -16
- package/src/datepicker/createDateRangePicker.ts +246 -0
- package/src/datepicker/createDateSegment.ts +185 -31
- package/src/datepicker/createTimeSegment.ts +370 -0
- package/src/datepicker/index.ts +14 -0
- package/src/dialog/createDialog.ts +120 -120
- package/src/dialog/index.ts +2 -2
- package/src/dialog/types.ts +19 -19
- package/src/disclosure/createDisclosureGroup.ts +5 -2
- package/src/dnd/createDrag.ts +224 -209
- package/src/dnd/createDraggableCollection.ts +96 -63
- package/src/dnd/createDraggableItem.ts +259 -243
- package/src/dnd/createDrop.ts +322 -321
- package/src/dnd/createDroppableCollection.ts +682 -293
- package/src/dnd/createDroppableItem.ts +215 -213
- package/src/dnd/index.ts +55 -47
- package/src/dnd/types.ts +89 -89
- package/src/dnd/utils.ts +294 -294
- package/src/focus/createAutoFocus.ts +321 -321
- package/src/focus/createFocusRestore.ts +313 -313
- package/src/focus/createVirtualFocus.ts +396 -396
- package/src/form/createFormValidation.ts +224 -224
- package/src/form/index.ts +11 -11
- package/src/grid/createGrid.ts +3 -1
- package/src/gridlist/createGridList.ts +16 -0
- package/src/gridlist/createGridListItem.ts +1 -1
- package/src/i18n/NumberFormatter.ts +266 -266
- package/src/i18n/createCollator.ts +79 -79
- package/src/i18n/createDateFormatter.ts +83 -83
- package/src/i18n/createFilter.ts +131 -131
- package/src/i18n/createNumberFormatter.ts +52 -52
- package/src/i18n/index.ts +40 -40
- package/src/i18n/locale.tsx +188 -188
- package/src/i18n/utils.ts +99 -99
- package/src/index.ts +51 -0
- package/src/interactions/createFocus.ts +6 -5
- package/src/interactions/createFocusWithin.ts +6 -5
- package/src/interactions/createLongPress.ts +174 -174
- package/src/interactions/createMove.ts +289 -289
- package/src/interactions/createPress.ts +5 -5
- package/src/landmark/createLandmark.ts +377 -377
- package/src/landmark/index.ts +8 -8
- package/src/link/createLink.ts +23 -8
- package/src/listbox/createListBox.ts +308 -269
- package/src/listbox/createOption.ts +162 -151
- package/src/listbox/index.ts +12 -12
- package/src/live-announcer/announce.ts +322 -322
- package/src/live-announcer/index.ts +9 -9
- package/src/menu/createMenu.ts +405 -396
- package/src/menu/createMenuItem.ts +149 -149
- package/src/menu/createMenuTrigger.ts +88 -88
- package/src/menu/index.ts +18 -18
- package/src/meter/createMeter.ts +1 -6
- package/src/numberfield/createNumberField.ts +311 -268
- package/src/numberfield/index.ts +5 -5
- package/src/overlays/ariaHideOutside.ts +219 -219
- package/src/overlays/createInteractOutside.ts +149 -149
- package/src/overlays/createModal.tsx +238 -202
- package/src/overlays/createOverlay.ts +165 -155
- package/src/overlays/createOverlayTrigger.ts +85 -85
- package/src/overlays/createPreventScroll.ts +266 -266
- package/src/overlays/index.ts +48 -44
- package/src/popover/calculatePosition.ts +6 -6
- package/src/popover/createOverlayPosition.ts +7 -4
- package/src/popover/createPopover.ts +21 -7
- package/src/progress/createProgressBar.ts +6 -1
- package/src/radio/createRadioGroup.ts +88 -14
- package/src/searchfield/createSearchField.ts +241 -186
- package/src/searchfield/index.ts +2 -2
- package/src/select/createHiddenSelect.tsx +263 -236
- package/src/select/createSelect.ts +373 -395
- package/src/select/index.ts +14 -14
- package/src/slider/createSlider.ts +364 -349
- package/src/slider/index.ts +2 -2
- package/src/ssr/index.tsx +370 -370
- package/src/table/createTable.ts +3 -1
- package/src/table/createTableColumnHeader.ts +1 -1
- package/src/table/createTableRow.ts +1 -1
- package/src/tabs/createTabs.ts +80 -51
- package/src/tag/createTag.ts +135 -6
- package/src/tag/createTagGroup.ts +7 -2
- package/src/toast/createToast.ts +8 -2
- package/src/toast/createToastRegion.ts +0 -1
- package/src/toolbar/createToolbar.ts +75 -1
- package/src/tooltip/createTooltip.ts +79 -79
- package/src/tooltip/createTooltipTrigger.ts +226 -222
- package/src/tooltip/index.ts +6 -6
- package/src/tree/createTree.ts +261 -246
- package/src/tree/createTreeItem.ts +282 -233
- package/src/tree/createTreeSelectionCheckbox.ts +68 -68
- package/src/tree/index.ts +16 -16
- package/src/tree/types.ts +91 -87
- package/src/utils/env.ts +55 -54
- package/src/utils/platform.ts +16 -6
- package/src/visually-hidden/createVisuallyHidden.ts +139 -124
- package/src/visually-hidden/index.ts +6 -6
|
@@ -1,186 +1,241 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Provides the behavior and accessibility implementation for a search field.
|
|
3
|
-
* A search field allows a user to enter and clear a search query.
|
|
4
|
-
* Based on @react-aria/searchfield useSearchField.
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
import { type JSX } from 'solid-js';
|
|
8
|
-
import { createTextField, type AriaTextFieldProps, type TextFieldAria } from '../textfield';
|
|
9
|
-
import { mergeProps } from '../utils';
|
|
10
|
-
import { type MaybeAccessor, access } from '../utils/reactivity';
|
|
11
|
-
import type { SearchFieldState } from '@proyecto-viviana/solid-stately';
|
|
12
|
-
|
|
13
|
-
export interface AriaSearchFieldProps extends Omit<AriaTextFieldProps, 'type'> {
|
|
14
|
-
/** Handler that is called when the user submits the search (pressing Enter). */
|
|
15
|
-
onSubmit?: (value: string) => void;
|
|
16
|
-
/** Handler that is called when the clear button is pressed or Escape clears the field. */
|
|
17
|
-
onClear?: () => void;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export interface SearchFieldAria extends Omit<TextFieldAria, 'inputProps'> {
|
|
21
|
-
/** Props for the input element. */
|
|
22
|
-
inputProps: JSX.InputHTMLAttributes<HTMLInputElement>;
|
|
23
|
-
/** Props for the clear button. */
|
|
24
|
-
clearButtonProps: {
|
|
25
|
-
'aria-label': string;
|
|
26
|
-
tabIndex: number;
|
|
27
|
-
disabled?: boolean;
|
|
28
|
-
onMouseDown: (e: MouseEvent) => void;
|
|
29
|
-
onClick: () => void;
|
|
30
|
-
};
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* Provides the behavior and accessibility implementation for a search field.
|
|
35
|
-
*/
|
|
36
|
-
export function createSearchField(
|
|
37
|
-
props: MaybeAccessor<AriaSearchFieldProps>,
|
|
38
|
-
state: SearchFieldState,
|
|
39
|
-
inputRef?: () => HTMLInputElement | null
|
|
40
|
-
): SearchFieldAria {
|
|
41
|
-
const getProps = () => access(props);
|
|
42
|
-
|
|
43
|
-
// Use createTextField for the base implementation
|
|
44
|
-
const textFieldAria = createTextField({
|
|
45
|
-
get value() {
|
|
46
|
-
return state.value();
|
|
47
|
-
},
|
|
48
|
-
get isDisabled() {
|
|
49
|
-
return getProps().isDisabled;
|
|
50
|
-
},
|
|
51
|
-
get isReadOnly() {
|
|
52
|
-
return getProps().isReadOnly;
|
|
53
|
-
},
|
|
54
|
-
get isRequired() {
|
|
55
|
-
return getProps().isRequired;
|
|
56
|
-
},
|
|
57
|
-
get isInvalid() {
|
|
58
|
-
return getProps().isInvalid;
|
|
59
|
-
},
|
|
60
|
-
get label() {
|
|
61
|
-
return getProps().label;
|
|
62
|
-
},
|
|
63
|
-
get 'aria-label'() {
|
|
64
|
-
return getProps()['aria-label'];
|
|
65
|
-
},
|
|
66
|
-
get 'aria-labelledby'() {
|
|
67
|
-
return getProps()['aria-labelledby'];
|
|
68
|
-
},
|
|
69
|
-
get 'aria-describedby'() {
|
|
70
|
-
return getProps()['aria-describedby'];
|
|
71
|
-
},
|
|
72
|
-
get description() {
|
|
73
|
-
return getProps().description;
|
|
74
|
-
},
|
|
75
|
-
get errorMessage() {
|
|
76
|
-
return getProps().errorMessage;
|
|
77
|
-
},
|
|
78
|
-
get placeholder() {
|
|
79
|
-
return getProps().placeholder;
|
|
80
|
-
},
|
|
81
|
-
get name() {
|
|
82
|
-
return getProps().name;
|
|
83
|
-
},
|
|
84
|
-
get autoFocus() {
|
|
85
|
-
return getProps().autoFocus;
|
|
86
|
-
},
|
|
87
|
-
get autoComplete() {
|
|
88
|
-
return getProps().autoComplete;
|
|
89
|
-
},
|
|
90
|
-
get
|
|
91
|
-
return getProps().
|
|
92
|
-
},
|
|
93
|
-
get
|
|
94
|
-
return getProps().
|
|
95
|
-
},
|
|
96
|
-
get
|
|
97
|
-
return getProps().
|
|
98
|
-
},
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
return
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Provides the behavior and accessibility implementation for a search field.
|
|
3
|
+
* A search field allows a user to enter and clear a search query.
|
|
4
|
+
* Based on @react-aria/searchfield useSearchField.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { type JSX } from 'solid-js';
|
|
8
|
+
import { createTextField, type AriaTextFieldProps, type TextFieldAria } from '../textfield';
|
|
9
|
+
import { mergeProps } from '../utils';
|
|
10
|
+
import { type MaybeAccessor, access } from '../utils/reactivity';
|
|
11
|
+
import type { SearchFieldState } from '@proyecto-viviana/solid-stately';
|
|
12
|
+
|
|
13
|
+
export interface AriaSearchFieldProps extends Omit<AriaTextFieldProps, 'type'> {
|
|
14
|
+
/** Handler that is called when the user submits the search (pressing Enter). */
|
|
15
|
+
onSubmit?: (value: string) => void;
|
|
16
|
+
/** Handler that is called when the clear button is pressed or Escape clears the field. */
|
|
17
|
+
onClear?: () => void;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export interface SearchFieldAria extends Omit<TextFieldAria, 'inputProps'> {
|
|
21
|
+
/** Props for the input element. */
|
|
22
|
+
inputProps: JSX.InputHTMLAttributes<HTMLInputElement>;
|
|
23
|
+
/** Props for the clear button. */
|
|
24
|
+
clearButtonProps: {
|
|
25
|
+
'aria-label': string;
|
|
26
|
+
tabIndex: number;
|
|
27
|
+
disabled?: boolean;
|
|
28
|
+
onMouseDown: (e: MouseEvent) => void;
|
|
29
|
+
onClick: () => void;
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Provides the behavior and accessibility implementation for a search field.
|
|
35
|
+
*/
|
|
36
|
+
export function createSearchField(
|
|
37
|
+
props: MaybeAccessor<AriaSearchFieldProps>,
|
|
38
|
+
state: SearchFieldState,
|
|
39
|
+
inputRef?: () => HTMLInputElement | null
|
|
40
|
+
): SearchFieldAria {
|
|
41
|
+
const getProps = () => access(props);
|
|
42
|
+
|
|
43
|
+
// Use createTextField for the base implementation
|
|
44
|
+
const textFieldAria = createTextField({
|
|
45
|
+
get value() {
|
|
46
|
+
return state.value();
|
|
47
|
+
},
|
|
48
|
+
get isDisabled() {
|
|
49
|
+
return getProps().isDisabled;
|
|
50
|
+
},
|
|
51
|
+
get isReadOnly() {
|
|
52
|
+
return getProps().isReadOnly;
|
|
53
|
+
},
|
|
54
|
+
get isRequired() {
|
|
55
|
+
return getProps().isRequired;
|
|
56
|
+
},
|
|
57
|
+
get isInvalid() {
|
|
58
|
+
return getProps().isInvalid;
|
|
59
|
+
},
|
|
60
|
+
get label() {
|
|
61
|
+
return getProps().label;
|
|
62
|
+
},
|
|
63
|
+
get 'aria-label'() {
|
|
64
|
+
return getProps()['aria-label'];
|
|
65
|
+
},
|
|
66
|
+
get 'aria-labelledby'() {
|
|
67
|
+
return getProps()['aria-labelledby'];
|
|
68
|
+
},
|
|
69
|
+
get 'aria-describedby'() {
|
|
70
|
+
return getProps()['aria-describedby'];
|
|
71
|
+
},
|
|
72
|
+
get description() {
|
|
73
|
+
return getProps().description;
|
|
74
|
+
},
|
|
75
|
+
get errorMessage() {
|
|
76
|
+
return getProps().errorMessage;
|
|
77
|
+
},
|
|
78
|
+
get placeholder() {
|
|
79
|
+
return getProps().placeholder;
|
|
80
|
+
},
|
|
81
|
+
get name() {
|
|
82
|
+
return getProps().name;
|
|
83
|
+
},
|
|
84
|
+
get autoFocus() {
|
|
85
|
+
return getProps().autoFocus;
|
|
86
|
+
},
|
|
87
|
+
get autoComplete() {
|
|
88
|
+
return getProps().autoComplete;
|
|
89
|
+
},
|
|
90
|
+
get inputMode() {
|
|
91
|
+
return getProps().inputMode;
|
|
92
|
+
},
|
|
93
|
+
get autoCorrect() {
|
|
94
|
+
return getProps().autoCorrect;
|
|
95
|
+
},
|
|
96
|
+
get autoCapitalize() {
|
|
97
|
+
return getProps().autoCapitalize;
|
|
98
|
+
},
|
|
99
|
+
get spellCheck() {
|
|
100
|
+
return getProps().spellCheck;
|
|
101
|
+
},
|
|
102
|
+
get maxLength() {
|
|
103
|
+
return getProps().maxLength;
|
|
104
|
+
},
|
|
105
|
+
get minLength() {
|
|
106
|
+
return getProps().minLength;
|
|
107
|
+
},
|
|
108
|
+
get pattern() {
|
|
109
|
+
return getProps().pattern;
|
|
110
|
+
},
|
|
111
|
+
get onFocus() {
|
|
112
|
+
return getProps().onFocus;
|
|
113
|
+
},
|
|
114
|
+
get onBlur() {
|
|
115
|
+
return getProps().onBlur;
|
|
116
|
+
},
|
|
117
|
+
get onFocusChange() {
|
|
118
|
+
return getProps().onFocusChange;
|
|
119
|
+
},
|
|
120
|
+
get onKeyDown() {
|
|
121
|
+
return getProps().onKeyDown;
|
|
122
|
+
},
|
|
123
|
+
get onKeyUp() {
|
|
124
|
+
return getProps().onKeyUp;
|
|
125
|
+
},
|
|
126
|
+
get onCopy() {
|
|
127
|
+
return getProps().onCopy;
|
|
128
|
+
},
|
|
129
|
+
get onCut() {
|
|
130
|
+
return getProps().onCut;
|
|
131
|
+
},
|
|
132
|
+
get onPaste() {
|
|
133
|
+
return getProps().onPaste;
|
|
134
|
+
},
|
|
135
|
+
get onCompositionStart() {
|
|
136
|
+
return getProps().onCompositionStart;
|
|
137
|
+
},
|
|
138
|
+
get onCompositionEnd() {
|
|
139
|
+
return getProps().onCompositionEnd;
|
|
140
|
+
},
|
|
141
|
+
get onCompositionUpdate() {
|
|
142
|
+
return getProps().onCompositionUpdate;
|
|
143
|
+
},
|
|
144
|
+
get onSelect() {
|
|
145
|
+
return getProps().onSelect;
|
|
146
|
+
},
|
|
147
|
+
get onBeforeInput() {
|
|
148
|
+
return getProps().onBeforeInput;
|
|
149
|
+
},
|
|
150
|
+
get onInput() {
|
|
151
|
+
return getProps().onInput;
|
|
152
|
+
},
|
|
153
|
+
type: 'search',
|
|
154
|
+
onChange: (value: string) => {
|
|
155
|
+
state.setValue(value);
|
|
156
|
+
getProps().onChange?.(value);
|
|
157
|
+
},
|
|
158
|
+
});
|
|
159
|
+
|
|
160
|
+
// Handle keyboard events for search field
|
|
161
|
+
const onKeyDown: JSX.EventHandler<HTMLInputElement, KeyboardEvent> = (e) => {
|
|
162
|
+
const p = getProps();
|
|
163
|
+
|
|
164
|
+
if (p.isDisabled || p.isReadOnly) {
|
|
165
|
+
if (e.key === 'Enter') {
|
|
166
|
+
e.preventDefault();
|
|
167
|
+
}
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
if (e.key === 'Enter' && p.onSubmit) {
|
|
172
|
+
e.preventDefault();
|
|
173
|
+
p.onSubmit(state.value());
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
if (e.key === 'Escape') {
|
|
177
|
+
const currentValue = state.value();
|
|
178
|
+
const inputValue = inputRef?.()?.value ?? '';
|
|
179
|
+
|
|
180
|
+
// Only clear if there's a value
|
|
181
|
+
if (currentValue !== '' || inputValue !== '') {
|
|
182
|
+
e.preventDefault();
|
|
183
|
+
e.stopPropagation();
|
|
184
|
+
state.setValue('');
|
|
185
|
+
p.onClear?.();
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
};
|
|
189
|
+
|
|
190
|
+
// Handle clear button click
|
|
191
|
+
const onClearButtonClick = () => {
|
|
192
|
+
const p = getProps();
|
|
193
|
+
if (p.isDisabled || p.isReadOnly) return;
|
|
194
|
+
state.setValue('');
|
|
195
|
+
p.onClear?.();
|
|
196
|
+
// Focus the input after clearing
|
|
197
|
+
inputRef?.()?.focus();
|
|
198
|
+
};
|
|
199
|
+
|
|
200
|
+
// Prevent focus from leaving input on mobile when clicking clear button
|
|
201
|
+
const onClearButtonMouseDown = (e: MouseEvent) => {
|
|
202
|
+
e.preventDefault();
|
|
203
|
+
};
|
|
204
|
+
|
|
205
|
+
return {
|
|
206
|
+
get labelProps() {
|
|
207
|
+
return textFieldAria.labelProps;
|
|
208
|
+
},
|
|
209
|
+
get inputProps() {
|
|
210
|
+
return mergeProps(
|
|
211
|
+
{
|
|
212
|
+
onKeyDown,
|
|
213
|
+
// Clear defaultValue since it's handled by state
|
|
214
|
+
defaultValue: undefined,
|
|
215
|
+
} as Record<string, unknown>,
|
|
216
|
+
textFieldAria.inputProps as Record<string, unknown>
|
|
217
|
+
) as JSX.InputHTMLAttributes<HTMLInputElement>;
|
|
218
|
+
},
|
|
219
|
+
get clearButtonProps() {
|
|
220
|
+
const p = getProps();
|
|
221
|
+
const isDisabled = p.isDisabled || p.isReadOnly;
|
|
222
|
+
|
|
223
|
+
return {
|
|
224
|
+
'aria-label': 'Clear search',
|
|
225
|
+
tabIndex: -1, // Exclude from tab order
|
|
226
|
+
disabled: isDisabled,
|
|
227
|
+
onMouseDown: onClearButtonMouseDown,
|
|
228
|
+
onClick: onClearButtonClick,
|
|
229
|
+
};
|
|
230
|
+
},
|
|
231
|
+
get descriptionProps() {
|
|
232
|
+
return textFieldAria.descriptionProps;
|
|
233
|
+
},
|
|
234
|
+
get errorMessageProps() {
|
|
235
|
+
return textFieldAria.errorMessageProps;
|
|
236
|
+
},
|
|
237
|
+
get isInvalid() {
|
|
238
|
+
return textFieldAria.isInvalid;
|
|
239
|
+
},
|
|
240
|
+
};
|
|
241
|
+
}
|
package/src/searchfield/index.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { createSearchField } from './createSearchField';
|
|
2
|
-
export type { AriaSearchFieldProps, SearchFieldAria } from './createSearchField';
|
|
1
|
+
export { createSearchField } from './createSearchField';
|
|
2
|
+
export type { AriaSearchFieldProps, SearchFieldAria } from './createSearchField';
|