@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,151 +1,162 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Provides the behavior and accessibility implementation for an option in a listbox.
|
|
3
|
-
* Based on @react-aria/listbox useOption.
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import { type JSX, type Accessor } from 'solid-js';
|
|
7
|
-
import { createPress } from '../interactions/createPress';
|
|
8
|
-
import { createHover } from '../interactions/createHover';
|
|
9
|
-
import { createFocusRing } from '../interactions/createFocusRing';
|
|
10
|
-
import { mergeProps } from '../utils/mergeProps';
|
|
11
|
-
import { access, type MaybeAccessor } from '../utils/reactivity';
|
|
12
|
-
import { getListBoxData } from './createListBox';
|
|
13
|
-
import type { ListState, Key } from '@proyecto-viviana/solid-stately';
|
|
14
|
-
|
|
15
|
-
export interface AriaOptionProps {
|
|
16
|
-
/** The unique key for the option. */
|
|
17
|
-
key: Key;
|
|
18
|
-
/** Whether the option is disabled. */
|
|
19
|
-
isDisabled?: boolean;
|
|
20
|
-
/** An accessible label for the option. */
|
|
21
|
-
'aria-label'?: string;
|
|
22
|
-
/** Whether selection should occur on press up. */
|
|
23
|
-
shouldSelectOnPressUp?: boolean;
|
|
24
|
-
/** Whether to focus the option on hover. */
|
|
25
|
-
shouldFocusOnHover?: boolean;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
export interface OptionAria {
|
|
29
|
-
/** Props for the option element. */
|
|
30
|
-
optionProps: JSX.HTMLAttributes<HTMLElement>;
|
|
31
|
-
/** Props for the label text inside the option. */
|
|
32
|
-
labelProps: JSX.HTMLAttributes<HTMLElement>;
|
|
33
|
-
/** Props for the description text inside the option. */
|
|
34
|
-
descriptionProps: JSX.HTMLAttributes<HTMLElement>;
|
|
35
|
-
/** Whether the option is currently selected. */
|
|
36
|
-
isSelected: Accessor<boolean>;
|
|
37
|
-
/** Whether the option is currently focused. */
|
|
38
|
-
isFocused: Accessor<boolean>;
|
|
39
|
-
/** Whether the option is keyboard focused. */
|
|
40
|
-
isFocusVisible: Accessor<boolean>;
|
|
41
|
-
/** Whether the option is currently pressed. */
|
|
42
|
-
isPressed: Accessor<boolean>;
|
|
43
|
-
/** Whether the option is disabled. */
|
|
44
|
-
isDisabled: Accessor<boolean>;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
* Provides the behavior and accessibility implementation for an option in a listbox.
|
|
49
|
-
*/
|
|
50
|
-
export function createOption<T>(
|
|
51
|
-
props: MaybeAccessor<AriaOptionProps>,
|
|
52
|
-
state: ListState<T>,
|
|
53
|
-
_ref?: () => HTMLElement | null
|
|
54
|
-
): OptionAria {
|
|
55
|
-
const getProps = () => access(props);
|
|
56
|
-
|
|
57
|
-
// Get shared data from listbox
|
|
58
|
-
const getData = () => getListBoxData(state);
|
|
59
|
-
|
|
60
|
-
// Computed states
|
|
61
|
-
const isDisabled: Accessor<boolean> = () => {
|
|
62
|
-
return getProps().isDisabled
|
|
63
|
-
};
|
|
64
|
-
|
|
65
|
-
const isSelected: Accessor<boolean> = () => {
|
|
66
|
-
return state.isSelected(getProps().key);
|
|
67
|
-
};
|
|
68
|
-
|
|
69
|
-
const isFocused: Accessor<boolean> = () => {
|
|
70
|
-
return state.focusedKey() === getProps().key;
|
|
71
|
-
};
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
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
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Provides the behavior and accessibility implementation for an option in a listbox.
|
|
3
|
+
* Based on @react-aria/listbox useOption.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { type JSX, type Accessor } from 'solid-js';
|
|
7
|
+
import { createPress } from '../interactions/createPress';
|
|
8
|
+
import { createHover } from '../interactions/createHover';
|
|
9
|
+
import { createFocusRing } from '../interactions/createFocusRing';
|
|
10
|
+
import { mergeProps } from '../utils/mergeProps';
|
|
11
|
+
import { access, type MaybeAccessor } from '../utils/reactivity';
|
|
12
|
+
import { getListBoxData } from './createListBox';
|
|
13
|
+
import type { ListState, Key } from '@proyecto-viviana/solid-stately';
|
|
14
|
+
|
|
15
|
+
export interface AriaOptionProps {
|
|
16
|
+
/** The unique key for the option. */
|
|
17
|
+
key: Key;
|
|
18
|
+
/** Whether the option is disabled. */
|
|
19
|
+
isDisabled?: boolean;
|
|
20
|
+
/** An accessible label for the option. */
|
|
21
|
+
'aria-label'?: string;
|
|
22
|
+
/** Whether selection should occur on press up. */
|
|
23
|
+
shouldSelectOnPressUp?: boolean;
|
|
24
|
+
/** Whether to focus the option on hover. */
|
|
25
|
+
shouldFocusOnHover?: boolean;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export interface OptionAria {
|
|
29
|
+
/** Props for the option element. */
|
|
30
|
+
optionProps: JSX.HTMLAttributes<HTMLElement>;
|
|
31
|
+
/** Props for the label text inside the option. */
|
|
32
|
+
labelProps: JSX.HTMLAttributes<HTMLElement>;
|
|
33
|
+
/** Props for the description text inside the option. */
|
|
34
|
+
descriptionProps: JSX.HTMLAttributes<HTMLElement>;
|
|
35
|
+
/** Whether the option is currently selected. */
|
|
36
|
+
isSelected: Accessor<boolean>;
|
|
37
|
+
/** Whether the option is currently focused. */
|
|
38
|
+
isFocused: Accessor<boolean>;
|
|
39
|
+
/** Whether the option is keyboard focused. */
|
|
40
|
+
isFocusVisible: Accessor<boolean>;
|
|
41
|
+
/** Whether the option is currently pressed. */
|
|
42
|
+
isPressed: Accessor<boolean>;
|
|
43
|
+
/** Whether the option is disabled. */
|
|
44
|
+
isDisabled: Accessor<boolean>;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Provides the behavior and accessibility implementation for an option in a listbox.
|
|
49
|
+
*/
|
|
50
|
+
export function createOption<T>(
|
|
51
|
+
props: MaybeAccessor<AriaOptionProps>,
|
|
52
|
+
state: ListState<T>,
|
|
53
|
+
_ref?: () => HTMLElement | null
|
|
54
|
+
): OptionAria {
|
|
55
|
+
const getProps = () => access(props);
|
|
56
|
+
|
|
57
|
+
// Get shared data from listbox
|
|
58
|
+
const getData = () => getListBoxData(state);
|
|
59
|
+
|
|
60
|
+
// Computed states
|
|
61
|
+
const isDisabled: Accessor<boolean> = () => {
|
|
62
|
+
return Boolean(getData()?.isDisabled || getProps().isDisabled || state.isDisabled(getProps().key));
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
const isSelected: Accessor<boolean> = () => {
|
|
66
|
+
return state.isSelected(getProps().key);
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
const isFocused: Accessor<boolean> = () => {
|
|
70
|
+
return state.focusedKey() === getProps().key;
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
const shouldSelectOnPressUp = () => {
|
|
74
|
+
return getProps().shouldSelectOnPressUp ?? getData()?.shouldSelectOnPressUp ?? true;
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
const selectAndAction = () => {
|
|
78
|
+
const key = getProps().key;
|
|
79
|
+
if (state.selectionMode() !== 'none') {
|
|
80
|
+
state.select(key);
|
|
81
|
+
}
|
|
82
|
+
getData()?.onAction?.(key);
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
// Handle press
|
|
86
|
+
const { pressProps, isPressed } = createPress({
|
|
87
|
+
get isDisabled() {
|
|
88
|
+
return isDisabled();
|
|
89
|
+
},
|
|
90
|
+
onPressStart(e) {
|
|
91
|
+
if (!shouldSelectOnPressUp() && e.pointerType !== 'keyboard' && e.pointerType !== 'virtual') {
|
|
92
|
+
selectAndAction();
|
|
93
|
+
}
|
|
94
|
+
},
|
|
95
|
+
onPress(e) {
|
|
96
|
+
if (shouldSelectOnPressUp() || e.pointerType === 'keyboard' || e.pointerType === 'virtual') {
|
|
97
|
+
selectAndAction();
|
|
98
|
+
}
|
|
99
|
+
},
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
// Handle hover
|
|
103
|
+
const { hoverProps, isHovered } = createHover({
|
|
104
|
+
get isDisabled() {
|
|
105
|
+
return isDisabled();
|
|
106
|
+
},
|
|
107
|
+
onHoverStart() {
|
|
108
|
+
const shouldFocus = getProps().shouldFocusOnHover ?? getData()?.shouldFocusOnHover;
|
|
109
|
+
if (shouldFocus) {
|
|
110
|
+
state.setFocusedKey(getProps().key);
|
|
111
|
+
}
|
|
112
|
+
},
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
// Handle focus ring
|
|
116
|
+
const { isFocusVisible, focusProps } = createFocusRing();
|
|
117
|
+
|
|
118
|
+
// Generate unique IDs for label and description
|
|
119
|
+
const labelId = `${getProps().key}-label`;
|
|
120
|
+
const descriptionId = `${getProps().key}-desc`;
|
|
121
|
+
|
|
122
|
+
return {
|
|
123
|
+
get optionProps() {
|
|
124
|
+
const key = getProps().key;
|
|
125
|
+
const selectionMode = state.selectionMode();
|
|
126
|
+
const ariaLabel = getProps()['aria-label'];
|
|
127
|
+
|
|
128
|
+
return mergeProps(
|
|
129
|
+
pressProps as Record<string, unknown>,
|
|
130
|
+
hoverProps as Record<string, unknown>,
|
|
131
|
+
focusProps as Record<string, unknown>,
|
|
132
|
+
{
|
|
133
|
+
role: 'option',
|
|
134
|
+
id: String(key),
|
|
135
|
+
'aria-selected': selectionMode !== 'none' ? isSelected() : undefined,
|
|
136
|
+
'aria-disabled': isDisabled() || undefined,
|
|
137
|
+
'aria-label': ariaLabel,
|
|
138
|
+
'aria-labelledby': !ariaLabel ? labelId : undefined,
|
|
139
|
+
'aria-describedby': descriptionId,
|
|
140
|
+
tabIndex: isFocused() ? 0 : -1,
|
|
141
|
+
'data-selected': isSelected() || undefined,
|
|
142
|
+
'data-focused': isFocused() || undefined,
|
|
143
|
+
'data-focus-visible': isFocusVisible() || undefined,
|
|
144
|
+
'data-pressed': isPressed() || undefined,
|
|
145
|
+
'data-disabled': isDisabled() || undefined,
|
|
146
|
+
'data-hovered': isHovered() || undefined,
|
|
147
|
+
} as Record<string, unknown>
|
|
148
|
+
) as JSX.HTMLAttributes<HTMLElement>;
|
|
149
|
+
},
|
|
150
|
+
labelProps: {
|
|
151
|
+
id: labelId,
|
|
152
|
+
},
|
|
153
|
+
descriptionProps: {
|
|
154
|
+
id: descriptionId,
|
|
155
|
+
},
|
|
156
|
+
isSelected,
|
|
157
|
+
isFocused,
|
|
158
|
+
isFocusVisible: () => isFocused() && isFocusVisible(),
|
|
159
|
+
isPressed,
|
|
160
|
+
isDisabled,
|
|
161
|
+
};
|
|
162
|
+
}
|
package/src/listbox/index.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
export {
|
|
2
|
-
createListBox,
|
|
3
|
-
getListBoxData,
|
|
4
|
-
type AriaListBoxProps,
|
|
5
|
-
type ListBoxAria,
|
|
6
|
-
} from './createListBox';
|
|
7
|
-
|
|
8
|
-
export {
|
|
9
|
-
createOption,
|
|
10
|
-
type AriaOptionProps,
|
|
11
|
-
type OptionAria,
|
|
12
|
-
} from './createOption';
|
|
1
|
+
export {
|
|
2
|
+
createListBox,
|
|
3
|
+
getListBoxData,
|
|
4
|
+
type AriaListBoxProps,
|
|
5
|
+
type ListBoxAria,
|
|
6
|
+
} from './createListBox';
|
|
7
|
+
|
|
8
|
+
export {
|
|
9
|
+
createOption,
|
|
10
|
+
type AriaOptionProps,
|
|
11
|
+
type OptionAria,
|
|
12
|
+
} from './createOption';
|