@proyecto-viviana/solid-stately 0.5.1 → 0.6.0-rc.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-APACHE-2.0 +201 -0
- package/NOTICE +91 -0
- package/dist/autocomplete/createAutocompleteState.d.ts +2 -1
- package/dist/autocomplete/createAutocompleteState.d.ts.map +1 -0
- package/dist/autocomplete/index.d.ts +1 -0
- package/dist/autocomplete/index.d.ts.map +1 -0
- package/dist/calendar/IncompleteDate.d.ts +2 -1
- package/dist/calendar/IncompleteDate.d.ts.map +1 -0
- package/dist/calendar/createCalendarState.d.ts +7 -8
- package/dist/calendar/createCalendarState.d.ts.map +1 -0
- package/dist/calendar/createDateFieldState.d.ts +4 -20
- package/dist/calendar/createDateFieldState.d.ts.map +1 -0
- package/dist/calendar/createDatePickerState.d.ts +2 -7
- package/dist/calendar/createDatePickerState.d.ts.map +1 -0
- package/dist/calendar/createRangeCalendarState.d.ts +7 -7
- package/dist/calendar/createRangeCalendarState.d.ts.map +1 -0
- package/dist/calendar/createTimeFieldState.d.ts +4 -23
- package/dist/calendar/createTimeFieldState.d.ts.map +1 -0
- package/dist/calendar/index.d.ts +1 -0
- package/dist/calendar/index.d.ts.map +1 -0
- package/dist/calendar/intl/index.d.ts +1 -0
- package/dist/calendar/intl/index.d.ts.map +1 -0
- package/dist/checkbox/createCheckboxGroupState.d.ts +1 -0
- package/dist/checkbox/createCheckboxGroupState.d.ts.map +1 -0
- package/dist/checkbox/index.d.ts +1 -0
- package/dist/checkbox/index.d.ts.map +1 -0
- package/dist/collections/ListCollection.d.ts +5 -0
- package/dist/collections/ListCollection.d.ts.map +1 -0
- package/dist/collections/createListState.d.ts +2 -6
- package/dist/collections/createListState.d.ts.map +1 -0
- package/dist/collections/createMenuState.d.ts +30 -13
- package/dist/collections/createMenuState.d.ts.map +1 -0
- package/dist/collections/createSelectionState.d.ts +2 -5
- package/dist/collections/createSelectionState.d.ts.map +1 -0
- package/dist/collections/getChildNodes.d.ts +6 -3
- package/dist/collections/getChildNodes.d.ts.map +1 -0
- package/dist/collections/index.d.ts +2 -1
- package/dist/collections/index.d.ts.map +1 -0
- package/dist/collections/types.d.ts +36 -2
- package/dist/collections/types.d.ts.map +1 -0
- package/dist/color/Color.d.ts +7 -1
- package/dist/color/Color.d.ts.map +1 -0
- package/dist/color/createColorAreaState.d.ts +2 -5
- package/dist/color/createColorAreaState.d.ts.map +1 -0
- package/dist/color/createColorFieldState.d.ts +2 -5
- package/dist/color/createColorFieldState.d.ts.map +1 -0
- package/dist/color/createColorSliderState.d.ts +2 -5
- package/dist/color/createColorSliderState.d.ts.map +1 -0
- package/dist/color/createColorWheelState.d.ts +2 -5
- package/dist/color/createColorWheelState.d.ts.map +1 -0
- package/dist/color/getColorChannels.d.ts +3 -0
- package/dist/color/getColorChannels.d.ts.map +1 -0
- package/dist/color/index.d.ts +2 -1
- package/dist/color/index.d.ts.map +1 -0
- package/dist/color/intl/index.d.ts +1 -0
- package/dist/color/intl/index.d.ts.map +1 -0
- package/dist/color/types.d.ts +2 -1
- package/dist/color/types.d.ts.map +1 -0
- package/dist/combobox/createComboBoxState.d.ts +4 -8
- package/dist/combobox/createComboBoxState.d.ts.map +1 -0
- package/dist/combobox/index.d.ts +1 -0
- package/dist/combobox/index.d.ts.map +1 -0
- package/dist/data/createAsyncList.d.ts +1 -7
- package/dist/data/createAsyncList.d.ts.map +1 -0
- package/dist/data/createListData.d.ts +1 -6
- package/dist/data/createListData.d.ts.map +1 -0
- package/dist/data/createTreeData.d.ts +1 -6
- package/dist/data/createTreeData.d.ts.map +1 -0
- package/dist/data/index.d.ts +1 -0
- package/dist/data/index.d.ts.map +1 -0
- package/dist/datepicker/index.d.ts +1 -0
- package/dist/datepicker/index.d.ts.map +1 -0
- package/dist/disclosure/createDisclosureState.d.ts +2 -5
- package/dist/disclosure/createDisclosureState.d.ts.map +1 -0
- package/dist/disclosure/index.d.ts +1 -0
- package/dist/disclosure/index.d.ts.map +1 -0
- package/dist/dnd/createDragState.d.ts +2 -6
- package/dist/dnd/createDragState.d.ts.map +1 -0
- package/dist/dnd/createDraggableCollectionState.d.ts +39 -10
- package/dist/dnd/createDraggableCollectionState.d.ts.map +1 -0
- package/dist/dnd/createDropState.d.ts +2 -6
- package/dist/dnd/createDropState.d.ts.map +1 -0
- package/dist/dnd/createDroppableCollectionState.d.ts +28 -11
- package/dist/dnd/createDroppableCollectionState.d.ts.map +1 -0
- package/dist/dnd/index.d.ts +3 -2
- package/dist/dnd/index.d.ts.map +1 -0
- package/dist/dnd/types.d.ts +17 -0
- package/dist/dnd/types.d.ts.map +1 -0
- package/dist/flags/flags.d.ts +5 -0
- package/dist/flags/flags.d.ts.map +1 -0
- package/dist/form/createFormValidationState.d.ts +2 -9
- package/{src → dist}/form/createFormValidationState.d.ts.map +1 -1
- package/dist/form/index.d.ts +1 -0
- package/dist/form/index.d.ts.map +1 -0
- package/dist/grid/createGridState.d.ts +3 -2
- package/dist/grid/createGridState.d.ts.map +1 -0
- package/dist/grid/index.d.ts +1 -0
- package/dist/grid/index.d.ts.map +1 -0
- package/dist/grid/types.d.ts +23 -1
- package/dist/grid/types.d.ts.map +1 -0
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2030 -593
- package/dist/index.js.map +1 -1
- package/dist/menu/index.d.ts +2 -1
- package/dist/menu/index.d.ts.map +1 -0
- package/dist/numberfield/createNumberFieldState.d.ts +31 -6
- package/dist/numberfield/createNumberFieldState.d.ts.map +1 -0
- package/dist/numberfield/index.d.ts +1 -0
- package/dist/numberfield/index.d.ts.map +1 -0
- package/dist/overlays/createOverlayTriggerState.d.ts +12 -1
- package/dist/overlays/createOverlayTriggerState.d.ts.map +1 -0
- package/dist/overlays/index.d.ts +1 -0
- package/dist/overlays/index.d.ts.map +1 -0
- package/dist/private/flags/flags.js +26 -0
- package/dist/private/flags/flags.js.map +1 -0
- package/dist/radio/createRadioGroupState.d.ts +1 -0
- package/dist/radio/createRadioGroupState.d.ts.map +1 -0
- package/dist/radio/index.d.ts +1 -0
- package/dist/radio/index.d.ts.map +1 -0
- package/dist/searchfield/createSearchFieldState.d.ts +2 -5
- package/dist/searchfield/createSearchFieldState.d.ts.map +1 -0
- package/dist/searchfield/index.d.ts +1 -0
- package/dist/searchfield/index.d.ts.map +1 -0
- package/dist/select/createSelectState.d.ts +17 -6
- package/dist/select/createSelectState.d.ts.map +1 -0
- package/dist/select/index.d.ts +1 -0
- package/dist/select/index.d.ts.map +1 -0
- package/dist/selection/Selection.d.ts +2 -1
- package/dist/selection/Selection.d.ts.map +1 -0
- package/dist/selection/SelectionManager.d.ts +1 -19
- package/dist/selection/SelectionManager.d.ts.map +1 -0
- package/dist/selection/createMultipleSelectionState.d.ts +2 -13
- package/dist/selection/createMultipleSelectionState.d.ts.map +1 -0
- package/dist/selection/index.d.ts +1 -0
- package/dist/selection/index.d.ts.map +1 -0
- package/dist/slider/createSliderState.d.ts +2 -5
- package/dist/slider/createSliderState.d.ts.map +1 -0
- package/dist/slider/index.d.ts +1 -0
- package/dist/slider/index.d.ts.map +1 -0
- package/dist/ssr/index.d.ts +2 -7
- package/dist/ssr/index.d.ts.map +1 -0
- package/dist/steplist/createStepListState.d.ts +2 -5
- package/dist/steplist/createStepListState.d.ts.map +1 -0
- package/dist/steplist/index.d.ts +1 -0
- package/dist/steplist/index.d.ts.map +1 -0
- package/dist/table/TableCollection.d.ts +1 -0
- package/dist/table/TableCollection.d.ts.map +1 -0
- package/dist/table/createTableColumnResizeState.d.ts +2 -9
- package/dist/table/createTableColumnResizeState.d.ts.map +1 -0
- package/dist/table/createTableState.d.ts +2 -5
- package/dist/table/createTableState.d.ts.map +1 -0
- package/dist/table/createTreeGridState.d.ts +2 -8
- package/dist/table/createTreeGridState.d.ts.map +1 -0
- package/dist/table/index.d.ts +1 -0
- package/dist/table/index.d.ts.map +1 -0
- package/dist/table/types.d.ts +35 -1
- package/dist/table/types.d.ts.map +1 -0
- package/dist/tabs/createTabListState.d.ts +2 -5
- package/dist/tabs/createTabListState.d.ts.map +1 -0
- package/dist/tabs/index.d.ts +1 -0
- package/dist/tabs/index.d.ts.map +1 -0
- package/dist/textfield/createTextFieldState.d.ts +1 -0
- package/dist/textfield/createTextFieldState.d.ts.map +1 -0
- package/dist/textfield/index.d.ts +1 -0
- package/dist/textfield/index.d.ts.map +1 -0
- package/dist/toast/createToastState.d.ts +2 -5
- package/dist/toast/createToastState.d.ts.map +1 -0
- package/dist/toast/index.d.ts +1 -0
- package/dist/toast/index.d.ts.map +1 -0
- package/dist/toggle/createToggleGroupState.d.ts +1 -0
- package/dist/toggle/createToggleGroupState.d.ts.map +1 -0
- package/dist/toggle/createToggleState.d.ts +1 -0
- package/dist/toggle/createToggleState.d.ts.map +1 -0
- package/dist/toggle/index.d.ts +1 -0
- package/dist/toggle/index.d.ts.map +1 -0
- package/dist/tokenfield/TokenFieldValue.d.ts +72 -0
- package/dist/tokenfield/TokenFieldValue.d.ts.map +1 -0
- package/dist/tokenfield/createTokenFieldState.d.ts +33 -0
- package/dist/tokenfield/createTokenFieldState.d.ts.map +1 -0
- package/dist/tokenfield/index.d.ts +3 -0
- package/dist/tokenfield/index.d.ts.map +1 -0
- package/dist/tooltip/createTooltipTriggerState.d.ts +9 -8
- package/dist/tooltip/createTooltipTriggerState.d.ts.map +1 -0
- package/dist/tooltip/index.d.ts +1 -0
- package/dist/tooltip/index.d.ts.map +1 -0
- package/dist/tree/TreeCollection.d.ts +1 -0
- package/dist/tree/TreeCollection.d.ts.map +1 -0
- package/dist/tree/createTreeState.d.ts +2 -7
- package/{src → dist}/tree/createTreeState.d.ts.map +1 -1
- package/dist/tree/index.d.ts +1 -0
- package/dist/tree/index.d.ts.map +1 -0
- package/dist/tree/types.d.ts +19 -1
- package/dist/tree/types.d.ts.map +1 -0
- package/dist/utils/index.d.ts +3 -1
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/owner.d.ts +9 -0
- package/dist/utils/owner.d.ts.map +1 -0
- package/dist/utils/reactivity.d.ts +19 -0
- package/dist/utils/reactivity.d.ts.map +1 -0
- package/package.json +21 -9
- package/src/autocomplete/createAutocompleteState.ts +18 -4
- package/src/calendar/IncompleteDate.ts +15 -1
- package/src/calendar/createCalendarState.ts +194 -79
- package/src/calendar/createDateFieldState.ts +45 -31
- package/src/calendar/createDatePickerState.ts +32 -14
- package/src/calendar/createRangeCalendarState.ts +134 -73
- package/src/calendar/createTimeFieldState.ts +25 -6
- package/src/calendar/intl/index.ts +37 -2
- package/src/checkbox/createCheckboxGroupState.ts +29 -13
- package/src/collections/ListCollection.ts +31 -0
- package/src/collections/createListState.ts +23 -6
- package/src/collections/createMenuState.ts +59 -14
- package/src/collections/createSelectionState.ts +32 -12
- package/src/collections/getChildNodes.ts +20 -3
- package/src/collections/index.ts +2 -0
- package/src/collections/types.ts +35 -2
- package/src/color/Color.ts +61 -22
- package/src/color/createColorAreaState.ts +29 -4
- package/src/color/createColorFieldState.ts +37 -11
- package/src/color/createColorSliderState.ts +36 -7
- package/src/color/createColorWheelState.ts +20 -4
- package/src/color/getColorChannels.ts +16 -0
- package/src/color/index.ts +1 -0
- package/src/color/intl/index.ts +38 -3
- package/src/color/types.ts +1 -1
- package/src/combobox/createComboBoxState.ts +178 -195
- package/src/data/createAsyncList.ts +22 -2
- package/src/data/createListData.ts +19 -2
- package/src/data/createTreeData.ts +19 -3
- package/src/disclosure/createDisclosureState.ts +40 -19
- package/src/dnd/createDragState.ts +22 -4
- package/src/dnd/createDraggableCollectionState.ts +137 -10
- package/src/dnd/createDropState.ts +21 -3
- package/src/dnd/createDroppableCollectionState.ts +117 -11
- package/src/dnd/index.ts +4 -0
- package/src/dnd/types.ts +16 -0
- package/src/flags/flags.ts +25 -0
- package/src/form/createFormValidationState.ts +54 -36
- package/src/grid/createGridState.ts +187 -109
- package/src/grid/types.ts +22 -1
- package/src/index.ts +15 -0
- package/src/menu/index.ts +2 -0
- package/src/numberfield/createNumberFieldState.ts +153 -66
- package/src/overlays/createOverlayTriggerState.ts +31 -4
- package/src/radio/createRadioGroupState.ts +19 -5
- package/src/searchfield/createSearchFieldState.ts +18 -3
- package/src/select/createSelectState.ts +73 -8
- package/src/selection/Selection.ts +15 -1
- package/src/selection/SelectionManager.ts +14 -0
- package/src/selection/createMultipleSelectionState.ts +44 -25
- package/src/slider/createSliderState.ts +20 -5
- package/src/ssr/index.ts +27 -4
- package/src/steplist/createStepListState.ts +38 -17
- package/src/table/TableCollection.ts +14 -0
- package/src/table/createTableColumnResizeState.ts +20 -3
- package/src/table/createTableState.ts +22 -1
- package/src/table/createTreeGridState.ts +21 -4
- package/src/table/types.ts +36 -3
- package/src/tabs/createTabListState.ts +77 -34
- package/src/textfield/createTextFieldState.ts +17 -3
- package/src/toast/createToastState.ts +28 -3
- package/src/toggle/createToggleGroupState.ts +20 -5
- package/src/toggle/createToggleState.ts +19 -4
- package/src/tokenfield/TokenFieldValue.ts +440 -0
- package/src/tokenfield/createTokenFieldState.ts +88 -0
- package/src/tokenfield/index.ts +14 -0
- package/src/tooltip/createTooltipTriggerState.ts +49 -13
- package/src/tree/TreeCollection.ts +14 -0
- package/src/tree/createTreeState.ts +62 -35
- package/src/tree/types.ts +18 -1
- package/src/utils/index.ts +9 -1
- package/src/utils/owner.ts +20 -0
- package/src/utils/reactivity.ts +45 -1
- package/src/autocomplete/createAutocompleteState.d.ts +0 -48
- package/src/autocomplete/createAutocompleteState.d.ts.map +0 -1
- package/src/autocomplete/index.d.ts +0 -6
- package/src/autocomplete/index.d.ts.map +0 -1
- package/src/calendar/createCalendarState.d.ts +0 -152
- package/src/calendar/createCalendarState.d.ts.map +0 -1
- package/src/calendar/createDateFieldState.d.ts +0 -145
- package/src/calendar/createDateFieldState.d.ts.map +0 -1
- package/src/calendar/createRangeCalendarState.d.ts +0 -171
- package/src/calendar/createRangeCalendarState.d.ts.map +0 -1
- package/src/calendar/createTimeFieldState.d.ts +0 -97
- package/src/calendar/createTimeFieldState.d.ts.map +0 -1
- package/src/calendar/index.d.ts +0 -80
- package/src/calendar/index.d.ts.map +0 -1
- package/src/checkbox/createCheckboxGroupState.d.ts +0 -73
- package/src/checkbox/createCheckboxGroupState.d.ts.map +0 -1
- package/src/checkbox/index.d.ts +0 -6
- package/src/checkbox/index.d.ts.map +0 -1
- package/src/collections/ListCollection.d.ts +0 -40
- package/src/collections/ListCollection.d.ts.map +0 -1
- package/src/collections/createListState.d.ts +0 -94
- package/src/collections/createListState.d.ts.map +0 -1
- package/src/collections/createMenuState.d.ts +0 -55
- package/src/collections/createMenuState.d.ts.map +0 -1
- package/src/collections/createSelectionState.d.ts +0 -89
- package/src/collections/createSelectionState.d.ts.map +0 -1
- package/src/collections/index.d.ts +0 -38
- package/src/collections/index.d.ts.map +0 -1
- package/src/collections/types.d.ts +0 -147
- package/src/collections/types.d.ts.map +0 -1
- package/src/color/Color.d.ts +0 -43
- package/src/color/Color.d.ts.map +0 -1
- package/src/color/createColorAreaState.d.ts +0 -78
- package/src/color/createColorAreaState.d.ts.map +0 -1
- package/src/color/createColorFieldState.d.ts +0 -57
- package/src/color/createColorFieldState.d.ts.map +0 -1
- package/src/color/createColorSliderState.d.ts +0 -69
- package/src/color/createColorSliderState.d.ts.map +0 -1
- package/src/color/createColorWheelState.d.ts +0 -53
- package/src/color/createColorWheelState.d.ts.map +0 -1
- package/src/color/index.d.ts +0 -39
- package/src/color/index.d.ts.map +0 -1
- package/src/color/types.d.ts +0 -111
- package/src/color/types.d.ts.map +0 -1
- package/src/combobox/createComboBoxState.d.ts +0 -127
- package/src/combobox/createComboBoxState.d.ts.map +0 -1
- package/src/combobox/index.d.ts +0 -13
- package/src/combobox/index.d.ts.map +0 -1
- package/src/disclosure/createDisclosureState.d.ts +0 -68
- package/src/disclosure/createDisclosureState.d.ts.map +0 -1
- package/src/disclosure/index.d.ts +0 -10
- package/src/disclosure/index.d.ts.map +0 -1
- package/src/dnd/createDragState.d.ts +0 -68
- package/src/dnd/createDragState.d.ts.map +0 -1
- package/src/dnd/createDraggableCollectionState.d.ts +0 -68
- package/src/dnd/createDraggableCollectionState.d.ts.map +0 -1
- package/src/dnd/createDropState.d.ts +0 -80
- package/src/dnd/createDropState.d.ts.map +0 -1
- package/src/dnd/createDroppableCollectionState.d.ts +0 -107
- package/src/dnd/createDroppableCollectionState.d.ts.map +0 -1
- package/src/dnd/index.d.ts +0 -60
- package/src/dnd/index.d.ts.map +0 -1
- package/src/dnd/types.d.ts +0 -277
- package/src/dnd/types.d.ts.map +0 -1
- package/src/form/createFormValidationState.d.ts +0 -102
- package/src/form/index.d.ts +0 -16
- package/src/form/index.d.ts.map +0 -1
- package/src/grid/createGridState.d.ts +0 -15
- package/src/grid/createGridState.d.ts.map +0 -1
- package/src/grid/index.d.ts +0 -7
- package/src/grid/index.d.ts.map +0 -1
- package/src/grid/types.d.ts +0 -163
- package/src/grid/types.d.ts.map +0 -1
- package/src/index.d.ts +0 -311
- package/src/index.d.ts.map +0 -1
- package/src/numberfield/createNumberFieldState.d.ts +0 -67
- package/src/numberfield/createNumberFieldState.d.ts.map +0 -1
- package/src/numberfield/index.d.ts +0 -6
- package/src/numberfield/index.d.ts.map +0 -1
- package/src/overlays/createOverlayTriggerState.d.ts +0 -34
- package/src/overlays/createOverlayTriggerState.d.ts.map +0 -1
- package/src/overlays/index.d.ts +0 -6
- package/src/overlays/index.d.ts.map +0 -1
- package/src/radio/createRadioGroupState.d.ts +0 -79
- package/src/radio/createRadioGroupState.d.ts.map +0 -1
- package/src/radio/index.d.ts +0 -7
- package/src/radio/index.d.ts.map +0 -1
- package/src/searchfield/createSearchFieldState.d.ts +0 -27
- package/src/searchfield/createSearchFieldState.d.ts.map +0 -1
- package/src/searchfield/index.d.ts +0 -3
- package/src/searchfield/index.d.ts.map +0 -1
- package/src/select/createSelectState.d.ts +0 -75
- package/src/select/createSelectState.d.ts.map +0 -1
- package/src/select/index.d.ts +0 -2
- package/src/select/index.d.ts.map +0 -1
- package/src/slider/createSliderState.d.ts +0 -72
- package/src/slider/createSliderState.d.ts.map +0 -1
- package/src/slider/index.d.ts +0 -3
- package/src/slider/index.d.ts.map +0 -1
- package/src/ssr/index.d.ts +0 -28
- package/src/ssr/index.d.ts.map +0 -1
- package/src/table/TableCollection.d.ts +0 -54
- package/src/table/TableCollection.d.ts.map +0 -1
- package/src/table/createTableState.d.ts +0 -15
- package/src/table/createTableState.d.ts.map +0 -1
- package/src/table/index.d.ts +0 -18
- package/src/table/index.d.ts.map +0 -1
- package/src/table/types.d.ts +0 -145
- package/src/table/types.d.ts.map +0 -1
- package/src/tabs/createTabListState.d.ts +0 -70
- package/src/tabs/createTabListState.d.ts.map +0 -1
- package/src/tabs/index.d.ts +0 -8
- package/src/tabs/index.d.ts.map +0 -1
- package/src/textfield/createTextFieldState.d.ts +0 -32
- package/src/textfield/createTextFieldState.d.ts.map +0 -1
- package/src/textfield/index.d.ts +0 -6
- package/src/textfield/index.d.ts.map +0 -1
- package/src/toast/createToastState.d.ts +0 -129
- package/src/toast/createToastState.d.ts.map +0 -1
- package/src/toast/index.d.ts +0 -12
- package/src/toast/index.d.ts.map +0 -1
- package/src/toggle/createToggleState.d.ts +0 -34
- package/src/toggle/createToggleState.d.ts.map +0 -1
- package/src/toggle/index.d.ts +0 -2
- package/src/toggle/index.d.ts.map +0 -1
- package/src/tooltip/createTooltipTriggerState.d.ts +0 -39
- package/src/tooltip/createTooltipTriggerState.d.ts.map +0 -1
- package/src/tooltip/index.d.ts +0 -7
- package/src/tooltip/index.d.ts.map +0 -1
- package/src/tree/TreeCollection.d.ts +0 -43
- package/src/tree/TreeCollection.d.ts.map +0 -1
- package/src/tree/createTreeState.d.ts +0 -17
- package/src/tree/index.d.ts +0 -13
- package/src/tree/index.d.ts.map +0 -1
- package/src/tree/types.d.ts +0 -162
- package/src/tree/types.d.ts.map +0 -1
- package/src/utils/index.d.ts +0 -2
- package/src/utils/index.d.ts.map +0 -1
- package/src/utils/reactivity.d.ts +0 -28
- package/src/utils/reactivity.d.ts.map +0 -1
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2020 Adobe. All rights reserved.
|
|
3
|
+
* This file is licensed to you under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
* you may not use this file except in compliance with the License. You may obtain a copy
|
|
5
|
+
* of the License at http://www.apache.org/licenses/LICENSE-2.0
|
|
6
|
+
*
|
|
7
|
+
* Unless required by applicable law or agreed to in writing, software distributed under
|
|
8
|
+
* the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
|
|
9
|
+
* OF ANY KIND, either express or implied. See the License for the specific language
|
|
10
|
+
* governing permissions and limitations under the License.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
// Ported to SolidJS for Proyecto Viviana; based on packages/react-stately/src/combobox/useComboBoxState.ts
|
|
14
|
+
|
|
1
15
|
/**
|
|
2
16
|
* State management for ComboBox components.
|
|
3
17
|
* Based on @react-stately/combobox useComboBoxState.
|
|
@@ -6,10 +20,12 @@
|
|
|
6
20
|
* either type to filter options or select from a list.
|
|
7
21
|
*/
|
|
8
22
|
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
23
|
+
import { createMemo, createEffect, untrack } from "solid-js";
|
|
24
|
+
import type { Accessor } from "solid-js";
|
|
25
|
+
import { createInternalSignal, access, type MaybeAccessor } from "../utils";
|
|
26
|
+
import { createListState, type ListState } from "../collections/createListState";
|
|
12
27
|
import { createOverlayTriggerState } from "../overlays";
|
|
28
|
+
import { ListCollection } from "../collections/ListCollection";
|
|
13
29
|
import type { Key, CollectionNode, Collection, FocusStrategy } from "../collections/types";
|
|
14
30
|
import type { SelectionManager } from "../selection/SelectionManager";
|
|
15
31
|
|
|
@@ -103,6 +119,8 @@ export interface ComboBoxState<T = unknown> {
|
|
|
103
119
|
setSelectedKey(key: Key | null): void;
|
|
104
120
|
/** The currently selected keys (multiple mode). */
|
|
105
121
|
readonly selectedKeys: Accessor<Set<Key>>;
|
|
122
|
+
/** Replace the selected keys (multiple mode). */
|
|
123
|
+
setSelectedKeys(keys: Set<Key>): void;
|
|
106
124
|
/** The currently selected items (multiple mode). */
|
|
107
125
|
readonly selectedItems: Accessor<CollectionNode<T>[]>;
|
|
108
126
|
/** Remove a selected key (multiple mode). */
|
|
@@ -167,17 +185,17 @@ export function createComboBoxState<T = unknown>(
|
|
|
167
185
|
const isMultiple = () => getProps().selectionMode === "multiple";
|
|
168
186
|
|
|
169
187
|
// Track focus strategy for list navigation
|
|
170
|
-
const [focusStrategy, setFocusStrategy] =
|
|
188
|
+
const [focusStrategy, setFocusStrategy] = createInternalSignal<FocusStrategy | null>(null);
|
|
171
189
|
|
|
172
190
|
// Track whether we're showing all items (vs filtered)
|
|
173
|
-
const [showAllItems, setShowAllItems] =
|
|
191
|
+
const [showAllItems, setShowAllItems] = createInternalSignal(false);
|
|
174
192
|
|
|
175
193
|
// Track the menu open trigger
|
|
176
194
|
let menuOpenTrigger: MenuTriggerAction = "focus";
|
|
177
195
|
|
|
178
196
|
// ---- Multi-select State ----
|
|
179
197
|
const isMultiSelectionControlled = () => getProps().selectedKeys !== undefined;
|
|
180
|
-
const [internalSelectedKeys, setInternalSelectedKeys] =
|
|
198
|
+
const [internalSelectedKeys, setInternalSelectedKeys] = createInternalSignal<Set<Key>>(
|
|
181
199
|
new Set(getProps().defaultSelectedKeys ?? []),
|
|
182
200
|
);
|
|
183
201
|
|
|
@@ -197,7 +215,7 @@ export function createComboBoxState<T = unknown>(
|
|
|
197
215
|
// ---- Selection State (single mode) ----
|
|
198
216
|
// Note: Selection state is initialized first because input value may depend on it
|
|
199
217
|
const isSelectionControlled = () => getProps().selectedKey !== undefined;
|
|
200
|
-
const [internalSelectedKey, setInternalSelectedKey] =
|
|
218
|
+
const [internalSelectedKey, setInternalSelectedKey] = createInternalSignal<Key | null>(
|
|
201
219
|
getProps().defaultSelectedKey ?? null,
|
|
202
220
|
);
|
|
203
221
|
|
|
@@ -206,7 +224,7 @@ export function createComboBoxState<T = unknown>(
|
|
|
206
224
|
const isInputControlled = () => getProps().inputValue !== undefined;
|
|
207
225
|
|
|
208
226
|
// We'll set the proper initial value after collection is created
|
|
209
|
-
const [internalInputValue, setInternalInputValue] =
|
|
227
|
+
const [internalInputValue, setInternalInputValue] = createInternalSignal(
|
|
210
228
|
getProps().defaultInputValue ?? "",
|
|
211
229
|
);
|
|
212
230
|
// Track if we've initialized input from selection
|
|
@@ -217,6 +235,9 @@ export function createComboBoxState<T = unknown>(
|
|
|
217
235
|
};
|
|
218
236
|
|
|
219
237
|
const setInputValue = (value: string) => {
|
|
238
|
+
// Solid 2 batches writes onto a microtask, so onInputChange and the
|
|
239
|
+
// auto-open effect settle in one flush (CB-OC-03: onInputChange then
|
|
240
|
+
// onOpenChange(true, "input")).
|
|
220
241
|
if (!isInputControlled()) {
|
|
221
242
|
setInternalInputValue(value);
|
|
222
243
|
}
|
|
@@ -224,13 +245,16 @@ export function createComboBoxState<T = unknown>(
|
|
|
224
245
|
};
|
|
225
246
|
|
|
226
247
|
// Track last committed input value
|
|
227
|
-
const [lastValue, setLastValue] =
|
|
248
|
+
const [lastValue, setLastValue] = createInternalSignal(inputValue());
|
|
228
249
|
|
|
229
250
|
const selectedKey: Accessor<Key | null> = () => {
|
|
230
251
|
return isSelectionControlled() ? (getProps().selectedKey ?? null) : internalSelectedKey();
|
|
231
252
|
};
|
|
232
253
|
|
|
233
254
|
const setSelectedKey = (key: Key | null) => {
|
|
255
|
+
// Solid 2 batches writes onto a microtask, so a fully controlled
|
|
256
|
+
// onSelectionChange that updates selectedKey then inputValue settles in
|
|
257
|
+
// one flush instead of closing then auto-opening.
|
|
234
258
|
if (!isSelectionControlled()) {
|
|
235
259
|
setInternalSelectedKey(key);
|
|
236
260
|
}
|
|
@@ -238,6 +262,9 @@ export function createComboBoxState<T = unknown>(
|
|
|
238
262
|
};
|
|
239
263
|
|
|
240
264
|
// ---- Overlay State ----
|
|
265
|
+
// Assigned after createListState; onOpenChange only fires after both exist
|
|
266
|
+
// except a defaultOpen init, which we skip via the optional call.
|
|
267
|
+
let listState!: ListState<T>;
|
|
241
268
|
const overlayState = createOverlayTriggerState({
|
|
242
269
|
get isOpen() {
|
|
243
270
|
return getProps().isOpen;
|
|
@@ -247,11 +274,16 @@ export function createComboBoxState<T = unknown>(
|
|
|
247
274
|
},
|
|
248
275
|
onOpenChange(isOpen: boolean) {
|
|
249
276
|
getProps().onOpenChange?.(isOpen, isOpen ? menuOpenTrigger : undefined);
|
|
277
|
+
// RAC useComboBoxState.ts:314-317
|
|
278
|
+
listState?.setFocused(isOpen);
|
|
279
|
+
if (!isOpen) {
|
|
280
|
+
listState?.setFocusedKey(null);
|
|
281
|
+
}
|
|
250
282
|
},
|
|
251
283
|
});
|
|
252
284
|
|
|
253
285
|
// ---- List State (unfiltered collection) ----
|
|
254
|
-
|
|
286
|
+
listState = createListState<T>({
|
|
255
287
|
get items() {
|
|
256
288
|
// Use items or defaultItems
|
|
257
289
|
return getProps().items ?? getProps().defaultItems ?? [];
|
|
@@ -307,16 +339,12 @@ export function createComboBoxState<T = unknown>(
|
|
|
307
339
|
|
|
308
340
|
const filteredCollection = createMemo<Collection<T>>(() => {
|
|
309
341
|
const collection = originalCollection();
|
|
310
|
-
const input = inputValue();
|
|
311
342
|
const filter = getProps().defaultFilter;
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
if (!filter) {
|
|
343
|
+
// RAC useComboBoxState.ts:297-302 — no default filter if items are controlled.
|
|
344
|
+
if (getProps().items != null || !filter) {
|
|
315
345
|
return collection;
|
|
316
346
|
}
|
|
317
|
-
|
|
318
|
-
// Filter the collection based on input value
|
|
319
|
-
return filterCollection(collection, input, filter);
|
|
347
|
+
return filterCollection(collection, inputValue(), filter);
|
|
320
348
|
});
|
|
321
349
|
|
|
322
350
|
// The displayed collection depends on showAllItems flag
|
|
@@ -374,13 +402,12 @@ export function createComboBoxState<T = unknown>(
|
|
|
374
402
|
|
|
375
403
|
// ---- Open/Toggle Logic ----
|
|
376
404
|
// Auto-focus the menu on open the way upstream's listbox does via its
|
|
377
|
-
// `autoFocus: state.focusStrategy || true` prop (useComboBox.ts:
|
|
378
|
-
//
|
|
379
|
-
//
|
|
380
|
-
//
|
|
381
|
-
//
|
|
382
|
-
//
|
|
383
|
-
// (no aria-activedescendant / no highlighted row) unlike upstream.
|
|
405
|
+
// `autoFocus: state.focusStrategy || true` prop (useComboBox.ts:535 →
|
|
406
|
+
// useSelectableCollection). createListBox does not honor a listbox
|
|
407
|
+
// `autoFocus` prop, so BOTH open() and toggle() apply it here. RAC applies
|
|
408
|
+
// this in a later effect; doing it synchronously keeps the first option
|
|
409
|
+
// paint (slot `aria-labelledby`) stable. createComboBox still announces
|
|
410
|
+
// option count on open.
|
|
384
411
|
const applyOpenFocus = (strategy: FocusStrategy | null) => {
|
|
385
412
|
const key = selectedKey();
|
|
386
413
|
const nextFocusedKey =
|
|
@@ -398,15 +425,20 @@ export function createComboBoxState<T = unknown>(
|
|
|
398
425
|
const open = (strategy: FocusStrategy | null = null, trigger?: MenuTriggerAction) => {
|
|
399
426
|
const displayAll = trigger === "manual" || (trigger === "focus" && menuTrigger() === "focus");
|
|
400
427
|
|
|
401
|
-
//
|
|
428
|
+
// RAC useComboBoxState.ts:331-340 — controlled `items` may open empty;
|
|
429
|
+
// showAllItems only when items are undefined (collection filtering).
|
|
402
430
|
const filtered = filteredCollection();
|
|
403
431
|
const original = originalCollection();
|
|
432
|
+
const items = getProps().items;
|
|
404
433
|
const canOpen =
|
|
405
|
-
allowsEmptyCollection() ||
|
|
434
|
+
allowsEmptyCollection() ||
|
|
435
|
+
filtered.size > 0 ||
|
|
436
|
+
(displayAll && original.size > 0) ||
|
|
437
|
+
items != null;
|
|
406
438
|
|
|
407
439
|
if (!canOpen) return;
|
|
408
440
|
|
|
409
|
-
if (displayAll && !overlayState.isOpen()) {
|
|
441
|
+
if (displayAll && !overlayState.isOpen() && items === undefined) {
|
|
410
442
|
setShowAllItems(true);
|
|
411
443
|
}
|
|
412
444
|
|
|
@@ -421,17 +453,20 @@ export function createComboBoxState<T = unknown>(
|
|
|
421
453
|
const toggle = (strategy: FocusStrategy | null = null, trigger?: MenuTriggerAction) => {
|
|
422
454
|
const displayAll = trigger === "manual" || (trigger === "focus" && menuTrigger() === "focus");
|
|
423
455
|
|
|
424
|
-
// Check if we can open (if closed)
|
|
425
456
|
const filtered = filteredCollection();
|
|
426
457
|
const original = originalCollection();
|
|
458
|
+
const items = getProps().items;
|
|
427
459
|
const canOpen =
|
|
428
|
-
allowsEmptyCollection() ||
|
|
460
|
+
allowsEmptyCollection() ||
|
|
461
|
+
filtered.size > 0 ||
|
|
462
|
+
(displayAll && original.size > 0) ||
|
|
463
|
+
items != null;
|
|
429
464
|
|
|
430
465
|
if (!canOpen && !overlayState.isOpen()) return;
|
|
431
466
|
|
|
432
467
|
const willOpen = !overlayState.isOpen();
|
|
433
468
|
|
|
434
|
-
if (displayAll && willOpen) {
|
|
469
|
+
if (displayAll && willOpen && items === undefined) {
|
|
435
470
|
setShowAllItems(true);
|
|
436
471
|
}
|
|
437
472
|
|
|
@@ -457,6 +492,8 @@ export function createComboBoxState<T = unknown>(
|
|
|
457
492
|
if (isSelectionControlled() && isInputControlled()) {
|
|
458
493
|
getProps().onSelectionChange?.(selectedKey());
|
|
459
494
|
const item = selectedItem();
|
|
495
|
+
// RAC useComboBoxState.ts:543-545 — stop the auto-open-on-input effect
|
|
496
|
+
// from reopening after this close.
|
|
460
497
|
setLastValue(item?.textValue ?? "");
|
|
461
498
|
closeMenu();
|
|
462
499
|
} else {
|
|
@@ -492,13 +529,14 @@ export function createComboBoxState<T = unknown>(
|
|
|
492
529
|
}
|
|
493
530
|
|
|
494
531
|
if (overlayState.isOpen() && focusedKey != null) {
|
|
495
|
-
//
|
|
532
|
+
// RAC useComboBoxState.ts:564-572 — already-selected key goes through
|
|
533
|
+
// commitSelection. A new key is `selectionManager.select()` without
|
|
534
|
+
// close; the open/close effect then closes while the menu is still
|
|
535
|
+
// open, so auto-open (input !== last && !isOpen) is skipped.
|
|
496
536
|
if (selectedKey() === focusedKey) {
|
|
497
537
|
commitSelection();
|
|
498
538
|
} else {
|
|
499
|
-
|
|
500
|
-
setSelectedKey(focusedKey);
|
|
501
|
-
closeMenu();
|
|
539
|
+
listState.selectionManager.select(focusedKey);
|
|
502
540
|
}
|
|
503
541
|
} else {
|
|
504
542
|
commitValue();
|
|
@@ -514,12 +552,14 @@ export function createComboBoxState<T = unknown>(
|
|
|
514
552
|
};
|
|
515
553
|
|
|
516
554
|
// ---- Focus Handling ----
|
|
517
|
-
const [isFocused, setIsFocused] =
|
|
518
|
-
let valueOnFocus = "";
|
|
555
|
+
const [isFocused, setIsFocused] = createInternalSignal(false);
|
|
519
556
|
|
|
557
|
+
// RAC useComboBoxState.ts:578-593 also keeps `valueOnFocus` and, on blur,
|
|
558
|
+
// calls `validation.commitValidation()` when the input value or the display
|
|
559
|
+
// value moved while focused. This hook has no validation state at all, so
|
|
560
|
+
// the binding was written and never read; #560 owes the whole wiring.
|
|
520
561
|
const setFocused = (focused: boolean) => {
|
|
521
562
|
if (focused) {
|
|
522
|
-
valueOnFocus = inputValue();
|
|
523
563
|
if (menuTrigger() === "focus" && !getProps().isReadOnly) {
|
|
524
564
|
open(null, "focus");
|
|
525
565
|
}
|
|
@@ -532,42 +572,79 @@ export function createComboBoxState<T = unknown>(
|
|
|
532
572
|
};
|
|
533
573
|
|
|
534
574
|
// ---- Effects for Auto Open/Close ----
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
575
|
+
// RAC useComboBoxState.ts:408-496 is one effect: auto-open, auto-close,
|
|
576
|
+
// close-on-selection, then lastValue. Close-on-selection must not run as a
|
|
577
|
+
// later effect — after a fully-controlled commit the parent updates
|
|
578
|
+
// inputValue, a trailing close leaves !isOpen && input !== last, and
|
|
579
|
+
// auto-open reopens (D13 Enter re-announces "N options available.").
|
|
580
|
+
// lastDisplayValue starts as the current key so an initial selectedKey is
|
|
581
|
+
// not treated as a selection change (RAC lastValueRef = useRef(displayValue)).
|
|
582
|
+
let lastDisplayValue: Key | null | undefined = untrack(selectedKey);
|
|
583
|
+
|
|
584
|
+
createEffect(
|
|
585
|
+
() => ({
|
|
586
|
+
input: inputValue(),
|
|
587
|
+
filtered: filteredCollection(),
|
|
588
|
+
isOpen: overlayState.isOpen(),
|
|
589
|
+
last: lastValue(),
|
|
590
|
+
focused: isFocused(),
|
|
591
|
+
key: isMultiple() ? null : selectedKey(),
|
|
592
|
+
allowsEmpty: allowsEmptyCollection(),
|
|
593
|
+
trigger: menuTrigger(),
|
|
594
|
+
showingAll: showAllItems(),
|
|
595
|
+
inputControlled: isInputControlled(),
|
|
596
|
+
selectionControlled: isSelectionControlled(),
|
|
597
|
+
}),
|
|
598
|
+
({
|
|
599
|
+
input,
|
|
600
|
+
filtered,
|
|
601
|
+
isOpen,
|
|
602
|
+
last,
|
|
603
|
+
focused,
|
|
604
|
+
key,
|
|
605
|
+
allowsEmpty,
|
|
606
|
+
trigger,
|
|
607
|
+
showingAll,
|
|
608
|
+
inputControlled,
|
|
609
|
+
selectionControlled,
|
|
610
|
+
}) => {
|
|
611
|
+
// Auto-open when typing
|
|
612
|
+
if (
|
|
613
|
+
focused &&
|
|
614
|
+
(filtered.size > 0 || allowsEmpty) &&
|
|
615
|
+
!isOpen &&
|
|
616
|
+
input !== last &&
|
|
617
|
+
trigger !== "manual"
|
|
618
|
+
) {
|
|
619
|
+
open(null, "input");
|
|
620
|
+
}
|
|
552
621
|
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
622
|
+
// Auto-close when empty (unless showing all)
|
|
623
|
+
if (!showingAll && !allowsEmpty && isOpen && filtered.size === 0) {
|
|
624
|
+
closeMenu();
|
|
625
|
+
}
|
|
557
626
|
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
627
|
+
// Close when an item is selected (RAC displayValue !== lastValueRef).
|
|
628
|
+
if (key != null && key !== lastDisplayValue) {
|
|
629
|
+
closeMenu();
|
|
630
|
+
}
|
|
562
631
|
|
|
563
|
-
// Clear
|
|
564
|
-
if (input
|
|
565
|
-
|
|
632
|
+
// Clear focused key when input changes
|
|
633
|
+
if (input !== last) {
|
|
634
|
+
listState.setFocusedKey(null);
|
|
635
|
+
setShowAllItems(false);
|
|
636
|
+
|
|
637
|
+
// Clear selection when input is cleared (if not fully controlled)
|
|
638
|
+
if (input === "" && (!inputControlled || !selectionControlled)) {
|
|
639
|
+
setSelectedKey(null);
|
|
640
|
+
}
|
|
641
|
+
|
|
642
|
+
setLastValue(input);
|
|
566
643
|
}
|
|
567
644
|
|
|
568
|
-
|
|
569
|
-
}
|
|
570
|
-
|
|
645
|
+
lastDisplayValue = key;
|
|
646
|
+
},
|
|
647
|
+
);
|
|
571
648
|
|
|
572
649
|
// Keep the input text in sync with the selected item (single mode only).
|
|
573
650
|
//
|
|
@@ -585,30 +662,30 @@ export function createComboBoxState<T = unknown>(
|
|
|
585
662
|
// dependency. `originalCollection()` stays tracked (the unfiltered collection
|
|
586
663
|
// only changes when `items` change, never on filtering) so a preset selection
|
|
587
664
|
// still gets its text once async items arrive.
|
|
588
|
-
createEffect(
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
665
|
+
createEffect(
|
|
666
|
+
() => {
|
|
667
|
+
if (isMultiple()) return null;
|
|
668
|
+
const key = selectedKey();
|
|
669
|
+
const item = key != null ? originalCollection().getItem(key) : null;
|
|
670
|
+
return {
|
|
671
|
+
key,
|
|
672
|
+
textValue: item?.textValue ?? "",
|
|
673
|
+
inputControlled: isInputControlled(),
|
|
674
|
+
selectionControlled: isSelectionControlled(),
|
|
675
|
+
};
|
|
676
|
+
},
|
|
677
|
+
(data) => {
|
|
678
|
+
if (!data) return;
|
|
679
|
+
const { key, textValue, inputControlled, selectionControlled } = data;
|
|
680
|
+
// Only update if selection changed and not fully controlled
|
|
681
|
+
if (!inputControlled || !selectionControlled) {
|
|
682
|
+
if (key != null && textValue !== untrack(inputValue)) {
|
|
683
|
+
setInputValue(textValue);
|
|
684
|
+
setLastValue(textValue);
|
|
685
|
+
}
|
|
599
686
|
}
|
|
600
|
-
}
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
// Close when selection changes (only in single mode)
|
|
604
|
-
createEffect((prevKey: Key | null | undefined) => {
|
|
605
|
-
if (isMultiple()) return undefined;
|
|
606
|
-
const key = selectedKey();
|
|
607
|
-
if (key != null && key !== prevKey) {
|
|
608
|
-
closeMenu();
|
|
609
|
-
}
|
|
610
|
-
return key;
|
|
611
|
-
}, undefined);
|
|
687
|
+
},
|
|
688
|
+
);
|
|
612
689
|
|
|
613
690
|
// ---- Selection Methods for ListState compatibility ----
|
|
614
691
|
// These methods allow createOption to work with ComboBoxState
|
|
@@ -658,6 +735,7 @@ export function createComboBoxState<T = unknown>(
|
|
|
658
735
|
selectedItem,
|
|
659
736
|
setSelectedKey,
|
|
660
737
|
selectedKeys,
|
|
738
|
+
setSelectedKeys,
|
|
661
739
|
selectedItems,
|
|
662
740
|
removeSelectedKey,
|
|
663
741
|
inputValue,
|
|
@@ -690,6 +768,9 @@ export function createComboBoxState<T = unknown>(
|
|
|
690
768
|
|
|
691
769
|
/**
|
|
692
770
|
* Filter a collection based on input value.
|
|
771
|
+
* RAC `useComboBoxState.ts:644-672` copies nodes into a new `ListCollection`,
|
|
772
|
+
* which reassigns `index` (ListCollection.ts:51-53). Keeping the original
|
|
773
|
+
* `index` makes virtualized `aria-posinset` report the unfiltered position.
|
|
693
774
|
*/
|
|
694
775
|
function filterCollection<T>(
|
|
695
776
|
collection: Collection<T>,
|
|
@@ -701,19 +782,18 @@ function filterCollection<T>(
|
|
|
701
782
|
}
|
|
702
783
|
|
|
703
784
|
const filteredItems: CollectionNode<T>[] = [];
|
|
785
|
+
let index = 0;
|
|
704
786
|
|
|
705
787
|
for (const item of collection) {
|
|
706
788
|
if (item.type === "section") {
|
|
707
|
-
// Filter section children
|
|
708
789
|
const filteredChildren: CollectionNode<T>[] = [];
|
|
709
790
|
if (item.childNodes) {
|
|
710
791
|
for (const child of item.childNodes) {
|
|
711
792
|
if (child.type === "item" && filter(child.textValue, inputValue)) {
|
|
712
|
-
filteredChildren.push(child);
|
|
793
|
+
filteredChildren.push({ ...child, index: index++ });
|
|
713
794
|
}
|
|
714
795
|
}
|
|
715
796
|
}
|
|
716
|
-
// Only include section if it has matching children
|
|
717
797
|
if (filteredChildren.length > 0) {
|
|
718
798
|
filteredItems.push({
|
|
719
799
|
...item,
|
|
@@ -722,109 +802,12 @@ function filterCollection<T>(
|
|
|
722
802
|
}
|
|
723
803
|
} else if (item.type === "item") {
|
|
724
804
|
if (filter(item.textValue, inputValue)) {
|
|
725
|
-
filteredItems.push(item);
|
|
726
|
-
}
|
|
727
|
-
}
|
|
728
|
-
}
|
|
729
|
-
|
|
730
|
-
// Create a new collection from filtered items
|
|
731
|
-
return createFilteredCollection(filteredItems, collection);
|
|
732
|
-
}
|
|
733
|
-
|
|
734
|
-
/**
|
|
735
|
-
* Create a filtered collection wrapper.
|
|
736
|
-
*/
|
|
737
|
-
function createFilteredCollection<T>(
|
|
738
|
-
items: CollectionNode<T>[],
|
|
739
|
-
original: Collection<T>,
|
|
740
|
-
): Collection<T> {
|
|
741
|
-
const itemMap = new Map<Key, CollectionNode<T>>();
|
|
742
|
-
|
|
743
|
-
for (const item of items) {
|
|
744
|
-
itemMap.set(item.key, item);
|
|
745
|
-
if (item.childNodes) {
|
|
746
|
-
for (const child of item.childNodes) {
|
|
747
|
-
itemMap.set(child.key, child);
|
|
805
|
+
filteredItems.push({ ...item, index: index++ });
|
|
748
806
|
}
|
|
807
|
+
} else {
|
|
808
|
+
filteredItems.push({ ...item });
|
|
749
809
|
}
|
|
750
810
|
}
|
|
751
811
|
|
|
752
|
-
return
|
|
753
|
-
get size() {
|
|
754
|
-
let count = 0;
|
|
755
|
-
for (const item of items) {
|
|
756
|
-
if (item.type === "item") {
|
|
757
|
-
count++;
|
|
758
|
-
} else if (item.childNodes) {
|
|
759
|
-
count += Array.from(item.childNodes).filter((c) => c.type === "item").length;
|
|
760
|
-
}
|
|
761
|
-
}
|
|
762
|
-
return count;
|
|
763
|
-
},
|
|
764
|
-
getItem(key: Key) {
|
|
765
|
-
return itemMap.get(key) ?? null;
|
|
766
|
-
},
|
|
767
|
-
getKeys() {
|
|
768
|
-
return itemMap.keys();
|
|
769
|
-
},
|
|
770
|
-
getFirstKey() {
|
|
771
|
-
for (const item of items) {
|
|
772
|
-
if (item.type === "item") return item.key;
|
|
773
|
-
if (item.childNodes) {
|
|
774
|
-
for (const child of item.childNodes) {
|
|
775
|
-
if (child.type === "item") return child.key;
|
|
776
|
-
}
|
|
777
|
-
}
|
|
778
|
-
}
|
|
779
|
-
return null;
|
|
780
|
-
},
|
|
781
|
-
getLastKey() {
|
|
782
|
-
for (let i = items.length - 1; i >= 0; i--) {
|
|
783
|
-
const item = items[i];
|
|
784
|
-
if (item.type === "item") return item.key;
|
|
785
|
-
if (item.childNodes) {
|
|
786
|
-
const children = Array.from(item.childNodes);
|
|
787
|
-
for (let j = children.length - 1; j >= 0; j--) {
|
|
788
|
-
if (children[j].type === "item") return children[j].key;
|
|
789
|
-
}
|
|
790
|
-
}
|
|
791
|
-
}
|
|
792
|
-
return null;
|
|
793
|
-
},
|
|
794
|
-
getKeyBefore(key: Key) {
|
|
795
|
-
return original.getKeyBefore(key);
|
|
796
|
-
},
|
|
797
|
-
getKeyAfter(key: Key) {
|
|
798
|
-
return original.getKeyAfter(key);
|
|
799
|
-
},
|
|
800
|
-
at(index: number) {
|
|
801
|
-
// Flatten items for indexing
|
|
802
|
-
let currentIndex = 0;
|
|
803
|
-
for (const item of items) {
|
|
804
|
-
if (item.type === "item") {
|
|
805
|
-
if (currentIndex === index) return item;
|
|
806
|
-
currentIndex++;
|
|
807
|
-
} else if (item.childNodes) {
|
|
808
|
-
for (const child of item.childNodes) {
|
|
809
|
-
if (child.type === "item") {
|
|
810
|
-
if (currentIndex === index) return child;
|
|
811
|
-
currentIndex++;
|
|
812
|
-
}
|
|
813
|
-
}
|
|
814
|
-
}
|
|
815
|
-
}
|
|
816
|
-
return null;
|
|
817
|
-
},
|
|
818
|
-
getChildren(key: Key) {
|
|
819
|
-
const item = itemMap.get(key);
|
|
820
|
-
return item?.childNodes ?? [];
|
|
821
|
-
},
|
|
822
|
-
getTextValue(key: Key) {
|
|
823
|
-
const item = itemMap.get(key);
|
|
824
|
-
return item?.textValue ?? "";
|
|
825
|
-
},
|
|
826
|
-
[Symbol.iterator]() {
|
|
827
|
-
return items[Symbol.iterator]();
|
|
828
|
-
},
|
|
829
|
-
};
|
|
812
|
+
return new ListCollection(filteredItems);
|
|
830
813
|
}
|
|
@@ -1,12 +1,32 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2020 Adobe. All rights reserved.
|
|
3
|
+
* This file is licensed to you under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
* you may not use this file except in compliance with the License. You may obtain a copy
|
|
5
|
+
* of the License at http://www.apache.org/licenses/LICENSE-2.0
|
|
6
|
+
*
|
|
7
|
+
* Unless required by applicable law or agreed to in writing, software distributed under
|
|
8
|
+
* the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
|
|
9
|
+
* OF ANY KIND, either express or implied. See the License for the specific language
|
|
10
|
+
* governing permissions and limitations under the License.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
// Ported to SolidJS for Proyecto Viviana; based on packages/react-stately/src/data/useAsyncList.ts
|
|
14
|
+
// Ported to SolidJS for Proyecto Viviana; based on packages/react-stately/src/data/useListData.ts
|
|
15
|
+
|
|
1
16
|
/**
|
|
2
17
|
* createAsyncList - SolidJS port of React Spectrum's useAsyncList
|
|
3
18
|
*
|
|
4
19
|
* Manages state for an immutable async loaded list data structure, and provides
|
|
5
20
|
* convenience methods to update the data over time. Manages loading and error
|
|
6
21
|
* states, pagination, and sorting.
|
|
22
|
+
*
|
|
23
|
+
* Ported from:
|
|
24
|
+
* - packages/react-stately/src/data/useAsyncList.ts
|
|
25
|
+
* - packages/react-stately/src/data/useListData.ts
|
|
7
26
|
*/
|
|
8
27
|
|
|
9
|
-
import {
|
|
28
|
+
import { untrack } from "solid-js";
|
|
29
|
+
import { createInternalSignal } from "../utils";
|
|
10
30
|
|
|
11
31
|
export type Key = string | number;
|
|
12
32
|
export type Selection = "all" | Set<Key>;
|
|
@@ -149,7 +169,7 @@ export function createAsyncList<T, C = string>(options: AsyncListOptions<T, C>):
|
|
|
149
169
|
initialFilterText = "",
|
|
150
170
|
} = options;
|
|
151
171
|
|
|
152
|
-
const [state, setState] =
|
|
172
|
+
const [state, setState] = createInternalSignal<InternalState<T, C>>({
|
|
153
173
|
loadingState: "idle",
|
|
154
174
|
items: [],
|
|
155
175
|
selectedKeys: initialSelectedKeys === "all" ? "all" : new Set(initialSelectedKeys || []),
|
|
@@ -1,11 +1,28 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2020 Adobe. All rights reserved.
|
|
3
|
+
* This file is licensed to you under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
* you may not use this file except in compliance with the License. You may obtain a copy
|
|
5
|
+
* of the License at http://www.apache.org/licenses/LICENSE-2.0
|
|
6
|
+
*
|
|
7
|
+
* Unless required by applicable law or agreed to in writing, software distributed under
|
|
8
|
+
* the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
|
|
9
|
+
* OF ANY KIND, either express or implied. See the License for the specific language
|
|
10
|
+
* governing permissions and limitations under the License.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
// Ported to SolidJS for Proyecto Viviana; based on packages/react-stately/src/data/useListData.ts
|
|
14
|
+
|
|
1
15
|
/**
|
|
2
16
|
* createListData - SolidJS port of React Spectrum's useListData
|
|
3
17
|
*
|
|
4
18
|
* Manages state for an immutable list data structure, and provides
|
|
5
19
|
* convenience methods to update the data over time.
|
|
20
|
+
*
|
|
21
|
+
* Ported from packages/react-stately/src/data/useListData.ts.
|
|
6
22
|
*/
|
|
7
23
|
|
|
8
|
-
import {
|
|
24
|
+
import { createMemo } from "solid-js";
|
|
25
|
+
import { createInternalSignal } from "../utils";
|
|
9
26
|
|
|
10
27
|
export type Key = string | number;
|
|
11
28
|
export type Selection = "all" | Set<Key>;
|
|
@@ -88,7 +105,7 @@ export function createListData<T>(options: ListOptions<T>): ListData<T> {
|
|
|
88
105
|
initialFilterText = "",
|
|
89
106
|
} = options;
|
|
90
107
|
|
|
91
|
-
const [state, setState] =
|
|
108
|
+
const [state, setState] = createInternalSignal<ListState<T>>({
|
|
92
109
|
items: initialItems,
|
|
93
110
|
selectedKeys: initialSelectedKeys === "all" ? "all" : new Set(initialSelectedKeys || []),
|
|
94
111
|
filterText: initialFilterText,
|