@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,12 +1,34 @@
|
|
|
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/steplist/useStepListState.ts
|
|
14
|
+
|
|
1
15
|
/**
|
|
2
16
|
* State management for step list components.
|
|
3
17
|
* Tracks selected step, completion status, and selectability.
|
|
18
|
+
*
|
|
19
|
+
* Ported from packages/react-stately/src/steplist/useStepListState.ts.
|
|
4
20
|
*/
|
|
5
21
|
|
|
6
|
-
import { createEffect, createMemo
|
|
7
|
-
import type {
|
|
22
|
+
import { createEffect, createMemo } from "solid-js";
|
|
23
|
+
import type { Accessor } from "solid-js";
|
|
24
|
+
import { createInternalSignal } from "../utils";
|
|
25
|
+
import type { CollectionNode, Key } from "../collections/types";
|
|
26
|
+
import {
|
|
27
|
+
createSingleSelectListState,
|
|
28
|
+
type SingleSelectListState,
|
|
29
|
+
} from "../collections/createListState";
|
|
8
30
|
|
|
9
|
-
export interface StepListStateProps {
|
|
31
|
+
export interface StepListStateProps<T = unknown> {
|
|
10
32
|
/** The currently selected step key (controlled). */
|
|
11
33
|
selectedKey?: Key;
|
|
12
34
|
/** The default selected step key (uncontrolled). */
|
|
@@ -26,47 +48,31 @@ export interface StepListStateProps {
|
|
|
26
48
|
/** Keys of individually disabled steps. */
|
|
27
49
|
disabledKeys?: Iterable<Key>;
|
|
28
50
|
/** The step items. */
|
|
29
|
-
items:
|
|
51
|
+
items: T[];
|
|
30
52
|
}
|
|
31
53
|
|
|
32
|
-
export interface StepListState {
|
|
33
|
-
readonly selectedKey: Accessor<Key | null>;
|
|
54
|
+
export interface StepListState<T = unknown> extends SingleSelectListState<T> {
|
|
34
55
|
readonly lastCompletedStep: Accessor<Key | null>;
|
|
35
|
-
readonly items: Accessor<
|
|
56
|
+
readonly items: Accessor<T[]>;
|
|
36
57
|
setSelectedKey(key: Key): void;
|
|
37
|
-
setLastCompletedStep(key: Key): void;
|
|
58
|
+
setLastCompletedStep(key: Key | null): void;
|
|
38
59
|
isCompleted(key: Key): boolean;
|
|
39
60
|
isSelectable(key: Key): boolean;
|
|
40
|
-
isDisabled: Accessor<boolean
|
|
61
|
+
isDisabled: Accessor<boolean> & ((key?: Key) => boolean);
|
|
41
62
|
isReadOnly: Accessor<boolean>;
|
|
42
63
|
}
|
|
43
64
|
|
|
44
65
|
/**
|
|
45
66
|
* Creates state for a step list component.
|
|
46
67
|
*/
|
|
47
|
-
export function createStepListState(props: StepListStateProps): StepListState {
|
|
48
|
-
const
|
|
49
|
-
|
|
50
|
-
// Build an index map: Key -> index
|
|
51
|
-
const indexMap = createMemo(() => {
|
|
52
|
-
const map = new Map<Key, number>();
|
|
53
|
-
const currentItems = items();
|
|
54
|
-
for (let i = 0; i < currentItems.length; i++) {
|
|
55
|
-
map.set(currentItems[i].key, i);
|
|
56
|
-
}
|
|
57
|
-
return map;
|
|
58
|
-
});
|
|
59
|
-
|
|
60
|
-
// Disabled keys set
|
|
61
|
-
const disabledKeysSet = createMemo(() => new Set<Key>(props.disabledKeys ?? []));
|
|
62
|
-
|
|
63
|
-
const isDisabled: Accessor<boolean> = () => props.isDisabled ?? false;
|
|
68
|
+
export function createStepListState<T = unknown>(props: StepListStateProps<T>): StepListState<T> {
|
|
69
|
+
const isListDisabled: Accessor<boolean> = () => props.isDisabled ?? false;
|
|
64
70
|
const isReadOnly: Accessor<boolean> = () => props.isReadOnly ?? false;
|
|
71
|
+
const items: Accessor<T[]> = () => props.items ?? [];
|
|
65
72
|
|
|
66
|
-
// Last completed step signal (uncontrolled)
|
|
67
|
-
const [lastCompletedStepInternal, setLastCompletedStepInternal] =
|
|
68
|
-
props.defaultLastCompletedStep ?? null
|
|
69
|
-
);
|
|
73
|
+
// Last completed step signal (uncontrolled / controlled sync)
|
|
74
|
+
const [lastCompletedStepInternal, setLastCompletedStepInternal] =
|
|
75
|
+
createInternalSignal<Key | null>(props.defaultLastCompletedStep ?? null);
|
|
70
76
|
|
|
71
77
|
const lastCompletedStep: Accessor<Key | null> = () => {
|
|
72
78
|
if (props.lastCompletedStep !== undefined) {
|
|
@@ -75,140 +81,188 @@ export function createStepListState(props: StepListStateProps): StepListState {
|
|
|
75
81
|
return lastCompletedStepInternal();
|
|
76
82
|
};
|
|
77
83
|
|
|
78
|
-
const
|
|
79
|
-
|
|
80
|
-
const
|
|
84
|
+
const isCompleted = (step: Key): boolean => {
|
|
85
|
+
if (step == null) return false;
|
|
86
|
+
const completed = lastCompletedStep();
|
|
87
|
+
if (completed == null) return false;
|
|
88
|
+
const { indexMap } = keyMaps();
|
|
89
|
+
const stepIdx = indexMap.get(step);
|
|
90
|
+
const completedIdx = indexMap.get(completed);
|
|
91
|
+
if (stepIdx === undefined || completedIdx === undefined) return false;
|
|
92
|
+
return stepIdx <= completedIdx;
|
|
93
|
+
};
|
|
81
94
|
|
|
82
|
-
|
|
83
|
-
if (
|
|
84
|
-
|
|
85
|
-
(prevIndex === undefined || currentIndex > (prevIndex ?? -1))
|
|
86
|
-
) {
|
|
87
|
-
if (props.lastCompletedStep === undefined) {
|
|
88
|
-
setLastCompletedStepInternal(key);
|
|
89
|
-
}
|
|
90
|
-
props.onLastCompletedStepChange?.(key);
|
|
95
|
+
const isSelectable = (step: Key): boolean => {
|
|
96
|
+
if (isListDisabled() || singleSelectListState.disabledKeys().has(step) || isReadOnly()) {
|
|
97
|
+
return false;
|
|
91
98
|
}
|
|
99
|
+
if (isCompleted(step)) return true;
|
|
100
|
+
const { keysLinkedList } = keyMaps();
|
|
101
|
+
const prevStep = keysLinkedList.get(step);
|
|
102
|
+
return (
|
|
103
|
+
(prevStep !== undefined && isCompleted(prevStep)) ||
|
|
104
|
+
step === singleSelectListState.collection().getFirstKey()
|
|
105
|
+
);
|
|
92
106
|
};
|
|
93
107
|
|
|
94
|
-
const
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
const
|
|
99
|
-
|
|
100
|
-
|
|
108
|
+
const findInitialSelectedKey = (): Key | undefined => {
|
|
109
|
+
if (props.defaultSelectedKey !== undefined) {
|
|
110
|
+
return props.defaultSelectedKey;
|
|
111
|
+
}
|
|
112
|
+
const currentItems = (props.items ?? []) as Array<{ key: Key }>;
|
|
113
|
+
const disabled = new Set<Key>(props.disabledKeys ?? []);
|
|
114
|
+
for (const item of currentItems) {
|
|
115
|
+
if (!disabled.has(item.key)) {
|
|
116
|
+
return item.key;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return currentItems[0]?.key;
|
|
101
120
|
};
|
|
102
121
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
122
|
+
// Route through the shared SingleSelectListState collection spine
|
|
123
|
+
const singleSelectListState = createSingleSelectListState<T>({
|
|
124
|
+
get items() {
|
|
125
|
+
return (props.items ?? []) as T[];
|
|
126
|
+
},
|
|
127
|
+
getKey(item: any) {
|
|
128
|
+
return item.key;
|
|
129
|
+
},
|
|
130
|
+
getTextValue(item: any) {
|
|
131
|
+
return item.label ?? item.textValue ?? (item.key != null ? String(item.key) : "");
|
|
132
|
+
},
|
|
133
|
+
get disabledKeys() {
|
|
134
|
+
return props.disabledKeys;
|
|
135
|
+
},
|
|
136
|
+
get selectedKey() {
|
|
137
|
+
return props.selectedKey;
|
|
138
|
+
},
|
|
139
|
+
get defaultSelectedKey() {
|
|
140
|
+
return findInitialSelectedKey();
|
|
141
|
+
},
|
|
142
|
+
onSelectionChange(key) {
|
|
143
|
+
if (key != null) {
|
|
144
|
+
props.onSelectionChange?.(key);
|
|
145
|
+
}
|
|
146
|
+
},
|
|
147
|
+
});
|
|
107
148
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
// predecessor is *completed*, not merely selected.
|
|
121
|
-
const currentItems = items();
|
|
122
|
-
if (keyIndex !== undefined && keyIndex > 0) {
|
|
123
|
-
const prevKey = currentItems[keyIndex - 1].key;
|
|
124
|
-
if (isCompleted(prevKey)) return true;
|
|
149
|
+
// Build indexMap and keysLinkedList from the collection
|
|
150
|
+
const keyMaps = createMemo(() => {
|
|
151
|
+
const coll = singleSelectListState.collection();
|
|
152
|
+
const indexMap = new Map<Key, number>();
|
|
153
|
+
const keysLinkedList = new Map<Key, Key | undefined>();
|
|
154
|
+
let i = 0;
|
|
155
|
+
let prev: CollectionNode<T> | undefined;
|
|
156
|
+
for (const item of coll) {
|
|
157
|
+
indexMap.set(item.key, i);
|
|
158
|
+
keysLinkedList.set(item.key, prev?.key);
|
|
159
|
+
prev = item;
|
|
160
|
+
i++;
|
|
125
161
|
}
|
|
126
|
-
return
|
|
127
|
-
};
|
|
162
|
+
return { indexMap, keysLinkedList };
|
|
163
|
+
});
|
|
128
164
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
if (!isCompleted(item.key) && !isStepDisabled(item.key)) {
|
|
134
|
-
return item.key;
|
|
165
|
+
const setLastCompletedStep = (key: Key | null) => {
|
|
166
|
+
if (key == null) {
|
|
167
|
+
if (props.lastCompletedStep === undefined) {
|
|
168
|
+
setLastCompletedStepInternal(null);
|
|
135
169
|
}
|
|
170
|
+
props.onLastCompletedStepChange?.(null);
|
|
171
|
+
return;
|
|
136
172
|
}
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
173
|
+
const { indexMap } = keyMaps();
|
|
174
|
+
const currentIndex = indexMap.get(key);
|
|
175
|
+
const completed = lastCompletedStep();
|
|
176
|
+
const prevIndex = completed !== null ? indexMap.get(completed) : -1;
|
|
177
|
+
|
|
178
|
+
// Only advance completion, never go back
|
|
179
|
+
if (
|
|
180
|
+
currentIndex !== undefined &&
|
|
181
|
+
(prevIndex === undefined || currentIndex > (prevIndex ?? -1))
|
|
182
|
+
) {
|
|
183
|
+
if (props.lastCompletedStep === undefined) {
|
|
184
|
+
setLastCompletedStepInternal(key);
|
|
141
185
|
}
|
|
186
|
+
props.onLastCompletedStepChange?.(key);
|
|
142
187
|
}
|
|
143
|
-
return currentItems.length > 0 ? currentItems[0].key : null;
|
|
144
188
|
};
|
|
145
189
|
|
|
146
|
-
//
|
|
147
|
-
|
|
148
|
-
|
|
190
|
+
// Mirror react-stately useStepListState's effect: whenever the selected step
|
|
191
|
+
// sits more than one past the last completed step (e.g. mounted with a
|
|
192
|
+
// defaultSelectedKey ahead of progress), auto-complete its immediate predecessor.
|
|
193
|
+
createEffect(
|
|
194
|
+
() => {
|
|
195
|
+
const selKey = singleSelectListState.selectedKey();
|
|
196
|
+
if (selKey === null) return null;
|
|
197
|
+
const { indexMap, keysLinkedList } = keyMaps();
|
|
198
|
+
const selIdx = indexMap.get(selKey);
|
|
199
|
+
if (selIdx === undefined || selIdx <= 0) return null;
|
|
200
|
+
const completed = lastCompletedStep();
|
|
201
|
+
const lcs = completed !== null ? (indexMap.get(completed) ?? -1) : -1;
|
|
202
|
+
if (selIdx <= lcs + 1) return null;
|
|
203
|
+
return keysLinkedList.get(selKey) ?? null;
|
|
204
|
+
},
|
|
205
|
+
(prevKey) => {
|
|
206
|
+
if (prevKey != null) {
|
|
207
|
+
setLastCompletedStep(prevKey);
|
|
208
|
+
}
|
|
209
|
+
},
|
|
149
210
|
);
|
|
150
211
|
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
212
|
+
// Sync initial focus to selectedKey if focusedKey is unset
|
|
213
|
+
createEffect(
|
|
214
|
+
() => singleSelectListState.selectedKey(),
|
|
215
|
+
(selKey) => {
|
|
216
|
+
if (singleSelectListState.focusedKey() == null && selKey != null) {
|
|
217
|
+
singleSelectListState.setFocusedKey(selKey);
|
|
218
|
+
}
|
|
219
|
+
},
|
|
220
|
+
);
|
|
157
221
|
|
|
158
222
|
const setSelectedKey = (key: Key) => {
|
|
159
|
-
if (
|
|
223
|
+
if (isListDisabled() || isReadOnly()) return;
|
|
160
224
|
if (!isSelectable(key)) return;
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
const currentIndex = indexMap().get(currentSelected);
|
|
166
|
-
const newIndex = indexMap().get(key);
|
|
167
|
-
if (
|
|
168
|
-
currentIndex !== undefined &&
|
|
169
|
-
newIndex !== undefined &&
|
|
170
|
-
newIndex > currentIndex &&
|
|
171
|
-
!isCompleted(currentSelected)
|
|
172
|
-
) {
|
|
173
|
-
setLastCompletedStep(currentSelected);
|
|
174
|
-
}
|
|
225
|
+
const { keysLinkedList } = keyMaps();
|
|
226
|
+
const prevKey = keysLinkedList.get(key);
|
|
227
|
+
if (prevKey && !isCompleted(prevKey)) {
|
|
228
|
+
setLastCompletedStep(prevKey);
|
|
175
229
|
}
|
|
230
|
+
singleSelectListState.setSelectedKey(key);
|
|
231
|
+
};
|
|
176
232
|
|
|
177
|
-
|
|
178
|
-
|
|
233
|
+
// Bridge selectionManager with step list selectability
|
|
234
|
+
singleSelectListState.selectionManager.canSelectItem = (key: Key) => isSelectable(key);
|
|
235
|
+
const origReplaceSelection = singleSelectListState.selectionManager.replaceSelection.bind(
|
|
236
|
+
singleSelectListState.selectionManager,
|
|
237
|
+
);
|
|
238
|
+
singleSelectListState.selectionManager.replaceSelection = (key: Key) => {
|
|
239
|
+
if (isListDisabled() || isReadOnly()) return;
|
|
240
|
+
if (!isSelectable(key)) return;
|
|
241
|
+
const { keysLinkedList } = keyMaps();
|
|
242
|
+
const prevKey = keysLinkedList.get(key);
|
|
243
|
+
if (prevKey && !isCompleted(prevKey)) {
|
|
244
|
+
setLastCompletedStep(prevKey);
|
|
179
245
|
}
|
|
180
|
-
|
|
246
|
+
origReplaceSelection(key);
|
|
181
247
|
};
|
|
182
248
|
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
// predecessor. Because completion is cumulative (`isCompleted` = index ≤
|
|
187
|
-
// lastCompleted index), advancing `lastCompletedStep` to `selectedIdx - 1`
|
|
188
|
-
// marks every intermediate step complete. This runs regardless of
|
|
189
|
-
// `isDisabled` / `isReadOnly`, exactly as upstream (the effect is ungated).
|
|
190
|
-
createEffect(() => {
|
|
191
|
-
const selKey = selectedKey();
|
|
192
|
-
if (selKey === null) return;
|
|
193
|
-
const selIdx = indexMap().get(selKey);
|
|
194
|
-
if (selIdx === undefined || selIdx <= 0) return;
|
|
195
|
-
const completed = lastCompletedStep();
|
|
196
|
-
const lcs = completed !== null ? (indexMap().get(completed) ?? -1) : -1;
|
|
197
|
-
if (selIdx > lcs + 1) {
|
|
198
|
-
const prevKey = items()[selIdx - 1]?.key;
|
|
199
|
-
if (prevKey !== undefined) setLastCompletedStep(prevKey);
|
|
249
|
+
const isDisabledFn = ((key?: Key): boolean => {
|
|
250
|
+
if (key === undefined) {
|
|
251
|
+
return isListDisabled();
|
|
200
252
|
}
|
|
201
|
-
|
|
253
|
+
return !isSelectable(key);
|
|
254
|
+
}) as Accessor<boolean> & ((key?: Key) => boolean);
|
|
202
255
|
|
|
203
256
|
return {
|
|
204
|
-
|
|
257
|
+
...singleSelectListState,
|
|
258
|
+
selectedKey: singleSelectListState.selectedKey,
|
|
205
259
|
lastCompletedStep,
|
|
206
260
|
items,
|
|
207
261
|
setSelectedKey,
|
|
208
262
|
setLastCompletedStep,
|
|
209
263
|
isCompleted,
|
|
210
264
|
isSelectable,
|
|
211
|
-
isDisabled,
|
|
265
|
+
isDisabled: isDisabledFn,
|
|
212
266
|
isReadOnly,
|
|
213
267
|
};
|
|
214
268
|
}
|
|
@@ -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/table/TableCollection.ts
|
|
14
|
+
|
|
1
15
|
/**
|
|
2
16
|
* TableCollection - A collection class for table data.
|
|
3
17
|
* Based on @react-stately/table/TableCollection.
|
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2022 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/table/useTableColumnResizeState.ts
|
|
14
|
+
|
|
1
15
|
/**
|
|
2
16
|
* Table column resize state management.
|
|
3
17
|
* Based on @react-stately/table/useTableColumnResizeState.
|
|
@@ -7,7 +21,10 @@
|
|
|
7
21
|
* width distribution and clamping.
|
|
8
22
|
*/
|
|
9
23
|
|
|
10
|
-
import {
|
|
24
|
+
import { createMemo } from "solid-js";
|
|
25
|
+
import type { Accessor } from "solid-js";
|
|
26
|
+
import { createInternalSignal } from "../utils";
|
|
27
|
+
|
|
11
28
|
import type { Key } from "../collections/types";
|
|
12
29
|
|
|
13
30
|
/** Column size: a number (px) or a string ('100px', '50%', '1fr'). */
|
|
@@ -96,13 +113,38 @@ function parseColumnDef(col: ColumnResizeDefinition, tableWidth: number): Parsed
|
|
|
96
113
|
return { key: col.key, fr: 0, fixedPx: isNaN(px) ? 0 : px, minWidth, maxWidth };
|
|
97
114
|
}
|
|
98
115
|
|
|
116
|
+
function applyFractionalRemainder(
|
|
117
|
+
widths: Map<Key, number>,
|
|
118
|
+
columns: ColumnResizeDefinition[],
|
|
119
|
+
originalWidth: number,
|
|
120
|
+
): void {
|
|
121
|
+
const flooredWidth = Math.floor(originalWidth);
|
|
122
|
+
const hasFractionalWidth = originalWidth - flooredWidth > 0;
|
|
123
|
+
if (!hasFractionalWidth || columns.length === 0) return;
|
|
124
|
+
|
|
125
|
+
const lastKey = columns[columns.length - 1].key;
|
|
126
|
+
if (widths.has(lastKey)) {
|
|
127
|
+
const tableFractionalWidth = originalWidth.toString().split(".")[1];
|
|
128
|
+
if (tableFractionalWidth) {
|
|
129
|
+
const columnWidth = Math.floor(widths.get(lastKey)!).toString();
|
|
130
|
+
widths.set(lastKey, Number(columnWidth + "." + tableFractionalWidth));
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
99
135
|
/**
|
|
100
136
|
* Distribute `tableWidth` among columns:
|
|
101
|
-
* 1.
|
|
102
|
-
* 2.
|
|
137
|
+
* 1. Floor tableWidth to integer before column sizing, matching upstream TableUtils.calculateColumnSizes.
|
|
138
|
+
* 2. Fixed-width columns get their declared width (clamped to min/max).
|
|
139
|
+
* 3. Remaining space is distributed among fractional columns proportionally with cascading rounding.
|
|
140
|
+
* 4. Leftover sub-pixel width is added to the last column so widths sum exactly to tableWidth.
|
|
103
141
|
*/
|
|
104
142
|
function distributeWidths(columns: ColumnResizeDefinition[], tableWidth: number): Map<Key, number> {
|
|
105
|
-
const
|
|
143
|
+
const originalWidth = tableWidth;
|
|
144
|
+
const flooredWidth = Math.floor(tableWidth);
|
|
145
|
+
const availableWidth = Math.max(0, flooredWidth);
|
|
146
|
+
|
|
147
|
+
const parsed = columns.map((c) => parseColumnDef(c, availableWidth));
|
|
106
148
|
|
|
107
149
|
// Pass 1 — allocate fixed columns
|
|
108
150
|
let usedSpace = 0;
|
|
@@ -116,23 +158,36 @@ function distributeWidths(columns: ColumnResizeDefinition[], tableWidth: number)
|
|
|
116
158
|
}
|
|
117
159
|
}
|
|
118
160
|
|
|
119
|
-
const remainingSpace = Math.max(0,
|
|
161
|
+
const remainingSpace = Math.max(0, availableWidth - usedSpace);
|
|
120
162
|
const perFr = totalFr > 0 ? remainingSpace / totalFr : 0;
|
|
121
163
|
|
|
122
|
-
// Pass 2 — build map
|
|
164
|
+
// Pass 2 — build map with cascading rounding
|
|
123
165
|
const widths = new Map<Key, number>();
|
|
166
|
+
let fpTotal = 0;
|
|
167
|
+
let intTotal = 0;
|
|
168
|
+
|
|
124
169
|
for (const p of parsed) {
|
|
125
|
-
let
|
|
170
|
+
let targetSize: number;
|
|
126
171
|
if (p.fr > 0) {
|
|
127
|
-
|
|
172
|
+
targetSize = p.fr * perFr;
|
|
128
173
|
} else {
|
|
129
|
-
|
|
174
|
+
targetSize = p.fixedPx;
|
|
130
175
|
}
|
|
131
176
|
// Clamp
|
|
132
|
-
|
|
133
|
-
|
|
177
|
+
targetSize = Math.max(p.minWidth, Math.min(p.maxWidth, targetSize));
|
|
178
|
+
|
|
179
|
+
// Cascade rounding to ensure sum of integers matches availableWidth
|
|
180
|
+
const rounded = Math.round(targetSize + fpTotal) - intTotal;
|
|
181
|
+
fpTotal += targetSize;
|
|
182
|
+
intTotal += rounded;
|
|
183
|
+
|
|
184
|
+
widths.set(p.key, rounded);
|
|
134
185
|
}
|
|
135
186
|
|
|
187
|
+
// Give the leftover sub-pixel width to the last column so the columns sum
|
|
188
|
+
// exactly to the (possibly fractional) available width.
|
|
189
|
+
applyFractionalRemainder(widths, columns, originalWidth);
|
|
190
|
+
|
|
136
191
|
return widths;
|
|
137
192
|
}
|
|
138
193
|
|
|
@@ -154,8 +209,8 @@ export function createTableColumnResizeState(
|
|
|
154
209
|
);
|
|
155
210
|
|
|
156
211
|
// User-overridden widths (set during/after resize)
|
|
157
|
-
const [overrides, setOverrides] =
|
|
158
|
-
const [resizingColumn, setResizingColumn] =
|
|
212
|
+
const [overrides, setOverrides] = createInternalSignal<Map<Key, number>>(new Map());
|
|
213
|
+
const [resizingColumn, setResizingColumn] = createInternalSignal<Key | null>(null);
|
|
159
214
|
|
|
160
215
|
// Computed widths: initial merged with overrides
|
|
161
216
|
const columnWidths = createMemo(() => {
|
|
@@ -169,6 +224,7 @@ export function createTableColumnResizeState(
|
|
|
169
224
|
merged.set(key, width);
|
|
170
225
|
}
|
|
171
226
|
}
|
|
227
|
+
applyFractionalRemainder(merged, getProps().columns, getProps().tableWidth);
|
|
172
228
|
return merged;
|
|
173
229
|
});
|
|
174
230
|
|
|
@@ -212,7 +268,7 @@ export function createTableColumnResizeState(
|
|
|
212
268
|
const updateResizedColumns = (key: Key, width: number): Map<Key, number> => {
|
|
213
269
|
const minW = getColumnMinWidth(key);
|
|
214
270
|
const maxW = getColumnMaxWidth(key);
|
|
215
|
-
const clampedWidth = Math.
|
|
271
|
+
const clampedWidth = Math.max(minW, Math.min(maxW, Math.floor(width)));
|
|
216
272
|
|
|
217
273
|
const newOverrides = new Map(overrides());
|
|
218
274
|
newOverrides.set(key, clampedWidth);
|
|
@@ -226,6 +282,7 @@ export function createTableColumnResizeState(
|
|
|
226
282
|
merged.set(k, w);
|
|
227
283
|
}
|
|
228
284
|
}
|
|
285
|
+
applyFractionalRemainder(merged, getProps().columns, getProps().tableWidth);
|
|
229
286
|
return merged;
|
|
230
287
|
};
|
|
231
288
|
|
|
@@ -1,9 +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/table/useTableState.ts
|
|
14
|
+
|
|
1
15
|
/**
|
|
2
16
|
* Table state management for Table components.
|
|
3
17
|
* Based on @react-stately/table/useTableState.
|
|
4
18
|
*/
|
|
5
19
|
|
|
6
|
-
import { createMemo
|
|
20
|
+
import { createMemo } from "solid-js";
|
|
21
|
+
import { propsAccessor, type MaybeAccessor } from "../utils";
|
|
7
22
|
import { createGridState } from "../grid/createGridState";
|
|
8
23
|
import type { Key } from "../collections/types";
|
|
9
24
|
import type {
|
|
@@ -26,8 +41,8 @@ const OPPOSITE_SORT_DIRECTION: Record<SortDirection, SortDirection> = {
|
|
|
26
41
|
export function createTableState<
|
|
27
42
|
T extends object,
|
|
28
43
|
C extends TableCollection<T> = TableCollection<T>,
|
|
29
|
-
>(options:
|
|
30
|
-
const getOptions = (
|
|
44
|
+
>(options: MaybeAccessor<TableStateOptions<T, C>>): TableState<T, C> {
|
|
45
|
+
const getOptions = propsAccessor(options);
|
|
31
46
|
|
|
32
47
|
// Create the underlying grid state
|
|
33
48
|
const gridState = createGridState<T, C>(() => ({
|
|
@@ -88,7 +103,8 @@ export function createTableState<
|
|
|
88
103
|
return gridState.disabledBehavior;
|
|
89
104
|
},
|
|
90
105
|
get isKeyboardNavigationDisabled() {
|
|
91
|
-
|
|
106
|
+
// An empty body keeps navigation disabled after the flag is cleared.
|
|
107
|
+
return getOptions().collection.size === 0 || gridState.isKeyboardNavigationDisabled;
|
|
92
108
|
},
|
|
93
109
|
get focusedKey() {
|
|
94
110
|
return gridState.focusedKey;
|
|
@@ -111,6 +127,12 @@ export function createTableState<
|
|
|
111
127
|
get selectedKeys() {
|
|
112
128
|
return gridState.selectedKeys;
|
|
113
129
|
},
|
|
130
|
+
get isEmpty() {
|
|
131
|
+
return gridState.isEmpty;
|
|
132
|
+
},
|
|
133
|
+
get isSelectAll() {
|
|
134
|
+
return gridState.isSelectAll;
|
|
135
|
+
},
|
|
114
136
|
|
|
115
137
|
// Grid state methods
|
|
116
138
|
isSelected: gridState.isSelected,
|