@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
|
@@ -1,10 +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/numberfield/useNumberFieldState.ts
|
|
14
|
+
|
|
1
15
|
/**
|
|
2
16
|
* State management for NumberField.
|
|
3
17
|
* Based on @react-stately/numberfield useNumberFieldState.
|
|
4
18
|
*/
|
|
5
19
|
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
20
|
+
import { createMemo } from "solid-js";
|
|
21
|
+
import type { Accessor } from "solid-js";
|
|
22
|
+
import { NumberFormatter, NumberParser } from "@internationalized/number";
|
|
23
|
+
import { access, createInternalSignal, readNow, type MaybeAccessor } from "../utils";
|
|
24
|
+
import {
|
|
25
|
+
createFormValidationState,
|
|
26
|
+
type FormValidationState,
|
|
27
|
+
type ValidationFunction,
|
|
28
|
+
} from "../form";
|
|
8
29
|
|
|
9
30
|
export interface NumberFieldStateProps {
|
|
10
31
|
/** The current value (controlled). */
|
|
@@ -27,12 +48,36 @@ export interface NumberFieldStateProps {
|
|
|
27
48
|
locale?: string;
|
|
28
49
|
/** Number format options. */
|
|
29
50
|
formatOptions?: Intl.NumberFormatOptions;
|
|
51
|
+
/** Whether the number field is invalid (controlled). */
|
|
52
|
+
isInvalid?: boolean;
|
|
53
|
+
/** @deprecated Use isInvalid instead. */
|
|
54
|
+
validationState?: "valid" | "invalid";
|
|
55
|
+
/** Custom validation function. */
|
|
56
|
+
validate?: ValidationFunction<number>;
|
|
57
|
+
/**
|
|
58
|
+
* Whether to use native HTML form validation or ARIA validation semantics.
|
|
59
|
+
* @default "native"
|
|
60
|
+
*/
|
|
61
|
+
validationBehavior?: "aria" | "native";
|
|
62
|
+
/** Field name(s) for server error lookup. */
|
|
63
|
+
name?: string | string[];
|
|
64
|
+
/**
|
|
65
|
+
* Controls the behavior of the number field when the user blurs the field after
|
|
66
|
+
* editing. `'snap'` clamps to min/max and snaps to step. `'validate'` leaves the
|
|
67
|
+
* value and reports native range/step validity.
|
|
68
|
+
*
|
|
69
|
+
* @default "snap"
|
|
70
|
+
*/
|
|
71
|
+
commitBehavior?: "snap" | "validate";
|
|
30
72
|
}
|
|
31
73
|
|
|
32
|
-
export interface NumberFieldState {
|
|
74
|
+
export interface NumberFieldState extends FormValidationState {
|
|
33
75
|
/** The current input value as a string. */
|
|
34
76
|
inputValue: Accessor<string>;
|
|
35
|
-
/**
|
|
77
|
+
/**
|
|
78
|
+
* The currently parsed number value, or NaN if the input could not be parsed.
|
|
79
|
+
* Updated from the input text as the user types.
|
|
80
|
+
*/
|
|
36
81
|
numberValue: Accessor<number>;
|
|
37
82
|
/** Whether the value can be incremented. */
|
|
38
83
|
canIncrement: Accessor<boolean>;
|
|
@@ -46,12 +91,18 @@ export interface NumberFieldState {
|
|
|
46
91
|
minValue: Accessor<number | undefined>;
|
|
47
92
|
/** The maximum value. */
|
|
48
93
|
maxValue: Accessor<number | undefined>;
|
|
94
|
+
/** The configured step, or undefined when the field uses the default step. */
|
|
95
|
+
step: Accessor<number | undefined>;
|
|
96
|
+
/** The default numeric value, used on native form reset. */
|
|
97
|
+
defaultNumberValue: number;
|
|
98
|
+
/** Sets the number value and reformats the input. */
|
|
99
|
+
setNumberValue: (value: number) => void;
|
|
49
100
|
/** Set the input value. */
|
|
50
101
|
setInputValue: (value: string) => void;
|
|
51
102
|
/** Validate a partial input value. */
|
|
52
103
|
validate: (value: string) => boolean;
|
|
53
|
-
/** Commit the current input value. */
|
|
54
|
-
commit: () => void;
|
|
104
|
+
/** Commit the current input value, or an override when a paste replaces it. */
|
|
105
|
+
commit: (value?: string) => void;
|
|
55
106
|
/** Increment the value by step. */
|
|
56
107
|
increment: () => void;
|
|
57
108
|
/** Decrement the value by step. */
|
|
@@ -94,13 +145,60 @@ function clamp(value: number, min?: number, max?: number): number {
|
|
|
94
145
|
}
|
|
95
146
|
|
|
96
147
|
/**
|
|
97
|
-
*
|
|
148
|
+
* Rounds to the decimal precision implied by a step, including exponential steps.
|
|
98
149
|
*/
|
|
99
|
-
function
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
const
|
|
103
|
-
|
|
150
|
+
function roundToStepPrecision(value: number, step: number): number {
|
|
151
|
+
let roundedValue = value;
|
|
152
|
+
let precision = 0;
|
|
153
|
+
const stepString = step.toString();
|
|
154
|
+
const eIndex = stepString.toLowerCase().indexOf("e-");
|
|
155
|
+
if (eIndex > 0) {
|
|
156
|
+
precision = Math.abs(Math.floor(Math.log10(Math.abs(step)))) + eIndex;
|
|
157
|
+
} else {
|
|
158
|
+
const pointIndex = stepString.indexOf(".");
|
|
159
|
+
if (pointIndex >= 0) {
|
|
160
|
+
precision = stepString.length - pointIndex;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
if (precision > 0) {
|
|
164
|
+
const pow = Math.pow(10, precision);
|
|
165
|
+
roundedValue = Math.round(roundedValue * pow) / pow;
|
|
166
|
+
}
|
|
167
|
+
return roundedValue;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* Snaps to the nearest step, then to the last in-range step when that exceeds max.
|
|
172
|
+
* A negative halfway rounds away from the step base.
|
|
173
|
+
*/
|
|
174
|
+
function snapValueToStep(
|
|
175
|
+
value: number,
|
|
176
|
+
min: number | undefined,
|
|
177
|
+
max: number | undefined,
|
|
178
|
+
step: number,
|
|
179
|
+
): number {
|
|
180
|
+
const minNumber = Number(min);
|
|
181
|
+
const maxNumber = Number(max);
|
|
182
|
+
const remainder = (value - (isNaN(minNumber) ? 0 : minNumber)) % step;
|
|
183
|
+
let snappedValue = roundToStepPrecision(
|
|
184
|
+
Math.abs(remainder) * 2 >= step
|
|
185
|
+
? value + Math.sign(remainder) * (step - Math.abs(remainder))
|
|
186
|
+
: value - remainder,
|
|
187
|
+
step,
|
|
188
|
+
);
|
|
189
|
+
|
|
190
|
+
if (!isNaN(minNumber)) {
|
|
191
|
+
if (snappedValue < minNumber) {
|
|
192
|
+
snappedValue = minNumber;
|
|
193
|
+
} else if (!isNaN(maxNumber) && snappedValue > maxNumber) {
|
|
194
|
+
snappedValue =
|
|
195
|
+
minNumber + Math.floor(roundToStepPrecision((maxNumber - minNumber) / step, step)) * step;
|
|
196
|
+
}
|
|
197
|
+
} else if (!isNaN(maxNumber) && snappedValue > maxNumber) {
|
|
198
|
+
snappedValue = Math.floor(roundToStepPrecision(maxNumber / step, step)) * step;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
return roundToStepPrecision(snappedValue, step);
|
|
104
202
|
}
|
|
105
203
|
|
|
106
204
|
function isValidStep(step: number | undefined): step is number {
|
|
@@ -115,84 +213,86 @@ export function createNumberFieldState(
|
|
|
115
213
|
): NumberFieldState {
|
|
116
214
|
const getProps = () => access(props);
|
|
117
215
|
|
|
216
|
+
// Internal signals
|
|
217
|
+
const [inputValue, setInputValueInternal] = createInternalSignal<string>("");
|
|
218
|
+
const [numberValue, setNumberValue] = createInternalSignal<number>(NaN);
|
|
219
|
+
|
|
118
220
|
// Get locale and formatter
|
|
119
221
|
const locale = () => getProps().locale ?? "en-US";
|
|
120
222
|
const formatOptions = () => getProps().formatOptions ?? {};
|
|
121
223
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
return new Intl.NumberFormat(locale(), formatOptions());
|
|
224
|
+
const numberParser = createMemo(() => {
|
|
225
|
+
return new NumberParser(locale(), formatOptions());
|
|
125
226
|
});
|
|
126
227
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
// Handle locale-specific decimal separators
|
|
132
|
-
const opts = formatOptions();
|
|
133
|
-
const testNumber = formatter().format(1.1);
|
|
134
|
-
const decimalSeparator = testNumber.charAt(1);
|
|
135
|
-
|
|
136
|
-
// Normalize the input
|
|
137
|
-
let normalized = value;
|
|
138
|
-
if (decimalSeparator !== ".") {
|
|
139
|
-
normalized = normalized.replace(decimalSeparator, ".");
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
// Remove grouping separators and currency symbols
|
|
143
|
-
normalized = normalized.replace(/[^\d.-]/g, "");
|
|
144
|
-
|
|
145
|
-
const parsed = parseFloat(normalized);
|
|
146
|
-
if (isNaN(parsed)) return parsed;
|
|
228
|
+
const numberingSystem = createMemo(() => {
|
|
229
|
+
return numberParser().getNumberingSystem(inputValue());
|
|
230
|
+
});
|
|
147
231
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
232
|
+
const formatter = createMemo(() => {
|
|
233
|
+
return new NumberFormatter(locale(), {
|
|
234
|
+
...formatOptions(),
|
|
235
|
+
numberingSystem: numberingSystem(),
|
|
236
|
+
});
|
|
237
|
+
});
|
|
151
238
|
|
|
152
|
-
|
|
239
|
+
const parseNumber = (value: string): number => {
|
|
240
|
+
return numberParser().parse(value);
|
|
153
241
|
};
|
|
154
242
|
|
|
155
243
|
// Format a number to string
|
|
156
244
|
const formatNumber = (value: number): string => {
|
|
157
|
-
if (isNaN(value)) return "";
|
|
245
|
+
if (isNaN(value) || value === null) return "";
|
|
158
246
|
return formatter().format(value);
|
|
159
247
|
};
|
|
160
248
|
|
|
161
249
|
// Determine step value
|
|
162
250
|
const hasCustomStep = createMemo(() => isValidStep(getProps().step));
|
|
251
|
+
const shouldSnap = () => (getProps().commitBehavior ?? "snap") === "snap";
|
|
163
252
|
|
|
164
253
|
const step = createMemo(() => {
|
|
165
254
|
const p = getProps();
|
|
166
255
|
if (hasCustomStep()) return p.step as number;
|
|
167
|
-
|
|
168
|
-
if (
|
|
256
|
+
const resolved = formatter().resolvedOptions();
|
|
257
|
+
if (resolved.style === "percent") return 0.01;
|
|
169
258
|
return 1;
|
|
170
259
|
});
|
|
171
260
|
|
|
172
|
-
// Internal signals
|
|
173
|
-
const [inputValue, setInputValueInternal] = createSignal<string>("");
|
|
174
|
-
const [numberValue, setNumberValue] = createSignal<number>(NaN);
|
|
175
|
-
|
|
176
261
|
const applyConstraints = (value: number): number => {
|
|
177
262
|
const p = getProps();
|
|
178
263
|
if (isNaN(value)) return NaN;
|
|
179
264
|
|
|
180
265
|
if (hasCustomStep()) {
|
|
181
|
-
return
|
|
266
|
+
return snapValueToStep(value, p.minValue, p.maxValue, step());
|
|
182
267
|
}
|
|
183
268
|
|
|
184
269
|
return clamp(value, p.minValue, p.maxValue);
|
|
185
270
|
};
|
|
186
271
|
|
|
272
|
+
let initialNumberValue = NaN;
|
|
273
|
+
let capturedDefaultNumberValue = NaN;
|
|
274
|
+
|
|
275
|
+
const constrainForCommit = (value: number): number => {
|
|
276
|
+
if (!shouldSnap()) return value;
|
|
277
|
+
return applyConstraints(value);
|
|
278
|
+
};
|
|
279
|
+
|
|
187
280
|
// Initialize from props
|
|
188
281
|
const initValue = () => {
|
|
189
282
|
const p = getProps();
|
|
190
283
|
const initial = p.value ?? p.defaultValue;
|
|
191
|
-
if (initial != null) {
|
|
192
|
-
const
|
|
193
|
-
setNumberValue(
|
|
194
|
-
setInputValueInternal(formatNumber(
|
|
284
|
+
if (initial != null && !isNaN(initial)) {
|
|
285
|
+
const next = constrainForCommit(initial);
|
|
286
|
+
setNumberValue(next);
|
|
287
|
+
setInputValueInternal(formatNumber(next));
|
|
288
|
+
initialNumberValue = next;
|
|
289
|
+
} else {
|
|
290
|
+
initialNumberValue = NaN;
|
|
195
291
|
}
|
|
292
|
+
const defaultValue = p.defaultValue ?? NaN;
|
|
293
|
+
capturedDefaultNumberValue = isNaN(defaultValue)
|
|
294
|
+
? initialNumberValue
|
|
295
|
+
: constrainForCommit(defaultValue);
|
|
196
296
|
};
|
|
197
297
|
|
|
198
298
|
// Call init on first access
|
|
@@ -209,7 +309,7 @@ export function createNumberFieldState(
|
|
|
209
309
|
ensureInitialized();
|
|
210
310
|
const p = getProps();
|
|
211
311
|
if (p.value !== undefined) {
|
|
212
|
-
return
|
|
312
|
+
return constrainForCommit(p.value);
|
|
213
313
|
}
|
|
214
314
|
return numberValue();
|
|
215
315
|
});
|
|
@@ -222,34 +322,45 @@ export function createNumberFieldState(
|
|
|
222
322
|
return;
|
|
223
323
|
}
|
|
224
324
|
|
|
225
|
-
const
|
|
226
|
-
if (lastControlledValue === undefined || !Object.is(lastControlledValue,
|
|
227
|
-
lastControlledValue =
|
|
228
|
-
setNumberValue(
|
|
229
|
-
setInputValueInternal(formatNumber(
|
|
325
|
+
const next = constrainForCommit(p.value);
|
|
326
|
+
if (lastControlledValue === undefined || !Object.is(lastControlledValue, next)) {
|
|
327
|
+
lastControlledValue = next;
|
|
328
|
+
setNumberValue(next);
|
|
329
|
+
setInputValueInternal(formatNumber(next));
|
|
230
330
|
}
|
|
231
331
|
};
|
|
232
332
|
|
|
233
333
|
const parsedInputValue = () => {
|
|
234
334
|
ensureInitialized();
|
|
235
335
|
syncControlledValue();
|
|
236
|
-
return parseNumber(inputValue
|
|
336
|
+
return parseNumber(readNow(inputValue));
|
|
237
337
|
};
|
|
238
338
|
|
|
339
|
+
const validation = createFormValidationState({
|
|
340
|
+
get value() {
|
|
341
|
+
ensureInitialized();
|
|
342
|
+
return actualNumberValue();
|
|
343
|
+
},
|
|
344
|
+
get isInvalid() {
|
|
345
|
+
return getProps().isInvalid;
|
|
346
|
+
},
|
|
347
|
+
get validationState() {
|
|
348
|
+
return getProps().validationState;
|
|
349
|
+
},
|
|
350
|
+
get validate() {
|
|
351
|
+
return getProps().validate;
|
|
352
|
+
},
|
|
353
|
+
get name() {
|
|
354
|
+
return getProps().name;
|
|
355
|
+
},
|
|
356
|
+
get validationBehavior() {
|
|
357
|
+
return getProps().validationBehavior ?? "native";
|
|
358
|
+
},
|
|
359
|
+
});
|
|
360
|
+
|
|
239
361
|
// Validate partial input
|
|
240
362
|
const validate = (value: string): boolean => {
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
// Allow partial decimal input like "1."
|
|
244
|
-
const opts = formatOptions();
|
|
245
|
-
const testNumber = formatter().format(1.1);
|
|
246
|
-
const decimalSeparator = testNumber.charAt(1);
|
|
247
|
-
|
|
248
|
-
// Check if it's a valid partial number
|
|
249
|
-
const pattern = new RegExp(
|
|
250
|
-
`^-?\\d*${decimalSeparator === "." ? "\\." : decimalSeparator}?\\d*$`,
|
|
251
|
-
);
|
|
252
|
-
return pattern.test(value);
|
|
363
|
+
return numberParser().isValidPartialNumber(value, getProps().minValue, getProps().maxValue);
|
|
253
364
|
};
|
|
254
365
|
|
|
255
366
|
// Set input value with validation
|
|
@@ -259,17 +370,18 @@ export function createNumberFieldState(
|
|
|
259
370
|
setInputValueInternal(value);
|
|
260
371
|
};
|
|
261
372
|
|
|
262
|
-
// Commit the current input value
|
|
263
|
-
const commit = () => {
|
|
373
|
+
// Commit the current input value, or an override when a paste replaces it.
|
|
374
|
+
const commit = (override?: string) => {
|
|
264
375
|
ensureInitialized();
|
|
265
376
|
const p = getProps();
|
|
266
|
-
const input = inputValue
|
|
377
|
+
const input = override === undefined ? readNow(inputValue) : override;
|
|
267
378
|
|
|
268
|
-
if (input === ""
|
|
379
|
+
if (input === "") {
|
|
269
380
|
// Clear value
|
|
270
381
|
setNumberValue(NaN);
|
|
271
|
-
setInputValueInternal(p.value === undefined ? "" : formatNumber(actualNumberValue
|
|
382
|
+
setInputValueInternal(p.value === undefined ? "" : formatNumber(readNow(actualNumberValue)));
|
|
272
383
|
p.onChange?.(NaN);
|
|
384
|
+
validation.commitValidation();
|
|
273
385
|
return;
|
|
274
386
|
}
|
|
275
387
|
|
|
@@ -277,18 +389,22 @@ export function createNumberFieldState(
|
|
|
277
389
|
|
|
278
390
|
if (isNaN(parsed)) {
|
|
279
391
|
// Invalid input - revert to current value
|
|
280
|
-
setInputValueInternal(formatNumber(actualNumberValue
|
|
392
|
+
setInputValueInternal(formatNumber(readNow(actualNumberValue)));
|
|
281
393
|
return;
|
|
282
394
|
}
|
|
283
395
|
|
|
284
|
-
|
|
285
|
-
parsed =
|
|
396
|
+
const previous = readNow(actualNumberValue);
|
|
397
|
+
parsed = constrainForCommit(parsed);
|
|
398
|
+
parsed = numberParser().parse(formatNumber(parsed));
|
|
286
399
|
|
|
287
|
-
// Update state
|
|
288
400
|
setNumberValue(parsed);
|
|
289
|
-
|
|
401
|
+
// A controlled field keeps the current number until its value prop updates.
|
|
402
|
+
setInputValueInternal(formatNumber(p.value === undefined ? parsed : previous));
|
|
290
403
|
|
|
291
404
|
p.onChange?.(parsed);
|
|
405
|
+
if (parsed !== previous) {
|
|
406
|
+
validation.commitValidation();
|
|
407
|
+
}
|
|
292
408
|
};
|
|
293
409
|
|
|
294
410
|
// Check if can increment
|
|
@@ -302,7 +418,7 @@ export function createNumberFieldState(
|
|
|
302
418
|
|
|
303
419
|
if (p.maxValue == null) return true;
|
|
304
420
|
return (
|
|
305
|
-
|
|
421
|
+
snapValueToStep(current, p.minValue, p.maxValue, step()) > current ||
|
|
306
422
|
handleDecimalOperation("+", current, step()) <= p.maxValue
|
|
307
423
|
);
|
|
308
424
|
});
|
|
@@ -318,7 +434,7 @@ export function createNumberFieldState(
|
|
|
318
434
|
|
|
319
435
|
if (p.minValue == null) return true;
|
|
320
436
|
return (
|
|
321
|
-
|
|
437
|
+
snapValueToStep(current, p.minValue, p.maxValue, step()) < current ||
|
|
322
438
|
handleDecimalOperation("-", current, step()) >= p.minValue
|
|
323
439
|
);
|
|
324
440
|
});
|
|
@@ -329,16 +445,31 @@ export function createNumberFieldState(
|
|
|
329
445
|
|
|
330
446
|
if (isNaN(parsed)) {
|
|
331
447
|
const base = isNaN(minOrMaxValue) ? 0 : minOrMaxValue;
|
|
332
|
-
return
|
|
448
|
+
return snapValueToStep(base, p.minValue, p.maxValue, step());
|
|
333
449
|
}
|
|
334
450
|
|
|
335
|
-
const snapped =
|
|
451
|
+
const snapped = snapValueToStep(parsed, p.minValue, p.maxValue, step());
|
|
336
452
|
if ((operation === "+" && snapped > parsed) || (operation === "-" && snapped < parsed)) {
|
|
337
|
-
return
|
|
453
|
+
return snapped;
|
|
338
454
|
}
|
|
339
455
|
|
|
340
|
-
|
|
341
|
-
|
|
456
|
+
return snapValueToStep(
|
|
457
|
+
handleDecimalOperation(operation, parsed, step()),
|
|
458
|
+
p.minValue,
|
|
459
|
+
p.maxValue,
|
|
460
|
+
step(),
|
|
461
|
+
);
|
|
462
|
+
};
|
|
463
|
+
|
|
464
|
+
// Pin reformats the text when the committed number changes. A controlled
|
|
465
|
+
// step leaves the text alone until `value` updates, unless the step lands
|
|
466
|
+
// on that same number and has to replace what the user typed.
|
|
467
|
+
const commitSteppedNumber = (next: number, refreshWhenUnchanged: boolean) => {
|
|
468
|
+
const committed = readNow(actualNumberValue);
|
|
469
|
+
setNumberValue(next);
|
|
470
|
+
if (getProps().value === undefined || (refreshWhenUnchanged && next === committed)) {
|
|
471
|
+
setInputValueInternal(formatNumber(next));
|
|
472
|
+
}
|
|
342
473
|
};
|
|
343
474
|
|
|
344
475
|
// Increment by step
|
|
@@ -349,9 +480,9 @@ export function createNumberFieldState(
|
|
|
349
480
|
if (p.isDisabled || p.isReadOnly) return;
|
|
350
481
|
|
|
351
482
|
const current = safeNextStep("+", p.minValue);
|
|
352
|
-
|
|
353
|
-
setInputValueInternal(formatNumber(current));
|
|
483
|
+
commitSteppedNumber(current, true);
|
|
354
484
|
p.onChange?.(current);
|
|
485
|
+
validation.commitValidation();
|
|
355
486
|
};
|
|
356
487
|
|
|
357
488
|
// Decrement by step
|
|
@@ -362,9 +493,9 @@ export function createNumberFieldState(
|
|
|
362
493
|
if (p.isDisabled || p.isReadOnly) return;
|
|
363
494
|
|
|
364
495
|
const current = safeNextStep("-", p.maxValue);
|
|
365
|
-
|
|
366
|
-
setInputValueInternal(formatNumber(current));
|
|
496
|
+
commitSteppedNumber(current, true);
|
|
367
497
|
p.onChange?.(current);
|
|
498
|
+
validation.commitValidation();
|
|
368
499
|
};
|
|
369
500
|
|
|
370
501
|
// Set to max
|
|
@@ -376,13 +507,13 @@ export function createNumberFieldState(
|
|
|
376
507
|
|
|
377
508
|
if (p.maxValue == null) return;
|
|
378
509
|
|
|
379
|
-
const snapped =
|
|
380
|
-
|
|
381
|
-
setInputValueInternal(formatNumber(snapped));
|
|
510
|
+
const snapped = snapValueToStep(p.maxValue, p.minValue, p.maxValue, step());
|
|
511
|
+
commitSteppedNumber(snapped, false);
|
|
382
512
|
p.onChange?.(snapped);
|
|
513
|
+
validation.commitValidation();
|
|
383
514
|
};
|
|
384
515
|
|
|
385
|
-
// Set to min
|
|
516
|
+
// Set to min. Pin sets the raw minimum, not a snapped step.
|
|
386
517
|
const decrementToMin = () => {
|
|
387
518
|
ensureInitialized();
|
|
388
519
|
syncControlledValue();
|
|
@@ -391,19 +522,31 @@ export function createNumberFieldState(
|
|
|
391
522
|
|
|
392
523
|
if (p.minValue == null) return;
|
|
393
524
|
|
|
394
|
-
|
|
395
|
-
setInputValueInternal(formatNumber(p.minValue));
|
|
525
|
+
commitSteppedNumber(p.minValue, false);
|
|
396
526
|
p.onChange?.(p.minValue);
|
|
527
|
+
validation.commitValidation();
|
|
528
|
+
};
|
|
529
|
+
|
|
530
|
+
const setNumberValuePublic = (value: number) => {
|
|
531
|
+
ensureInitialized();
|
|
532
|
+
commitSteppedNumber(value, false);
|
|
533
|
+
getProps().onChange?.(value);
|
|
397
534
|
};
|
|
398
535
|
|
|
399
536
|
return {
|
|
537
|
+
realtimeValidation: validation.realtimeValidation,
|
|
538
|
+
displayValidation: validation.displayValidation,
|
|
539
|
+
updateValidation: validation.updateValidation,
|
|
540
|
+
resetValidation: validation.resetValidation,
|
|
541
|
+
commitValidation: validation.commitValidation,
|
|
400
542
|
get inputValue() {
|
|
401
543
|
ensureInitialized();
|
|
402
544
|
syncControlledValue();
|
|
403
545
|
return inputValue;
|
|
404
546
|
},
|
|
547
|
+
// Parsed text. Form validation reads the committed number separately.
|
|
405
548
|
get numberValue() {
|
|
406
|
-
return
|
|
549
|
+
return parsedInputValue;
|
|
407
550
|
},
|
|
408
551
|
canIncrement,
|
|
409
552
|
canDecrement,
|
|
@@ -411,6 +554,12 @@ export function createNumberFieldState(
|
|
|
411
554
|
isReadOnly: () => getProps().isReadOnly ?? false,
|
|
412
555
|
minValue: () => getProps().minValue,
|
|
413
556
|
maxValue: () => getProps().maxValue,
|
|
557
|
+
step: () => getProps().step,
|
|
558
|
+
get defaultNumberValue() {
|
|
559
|
+
ensureInitialized();
|
|
560
|
+
return capturedDefaultNumberValue;
|
|
561
|
+
},
|
|
562
|
+
setNumberValue: setNumberValuePublic,
|
|
414
563
|
setInputValue,
|
|
415
564
|
validate,
|
|
416
565
|
commit,
|
|
@@ -1,10 +1,24 @@
|
|
|
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/overlays/useOverlayTriggerState.ts
|
|
14
|
+
|
|
1
15
|
/**
|
|
2
16
|
* Manages state for an overlay trigger.
|
|
3
17
|
* Based on @react-stately/overlays useOverlayTriggerState.
|
|
4
18
|
*/
|
|
5
19
|
|
|
6
|
-
import {
|
|
7
|
-
import { access, type MaybeAccessor } from "../utils";
|
|
20
|
+
import type { Accessor } from "solid-js";
|
|
21
|
+
import { access, createInternalSignal, readNow, type MaybeAccessor } from "../utils";
|
|
8
22
|
|
|
9
23
|
export interface OverlayTriggerProps {
|
|
10
24
|
/** Whether the overlay is open by default (uncontrolled). */
|
|
@@ -26,6 +40,10 @@ export interface OverlayTriggerState {
|
|
|
26
40
|
close(): void;
|
|
27
41
|
/** Toggles the overlay's visibility. */
|
|
28
42
|
toggle(): void;
|
|
43
|
+
/** Cursor position relative to the window viewport. */
|
|
44
|
+
readonly point: Accessor<{ x: number; y: number } | null>;
|
|
45
|
+
/** Sets the cursor position relative to the window viewport. */
|
|
46
|
+
setPoint(point: { x: number; y: number }): void;
|
|
29
47
|
}
|
|
30
48
|
|
|
31
49
|
/**
|
|
@@ -37,7 +55,10 @@ export function createOverlayTriggerState(
|
|
|
37
55
|
): OverlayTriggerState {
|
|
38
56
|
const propsAccessor = () => access(props);
|
|
39
57
|
|
|
40
|
-
const [internalOpen, setInternalOpen] =
|
|
58
|
+
const [internalOpen, setInternalOpen] = createInternalSignal(
|
|
59
|
+
propsAccessor().defaultOpen ?? false,
|
|
60
|
+
);
|
|
61
|
+
const [point, setPoint] = createInternalSignal<{ x: number; y: number } | null>(null);
|
|
41
62
|
|
|
42
63
|
const isOpen: Accessor<boolean> = () => {
|
|
43
64
|
const p = propsAccessor();
|
|
@@ -54,7 +75,11 @@ export function createOverlayTriggerState(
|
|
|
54
75
|
|
|
55
76
|
const open = () => setOpen(true);
|
|
56
77
|
const close = () => setOpen(false);
|
|
57
|
-
const toggle = () =>
|
|
78
|
+
const toggle = () => {
|
|
79
|
+
const p = propsAccessor();
|
|
80
|
+
const open = p.isOpen !== undefined ? p.isOpen : readNow(internalOpen);
|
|
81
|
+
setOpen(!open);
|
|
82
|
+
};
|
|
58
83
|
|
|
59
84
|
return {
|
|
60
85
|
isOpen,
|
|
@@ -62,5 +87,7 @@ export function createOverlayTriggerState(
|
|
|
62
87
|
open,
|
|
63
88
|
close,
|
|
64
89
|
toggle,
|
|
90
|
+
point,
|
|
91
|
+
setPoint,
|
|
65
92
|
};
|
|
66
93
|
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2023 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/flags/flags.ts
|
|
14
|
+
|
|
15
|
+
let shadowDOMEnabled = false;
|
|
16
|
+
|
|
17
|
+
/** Enables React Stately's opt-in Shadow DOM behavior across the port stack. */
|
|
18
|
+
export function enableShadowDOM(): void {
|
|
19
|
+
shadowDOMEnabled = true;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/** Returns whether opt-in Shadow DOM behavior is enabled. */
|
|
23
|
+
export function shadowDOM(): boolean {
|
|
24
|
+
return shadowDOMEnabled;
|
|
25
|
+
}
|