@proyecto-viviana/solid-stately 0.5.1 → 0.6.0-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE-APACHE-2.0 +201 -0
- package/NOTICE +91 -0
- package/dist/autocomplete/createAutocompleteState.d.ts +2 -1
- package/dist/autocomplete/createAutocompleteState.d.ts.map +1 -0
- package/dist/autocomplete/index.d.ts +1 -0
- package/dist/autocomplete/index.d.ts.map +1 -0
- package/dist/calendar/IncompleteDate.d.ts +2 -1
- package/dist/calendar/IncompleteDate.d.ts.map +1 -0
- package/dist/calendar/createCalendarState.d.ts +7 -8
- package/dist/calendar/createCalendarState.d.ts.map +1 -0
- package/dist/calendar/createDateFieldState.d.ts +4 -20
- package/dist/calendar/createDateFieldState.d.ts.map +1 -0
- package/dist/calendar/createDatePickerState.d.ts +2 -7
- package/dist/calendar/createDatePickerState.d.ts.map +1 -0
- package/dist/calendar/createRangeCalendarState.d.ts +7 -7
- package/dist/calendar/createRangeCalendarState.d.ts.map +1 -0
- package/dist/calendar/createTimeFieldState.d.ts +4 -23
- package/dist/calendar/createTimeFieldState.d.ts.map +1 -0
- package/dist/calendar/index.d.ts +1 -0
- package/dist/calendar/index.d.ts.map +1 -0
- package/dist/calendar/intl/index.d.ts +1 -0
- package/dist/calendar/intl/index.d.ts.map +1 -0
- package/dist/checkbox/createCheckboxGroupState.d.ts +1 -0
- package/dist/checkbox/createCheckboxGroupState.d.ts.map +1 -0
- package/dist/checkbox/index.d.ts +1 -0
- package/dist/checkbox/index.d.ts.map +1 -0
- package/dist/collections/ListCollection.d.ts +5 -0
- package/dist/collections/ListCollection.d.ts.map +1 -0
- package/dist/collections/createListState.d.ts +2 -6
- package/dist/collections/createListState.d.ts.map +1 -0
- package/dist/collections/createMenuState.d.ts +30 -13
- package/dist/collections/createMenuState.d.ts.map +1 -0
- package/dist/collections/createSelectionState.d.ts +2 -5
- package/dist/collections/createSelectionState.d.ts.map +1 -0
- package/dist/collections/getChildNodes.d.ts +6 -3
- package/dist/collections/getChildNodes.d.ts.map +1 -0
- package/dist/collections/index.d.ts +2 -1
- package/dist/collections/index.d.ts.map +1 -0
- package/dist/collections/types.d.ts +36 -2
- package/dist/collections/types.d.ts.map +1 -0
- package/dist/color/Color.d.ts +7 -1
- package/dist/color/Color.d.ts.map +1 -0
- package/dist/color/createColorAreaState.d.ts +2 -5
- package/dist/color/createColorAreaState.d.ts.map +1 -0
- package/dist/color/createColorFieldState.d.ts +2 -5
- package/dist/color/createColorFieldState.d.ts.map +1 -0
- package/dist/color/createColorSliderState.d.ts +2 -5
- package/dist/color/createColorSliderState.d.ts.map +1 -0
- package/dist/color/createColorWheelState.d.ts +2 -5
- package/dist/color/createColorWheelState.d.ts.map +1 -0
- package/dist/color/getColorChannels.d.ts +3 -0
- package/dist/color/getColorChannels.d.ts.map +1 -0
- package/dist/color/index.d.ts +2 -1
- package/dist/color/index.d.ts.map +1 -0
- package/dist/color/intl/index.d.ts +1 -0
- package/dist/color/intl/index.d.ts.map +1 -0
- package/dist/color/types.d.ts +2 -1
- package/dist/color/types.d.ts.map +1 -0
- package/dist/combobox/createComboBoxState.d.ts +4 -8
- package/dist/combobox/createComboBoxState.d.ts.map +1 -0
- package/dist/combobox/index.d.ts +1 -0
- package/dist/combobox/index.d.ts.map +1 -0
- package/dist/data/createAsyncList.d.ts +1 -7
- package/dist/data/createAsyncList.d.ts.map +1 -0
- package/dist/data/createListData.d.ts +1 -6
- package/dist/data/createListData.d.ts.map +1 -0
- package/dist/data/createTreeData.d.ts +1 -6
- package/dist/data/createTreeData.d.ts.map +1 -0
- package/dist/data/index.d.ts +1 -0
- package/dist/data/index.d.ts.map +1 -0
- package/dist/datepicker/index.d.ts +1 -0
- package/dist/datepicker/index.d.ts.map +1 -0
- package/dist/disclosure/createDisclosureState.d.ts +2 -5
- package/dist/disclosure/createDisclosureState.d.ts.map +1 -0
- package/dist/disclosure/index.d.ts +1 -0
- package/dist/disclosure/index.d.ts.map +1 -0
- package/dist/dnd/createDragState.d.ts +2 -6
- package/dist/dnd/createDragState.d.ts.map +1 -0
- package/dist/dnd/createDraggableCollectionState.d.ts +39 -10
- package/dist/dnd/createDraggableCollectionState.d.ts.map +1 -0
- package/dist/dnd/createDropState.d.ts +2 -6
- package/dist/dnd/createDropState.d.ts.map +1 -0
- package/dist/dnd/createDroppableCollectionState.d.ts +28 -11
- package/dist/dnd/createDroppableCollectionState.d.ts.map +1 -0
- package/dist/dnd/index.d.ts +3 -2
- package/dist/dnd/index.d.ts.map +1 -0
- package/dist/dnd/types.d.ts +17 -0
- package/dist/dnd/types.d.ts.map +1 -0
- package/dist/flags/flags.d.ts +5 -0
- package/dist/flags/flags.d.ts.map +1 -0
- package/dist/form/createFormValidationState.d.ts +2 -9
- package/{src → dist}/form/createFormValidationState.d.ts.map +1 -1
- package/dist/form/index.d.ts +1 -0
- package/dist/form/index.d.ts.map +1 -0
- package/dist/grid/createGridState.d.ts +3 -2
- package/dist/grid/createGridState.d.ts.map +1 -0
- package/dist/grid/index.d.ts +1 -0
- package/dist/grid/index.d.ts.map +1 -0
- package/dist/grid/types.d.ts +23 -1
- package/dist/grid/types.d.ts.map +1 -0
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2030 -593
- package/dist/index.js.map +1 -1
- package/dist/menu/index.d.ts +2 -1
- package/dist/menu/index.d.ts.map +1 -0
- package/dist/numberfield/createNumberFieldState.d.ts +31 -6
- package/dist/numberfield/createNumberFieldState.d.ts.map +1 -0
- package/dist/numberfield/index.d.ts +1 -0
- package/dist/numberfield/index.d.ts.map +1 -0
- package/dist/overlays/createOverlayTriggerState.d.ts +12 -1
- package/dist/overlays/createOverlayTriggerState.d.ts.map +1 -0
- package/dist/overlays/index.d.ts +1 -0
- package/dist/overlays/index.d.ts.map +1 -0
- package/dist/private/flags/flags.js +26 -0
- package/dist/private/flags/flags.js.map +1 -0
- package/dist/radio/createRadioGroupState.d.ts +1 -0
- package/dist/radio/createRadioGroupState.d.ts.map +1 -0
- package/dist/radio/index.d.ts +1 -0
- package/dist/radio/index.d.ts.map +1 -0
- package/dist/searchfield/createSearchFieldState.d.ts +2 -5
- package/dist/searchfield/createSearchFieldState.d.ts.map +1 -0
- package/dist/searchfield/index.d.ts +1 -0
- package/dist/searchfield/index.d.ts.map +1 -0
- package/dist/select/createSelectState.d.ts +17 -6
- package/dist/select/createSelectState.d.ts.map +1 -0
- package/dist/select/index.d.ts +1 -0
- package/dist/select/index.d.ts.map +1 -0
- package/dist/selection/Selection.d.ts +2 -1
- package/dist/selection/Selection.d.ts.map +1 -0
- package/dist/selection/SelectionManager.d.ts +1 -19
- package/dist/selection/SelectionManager.d.ts.map +1 -0
- package/dist/selection/createMultipleSelectionState.d.ts +2 -13
- package/dist/selection/createMultipleSelectionState.d.ts.map +1 -0
- package/dist/selection/index.d.ts +1 -0
- package/dist/selection/index.d.ts.map +1 -0
- package/dist/slider/createSliderState.d.ts +2 -5
- package/dist/slider/createSliderState.d.ts.map +1 -0
- package/dist/slider/index.d.ts +1 -0
- package/dist/slider/index.d.ts.map +1 -0
- package/dist/ssr/index.d.ts +2 -7
- package/dist/ssr/index.d.ts.map +1 -0
- package/dist/steplist/createStepListState.d.ts +2 -5
- package/dist/steplist/createStepListState.d.ts.map +1 -0
- package/dist/steplist/index.d.ts +1 -0
- package/dist/steplist/index.d.ts.map +1 -0
- package/dist/table/TableCollection.d.ts +1 -0
- package/dist/table/TableCollection.d.ts.map +1 -0
- package/dist/table/createTableColumnResizeState.d.ts +2 -9
- package/dist/table/createTableColumnResizeState.d.ts.map +1 -0
- package/dist/table/createTableState.d.ts +2 -5
- package/dist/table/createTableState.d.ts.map +1 -0
- package/dist/table/createTreeGridState.d.ts +2 -8
- package/dist/table/createTreeGridState.d.ts.map +1 -0
- package/dist/table/index.d.ts +1 -0
- package/dist/table/index.d.ts.map +1 -0
- package/dist/table/types.d.ts +35 -1
- package/dist/table/types.d.ts.map +1 -0
- package/dist/tabs/createTabListState.d.ts +2 -5
- package/dist/tabs/createTabListState.d.ts.map +1 -0
- package/dist/tabs/index.d.ts +1 -0
- package/dist/tabs/index.d.ts.map +1 -0
- package/dist/textfield/createTextFieldState.d.ts +1 -0
- package/dist/textfield/createTextFieldState.d.ts.map +1 -0
- package/dist/textfield/index.d.ts +1 -0
- package/dist/textfield/index.d.ts.map +1 -0
- package/dist/toast/createToastState.d.ts +2 -5
- package/dist/toast/createToastState.d.ts.map +1 -0
- package/dist/toast/index.d.ts +1 -0
- package/dist/toast/index.d.ts.map +1 -0
- package/dist/toggle/createToggleGroupState.d.ts +1 -0
- package/dist/toggle/createToggleGroupState.d.ts.map +1 -0
- package/dist/toggle/createToggleState.d.ts +1 -0
- package/dist/toggle/createToggleState.d.ts.map +1 -0
- package/dist/toggle/index.d.ts +1 -0
- package/dist/toggle/index.d.ts.map +1 -0
- package/dist/tokenfield/TokenFieldValue.d.ts +72 -0
- package/dist/tokenfield/TokenFieldValue.d.ts.map +1 -0
- package/dist/tokenfield/createTokenFieldState.d.ts +33 -0
- package/dist/tokenfield/createTokenFieldState.d.ts.map +1 -0
- package/dist/tokenfield/index.d.ts +3 -0
- package/dist/tokenfield/index.d.ts.map +1 -0
- package/dist/tooltip/createTooltipTriggerState.d.ts +9 -8
- package/dist/tooltip/createTooltipTriggerState.d.ts.map +1 -0
- package/dist/tooltip/index.d.ts +1 -0
- package/dist/tooltip/index.d.ts.map +1 -0
- package/dist/tree/TreeCollection.d.ts +1 -0
- package/dist/tree/TreeCollection.d.ts.map +1 -0
- package/dist/tree/createTreeState.d.ts +2 -7
- package/{src → dist}/tree/createTreeState.d.ts.map +1 -1
- package/dist/tree/index.d.ts +1 -0
- package/dist/tree/index.d.ts.map +1 -0
- package/dist/tree/types.d.ts +19 -1
- package/dist/tree/types.d.ts.map +1 -0
- package/dist/utils/index.d.ts +3 -1
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/owner.d.ts +9 -0
- package/dist/utils/owner.d.ts.map +1 -0
- package/dist/utils/reactivity.d.ts +19 -0
- package/dist/utils/reactivity.d.ts.map +1 -0
- package/package.json +21 -9
- package/src/autocomplete/createAutocompleteState.ts +18 -4
- package/src/calendar/IncompleteDate.ts +15 -1
- package/src/calendar/createCalendarState.ts +194 -79
- package/src/calendar/createDateFieldState.ts +45 -31
- package/src/calendar/createDatePickerState.ts +32 -14
- package/src/calendar/createRangeCalendarState.ts +134 -73
- package/src/calendar/createTimeFieldState.ts +25 -6
- package/src/calendar/intl/index.ts +37 -2
- package/src/checkbox/createCheckboxGroupState.ts +29 -13
- package/src/collections/ListCollection.ts +31 -0
- package/src/collections/createListState.ts +23 -6
- package/src/collections/createMenuState.ts +59 -14
- package/src/collections/createSelectionState.ts +32 -12
- package/src/collections/getChildNodes.ts +20 -3
- package/src/collections/index.ts +2 -0
- package/src/collections/types.ts +35 -2
- package/src/color/Color.ts +61 -22
- package/src/color/createColorAreaState.ts +29 -4
- package/src/color/createColorFieldState.ts +37 -11
- package/src/color/createColorSliderState.ts +36 -7
- package/src/color/createColorWheelState.ts +20 -4
- package/src/color/getColorChannels.ts +16 -0
- package/src/color/index.ts +1 -0
- package/src/color/intl/index.ts +38 -3
- package/src/color/types.ts +1 -1
- package/src/combobox/createComboBoxState.ts +178 -195
- package/src/data/createAsyncList.ts +22 -2
- package/src/data/createListData.ts +19 -2
- package/src/data/createTreeData.ts +19 -3
- package/src/disclosure/createDisclosureState.ts +40 -19
- package/src/dnd/createDragState.ts +22 -4
- package/src/dnd/createDraggableCollectionState.ts +137 -10
- package/src/dnd/createDropState.ts +21 -3
- package/src/dnd/createDroppableCollectionState.ts +117 -11
- package/src/dnd/index.ts +4 -0
- package/src/dnd/types.ts +16 -0
- package/src/flags/flags.ts +25 -0
- package/src/form/createFormValidationState.ts +54 -36
- package/src/grid/createGridState.ts +187 -109
- package/src/grid/types.ts +22 -1
- package/src/index.ts +15 -0
- package/src/menu/index.ts +2 -0
- package/src/numberfield/createNumberFieldState.ts +153 -66
- package/src/overlays/createOverlayTriggerState.ts +31 -4
- package/src/radio/createRadioGroupState.ts +19 -5
- package/src/searchfield/createSearchFieldState.ts +18 -3
- package/src/select/createSelectState.ts +73 -8
- package/src/selection/Selection.ts +15 -1
- package/src/selection/SelectionManager.ts +14 -0
- package/src/selection/createMultipleSelectionState.ts +44 -25
- package/src/slider/createSliderState.ts +20 -5
- package/src/ssr/index.ts +27 -4
- package/src/steplist/createStepListState.ts +38 -17
- package/src/table/TableCollection.ts +14 -0
- package/src/table/createTableColumnResizeState.ts +20 -3
- package/src/table/createTableState.ts +22 -1
- package/src/table/createTreeGridState.ts +21 -4
- package/src/table/types.ts +36 -3
- package/src/tabs/createTabListState.ts +77 -34
- package/src/textfield/createTextFieldState.ts +17 -3
- package/src/toast/createToastState.ts +28 -3
- package/src/toggle/createToggleGroupState.ts +20 -5
- package/src/toggle/createToggleState.ts +19 -4
- package/src/tokenfield/TokenFieldValue.ts +440 -0
- package/src/tokenfield/createTokenFieldState.ts +88 -0
- package/src/tokenfield/index.ts +14 -0
- package/src/tooltip/createTooltipTriggerState.ts +49 -13
- package/src/tree/TreeCollection.ts +14 -0
- package/src/tree/createTreeState.ts +62 -35
- package/src/tree/types.ts +18 -1
- package/src/utils/index.ts +9 -1
- package/src/utils/owner.ts +20 -0
- package/src/utils/reactivity.ts +45 -1
- package/src/autocomplete/createAutocompleteState.d.ts +0 -48
- package/src/autocomplete/createAutocompleteState.d.ts.map +0 -1
- package/src/autocomplete/index.d.ts +0 -6
- package/src/autocomplete/index.d.ts.map +0 -1
- package/src/calendar/createCalendarState.d.ts +0 -152
- package/src/calendar/createCalendarState.d.ts.map +0 -1
- package/src/calendar/createDateFieldState.d.ts +0 -145
- package/src/calendar/createDateFieldState.d.ts.map +0 -1
- package/src/calendar/createRangeCalendarState.d.ts +0 -171
- package/src/calendar/createRangeCalendarState.d.ts.map +0 -1
- package/src/calendar/createTimeFieldState.d.ts +0 -97
- package/src/calendar/createTimeFieldState.d.ts.map +0 -1
- package/src/calendar/index.d.ts +0 -80
- package/src/calendar/index.d.ts.map +0 -1
- package/src/checkbox/createCheckboxGroupState.d.ts +0 -73
- package/src/checkbox/createCheckboxGroupState.d.ts.map +0 -1
- package/src/checkbox/index.d.ts +0 -6
- package/src/checkbox/index.d.ts.map +0 -1
- package/src/collections/ListCollection.d.ts +0 -40
- package/src/collections/ListCollection.d.ts.map +0 -1
- package/src/collections/createListState.d.ts +0 -94
- package/src/collections/createListState.d.ts.map +0 -1
- package/src/collections/createMenuState.d.ts +0 -55
- package/src/collections/createMenuState.d.ts.map +0 -1
- package/src/collections/createSelectionState.d.ts +0 -89
- package/src/collections/createSelectionState.d.ts.map +0 -1
- package/src/collections/index.d.ts +0 -38
- package/src/collections/index.d.ts.map +0 -1
- package/src/collections/types.d.ts +0 -147
- package/src/collections/types.d.ts.map +0 -1
- package/src/color/Color.d.ts +0 -43
- package/src/color/Color.d.ts.map +0 -1
- package/src/color/createColorAreaState.d.ts +0 -78
- package/src/color/createColorAreaState.d.ts.map +0 -1
- package/src/color/createColorFieldState.d.ts +0 -57
- package/src/color/createColorFieldState.d.ts.map +0 -1
- package/src/color/createColorSliderState.d.ts +0 -69
- package/src/color/createColorSliderState.d.ts.map +0 -1
- package/src/color/createColorWheelState.d.ts +0 -53
- package/src/color/createColorWheelState.d.ts.map +0 -1
- package/src/color/index.d.ts +0 -39
- package/src/color/index.d.ts.map +0 -1
- package/src/color/types.d.ts +0 -111
- package/src/color/types.d.ts.map +0 -1
- package/src/combobox/createComboBoxState.d.ts +0 -127
- package/src/combobox/createComboBoxState.d.ts.map +0 -1
- package/src/combobox/index.d.ts +0 -13
- package/src/combobox/index.d.ts.map +0 -1
- package/src/disclosure/createDisclosureState.d.ts +0 -68
- package/src/disclosure/createDisclosureState.d.ts.map +0 -1
- package/src/disclosure/index.d.ts +0 -10
- package/src/disclosure/index.d.ts.map +0 -1
- package/src/dnd/createDragState.d.ts +0 -68
- package/src/dnd/createDragState.d.ts.map +0 -1
- package/src/dnd/createDraggableCollectionState.d.ts +0 -68
- package/src/dnd/createDraggableCollectionState.d.ts.map +0 -1
- package/src/dnd/createDropState.d.ts +0 -80
- package/src/dnd/createDropState.d.ts.map +0 -1
- package/src/dnd/createDroppableCollectionState.d.ts +0 -107
- package/src/dnd/createDroppableCollectionState.d.ts.map +0 -1
- package/src/dnd/index.d.ts +0 -60
- package/src/dnd/index.d.ts.map +0 -1
- package/src/dnd/types.d.ts +0 -277
- package/src/dnd/types.d.ts.map +0 -1
- package/src/form/createFormValidationState.d.ts +0 -102
- package/src/form/index.d.ts +0 -16
- package/src/form/index.d.ts.map +0 -1
- package/src/grid/createGridState.d.ts +0 -15
- package/src/grid/createGridState.d.ts.map +0 -1
- package/src/grid/index.d.ts +0 -7
- package/src/grid/index.d.ts.map +0 -1
- package/src/grid/types.d.ts +0 -163
- package/src/grid/types.d.ts.map +0 -1
- package/src/index.d.ts +0 -311
- package/src/index.d.ts.map +0 -1
- package/src/numberfield/createNumberFieldState.d.ts +0 -67
- package/src/numberfield/createNumberFieldState.d.ts.map +0 -1
- package/src/numberfield/index.d.ts +0 -6
- package/src/numberfield/index.d.ts.map +0 -1
- package/src/overlays/createOverlayTriggerState.d.ts +0 -34
- package/src/overlays/createOverlayTriggerState.d.ts.map +0 -1
- package/src/overlays/index.d.ts +0 -6
- package/src/overlays/index.d.ts.map +0 -1
- package/src/radio/createRadioGroupState.d.ts +0 -79
- package/src/radio/createRadioGroupState.d.ts.map +0 -1
- package/src/radio/index.d.ts +0 -7
- package/src/radio/index.d.ts.map +0 -1
- package/src/searchfield/createSearchFieldState.d.ts +0 -27
- package/src/searchfield/createSearchFieldState.d.ts.map +0 -1
- package/src/searchfield/index.d.ts +0 -3
- package/src/searchfield/index.d.ts.map +0 -1
- package/src/select/createSelectState.d.ts +0 -75
- package/src/select/createSelectState.d.ts.map +0 -1
- package/src/select/index.d.ts +0 -2
- package/src/select/index.d.ts.map +0 -1
- package/src/slider/createSliderState.d.ts +0 -72
- package/src/slider/createSliderState.d.ts.map +0 -1
- package/src/slider/index.d.ts +0 -3
- package/src/slider/index.d.ts.map +0 -1
- package/src/ssr/index.d.ts +0 -28
- package/src/ssr/index.d.ts.map +0 -1
- package/src/table/TableCollection.d.ts +0 -54
- package/src/table/TableCollection.d.ts.map +0 -1
- package/src/table/createTableState.d.ts +0 -15
- package/src/table/createTableState.d.ts.map +0 -1
- package/src/table/index.d.ts +0 -18
- package/src/table/index.d.ts.map +0 -1
- package/src/table/types.d.ts +0 -145
- package/src/table/types.d.ts.map +0 -1
- package/src/tabs/createTabListState.d.ts +0 -70
- package/src/tabs/createTabListState.d.ts.map +0 -1
- package/src/tabs/index.d.ts +0 -8
- package/src/tabs/index.d.ts.map +0 -1
- package/src/textfield/createTextFieldState.d.ts +0 -32
- package/src/textfield/createTextFieldState.d.ts.map +0 -1
- package/src/textfield/index.d.ts +0 -6
- package/src/textfield/index.d.ts.map +0 -1
- package/src/toast/createToastState.d.ts +0 -129
- package/src/toast/createToastState.d.ts.map +0 -1
- package/src/toast/index.d.ts +0 -12
- package/src/toast/index.d.ts.map +0 -1
- package/src/toggle/createToggleState.d.ts +0 -34
- package/src/toggle/createToggleState.d.ts.map +0 -1
- package/src/toggle/index.d.ts +0 -2
- package/src/toggle/index.d.ts.map +0 -1
- package/src/tooltip/createTooltipTriggerState.d.ts +0 -39
- package/src/tooltip/createTooltipTriggerState.d.ts.map +0 -1
- package/src/tooltip/index.d.ts +0 -7
- package/src/tooltip/index.d.ts.map +0 -1
- package/src/tree/TreeCollection.d.ts +0 -43
- package/src/tree/TreeCollection.d.ts.map +0 -1
- package/src/tree/createTreeState.d.ts +0 -17
- package/src/tree/index.d.ts +0 -13
- package/src/tree/index.d.ts.map +0 -1
- package/src/tree/types.d.ts +0 -162
- package/src/tree/types.d.ts.map +0 -1
- package/src/utils/index.d.ts +0 -2
- package/src/utils/index.d.ts.map +0 -1
- package/src/utils/reactivity.d.ts +0 -28
- package/src/utils/reactivity.d.ts.map +0 -1
|
@@ -0,0 +1,440 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2026 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/tokenfield/TokenFieldValue.ts
|
|
14
|
+
|
|
15
|
+
export type TokenFieldSegment<T = any> = TextSegment | TokenSegment<T>;
|
|
16
|
+
|
|
17
|
+
export interface TextSegment {
|
|
18
|
+
type: "text";
|
|
19
|
+
text: string;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export interface TokenSegment<T = any> {
|
|
23
|
+
type: "token";
|
|
24
|
+
text: string;
|
|
25
|
+
/** An arbitrary value associated with the token. */
|
|
26
|
+
value?: T;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export interface Position {
|
|
30
|
+
/** Index of the segment in the list. */
|
|
31
|
+
index: number;
|
|
32
|
+
/** Text offset within the segment in UTF-16 code units. */
|
|
33
|
+
offset: number;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
enum Direction {
|
|
37
|
+
Forward = 1,
|
|
38
|
+
Backward = -1,
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export interface TokenFieldValueOptions {
|
|
42
|
+
caretPosition?: Position | null;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* A list of segments containing editable text and non-editable tokens.
|
|
47
|
+
*/
|
|
48
|
+
export class TokenFieldValue<T = any> {
|
|
49
|
+
static readonly Direction = Direction;
|
|
50
|
+
|
|
51
|
+
/** The text and token segments in the list. */
|
|
52
|
+
readonly segments: readonly TokenFieldSegment<T>[];
|
|
53
|
+
/** The caret position. */
|
|
54
|
+
caretPosition: Position = { index: 0, offset: 0 };
|
|
55
|
+
// Linked list representing the undo/redo history.
|
|
56
|
+
private previous: this | null = null;
|
|
57
|
+
private next: this | null = null;
|
|
58
|
+
private isCoalescing = true;
|
|
59
|
+
|
|
60
|
+
/** Create a new list with the given segments. */
|
|
61
|
+
constructor(tokens: readonly TokenFieldSegment<T>[], options?: TokenFieldValueOptions) {
|
|
62
|
+
this.segments = tokens;
|
|
63
|
+
this.caretPosition = options?.caretPosition ?? { index: 0, offset: 0 };
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
protected createFieldValue(segments: readonly TokenFieldSegment<T>[]): this {
|
|
67
|
+
const Constructor = this.constructor as new (
|
|
68
|
+
segments: readonly TokenFieldSegment<T>[],
|
|
69
|
+
options?: TokenFieldValueOptions,
|
|
70
|
+
) => this;
|
|
71
|
+
return new Constructor(segments);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/** Create a new list with the caret position set to the given position. */
|
|
75
|
+
withCaretPosition(caretPosition: Position): this {
|
|
76
|
+
if (
|
|
77
|
+
this.caretPosition.index === caretPosition.index &&
|
|
78
|
+
this.caretPosition.offset === caretPosition.offset
|
|
79
|
+
) {
|
|
80
|
+
return this;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
let result = this.createFieldValue(this.segments);
|
|
84
|
+
result.caretPosition = caretPosition;
|
|
85
|
+
result.previous = this.previous;
|
|
86
|
+
result.next = this.next;
|
|
87
|
+
result.isCoalescing = this.isCoalescing;
|
|
88
|
+
return result;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
private splitSegment(
|
|
92
|
+
segment: TokenFieldSegment | undefined,
|
|
93
|
+
offset: number,
|
|
94
|
+
): [TokenFieldSegment | null, TokenFieldSegment | null] {
|
|
95
|
+
if (!segment) {
|
|
96
|
+
let empty = this.createTextSegment("");
|
|
97
|
+
return [offset > 0 ? empty : null, offset > 0 ? null : empty];
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
if (segment.type === "token") {
|
|
101
|
+
return [offset > 0 ? { ...segment } : null, offset > 0 ? null : { ...segment }];
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
return [
|
|
105
|
+
offset > 0 ? { type: "text", text: segment.text.slice(0, offset) } : null,
|
|
106
|
+
offset < segment.text.length ? this.createTextSegment(segment.text.slice(offset)) : null,
|
|
107
|
+
];
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
private createTextSegment(text: string): TextSegment {
|
|
111
|
+
return { type: "text", text };
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
protected tokenize(text: string): TokenFieldSegment<T>[] {
|
|
115
|
+
return [this.createTextSegment(text)];
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
private clampPosition(position: Position): Position {
|
|
119
|
+
if (this.segments.length > 0 && position.index >= this.segments.length) {
|
|
120
|
+
return {
|
|
121
|
+
index: this.segments.length - 1,
|
|
122
|
+
offset: this.segments[this.segments.length - 1].text.length,
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
if (position.index < 0) {
|
|
127
|
+
return { index: 0, offset: 0 };
|
|
128
|
+
}
|
|
129
|
+
return position;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/** Replace the text between two positions with new text. */
|
|
133
|
+
replaceRange(start: Position, end: Position, text: string, coalesce = true): this {
|
|
134
|
+
return this.replaceRangeWithSegments(
|
|
135
|
+
start,
|
|
136
|
+
end,
|
|
137
|
+
text.length > 0 ? [this.createTextSegment(text)] : [],
|
|
138
|
+
coalesce,
|
|
139
|
+
);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/** Replace the text between two positions with new segments. */
|
|
143
|
+
replaceRangeWithSegments(
|
|
144
|
+
start: Position,
|
|
145
|
+
end: Position,
|
|
146
|
+
insert: TokenFieldSegment<T>[],
|
|
147
|
+
coalesce = true,
|
|
148
|
+
): this {
|
|
149
|
+
start = this.clampPosition(start);
|
|
150
|
+
end = this.clampPosition(end);
|
|
151
|
+
let startSegment = this.segments[start.index];
|
|
152
|
+
let endSegment = this.segments[end.index];
|
|
153
|
+
let [startSplit] = this.splitSegment(startSegment, start.offset);
|
|
154
|
+
let [, endSplit] = this.splitSegment(endSegment, end.offset);
|
|
155
|
+
|
|
156
|
+
let newSegments = this.segments.slice(0, start.index);
|
|
157
|
+
if (startSplit) {
|
|
158
|
+
appendSegments(newSegments, [startSplit]);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
if (insert.length) {
|
|
162
|
+
appendSegments(newSegments, insert, (text) => this.tokenize(text));
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
let lastSegment = newSegments[newSegments.length - 1];
|
|
166
|
+
let lastIsText = lastSegment && lastSegment.type === "text";
|
|
167
|
+
let caret = {
|
|
168
|
+
index: lastIsText ? newSegments.length - 1 : newSegments.length,
|
|
169
|
+
offset: lastIsText ? lastSegment.text.length : 0,
|
|
170
|
+
};
|
|
171
|
+
|
|
172
|
+
if (endSplit) {
|
|
173
|
+
appendSegments(newSegments, [endSplit]);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
appendSegments(newSegments, this.segments.slice(end.index + 1));
|
|
177
|
+
|
|
178
|
+
let segments = this.createFieldValue(newSegments);
|
|
179
|
+
segments.caretPosition = caret;
|
|
180
|
+
segments.isCoalescing = coalesce;
|
|
181
|
+
if (this.isCoalescing && coalesce && this.previous) {
|
|
182
|
+
segments.previous = this.previous;
|
|
183
|
+
segments.previous.next = segments;
|
|
184
|
+
} else {
|
|
185
|
+
segments.previous = this;
|
|
186
|
+
this.caretPosition = end;
|
|
187
|
+
this.next = segments;
|
|
188
|
+
}
|
|
189
|
+
return segments;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
/** Find the boundary before or after a position using an Intl.Segmenter. */
|
|
193
|
+
findBoundaryWithSegmenter(
|
|
194
|
+
position: Position,
|
|
195
|
+
segmenter: Intl.Segmenter,
|
|
196
|
+
direction: Direction,
|
|
197
|
+
): Position | null {
|
|
198
|
+
position = this.clampPosition(position);
|
|
199
|
+
for (let i = position.index; i >= 0 && i < this.segments.length; i += direction) {
|
|
200
|
+
let segment = this.segments[i];
|
|
201
|
+
switch (segment.type) {
|
|
202
|
+
case "token":
|
|
203
|
+
if (
|
|
204
|
+
i !== position.index ||
|
|
205
|
+
(direction === Direction.Backward ? position.offset > 0 : position.offset === 0)
|
|
206
|
+
) {
|
|
207
|
+
let index = i + direction;
|
|
208
|
+
return {
|
|
209
|
+
index: index >= 0 ? index : 0,
|
|
210
|
+
offset:
|
|
211
|
+
direction === Direction.Backward && index >= 0
|
|
212
|
+
? this.segments[index].text.length
|
|
213
|
+
: 0,
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
continue;
|
|
217
|
+
case "text": {
|
|
218
|
+
let offset = direction === Direction.Backward ? segment.text.length : 0;
|
|
219
|
+
if (i === position.index) {
|
|
220
|
+
offset = position.offset;
|
|
221
|
+
}
|
|
222
|
+
if (direction === Direction.Backward) {
|
|
223
|
+
offset--;
|
|
224
|
+
}
|
|
225
|
+
if (offset < 0 || offset >= segment.text.length) {
|
|
226
|
+
continue;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
let part = segmenter.segment(segment.text).containing(offset);
|
|
230
|
+
while (part && part.isWordLike === false) {
|
|
231
|
+
offset += direction;
|
|
232
|
+
part = segmenter.segment(segment.text).containing(offset);
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
if (part) {
|
|
236
|
+
return {
|
|
237
|
+
index: i,
|
|
238
|
+
offset:
|
|
239
|
+
direction === Direction.Backward ? part.index : part.index + part.segment.length,
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
continue;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
return null;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
/** Find a line boundary before or after a position. */
|
|
251
|
+
findLineBoundary(position: Position, direction: Direction): Position | null {
|
|
252
|
+
let res = this.findText(position, direction, "\n");
|
|
253
|
+
if (res) {
|
|
254
|
+
return res;
|
|
255
|
+
}
|
|
256
|
+
return direction === Direction.Backward
|
|
257
|
+
? { index: 0, offset: 0 }
|
|
258
|
+
: {
|
|
259
|
+
index: this.segments.length - 1,
|
|
260
|
+
offset: this.segments[this.segments.length - 1].text.length,
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
/** Find a string or regular expression match before or after a position. */
|
|
265
|
+
findText(position: Position, direction: Direction, search: string | RegExp): Position | null {
|
|
266
|
+
if (this.segments.length === 0) {
|
|
267
|
+
return null;
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
for (let i = position.index; i >= 0 && i < this.segments.length; i += direction) {
|
|
271
|
+
let segment = this.segments[i];
|
|
272
|
+
if (segment.type !== "text") {
|
|
273
|
+
continue;
|
|
274
|
+
}
|
|
275
|
+
let offset = findInText(
|
|
276
|
+
segment.text,
|
|
277
|
+
search,
|
|
278
|
+
direction,
|
|
279
|
+
i === position.index ? position.offset : undefined,
|
|
280
|
+
);
|
|
281
|
+
if (offset >= 0) {
|
|
282
|
+
return {
|
|
283
|
+
index: i,
|
|
284
|
+
offset: offset,
|
|
285
|
+
};
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
return null;
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
/** Delete text at a position using a segmenter. */
|
|
293
|
+
delete(
|
|
294
|
+
position: Position,
|
|
295
|
+
segmenter: Intl.Segmenter,
|
|
296
|
+
direction: Direction,
|
|
297
|
+
coalesce = true,
|
|
298
|
+
): this {
|
|
299
|
+
let boundary = this.findBoundaryWithSegmenter(position, segmenter, direction);
|
|
300
|
+
if (boundary) {
|
|
301
|
+
return this.replaceRange(
|
|
302
|
+
direction === Direction.Backward ? boundary : position,
|
|
303
|
+
direction === Direction.Backward ? position : boundary,
|
|
304
|
+
"",
|
|
305
|
+
coalesce,
|
|
306
|
+
);
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
this.caretPosition = position;
|
|
310
|
+
return this;
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
/** Delete text to the next or previous line break. */
|
|
314
|
+
deleteLine(position: Position, direction: Direction, coalesce = true): this {
|
|
315
|
+
if (this.segments.length === 0) {
|
|
316
|
+
return this;
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
let boundary = this.findLineBoundary(position, direction);
|
|
320
|
+
if (boundary) {
|
|
321
|
+
return this.replaceRange(
|
|
322
|
+
direction === Direction.Backward ? boundary : position,
|
|
323
|
+
direction === Direction.Backward ? position : boundary,
|
|
324
|
+
"",
|
|
325
|
+
coalesce,
|
|
326
|
+
);
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
return this;
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
/** Create a new list containing a subset of the segments. */
|
|
333
|
+
slice(start: Position, end: Position): this {
|
|
334
|
+
start = this.clampPosition(start);
|
|
335
|
+
end = this.clampPosition(end);
|
|
336
|
+
if (start.index === end.index && start.offset === end.offset) {
|
|
337
|
+
return this.createFieldValue([]);
|
|
338
|
+
}
|
|
339
|
+
if (start.index === end.index) {
|
|
340
|
+
let segment = this.segments[start.index];
|
|
341
|
+
if (segment.type === "text") {
|
|
342
|
+
return this.createFieldValue([
|
|
343
|
+
{ type: "text", text: segment.text.slice(start.offset, end.offset) },
|
|
344
|
+
]);
|
|
345
|
+
}
|
|
346
|
+
return this.createFieldValue([segment]);
|
|
347
|
+
}
|
|
348
|
+
let startSegment = this.segments[start.index];
|
|
349
|
+
let endSegment = this.segments[end.index];
|
|
350
|
+
let [, startSplit] = this.splitSegment(startSegment, start.offset);
|
|
351
|
+
let [endSplit] = this.splitSegment(endSegment, end.offset);
|
|
352
|
+
|
|
353
|
+
let result: TokenFieldSegment<T>[] = [];
|
|
354
|
+
if (startSplit) {
|
|
355
|
+
result.push(startSplit);
|
|
356
|
+
}
|
|
357
|
+
result.push(...this.segments.slice(start.index + 1, end.index));
|
|
358
|
+
if (endSplit) {
|
|
359
|
+
result.push(endSplit);
|
|
360
|
+
}
|
|
361
|
+
return this.createFieldValue(result);
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
/** Convert the list to a string. */
|
|
365
|
+
toString(): string {
|
|
366
|
+
return this.segments.map((seg) => seg.text).join("");
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
/** Returns the previous list in the undo history. */
|
|
370
|
+
undo(): this {
|
|
371
|
+
return this.previous ?? this;
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
/** Returns the next list in the redo history. */
|
|
375
|
+
redo(): this {
|
|
376
|
+
return this.next ?? this;
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
/** End coalescing undo/redo history. */
|
|
380
|
+
endCoalescing(): void {
|
|
381
|
+
this.isCoalescing = false;
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
function findInText(
|
|
386
|
+
text: string,
|
|
387
|
+
search: string | RegExp,
|
|
388
|
+
direction: Direction,
|
|
389
|
+
fromOffset?: number,
|
|
390
|
+
): number {
|
|
391
|
+
if (typeof search === "string") {
|
|
392
|
+
if (direction === Direction.Backward) {
|
|
393
|
+
return text.lastIndexOf(search, fromOffset !== undefined ? fromOffset - 1 : text.length - 1);
|
|
394
|
+
}
|
|
395
|
+
return text.indexOf(search, fromOffset ?? 0);
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
if (direction === Direction.Forward) {
|
|
399
|
+
let start = fromOffset ?? 0;
|
|
400
|
+
let index = text.slice(start).search(search);
|
|
401
|
+
return index >= 0 ? start + index : -1;
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
let limit = fromOffset !== undefined ? fromOffset : text.length;
|
|
405
|
+
if (limit < 0) {
|
|
406
|
+
return -1;
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
let re = search.flags.includes("g") ? search : new RegExp(search.source, search.flags + "g");
|
|
410
|
+
let matches = Array.from(text.slice(0, limit).matchAll(re));
|
|
411
|
+
return matches.at(-1)?.index ?? -1;
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
function appendSegments(
|
|
415
|
+
segments: TokenFieldSegment[],
|
|
416
|
+
insert: TokenFieldSegment[],
|
|
417
|
+
tokenize?: (text: string) => TokenFieldSegment[],
|
|
418
|
+
): TokenFieldSegment[] {
|
|
419
|
+
for (let segment of insert) {
|
|
420
|
+
if (segment.type === "text" && segment.text.length === 0) {
|
|
421
|
+
continue;
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
let last = segments[segments.length - 1];
|
|
425
|
+
if (last && last.type === "text" && segment.type === "text") {
|
|
426
|
+
if (tokenize) {
|
|
427
|
+
let tokenized = tokenize(last.text + segment.text);
|
|
428
|
+
segments.splice(segments.length - 1, 1, ...tokenized);
|
|
429
|
+
} else {
|
|
430
|
+
segments[segments.length - 1] = { type: "text", text: last.text + segment.text };
|
|
431
|
+
}
|
|
432
|
+
} else if (tokenize && segment.type === "text") {
|
|
433
|
+
let tokenized = tokenize(segment.text);
|
|
434
|
+
segments.push(...tokenized);
|
|
435
|
+
} else {
|
|
436
|
+
segments.push(segment);
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
return segments;
|
|
440
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2026 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/tokenfield/useTokenFieldState.ts
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Token field state for Solid Stately.
|
|
17
|
+
*
|
|
18
|
+
* Tracks the field value and composition state. Port of
|
|
19
|
+
* @react-stately/tokenfield useTokenFieldState.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
import type { Accessor } from "solid-js";
|
|
23
|
+
import { createInternalSignal, type MaybeAccessor, access } from "../utils";
|
|
24
|
+
import { TokenFieldValue } from "./TokenFieldValue";
|
|
25
|
+
|
|
26
|
+
export interface TokenFieldStateOptions<T extends TokenFieldValue = TokenFieldValue> {
|
|
27
|
+
/** The current value (controlled). */
|
|
28
|
+
value?: T;
|
|
29
|
+
/** The default value (uncontrolled). */
|
|
30
|
+
defaultValue?: T;
|
|
31
|
+
/** Handler that is called when the value changes. */
|
|
32
|
+
onChange?: (value: T) => void;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export interface TokenFieldState<T extends TokenFieldValue = TokenFieldValue> {
|
|
36
|
+
/** The current value of the token field. */
|
|
37
|
+
readonly value: Accessor<T>;
|
|
38
|
+
/** Sets the value of the token field. */
|
|
39
|
+
setValue: (fn: T | ((value: T) => T)) => void;
|
|
40
|
+
/** Whether the token field is composing. */
|
|
41
|
+
readonly isComposing: Accessor<boolean>;
|
|
42
|
+
/** Sets the composing state of the token field. */
|
|
43
|
+
setComposing: (isComposing: boolean) => void;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Provides state management for a token field. Tracks the field value and the
|
|
48
|
+
* composition state.
|
|
49
|
+
*/
|
|
50
|
+
export function createTokenFieldState<T extends TokenFieldValue = TokenFieldValue>(
|
|
51
|
+
props: MaybeAccessor<TokenFieldStateOptions<T>> = {},
|
|
52
|
+
): TokenFieldState<T> {
|
|
53
|
+
const getProps = () => access(props);
|
|
54
|
+
|
|
55
|
+
const initialProps = getProps();
|
|
56
|
+
const initialValue = (initialProps.value ??
|
|
57
|
+
initialProps.defaultValue ??
|
|
58
|
+
new TokenFieldValue([])) as T;
|
|
59
|
+
|
|
60
|
+
const [internalValue, setInternalValue] = createInternalSignal(initialValue);
|
|
61
|
+
const [isComposing, setComposing] = createInternalSignal(false);
|
|
62
|
+
|
|
63
|
+
const isControlled = () => getProps().value !== undefined;
|
|
64
|
+
|
|
65
|
+
const value: Accessor<T> = () => {
|
|
66
|
+
const p = getProps();
|
|
67
|
+
return isControlled() ? ((p.value ?? initialValue) as T) : internalValue();
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
function setValue(fn: T | ((current: T) => T)): void {
|
|
71
|
+
const p = getProps();
|
|
72
|
+
const current = value();
|
|
73
|
+
const next = typeof fn === "function" ? (fn as (current: T) => T)(current) : fn;
|
|
74
|
+
|
|
75
|
+
if (!isControlled()) {
|
|
76
|
+
setInternalValue(() => next);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
p.onChange?.(next);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
return {
|
|
83
|
+
value,
|
|
84
|
+
setValue,
|
|
85
|
+
isComposing,
|
|
86
|
+
setComposing,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export {
|
|
2
|
+
TokenFieldValue,
|
|
3
|
+
type TokenFieldSegment,
|
|
4
|
+
type TextSegment,
|
|
5
|
+
type TokenSegment,
|
|
6
|
+
type Position,
|
|
7
|
+
type TokenFieldValueOptions,
|
|
8
|
+
} from "./TokenFieldValue";
|
|
9
|
+
|
|
10
|
+
export {
|
|
11
|
+
createTokenFieldState,
|
|
12
|
+
type TokenFieldStateOptions,
|
|
13
|
+
type TokenFieldState,
|
|
14
|
+
} from "./createTokenFieldState";
|
|
@@ -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/tooltip/useTooltipTriggerState.ts
|
|
14
|
+
|
|
1
15
|
/**
|
|
2
16
|
* Manages state for a tooltip trigger.
|
|
3
17
|
* Based on @react-stately/tooltip useTooltipTriggerState.
|
|
@@ -6,9 +20,11 @@
|
|
|
6
20
|
* Ensures only one tooltip is open at a time and controls the delay for showing a tooltip.
|
|
7
21
|
*/
|
|
8
22
|
|
|
9
|
-
import {
|
|
23
|
+
import { flush, onCleanup } from "solid-js";
|
|
24
|
+
import type { Accessor } from "solid-js";
|
|
10
25
|
import { createOverlayTriggerState, type OverlayTriggerProps } from "../overlays";
|
|
11
26
|
import { isServer } from "../ssr";
|
|
27
|
+
import { createInternalSignal } from "../utils";
|
|
12
28
|
|
|
13
29
|
// Default delays (in ms)
|
|
14
30
|
const TOOLTIP_DELAY = 1500;
|
|
@@ -19,11 +35,18 @@ export interface TooltipTriggerProps extends OverlayTriggerProps {
|
|
|
19
35
|
delay?: number;
|
|
20
36
|
/** The delay time in milliseconds for the tooltip to close. */
|
|
21
37
|
closeDelay?: number;
|
|
38
|
+
/** Whether the tooltip trigger is disabled. */
|
|
39
|
+
isDisabled?: boolean;
|
|
22
40
|
}
|
|
23
41
|
|
|
24
42
|
export interface TooltipTriggerState {
|
|
25
43
|
/** Whether the tooltip is currently showing. */
|
|
26
44
|
readonly isOpen: Accessor<boolean>;
|
|
45
|
+
/**
|
|
46
|
+
* Whether the tooltip is being shown or hidden without an animation. True while
|
|
47
|
+
* the global warmup timer is active, i.e. when quickly moving between tooltips.
|
|
48
|
+
*/
|
|
49
|
+
readonly shouldSkipAnimation: Accessor<boolean>;
|
|
27
50
|
/**
|
|
28
51
|
* Shows the tooltip. By default, the tooltip becomes visible after a delay
|
|
29
52
|
* depending on a global warmup timer. The `immediate` option shows the
|
|
@@ -35,7 +58,7 @@ export interface TooltipTriggerState {
|
|
|
35
58
|
}
|
|
36
59
|
|
|
37
60
|
// Global state for coordinating tooltips
|
|
38
|
-
let tooltips: Record<string, (immediate?: boolean) => void> = {};
|
|
61
|
+
let tooltips: Record<string, (immediate?: boolean, instant?: boolean) => void> = {};
|
|
39
62
|
let tooltipId = 0;
|
|
40
63
|
let globalWarmedUp = false;
|
|
41
64
|
let globalWarmUpTimeout: ReturnType<typeof setTimeout> | null = null;
|
|
@@ -70,9 +93,12 @@ export function createTooltipTriggerState(props: TooltipTriggerProps = {}): Tool
|
|
|
70
93
|
|
|
71
94
|
const overlayState = createOverlayTriggerState(props);
|
|
72
95
|
const id = `tooltip-${++tooltipId}`;
|
|
96
|
+
const [shouldSkipAnimation, setShouldSkipAnimation] = createInternalSignal(false);
|
|
73
97
|
|
|
74
98
|
let closeTimeout: ReturnType<typeof setTimeout> | null = null;
|
|
75
|
-
|
|
99
|
+
// Solid 2 treats a function initializer as a writable memo, so keep the
|
|
100
|
+
// close target as a plain binding rather than a function-valued signal.
|
|
101
|
+
let closeFn = overlayState.close;
|
|
76
102
|
|
|
77
103
|
const ensureTooltipEntry = () => {
|
|
78
104
|
tooltips[id] = hideTooltip;
|
|
@@ -81,21 +107,30 @@ export function createTooltipTriggerState(props: TooltipTriggerProps = {}): Tool
|
|
|
81
107
|
const closeOpenTooltips = () => {
|
|
82
108
|
for (const hideTooltipId in tooltips) {
|
|
83
109
|
if (hideTooltipId !== id) {
|
|
84
|
-
tooltips[hideTooltipId](true);
|
|
110
|
+
tooltips[hideTooltipId](true, true);
|
|
85
111
|
delete tooltips[hideTooltipId];
|
|
86
112
|
}
|
|
87
113
|
}
|
|
88
114
|
};
|
|
89
115
|
|
|
90
|
-
const showTooltip = () => {
|
|
116
|
+
const showTooltip = (instant?: boolean) => {
|
|
91
117
|
if (closeTimeout) {
|
|
92
118
|
clearTimeout(closeTimeout);
|
|
93
119
|
closeTimeout = null;
|
|
94
120
|
}
|
|
95
121
|
closeOpenTooltips();
|
|
96
122
|
ensureTooltipEntry();
|
|
123
|
+
setShouldSkipAnimation(!!instant);
|
|
97
124
|
globalWarmedUp = true;
|
|
98
125
|
overlayState.open();
|
|
126
|
+
// Timer callbacks and event handlers can flush. Overlay `Show` otherwise
|
|
127
|
+
// stays unmounted until a later microtask (fake-timer tests read the DOM
|
|
128
|
+
// in the same turn as `advanceTimersByTime`).
|
|
129
|
+
try {
|
|
130
|
+
flush();
|
|
131
|
+
} catch {
|
|
132
|
+
// Ignore: flush is forbidden inside createEffect apply / createTrackedEffect.
|
|
133
|
+
}
|
|
99
134
|
|
|
100
135
|
if (globalWarmUpTimeout) {
|
|
101
136
|
clearTimeout(globalWarmUpTimeout);
|
|
@@ -107,17 +142,18 @@ export function createTooltipTriggerState(props: TooltipTriggerProps = {}): Tool
|
|
|
107
142
|
}
|
|
108
143
|
};
|
|
109
144
|
|
|
110
|
-
const hideTooltip = (immediate?: boolean) => {
|
|
145
|
+
const hideTooltip = (immediate?: boolean, instant?: boolean) => {
|
|
146
|
+
setShouldSkipAnimation(!!instant);
|
|
111
147
|
if (immediate || closeDelay() <= 0) {
|
|
112
148
|
if (closeTimeout) {
|
|
113
149
|
clearTimeout(closeTimeout);
|
|
114
150
|
closeTimeout = null;
|
|
115
151
|
}
|
|
116
|
-
|
|
152
|
+
closeFn();
|
|
117
153
|
} else if (!closeTimeout) {
|
|
118
154
|
closeTimeout = setTimeout(() => {
|
|
119
155
|
closeTimeout = null;
|
|
120
|
-
|
|
156
|
+
closeFn();
|
|
121
157
|
}, closeDelay());
|
|
122
158
|
}
|
|
123
159
|
|
|
@@ -149,15 +185,14 @@ export function createTooltipTriggerState(props: TooltipTriggerProps = {}): Tool
|
|
|
149
185
|
globalWarmUpTimeout = setTimeout(() => {
|
|
150
186
|
globalWarmUpTimeout = null;
|
|
151
187
|
globalWarmedUp = true;
|
|
152
|
-
showTooltip();
|
|
188
|
+
showTooltip(false);
|
|
153
189
|
}, delay());
|
|
154
190
|
} else if (!overlayState.isOpen()) {
|
|
155
|
-
showTooltip();
|
|
191
|
+
showTooltip(true);
|
|
156
192
|
}
|
|
157
193
|
};
|
|
158
194
|
|
|
159
|
-
|
|
160
|
-
setCloseCallback(() => overlayState.close);
|
|
195
|
+
closeFn = overlayState.close;
|
|
161
196
|
|
|
162
197
|
// Cleanup on unmount
|
|
163
198
|
onCleanup(() => {
|
|
@@ -171,12 +206,13 @@ export function createTooltipTriggerState(props: TooltipTriggerProps = {}): Tool
|
|
|
171
206
|
|
|
172
207
|
return {
|
|
173
208
|
isOpen: overlayState.isOpen,
|
|
209
|
+
shouldSkipAnimation,
|
|
174
210
|
open: (immediate?: boolean) => {
|
|
175
211
|
if (isServer) return;
|
|
176
212
|
if (!immediate && delay() > 0 && !closeTimeout) {
|
|
177
213
|
warmupTooltip();
|
|
178
214
|
} else {
|
|
179
|
-
showTooltip();
|
|
215
|
+
showTooltip(true);
|
|
180
216
|
}
|
|
181
217
|
},
|
|
182
218
|
close: hideTooltip,
|