@proyecto-viviana/solid-stately 0.5.1 → 0.6.0-rc.1
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/README.md +59 -29
- 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 +10 -9
- 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 +4 -7
- package/dist/calendar/createDatePickerState.d.ts.map +1 -0
- package/dist/calendar/createRangeCalendarState.d.ts +9 -7
- package/dist/calendar/createRangeCalendarState.d.ts.map +1 -0
- package/dist/calendar/createTimeFieldState.d.ts +5 -24
- 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 +3 -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 +74 -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 +6 -5
- package/dist/color/createColorAreaState.d.ts.map +1 -0
- package/dist/color/createColorFieldState.d.ts +4 -5
- package/dist/color/createColorFieldState.d.ts.map +1 -0
- package/dist/color/createColorSliderState.d.ts +4 -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 +92 -29
- package/dist/combobox/createComboBoxState.d.ts.map +1 -0
- package/dist/combobox/index.d.ts +2 -1
- 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 +44 -11
- 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 +34 -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/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 +4 -3
- 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 +7 -5
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2947 -969
- package/dist/index.js.map +1 -1
- package/dist/menu/index.d.ts +3 -1
- package/dist/menu/index.d.ts.map +1 -0
- package/dist/numberfield/createNumberFieldState.d.ts +37 -9
- 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.d.ts +5 -0
- package/dist/private/flags/flags.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 +100 -33
- package/dist/select/createSelectState.d.ts.map +1 -0
- package/dist/select/index.d.ts +2 -1
- 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 +37 -14
- 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 -13
- package/dist/ssr/index.d.ts.map +1 -0
- package/dist/steplist/createStepListState.d.ts +10 -18
- 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 +3 -6
- package/dist/table/createTableState.d.ts.map +1 -0
- package/dist/table/createTreeGridState.d.ts +3 -9
- 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 +37 -3
- 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 +96 -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 +3 -8
- package/dist/tree/createTreeState.d.ts.map +1 -0
- 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 +24 -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 +321 -125
- package/src/calendar/createDateFieldState.ts +45 -31
- package/src/calendar/createDatePickerState.ts +47 -26
- package/src/calendar/createRangeCalendarState.ts +173 -86
- package/src/calendar/createTimeFieldState.ts +26 -7
- package/src/calendar/intl/index.ts +37 -2
- package/src/checkbox/createCheckboxGroupState.ts +45 -13
- package/src/collections/ListCollection.ts +31 -0
- package/src/collections/createListState.ts +27 -10
- package/src/collections/createMenuState.ts +190 -15
- package/src/collections/createSelectionState.ts +33 -13
- package/src/collections/getChildNodes.ts +20 -3
- package/src/collections/index.ts +6 -0
- package/src/collections/types.ts +35 -2
- package/src/color/Color.ts +61 -22
- package/src/color/createColorAreaState.ts +48 -4
- package/src/color/createColorFieldState.ts +114 -38
- package/src/color/createColorSliderState.ts +61 -9
- package/src/color/createColorWheelState.ts +29 -9
- 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 +530 -297
- package/src/combobox/index.ts +4 -0
- package/src/data/createAsyncList.ts +41 -6
- package/src/data/createListData.ts +27 -4
- package/src/data/createTreeData.ts +30 -6
- package/src/disclosure/createDisclosureState.ts +40 -19
- package/src/dnd/createDragState.ts +22 -4
- package/src/dnd/createDraggableCollectionState.ts +145 -11
- package/src/dnd/createDropState.ts +21 -3
- package/src/dnd/createDroppableCollectionState.ts +127 -11
- package/src/dnd/index.ts +4 -0
- package/src/dnd/types.ts +16 -0
- package/src/form/createFormValidationState.ts +69 -37
- package/src/grid/createGridState.ts +196 -111
- package/src/grid/types.ts +22 -1
- package/src/index.ts +33 -2
- package/src/menu/index.ts +7 -0
- package/src/numberfield/createNumberFieldState.ts +247 -98
- package/src/overlays/createOverlayTriggerState.ts +31 -4
- package/src/private/flags/flags.ts +25 -0
- package/src/radio/createRadioGroupState.ts +23 -6
- package/src/searchfield/createSearchFieldState.ts +18 -3
- package/src/select/createSelectState.ts +317 -130
- package/src/select/index.ts +8 -1
- package/src/selection/Selection.ts +15 -1
- package/src/selection/SelectionManager.ts +17 -1
- package/src/selection/createMultipleSelectionState.ts +45 -26
- package/src/slider/createSliderState.ts +243 -104
- package/src/ssr/index.ts +34 -4
- package/src/steplist/createStepListState.ts +184 -130
- package/src/table/TableCollection.ts +14 -0
- package/src/table/createTableColumnResizeState.ts +71 -14
- package/src/table/createTableState.ts +26 -4
- package/src/table/createTreeGridState.ts +22 -6
- package/src/table/types.ts +38 -5
- package/src/tabs/createTabListState.ts +63 -43
- 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 +499 -0
- package/src/tokenfield/createTokenFieldState.ts +88 -0
- package/src/tokenfield/index.ts +15 -0
- package/src/tooltip/createTooltipTriggerState.ts +49 -13
- package/src/tree/TreeCollection.ts +14 -0
- package/src/tree/createTreeState.ts +70 -36
- package/src/tree/types.ts +18 -1
- package/src/utils/index.ts +10 -1
- package/src/utils/owner.ts +20 -0
- package/src/utils/reactivity.ts +53 -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/createTreeState.d.ts.map +0 -1
- 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
package/src/select/index.ts
CHANGED
|
@@ -1 +1,8 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export {
|
|
2
|
+
createSelectState,
|
|
3
|
+
type SelectStateProps,
|
|
4
|
+
type SelectState,
|
|
5
|
+
type SelectSelectionMode,
|
|
6
|
+
type SelectValueType,
|
|
7
|
+
type SelectChangeValueType,
|
|
8
|
+
} from "./createSelectState";
|
|
@@ -1,8 +1,22 @@
|
|
|
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/selection/Selection.ts
|
|
14
|
+
|
|
1
15
|
/**
|
|
2
16
|
* A Selection is a special Set containing Keys, which also has an anchor
|
|
3
17
|
* and current selected key for use when range selecting.
|
|
4
18
|
*
|
|
5
|
-
*
|
|
19
|
+
* Ported from packages/react-stately/src/selection/Selection.ts.
|
|
6
20
|
*/
|
|
7
21
|
|
|
8
22
|
import type { Key } from "../collections/types";
|
|
@@ -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/selection/SelectionManager.ts
|
|
14
|
+
|
|
1
15
|
/**
|
|
2
16
|
* An interface for reading and updating multiple selection state.
|
|
3
17
|
*
|
|
@@ -504,7 +518,9 @@ export class SelectionManager<T = unknown> {
|
|
|
504
518
|
const item = this.collection.getItem(key);
|
|
505
519
|
return (
|
|
506
520
|
this.state.disabledBehavior === "all" &&
|
|
507
|
-
(this.state.disabledKeys.has(key) ||
|
|
521
|
+
(this.state.disabledKeys.has(key) ||
|
|
522
|
+
!!item?.props?.isDisabled ||
|
|
523
|
+
item?.isDisabled === true) &&
|
|
508
524
|
item?.props?.disabledBehavior !== "selection"
|
|
509
525
|
);
|
|
510
526
|
}
|
|
@@ -1,18 +1,31 @@
|
|
|
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/selection/useMultipleSelectionState.ts
|
|
14
|
+
|
|
1
15
|
/**
|
|
2
16
|
* Raw multiple-selection + focus state for a collection.
|
|
3
17
|
*
|
|
4
18
|
* The lower of the two selection layers ported from upstream
|
|
5
|
-
* (
|
|
19
|
+
* (`packages/react-stately/src/selection/useMultipleSelectionState.ts`): it owns the
|
|
6
20
|
* selected keys, focus, selection behavior, and disabled keys, but is NOT
|
|
7
21
|
* collection-aware. The collection-aware operations (toggle, extend, select
|
|
8
22
|
* all, range, etc.) live in {@link SelectionManager}, which is built on top of
|
|
9
23
|
* this state.
|
|
10
|
-
*
|
|
11
|
-
* Based on @react-stately/selection.
|
|
12
24
|
*/
|
|
13
25
|
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
26
|
+
import { createMemo, createEffect } from "solid-js";
|
|
27
|
+
import type { Accessor } from "solid-js";
|
|
28
|
+
import { createInternalSignal, propsAccessor, readNow, type MaybeAccessor } from "../utils";
|
|
16
29
|
import type { SelectionStateProps } from "../collections/createSelectionState";
|
|
17
30
|
import type {
|
|
18
31
|
DisabledBehavior,
|
|
@@ -101,20 +114,22 @@ function convertSelection(
|
|
|
101
114
|
export function createMultipleSelectionState(
|
|
102
115
|
props: MaybeAccessor<SelectionStateProps> = {},
|
|
103
116
|
): MultipleSelectionState {
|
|
104
|
-
const getProps = (
|
|
117
|
+
const getProps = propsAccessor(props);
|
|
105
118
|
|
|
106
119
|
// Focus is a plain signal in Solid; upstream needs a ref + state pair only
|
|
107
120
|
// because React requires both a synchronous read and a re-render trigger.
|
|
108
|
-
const [isFocused, setIsFocused] =
|
|
109
|
-
const [focusedKey, setFocusedKeySignal] =
|
|
110
|
-
const [childFocusStrategy, setChildFocusStrategy] =
|
|
121
|
+
const [isFocused, setIsFocused] = createInternalSignal(false);
|
|
122
|
+
const [focusedKey, setFocusedKeySignal] = createInternalSignal<Key | null>(null);
|
|
123
|
+
const [childFocusStrategy, setChildFocusStrategy] = createInternalSignal<FocusStrategy | null>(
|
|
124
|
+
null,
|
|
125
|
+
);
|
|
111
126
|
|
|
112
127
|
const defaultSelectedKeys = convertSelection(
|
|
113
128
|
getProps().defaultSelectedKeys,
|
|
114
129
|
new SelectionClass(),
|
|
115
130
|
);
|
|
116
131
|
const [uncontrolledSelectedKeys, setUncontrolledSelectedKeys] =
|
|
117
|
-
|
|
132
|
+
createInternalSignal<Selection>(defaultSelectedKeys);
|
|
118
133
|
|
|
119
134
|
const selectedKeys = createMemo<Selection>(() => {
|
|
120
135
|
const p = getProps();
|
|
@@ -130,27 +145,28 @@ export function createMultipleSelectionState(
|
|
|
130
145
|
const selectionBehaviorProp = (): SelectionBehavior => getProps().selectionBehavior ?? "toggle";
|
|
131
146
|
|
|
132
147
|
const [selectionBehavior, setSelectionBehaviorState] =
|
|
133
|
-
|
|
148
|
+
createInternalSignal<SelectionBehavior>(selectionBehaviorProp());
|
|
134
149
|
|
|
135
150
|
// If the selectionBehavior prop is 'replace' but the current state is 'toggle'
|
|
136
151
|
// (e.g. due to a long press to enter selection mode on touch) and the
|
|
137
152
|
// selection becomes empty, reset the behavior back to 'replace'.
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
153
|
+
createEffect(
|
|
154
|
+
() => ({ keys: selectedKeys(), prop: selectionBehaviorProp() }),
|
|
155
|
+
({ keys, prop }) => {
|
|
156
|
+
if (
|
|
157
|
+
prop === "replace" &&
|
|
158
|
+
selectionBehavior() === "toggle" &&
|
|
159
|
+
typeof keys === "object" &&
|
|
160
|
+
keys.size === 0
|
|
161
|
+
) {
|
|
162
|
+
setSelectionBehaviorState("replace");
|
|
163
|
+
}
|
|
164
|
+
},
|
|
165
|
+
);
|
|
149
166
|
|
|
150
167
|
// If the selectionBehavior prop changes, sync it into state.
|
|
151
168
|
let lastSelectionBehavior = selectionBehaviorProp();
|
|
152
|
-
|
|
153
|
-
const prop = selectionBehaviorProp();
|
|
169
|
+
createEffect(selectionBehaviorProp, (prop) => {
|
|
154
170
|
if (prop !== lastSelectionBehavior) {
|
|
155
171
|
setSelectionBehaviorState(prop);
|
|
156
172
|
lastSelectionBehavior = prop;
|
|
@@ -169,9 +185,12 @@ export function createMultipleSelectionState(
|
|
|
169
185
|
getProps().onSelectionChange?.(keys);
|
|
170
186
|
};
|
|
171
187
|
|
|
188
|
+
const liveSelectedKeys = (): Selection =>
|
|
189
|
+
getProps().selectedKeys !== undefined ? selectedKeys() : readNow(uncontrolledSelectedKeys);
|
|
190
|
+
|
|
172
191
|
const setSelectedKeys = (keys: Selection) => {
|
|
173
192
|
const p = getProps();
|
|
174
|
-
const current =
|
|
193
|
+
const current = liveSelectedKeys();
|
|
175
194
|
const shouldUpdate =
|
|
176
195
|
p.allowDuplicateSelectionEvents ||
|
|
177
196
|
keys === "all" ||
|
|
@@ -227,7 +246,7 @@ export function createMultipleSelectionState(
|
|
|
227
246
|
setChildFocusStrategy(strategy);
|
|
228
247
|
},
|
|
229
248
|
get selectedKeys() {
|
|
230
|
-
return
|
|
249
|
+
return liveSelectedKeys();
|
|
231
250
|
},
|
|
232
251
|
get lastSelectionEvent() {
|
|
233
252
|
return lastSelectionEvent;
|
|
@@ -1,22 +1,37 @@
|
|
|
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/slider/useSliderState.ts
|
|
14
|
+
|
|
1
15
|
/**
|
|
2
16
|
* Creates state for a slider component.
|
|
3
17
|
* Based on @react-stately/slider useSliderState.
|
|
4
18
|
*/
|
|
5
19
|
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
20
|
+
import { createMemo, createEffect } from "solid-js";
|
|
21
|
+
import type { Accessor } from "solid-js";
|
|
22
|
+
import { createInternalSignal, access, type MaybeAccessor } from "../utils";
|
|
8
23
|
|
|
9
24
|
export type SliderOrientation = "horizontal" | "vertical";
|
|
10
25
|
|
|
11
|
-
export interface SliderStateProps {
|
|
26
|
+
export interface SliderStateProps<T extends number | number[] = number> {
|
|
12
27
|
/** The current value (controlled). */
|
|
13
|
-
value?:
|
|
28
|
+
value?: T;
|
|
14
29
|
/** The default value (uncontrolled). */
|
|
15
|
-
defaultValue?:
|
|
30
|
+
defaultValue?: T;
|
|
16
31
|
/** Handler called when the value changes. */
|
|
17
|
-
onChange?: (value:
|
|
32
|
+
onChange?: (value: T) => void;
|
|
18
33
|
/** Handler called when the user stops dragging. */
|
|
19
|
-
onChangeEnd?: (value:
|
|
34
|
+
onChangeEnd?: (value: T) => void;
|
|
20
35
|
/** The minimum value. */
|
|
21
36
|
minValue?: number;
|
|
22
37
|
/** The maximum value. */
|
|
@@ -43,14 +58,35 @@ export interface SliderState {
|
|
|
43
58
|
/** Gets the value as a percent (0-1). */
|
|
44
59
|
getValuePercent: Accessor<number>;
|
|
45
60
|
/** Gets the formatted value string. */
|
|
46
|
-
getFormattedValue:
|
|
47
|
-
|
|
61
|
+
getFormattedValue: {
|
|
62
|
+
(): string;
|
|
63
|
+
(value: number | readonly number[]): string;
|
|
64
|
+
};
|
|
65
|
+
/** Canonical values; legacy numeric members address thumb zero. */
|
|
66
|
+
values: Accessor<readonly number[]>;
|
|
67
|
+
/** Current reset defaults, normalized to the domain. */
|
|
68
|
+
defaultValues: Accessor<readonly number[]>;
|
|
69
|
+
getThumbValue: (index: number) => number;
|
|
70
|
+
setThumbValue: (index: number, value: number) => void;
|
|
71
|
+
setThumbPercent: (index: number, percent: number) => void;
|
|
72
|
+
getThumbPercent: (index: number) => number;
|
|
73
|
+
getThumbMinValue: (index: number) => number;
|
|
74
|
+
getThumbMaxValue: (index: number) => number;
|
|
75
|
+
getThumbValueLabel: (index: number) => string;
|
|
76
|
+
isThumbDragging: (index: number) => boolean;
|
|
77
|
+
setThumbDragging: (index: number, dragging: boolean) => void;
|
|
78
|
+
focusedThumb: Accessor<number | undefined>;
|
|
79
|
+
setFocusedThumb: (index: number | undefined) => void;
|
|
80
|
+
/** Absolute value distance, at least state.step. */
|
|
81
|
+
incrementThumb: (index: number, stepSize?: number) => void;
|
|
82
|
+
decrementThumb: (index: number, stepSize?: number) => void;
|
|
83
|
+
/** Whether any thumb is being dragged. */
|
|
48
84
|
isDragging: Accessor<boolean>;
|
|
49
|
-
/** Sets
|
|
85
|
+
/** Sets thumb zero dragging state. */
|
|
50
86
|
setDragging: (dragging: boolean) => void;
|
|
51
87
|
/** Whether the slider is focused. */
|
|
52
88
|
isFocused: Accessor<boolean>;
|
|
53
|
-
/**
|
|
89
|
+
/** Focuses thumb zero; false clears only thumb zero. */
|
|
54
90
|
setFocused: (focused: boolean) => void;
|
|
55
91
|
/** Increments the value by step. */
|
|
56
92
|
increment: (stepMultiplier?: number) => void;
|
|
@@ -95,17 +131,40 @@ function snapToStep(value: number, min: number, max: number, step: number): numb
|
|
|
95
131
|
/**
|
|
96
132
|
* Provides state management for a slider component.
|
|
97
133
|
*/
|
|
98
|
-
export function createSliderState(
|
|
134
|
+
export function createSliderState(
|
|
135
|
+
props: MaybeAccessor<
|
|
136
|
+
SliderStateProps<number[]> & ({ value: number[] } | { defaultValue: number[] })
|
|
137
|
+
>,
|
|
138
|
+
): SliderState;
|
|
139
|
+
export function createSliderState(props: MaybeAccessor<SliderStateProps>): SliderState;
|
|
140
|
+
export function createSliderState(
|
|
141
|
+
props: MaybeAccessor<SliderStateProps | SliderStateProps<number[]>>,
|
|
142
|
+
): SliderState {
|
|
99
143
|
const getProps = () => access(props);
|
|
100
|
-
|
|
101
144
|
const initialProps = getProps();
|
|
102
|
-
|
|
103
|
-
const
|
|
104
|
-
const
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
const
|
|
108
|
-
const
|
|
145
|
+
// Mode is established by explicit input shape, never by callback arity.
|
|
146
|
+
const arrayMode = Array.isArray(initialProps.value) || Array.isArray(initialProps.defaultValue);
|
|
147
|
+
const initialArray = Array.isArray(initialProps.value)
|
|
148
|
+
? initialProps.value
|
|
149
|
+
: initialProps.defaultValue;
|
|
150
|
+
const initialCount = Array.isArray(initialArray) ? initialArray.length : 1;
|
|
151
|
+
const finite = (value: number | undefined, fallback: number) =>
|
|
152
|
+
typeof value === "number" && Number.isFinite(value) ? value : fallback;
|
|
153
|
+
const minValue = createMemo(() =>
|
|
154
|
+
arrayMode ? finite(getProps().minValue, DEFAULT_MIN) : (getProps().minValue ?? DEFAULT_MIN),
|
|
155
|
+
);
|
|
156
|
+
const step = createMemo(() => {
|
|
157
|
+
const next = arrayMode
|
|
158
|
+
? finite(getProps().step, DEFAULT_STEP)
|
|
159
|
+
: (getProps().step ?? DEFAULT_STEP);
|
|
160
|
+
return arrayMode && next <= 0 ? DEFAULT_STEP : next;
|
|
161
|
+
});
|
|
162
|
+
const maxValue = createMemo(() => {
|
|
163
|
+
const next = arrayMode
|
|
164
|
+
? finite(getProps().maxValue, DEFAULT_MAX)
|
|
165
|
+
: (getProps().maxValue ?? DEFAULT_MAX);
|
|
166
|
+
return arrayMode && next <= minValue() ? minValue() + step() : next;
|
|
167
|
+
});
|
|
109
168
|
const orientation = createMemo(() => getProps().orientation ?? "horizontal");
|
|
110
169
|
const isDisabled = createMemo(() => getProps().isDisabled ?? false);
|
|
111
170
|
const pageStep = createMemo(() =>
|
|
@@ -114,103 +173,183 @@ export function createSliderState(props: MaybeAccessor<SliderStateProps>): Slide
|
|
|
114
173
|
snapToStep((maxValue() - minValue()) / 10, 0, maxValue() - minValue(), step()),
|
|
115
174
|
),
|
|
116
175
|
);
|
|
117
|
-
|
|
118
|
-
// Controlled vs uncontrolled
|
|
119
176
|
const isControlled = () => getProps().value !== undefined;
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
const [
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
177
|
+
const fallbackValues = () =>
|
|
178
|
+
Array.from({ length: initialCount }, (_, index) => (index === 0 ? minValue() : maxValue()));
|
|
179
|
+
const normalize = (raw: number | readonly number[] | undefined): number[] => {
|
|
180
|
+
const items = raw === undefined ? fallbackValues() : typeof raw === "number" ? [raw] : raw;
|
|
181
|
+
const snapped = items.map((item, index) =>
|
|
182
|
+
snapToStep(
|
|
183
|
+
arrayMode ? finite(item, index === 0 ? minValue() : maxValue()) : item,
|
|
184
|
+
minValue(),
|
|
185
|
+
maxValue(),
|
|
186
|
+
step(),
|
|
187
|
+
),
|
|
188
|
+
);
|
|
189
|
+
return arrayMode ? snapped.sort((a, b) => a - b) : snapped;
|
|
190
|
+
};
|
|
191
|
+
const [internalValues, setInternalValues] = createInternalSignal(
|
|
192
|
+
normalize(initialProps.defaultValue),
|
|
129
193
|
);
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
const
|
|
133
|
-
const
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
194
|
+
const values: Accessor<readonly number[]> = () =>
|
|
195
|
+
normalize(isControlled() ? getProps().value : internalValues());
|
|
196
|
+
const initialValues = [...values()];
|
|
197
|
+
const initialDefaultValues = normalize(initialProps.defaultValue ?? initialValues);
|
|
198
|
+
const defaultValues: Accessor<readonly number[]> = () =>
|
|
199
|
+
// Scalar defaults are captured at mount; RangeSlider resets to current domain defaults.
|
|
200
|
+
normalize(arrayMode ? getProps().defaultValue : initialDefaultValues);
|
|
201
|
+
if (arrayMode) {
|
|
202
|
+
// Preserve RangeSlider's reactive uncontrolled default/domain reset policy.
|
|
203
|
+
// The compute phase reads only props/bounds, never the mutable current values.
|
|
204
|
+
const resetSnapshot = () =>
|
|
205
|
+
isControlled()
|
|
206
|
+
? undefined
|
|
207
|
+
: {
|
|
208
|
+
defaults: normalize(getProps().defaultValue),
|
|
209
|
+
min: minValue(),
|
|
210
|
+
max: maxValue(),
|
|
211
|
+
step: step(),
|
|
212
|
+
};
|
|
213
|
+
// Seed before effects drain: an initial equal default must not erase setters
|
|
214
|
+
// called during setup. Only a changed default/domain/control mode resets.
|
|
215
|
+
let previousReset = resetSnapshot();
|
|
216
|
+
createEffect(resetSnapshot, (next) => {
|
|
217
|
+
const previous = previousReset;
|
|
218
|
+
previousReset = next;
|
|
219
|
+
if (
|
|
220
|
+
next &&
|
|
221
|
+
(!previous ||
|
|
222
|
+
next.min !== previous.min ||
|
|
223
|
+
next.max !== previous.max ||
|
|
224
|
+
next.step !== previous.step ||
|
|
225
|
+
next.defaults.length !== previous.defaults.length ||
|
|
226
|
+
next.defaults.some((value, index) => value !== previous.defaults[index]))
|
|
227
|
+
) {
|
|
228
|
+
setInternalValues(next.defaults);
|
|
229
|
+
}
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
const [draggings, setDraggings] = createInternalSignal<boolean[]>(initialValues.map(() => false));
|
|
233
|
+
const [focusedThumb, setFocusedThumbValue] = createInternalSignal<number | undefined>(undefined);
|
|
234
|
+
const isDragging = () => draggings().some(Boolean);
|
|
235
|
+
let pendingValues = [...initialValues];
|
|
236
|
+
let hasPendingUpdate = false;
|
|
237
|
+
// Upstream retains each setter proposal outside drag too. Rebase when rendered values change.
|
|
238
|
+
let nonDraggingRenderedSnapshot: readonly number[] | undefined;
|
|
239
|
+
const validIndex = (index: number) =>
|
|
240
|
+
Number.isInteger(index) && index >= 0 && index < values().length;
|
|
241
|
+
const getThumbValue = (index: number) => values()[index];
|
|
242
|
+
const getThumbMinValue = (index: number) => (index === 0 ? minValue() : values()[index - 1]);
|
|
243
|
+
const getThumbMaxValue = (index: number) =>
|
|
244
|
+
index === values().length - 1 ? maxValue() : values()[index + 1];
|
|
245
|
+
const emit = (kind: "onChange" | "onChangeEnd", next: readonly number[]) => {
|
|
149
246
|
const p = getProps();
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
// Set value function
|
|
155
|
-
const setValue = (newValue: number) => {
|
|
156
|
-
if (isDisabled()) return;
|
|
157
|
-
|
|
158
|
-
const p = getProps();
|
|
159
|
-
const snappedValue = snapToStep(newValue, minValue(), maxValue(), step());
|
|
160
|
-
|
|
161
|
-
if (!isControlled()) {
|
|
162
|
-
setInternalValue(snappedValue);
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
p.onChange?.(snappedValue);
|
|
247
|
+
// The public overloads guarantee this callback shape for the established mode.
|
|
248
|
+
if (arrayMode) (p as SliderStateProps<number[]>)[kind]?.([...next]);
|
|
249
|
+
else (p as SliderStateProps)[kind]?.(next[0]);
|
|
166
250
|
};
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
const
|
|
171
|
-
|
|
172
|
-
|
|
251
|
+
const setThumbValue = (index: number, nextValue: number) => {
|
|
252
|
+
if (isDisabled() || !validIndex(index)) return;
|
|
253
|
+
const rendered = values();
|
|
254
|
+
const retainNonDraggingProposal =
|
|
255
|
+
arrayMode &&
|
|
256
|
+
isControlled() &&
|
|
257
|
+
nonDraggingRenderedSnapshot !== undefined &&
|
|
258
|
+
rendered.length === nonDraggingRenderedSnapshot.length &&
|
|
259
|
+
rendered.every((item, i) => item === nonDraggingRenderedSnapshot![i]);
|
|
260
|
+
const base = normalize(isDragging() || retainNonDraggingProposal ? pendingValues : rendered);
|
|
261
|
+
const lower = index === 0 ? minValue() : base[index - 1];
|
|
262
|
+
const upper = index === base.length - 1 ? maxValue() : base[index + 1];
|
|
263
|
+
// Current RangeSlider anchors snapping to the whole domain, then clamps to neighbors.
|
|
264
|
+
const snapped = clamp(snapToStep(nextValue, minValue(), maxValue(), step()), lower, upper);
|
|
265
|
+
const next = [...base];
|
|
266
|
+
next[index] = snapped;
|
|
267
|
+
pendingValues = next;
|
|
268
|
+
hasPendingUpdate = true;
|
|
269
|
+
nonDraggingRenderedSnapshot =
|
|
270
|
+
!isDragging() && arrayMode && isControlled() ? [...rendered] : undefined;
|
|
271
|
+
const changed = next.some((item, i) => item !== rendered[i]);
|
|
272
|
+
if (!isControlled() && (!arrayMode || changed)) setInternalValues(next);
|
|
273
|
+
// Scalar's duplicate callbacks and RangeSlider's equal-pair suppression are intentional.
|
|
274
|
+
if (!arrayMode || changed) emit("onChange", next);
|
|
173
275
|
};
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
const
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
276
|
+
const setThumbPercent = (index: number, percent: number) =>
|
|
277
|
+
setThumbValue(index, clamp(percent, 0, 1) * (maxValue() - minValue()) + minValue());
|
|
278
|
+
const getThumbPercent = (index: number) =>
|
|
279
|
+
(getThumbValue(index) - minValue()) / (maxValue() - minValue());
|
|
280
|
+
const isThumbDragging = (index: number) => draggings()[index] ?? false;
|
|
281
|
+
const setThumbDragging = (index: number, dragging: boolean) => {
|
|
282
|
+
if (dragging && (!validIndex(index) || (arrayMode && isDisabled()))) return;
|
|
283
|
+
const wasDragging = isThumbDragging(index);
|
|
284
|
+
if (wasDragging === dragging) return;
|
|
285
|
+
// One snapshot per drag session: a second handle cannot discard unechoed updates.
|
|
286
|
+
if (dragging && !isDragging()) {
|
|
287
|
+
pendingValues = [...values()];
|
|
288
|
+
hasPendingUpdate = false;
|
|
289
|
+
nonDraggingRenderedSnapshot = undefined;
|
|
290
|
+
}
|
|
291
|
+
const next = [...draggings()];
|
|
292
|
+
next[index] = dragging;
|
|
293
|
+
setDraggings(next);
|
|
294
|
+
// Allow disabled endings to release ownership; completion occurs only at the final end.
|
|
295
|
+
if (wasDragging && !isDragging()) {
|
|
296
|
+
emit("onChangeEnd", normalize(hasPendingUpdate ? pendingValues : values()));
|
|
183
297
|
}
|
|
184
298
|
};
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
const increment = (stepMultiplier = 1) => {
|
|
188
|
-
if (isDisabled()) return;
|
|
189
|
-
setValue(value() + step() * stepMultiplier);
|
|
299
|
+
const setFocusedThumb = (index: number | undefined) => {
|
|
300
|
+
if (index === undefined || validIndex(index)) setFocusedThumbValue(index);
|
|
190
301
|
};
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
302
|
+
const incrementThumb = (index: number, stepSize = 1) =>
|
|
303
|
+
setThumbValue(index, getThumbValue(index) + Math.max(stepSize, step()));
|
|
304
|
+
const decrementThumb = (index: number, stepSize = 1) =>
|
|
305
|
+
setThumbValue(index, getThumbValue(index) - Math.max(stepSize, step()));
|
|
306
|
+
const formatter = createMemo(
|
|
307
|
+
() => new Intl.NumberFormat(getProps().locale, getProps().formatOptions),
|
|
308
|
+
);
|
|
309
|
+
function getFormattedValue(): string;
|
|
310
|
+
function getFormattedValue(value: number | readonly number[]): string;
|
|
311
|
+
function getFormattedValue(value: number | readonly number[] = values()): string {
|
|
312
|
+
const items = typeof value === "number" ? [value] : value;
|
|
313
|
+
if (items.length === 0) return "";
|
|
314
|
+
if (items.length === 1) return formatter().format(items[0]);
|
|
315
|
+
if (items.length === 2) return formatter().formatRange(items[0], items[1]);
|
|
316
|
+
return new Intl.ListFormat(formatter().resolvedOptions().locale, { type: "unit" }).format(
|
|
317
|
+
items.map((item) => formatter().format(item)),
|
|
318
|
+
);
|
|
319
|
+
}
|
|
320
|
+
const value = () => getThumbValue(0) ?? minValue();
|
|
321
|
+
const setValue = (next: number) => setThumbValue(0, next);
|
|
202
322
|
return {
|
|
323
|
+
values,
|
|
324
|
+
defaultValues,
|
|
325
|
+
getThumbValue,
|
|
326
|
+
setThumbValue,
|
|
327
|
+
setThumbPercent,
|
|
328
|
+
getThumbPercent,
|
|
329
|
+
getThumbMinValue,
|
|
330
|
+
getThumbMaxValue,
|
|
331
|
+
getThumbValueLabel: (index) => getFormattedValue(getThumbValue(index)),
|
|
332
|
+
isThumbDragging,
|
|
333
|
+
setThumbDragging,
|
|
334
|
+
focusedThumb,
|
|
335
|
+
setFocusedThumb,
|
|
336
|
+
incrementThumb,
|
|
337
|
+
decrementThumb,
|
|
203
338
|
value,
|
|
204
339
|
setValue,
|
|
205
|
-
setValuePercent,
|
|
206
|
-
getValuePercent,
|
|
340
|
+
setValuePercent: (percent) => setThumbPercent(0, percent),
|
|
341
|
+
getValuePercent: () => getThumbPercent(0),
|
|
207
342
|
getFormattedValue,
|
|
208
343
|
isDragging,
|
|
209
|
-
setDragging,
|
|
210
|
-
isFocused,
|
|
211
|
-
setFocused
|
|
212
|
-
|
|
213
|
-
|
|
344
|
+
setDragging: (dragging) => setThumbDragging(0, dragging),
|
|
345
|
+
isFocused: () => focusedThumb() !== undefined,
|
|
346
|
+
setFocused: (focused) => {
|
|
347
|
+
if (focused) setFocusedThumb(0);
|
|
348
|
+
else if (focusedThumb() === 0) setFocusedThumb(undefined);
|
|
349
|
+
},
|
|
350
|
+
// Preserve even zero/negative scalar multiplier semantics, rather than using indexed delta.
|
|
351
|
+
increment: (multiplier = 1) => setValue(value() + step() * multiplier),
|
|
352
|
+
decrement: (multiplier = 1) => setValue(value() - step() * multiplier),
|
|
214
353
|
get minValue() {
|
|
215
354
|
return minValue();
|
|
216
355
|
},
|
package/src/ssr/index.ts
CHANGED
|
@@ -1,15 +1,34 @@
|
|
|
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-aria/src/ssr/SSRProvider.tsx
|
|
14
|
+
// Ported to SolidJS for Proyecto Viviana; based on packages/react-aria/src/utils/useId.ts
|
|
15
|
+
|
|
1
16
|
/**
|
|
2
17
|
* SSR utilities for Solid Stately
|
|
3
18
|
*
|
|
4
19
|
* SolidJS has built-in SSR support with `isServer` and `createUniqueId()`.
|
|
5
|
-
* These utilities provide a consistent
|
|
20
|
+
* These utilities provide a consistent port of the upstream SSR API.
|
|
21
|
+
*
|
|
22
|
+
* Ported from:
|
|
23
|
+
* - packages/react-aria/src/ssr/SSRProvider.tsx
|
|
24
|
+
* - packages/react-aria/src/utils/useId.ts
|
|
6
25
|
*/
|
|
7
26
|
|
|
8
27
|
import { createUniqueId } from "solid-js";
|
|
9
|
-
import { isServer as _isServer } from "
|
|
28
|
+
import { isServer as _isServer } from "@solidjs/web";
|
|
10
29
|
|
|
11
30
|
/**
|
|
12
|
-
* Re-export isServer from
|
|
31
|
+
* Re-export isServer from @solidjs/web for convenience.
|
|
13
32
|
*/
|
|
14
33
|
export const isServer = _isServer;
|
|
15
34
|
|
|
@@ -27,11 +46,22 @@ export function createIsSSR(): boolean {
|
|
|
27
46
|
*
|
|
28
47
|
* @param defaultId - Optional default ID to use instead of generating one.
|
|
29
48
|
*/
|
|
49
|
+
let fallbackIdCounter = 0;
|
|
50
|
+
|
|
30
51
|
export function createId(defaultId?: string): string {
|
|
31
52
|
if (defaultId) {
|
|
32
53
|
return defaultId;
|
|
33
54
|
}
|
|
34
|
-
|
|
55
|
+
let uniqueId: string | undefined;
|
|
56
|
+
try {
|
|
57
|
+
uniqueId = createUniqueId();
|
|
58
|
+
} catch {
|
|
59
|
+
// createUniqueId throws outside of a reactive context in server/hydration passes
|
|
60
|
+
}
|
|
61
|
+
if (!uniqueId) {
|
|
62
|
+
uniqueId = `nh-${++fallbackIdCounter}`;
|
|
63
|
+
}
|
|
64
|
+
return `solid-stately-${uniqueId}`;
|
|
35
65
|
}
|
|
36
66
|
|
|
37
67
|
/**
|