@wordpress/components 19.12.0 → 19.13.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/CHANGELOG.md +37 -0
- package/CONTRIBUTING.md +94 -12
- package/build/alignment-matrix-control/index.js +3 -3
- package/build/alignment-matrix-control/index.js.map +1 -1
- package/build/angle-picker-control/index.js +2 -2
- package/build/angle-picker-control/index.js.map +1 -1
- package/build/border-box-control/border-box-control-linked-button/component.js.map +1 -1
- package/build/border-box-control/utils.js.map +1 -1
- package/build/border-control/border-control/hook.js.map +1 -1
- package/build/box-control/all-input-control.js +6 -10
- package/build/box-control/all-input-control.js.map +1 -1
- package/build/box-control/axial-input-controls.js.map +1 -1
- package/build/box-control/index.js +3 -7
- package/build/box-control/index.js.map +1 -1
- package/build/box-control/input-controls.js +6 -10
- package/build/box-control/input-controls.js.map +1 -1
- package/build/box-control/unit-control.js +4 -4
- package/build/box-control/unit-control.js.map +1 -1
- package/build/button/index.native.js +1 -3
- package/build/button/index.native.js.map +1 -1
- package/build/checkbox-control/index.js.map +1 -1
- package/build/color-picker/index.native.js.map +1 -1
- package/build/combobox-control/index.js +4 -2
- package/build/combobox-control/index.js.map +1 -1
- package/build/confirm-dialog/component.js.map +1 -1
- package/build/custom-gradient-bar/constants.js +1 -3
- package/build/custom-gradient-bar/constants.js.map +1 -1
- package/build/custom-gradient-bar/control-points.js +15 -8
- package/build/custom-gradient-bar/control-points.js.map +1 -1
- package/build/custom-gradient-bar/index.js +5 -5
- package/build/custom-gradient-bar/index.js.map +1 -1
- package/build/custom-gradient-bar/utils.js +5 -7
- package/build/custom-gradient-bar/utils.js.map +1 -1
- package/build/custom-gradient-picker/utils.js.map +1 -1
- package/build/custom-select-control/index.js.map +1 -1
- package/build/date-time/date/index.js +4 -4
- package/build/date-time/date/index.js.map +1 -1
- package/build/date-time/date-time/index.js +3 -3
- package/build/date-time/date-time/index.js.map +1 -1
- package/build/dimension-control/index.js +1 -3
- package/build/dimension-control/index.js.map +1 -1
- package/build/divider/styles.js +5 -5
- package/build/divider/styles.js.map +1 -1
- package/build/draggable/index.js.map +1 -1
- package/build/draggable/index.native.js +6 -1
- package/build/draggable/index.native.js.map +1 -1
- package/build/drop-zone/provider.js.map +1 -1
- package/build/dropdown/index.js +2 -2
- package/build/dropdown/index.js.map +1 -1
- package/build/dropdown-menu/index.js +13 -2
- package/build/dropdown-menu/index.js.map +1 -1
- package/build/dropdown-menu/index.native.js +13 -2
- package/build/dropdown-menu/index.native.js.map +1 -1
- package/build/external-link/index.js +20 -8
- package/build/external-link/index.js.map +1 -1
- package/build/external-link/styles/external-link-styles.js +3 -3
- package/build/external-link/styles/external-link-styles.js.map +1 -1
- package/build/external-link/types.js +6 -0
- package/build/external-link/types.js.map +1 -0
- package/build/flex/flex/hook.js +9 -5
- package/build/flex/flex/hook.js.map +1 -1
- package/build/focal-point-picker/controls.js +3 -7
- package/build/focal-point-picker/controls.js.map +1 -1
- package/build/focal-point-picker/index.js.map +1 -1
- package/build/focal-point-picker/media.js +4 -8
- package/build/focal-point-picker/media.js.map +1 -1
- package/build/font-size-picker/index.js +1 -1
- package/build/font-size-picker/index.js.map +1 -1
- package/build/form-toggle/index.js +6 -4
- package/build/form-toggle/index.js.map +1 -1
- package/build/form-token-field/index.js +328 -359
- package/build/form-token-field/index.js.map +1 -1
- package/build/form-token-field/suggestions-list.js +26 -20
- package/build/form-token-field/suggestions-list.js.map +1 -1
- package/build/form-token-field/token-input.js +39 -53
- package/build/form-token-field/token-input.js.map +1 -1
- package/build/form-token-field/token.js +3 -3
- package/build/form-token-field/token.js.map +1 -1
- package/build/form-token-field/types.js +6 -0
- package/build/form-token-field/types.js.map +1 -0
- package/build/gradient-picker/index.js.map +1 -1
- package/build/heading/hook.js.map +1 -1
- package/build/higher-order/navigate-regions/index.js.map +1 -1
- package/build/higher-order/with-focus-return/index.js.map +1 -1
- package/build/higher-order/with-spoken-messages/index.js.map +1 -1
- package/build/icon/index.js.map +1 -1
- package/build/input-control/index.js +5 -5
- package/build/input-control/index.js.map +1 -1
- package/build/input-control/input-field.js +10 -10
- package/build/input-control/input-field.js.map +1 -1
- package/build/input-control/reducer/reducer.js.map +1 -1
- package/build/input-control/utils.js +1 -1
- package/build/input-control/utils.js.map +1 -1
- package/build/menu-items-choice/index.js +3 -7
- package/build/menu-items-choice/index.js.map +1 -1
- package/build/mobile/bottom-sheet/bottom-sheet-context.native.js.map +1 -1
- package/build/mobile/bottom-sheet/cell.native.js.map +1 -1
- package/build/mobile/bottom-sheet/cycle-picker-cell.native.js +1 -7
- package/build/mobile/bottom-sheet/cycle-picker-cell.native.js.map +1 -1
- package/build/mobile/bottom-sheet/index.native.js.map +1 -1
- package/build/mobile/bottom-sheet/picker-cell.native.js.map +1 -1
- package/build/mobile/bottom-sheet/stepper-cell/index.native.js.map +1 -1
- package/build/mobile/color-settings/index.native.js.map +1 -1
- package/build/mobile/global-styles-context/index.native.js.map +1 -1
- package/build/mobile/gradient/index.native.js.map +1 -1
- package/build/mobile/html-text-input/index.native.js.map +1 -1
- package/build/mobile/inserter-button/index.native.js.map +1 -1
- package/build/mobile/link-settings/image-link-destinations-screen.native.js.map +1 -1
- package/build/mobile/media-edit/index.native.js.map +1 -1
- package/build/mobile/segmented-control/index.native.js +1 -1
- package/build/mobile/segmented-control/index.native.js.map +1 -1
- package/build/modal/index.js +1 -1
- package/build/modal/index.js.map +1 -1
- package/build/navigable-container/container.js +4 -2
- package/build/navigable-container/container.js.map +1 -1
- package/build/navigation/context.js +12 -16
- package/build/navigation/context.js.map +1 -1
- package/build/navigation/index.js +3 -3
- package/build/navigation/index.js.map +1 -1
- package/build/navigation/item/index.js +3 -3
- package/build/navigation/item/index.js.map +1 -1
- package/build/navigator/navigator-back-button/hook.js.map +1 -1
- package/build/navigator/navigator-button/hook.js.map +1 -1
- package/build/navigator/navigator-provider/component.js +1 -1
- package/build/navigator/navigator-provider/component.js.map +1 -1
- package/build/navigator/navigator-screen/component.js +1 -1
- package/build/navigator/navigator-screen/component.js.map +1 -1
- package/build/notice/index.js +5 -5
- package/build/notice/index.js.map +1 -1
- package/build/notice/list.js +4 -2
- package/build/notice/list.js.map +1 -1
- package/build/panel/body.js +3 -3
- package/build/panel/body.js.map +1 -1
- package/build/placeholder/index.js +26 -12
- package/build/placeholder/index.js.map +1 -1
- package/build/radio-control/index.js +43 -7
- package/build/radio-control/index.js.map +1 -1
- package/build/radio-control/types.js +6 -0
- package/build/radio-control/types.js.map +1 -0
- package/build/range-control/index.js +8 -6
- package/build/range-control/index.js.map +1 -1
- package/build/range-control/input-range.js +6 -10
- package/build/range-control/input-range.js.map +1 -1
- package/build/range-control/utils.js +7 -5
- package/build/range-control/utils.js.map +1 -1
- package/build/resizable-box/resize-tooltip/index.js +3 -3
- package/build/resizable-box/resize-tooltip/index.js.map +1 -1
- package/build/resizable-box/resize-tooltip/utils.js +4 -7
- package/build/resizable-box/resize-tooltip/utils.js.map +1 -1
- package/build/responsive-wrapper/index.js.map +1 -1
- package/build/select-control/index.js +5 -3
- package/build/select-control/index.js.map +1 -1
- package/build/slot-fill/fill.js +1 -7
- package/build/slot-fill/fill.js.map +1 -1
- package/build/slot-fill/slot.js +14 -3
- package/build/slot-fill/slot.js.map +1 -1
- package/build/snackbar/index.js +7 -7
- package/build/snackbar/index.js.map +1 -1
- package/build/snackbar/list.js +3 -1
- package/build/snackbar/list.js.map +1 -1
- package/build/tab-panel/index.js +3 -1
- package/build/tab-panel/index.js.map +1 -1
- package/build/text/hook.js +4 -4
- package/build/text/hook.js.map +1 -1
- package/build/text/utils.js.map +1 -1
- package/build/toggle-control/index.js +1 -3
- package/build/toggle-control/index.js.map +1 -1
- package/build/toggle-control/index.native.js +1 -7
- package/build/toggle-control/index.native.js.map +1 -1
- package/build/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.js.map +1 -1
- package/build/toolbar/index.js.map +1 -1
- package/build/tools-panel/tools-panel/hook.js.map +1 -1
- package/build/tools-panel/tools-panel-header/hook.js.map +1 -1
- package/build/tooltip/index.js +2 -1
- package/build/tooltip/index.js.map +1 -1
- package/build/tree-grid/roving-tab-index-item.js.map +1 -1
- package/build/tree-select/index.js +57 -4
- package/build/tree-select/index.js.map +1 -1
- package/build/tree-select/types.js +6 -0
- package/build/tree-select/types.js.map +1 -0
- package/build/ui/form-group/form-group-content.js.map +1 -1
- package/build/unit-control/index.js.map +1 -1
- package/build/utils/unit-values.js.map +1 -1
- package/build/utils/values.js.map +1 -1
- package/build/z-stack/component.js +22 -3
- package/build/z-stack/component.js.map +1 -1
- package/build/z-stack/types.js +6 -0
- package/build/z-stack/types.js.map +1 -0
- package/build-module/alignment-matrix-control/index.js +2 -1
- package/build-module/alignment-matrix-control/index.js.map +1 -1
- package/build-module/angle-picker-control/index.js +1 -1
- package/build-module/angle-picker-control/index.js.map +1 -1
- package/build-module/border-box-control/border-box-control-linked-button/component.js.map +1 -1
- package/build-module/border-box-control/utils.js.map +1 -1
- package/build-module/border-control/border-control/hook.js.map +1 -1
- package/build-module/box-control/all-input-control.js +3 -5
- package/build-module/box-control/all-input-control.js.map +1 -1
- package/build-module/box-control/axial-input-controls.js.map +1 -1
- package/build-module/box-control/index.js +2 -5
- package/build-module/box-control/index.js.map +1 -1
- package/build-module/box-control/input-controls.js +3 -5
- package/build-module/box-control/input-controls.js.map +1 -1
- package/build-module/box-control/unit-control.js +3 -1
- package/build-module/box-control/unit-control.js.map +1 -1
- package/build-module/button/index.native.js +1 -2
- package/build-module/button/index.native.js.map +1 -1
- package/build-module/checkbox-control/index.js.map +1 -1
- package/build-module/color-picker/index.native.js.map +1 -1
- package/build-module/combobox-control/index.js +5 -2
- package/build-module/combobox-control/index.js.map +1 -1
- package/build-module/confirm-dialog/component.js.map +1 -1
- package/build-module/custom-gradient-bar/constants.js +0 -1
- package/build-module/custom-gradient-bar/constants.js.map +1 -1
- package/build-module/custom-gradient-bar/control-points.js +16 -9
- package/build-module/custom-gradient-bar/control-points.js.map +1 -1
- package/build-module/custom-gradient-bar/index.js +6 -6
- package/build-module/custom-gradient-bar/index.js.map +1 -1
- package/build-module/custom-gradient-bar/utils.js +6 -8
- package/build-module/custom-gradient-bar/utils.js.map +1 -1
- package/build-module/custom-gradient-picker/utils.js.map +1 -1
- package/build-module/custom-select-control/index.js.map +1 -1
- package/build-module/date-time/date/index.js +4 -3
- package/build-module/date-time/date/index.js.map +1 -1
- package/build-module/date-time/date-time/index.js +2 -1
- package/build-module/date-time/date-time/index.js.map +1 -1
- package/build-module/dimension-control/index.js +1 -2
- package/build-module/dimension-control/index.js.map +1 -1
- package/build-module/divider/styles.js +5 -5
- package/build-module/divider/styles.js.map +1 -1
- package/build-module/draggable/index.js.map +1 -1
- package/build-module/draggable/index.native.js +6 -1
- package/build-module/draggable/index.native.js.map +1 -1
- package/build-module/drop-zone/provider.js.map +1 -1
- package/build-module/dropdown/index.js +2 -2
- package/build-module/dropdown/index.js.map +1 -1
- package/build-module/dropdown-menu/index.js +12 -1
- package/build-module/dropdown-menu/index.js.map +1 -1
- package/build-module/dropdown-menu/index.native.js +12 -1
- package/build-module/dropdown-menu/index.native.js.map +1 -1
- package/build-module/external-link/index.js +22 -7
- package/build-module/external-link/index.js.map +1 -1
- package/build-module/external-link/styles/external-link-styles.js +3 -3
- package/build-module/external-link/styles/external-link-styles.js.map +1 -1
- package/build-module/external-link/types.js +2 -0
- package/build-module/external-link/types.js.map +1 -0
- package/build-module/flex/flex/hook.js +7 -5
- package/build-module/flex/flex/hook.js.map +1 -1
- package/build-module/focal-point-picker/controls.js +3 -5
- package/build-module/focal-point-picker/controls.js.map +1 -1
- package/build-module/focal-point-picker/index.js.map +1 -1
- package/build-module/focal-point-picker/media.js +3 -5
- package/build-module/focal-point-picker/media.js.map +1 -1
- package/build-module/font-size-picker/index.js +1 -1
- package/build-module/font-size-picker/index.js.map +1 -1
- package/build-module/form-toggle/index.js +1 -1
- package/build-module/form-toggle/index.js.map +1 -1
- package/build-module/form-token-field/index.js +329 -361
- package/build-module/form-token-field/index.js.map +1 -1
- package/build-module/form-token-field/suggestions-list.js +32 -23
- package/build-module/form-token-field/suggestions-list.js.map +1 -1
- package/build-module/form-token-field/token-input.js +43 -58
- package/build-module/form-token-field/token-input.js.map +1 -1
- package/build-module/form-token-field/token.js +3 -1
- package/build-module/form-token-field/token.js.map +1 -1
- package/build-module/form-token-field/types.js +2 -0
- package/build-module/form-token-field/types.js.map +1 -0
- package/build-module/gradient-picker/index.js.map +1 -1
- package/build-module/heading/hook.js.map +1 -1
- package/build-module/higher-order/navigate-regions/index.js.map +1 -1
- package/build-module/higher-order/with-focus-return/index.js.map +1 -1
- package/build-module/higher-order/with-spoken-messages/index.js.map +1 -1
- package/build-module/icon/index.js.map +1 -1
- package/build-module/input-control/index.js +2 -1
- package/build-module/input-control/index.js.map +1 -1
- package/build-module/input-control/input-field.js +2 -1
- package/build-module/input-control/input-field.js.map +1 -1
- package/build-module/input-control/reducer/reducer.js.map +1 -1
- package/build-module/input-control/utils.js +1 -1
- package/build-module/input-control/utils.js.map +1 -1
- package/build-module/menu-items-choice/index.js +3 -5
- package/build-module/menu-items-choice/index.js.map +1 -1
- package/build-module/mobile/bottom-sheet/bottom-sheet-context.native.js.map +1 -1
- package/build-module/mobile/bottom-sheet/cell.native.js.map +1 -1
- package/build-module/mobile/bottom-sheet/cycle-picker-cell.native.js +1 -6
- package/build-module/mobile/bottom-sheet/cycle-picker-cell.native.js.map +1 -1
- package/build-module/mobile/bottom-sheet/index.native.js.map +1 -1
- package/build-module/mobile/bottom-sheet/picker-cell.native.js.map +1 -1
- package/build-module/mobile/bottom-sheet/stepper-cell/index.native.js.map +1 -1
- package/build-module/mobile/color-settings/index.native.js.map +1 -1
- package/build-module/mobile/global-styles-context/index.native.js.map +1 -1
- package/build-module/mobile/gradient/index.native.js.map +1 -1
- package/build-module/mobile/html-text-input/index.native.js.map +1 -1
- package/build-module/mobile/inserter-button/index.native.js.map +1 -1
- package/build-module/mobile/link-settings/image-link-destinations-screen.native.js.map +1 -1
- package/build-module/mobile/media-edit/index.native.js.map +1 -1
- package/build-module/mobile/segmented-control/index.native.js +2 -2
- package/build-module/mobile/segmented-control/index.native.js.map +1 -1
- package/build-module/modal/index.js +1 -1
- package/build-module/modal/index.js.map +1 -1
- package/build-module/navigable-container/container.js +5 -2
- package/build-module/navigable-container/container.js.map +1 -1
- package/build-module/navigation/context.js +3 -5
- package/build-module/navigation/context.js.map +1 -1
- package/build-module/navigation/index.js +3 -1
- package/build-module/navigation/index.js.map +1 -1
- package/build-module/navigation/item/index.js +3 -1
- package/build-module/navigation/item/index.js.map +1 -1
- package/build-module/navigator/navigator-back-button/hook.js.map +1 -1
- package/build-module/navigator/navigator-button/hook.js.map +1 -1
- package/build-module/navigator/navigator-provider/component.js +1 -1
- package/build-module/navigator/navigator-provider/component.js.map +1 -1
- package/build-module/navigator/navigator-screen/component.js +1 -1
- package/build-module/navigator/navigator-screen/component.js.map +1 -1
- package/build-module/notice/index.js +2 -1
- package/build-module/notice/index.js.map +1 -1
- package/build-module/notice/list.js +4 -1
- package/build-module/notice/list.js.map +1 -1
- package/build-module/panel/body.js +3 -1
- package/build-module/panel/body.js.map +1 -1
- package/build-module/placeholder/index.js +24 -11
- package/build-module/placeholder/index.js.map +1 -1
- package/build-module/radio-control/index.js +40 -7
- package/build-module/radio-control/index.js.map +1 -1
- package/build-module/radio-control/types.js +2 -0
- package/build-module/radio-control/types.js.map +1 -0
- package/build-module/range-control/index.js +4 -2
- package/build-module/range-control/index.js.map +1 -1
- package/build-module/range-control/input-range.js +2 -5
- package/build-module/range-control/input-range.js.map +1 -1
- package/build-module/range-control/utils.js +4 -1
- package/build-module/range-control/utils.js.map +1 -1
- package/build-module/resizable-box/resize-tooltip/index.js +2 -1
- package/build-module/resizable-box/resize-tooltip/index.js.map +1 -1
- package/build-module/resizable-box/resize-tooltip/utils.js +3 -5
- package/build-module/resizable-box/resize-tooltip/utils.js.map +1 -1
- package/build-module/responsive-wrapper/index.js.map +1 -1
- package/build-module/select-control/index.js +3 -1
- package/build-module/select-control/index.js.map +1 -1
- package/build-module/slot-fill/fill.js +1 -6
- package/build-module/slot-fill/fill.js.map +1 -1
- package/build-module/slot-fill/slot.js +12 -2
- package/build-module/slot-fill/slot.js.map +1 -1
- package/build-module/snackbar/index.js +3 -1
- package/build-module/snackbar/index.js.map +1 -1
- package/build-module/snackbar/list.js +4 -1
- package/build-module/snackbar/list.js.map +1 -1
- package/build-module/tab-panel/index.js +3 -1
- package/build-module/tab-panel/index.js.map +1 -1
- package/build-module/text/hook.js +4 -4
- package/build-module/text/hook.js.map +1 -1
- package/build-module/text/utils.js.map +1 -1
- package/build-module/toggle-control/index.js +1 -2
- package/build-module/toggle-control/index.js.map +1 -1
- package/build-module/toggle-control/index.native.js +1 -6
- package/build-module/toggle-control/index.native.js.map +1 -1
- package/build-module/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.js.map +1 -1
- package/build-module/toolbar/index.js.map +1 -1
- package/build-module/tools-panel/tools-panel/hook.js.map +1 -1
- package/build-module/tools-panel/tools-panel-header/hook.js.map +1 -1
- package/build-module/tooltip/index.js +2 -1
- package/build-module/tooltip/index.js.map +1 -1
- package/build-module/tree-grid/roving-tab-index-item.js.map +1 -1
- package/build-module/tree-select/index.js +53 -3
- package/build-module/tree-select/index.js.map +1 -1
- package/build-module/tree-select/types.js +2 -0
- package/build-module/tree-select/types.js.map +1 -0
- package/build-module/ui/form-group/form-group-content.js.map +1 -1
- package/build-module/unit-control/index.js.map +1 -1
- package/build-module/utils/unit-values.js.map +1 -1
- package/build-module/utils/values.js.map +1 -1
- package/build-module/z-stack/component.js +21 -2
- package/build-module/z-stack/component.js.map +1 -1
- package/build-module/z-stack/types.js +2 -0
- package/build-module/z-stack/types.js.map +1 -0
- package/build-style/style-rtl.css +32 -3
- package/build-style/style.css +32 -4
- package/build-types/base-control/stories/index.d.ts.map +1 -1
- package/build-types/base-field/hook.d.ts +0 -1
- package/build-types/base-field/hook.d.ts.map +1 -1
- package/build-types/border-box-control/border-box-control/hook.d.ts +0 -1
- package/build-types/border-box-control/border-box-control/hook.d.ts.map +1 -1
- package/build-types/border-box-control/border-box-control-linked-button/component.d.ts.map +1 -1
- package/build-types/border-box-control/border-box-control-linked-button/hook.d.ts +0 -1
- package/build-types/border-box-control/border-box-control-linked-button/hook.d.ts.map +1 -1
- package/build-types/border-box-control/border-box-control-split-controls/hook.d.ts +0 -1
- package/build-types/border-box-control/border-box-control-split-controls/hook.d.ts.map +1 -1
- package/build-types/border-box-control/border-box-control-visualizer/hook.d.ts +0 -1
- package/build-types/border-box-control/border-box-control-visualizer/hook.d.ts.map +1 -1
- package/build-types/border-box-control/utils.d.ts.map +1 -1
- package/build-types/border-control/border-control/hook.d.ts +0 -1
- package/build-types/border-control/border-control/hook.d.ts.map +1 -1
- package/build-types/border-control/border-control-dropdown/hook.d.ts +0 -1
- package/build-types/border-control/border-control-dropdown/hook.d.ts.map +1 -1
- package/build-types/border-control/border-control-style-picker/hook.d.ts +0 -1
- package/build-types/border-control/border-control-style-picker/hook.d.ts.map +1 -1
- package/build-types/button-group/index.d.ts +1 -1
- package/build-types/button-group/index.d.ts.map +1 -1
- package/build-types/card/card/hook.d.ts +0 -1
- package/build-types/card/card/hook.d.ts.map +1 -1
- package/build-types/card/card-body/hook.d.ts +0 -1
- package/build-types/card/card-body/hook.d.ts.map +1 -1
- package/build-types/card/card-divider/hook.d.ts +0 -1
- package/build-types/card/card-divider/hook.d.ts.map +1 -1
- package/build-types/card/card-footer/hook.d.ts +0 -1
- package/build-types/card/card-footer/hook.d.ts.map +1 -1
- package/build-types/card/card-header/hook.d.ts +0 -1
- package/build-types/card/card-header/hook.d.ts.map +1 -1
- package/build-types/card/card-media/hook.d.ts +0 -1
- package/build-types/card/card-media/hook.d.ts.map +1 -1
- package/build-types/checkbox-control/index.d.ts.map +1 -1
- package/build-types/checkbox-control/stories/index.d.ts.map +1 -1
- package/build-types/color-picker/styles.d.ts +7 -7
- package/build-types/confirm-dialog/component.d.ts.map +1 -1
- package/build-types/date-time/date/index.d.ts.map +1 -1
- package/build-types/date-time/date-time/index.d.ts.map +1 -1
- package/build-types/date-time/stories/date-time.d.ts.map +1 -1
- package/build-types/date-time/stories/date.d.ts.map +1 -1
- package/build-types/date-time/time/styles.d.ts +1 -1
- package/build-types/divider/styles.d.ts.map +1 -1
- package/build-types/dropdown-menu/index.d.ts.map +1 -1
- package/build-types/elevation/hook.d.ts +0 -1
- package/build-types/elevation/hook.d.ts.map +1 -1
- package/build-types/external-link/index.d.ts +17 -0
- package/build-types/external-link/index.d.ts.map +1 -0
- package/build-types/external-link/stories/index.d.ts +12 -0
- package/build-types/external-link/stories/index.d.ts.map +1 -0
- package/build-types/external-link/styles/external-link-styles.d.ts +10 -0
- package/build-types/external-link/styles/external-link-styles.d.ts.map +1 -0
- package/build-types/external-link/types.d.ts +15 -0
- package/build-types/external-link/types.d.ts.map +1 -0
- package/build-types/flex/flex/hook.d.ts +0 -1
- package/build-types/flex/flex/hook.d.ts.map +1 -1
- package/build-types/flex/flex-block/hook.d.ts +0 -1
- package/build-types/flex/flex-block/hook.d.ts.map +1 -1
- package/build-types/flex/flex-item/hook.d.ts +0 -1
- package/build-types/flex/flex-item/hook.d.ts.map +1 -1
- package/build-types/form-token-field/index.d.ts +15 -0
- package/build-types/form-token-field/index.d.ts.map +1 -0
- package/build-types/form-token-field/stories/index.d.ts +13 -0
- package/build-types/form-token-field/stories/index.d.ts.map +1 -0
- package/build-types/form-token-field/suggestions-list.d.ts +10 -0
- package/build-types/form-token-field/suggestions-list.d.ts.map +1 -0
- package/build-types/form-token-field/test/lib/fixtures.d.ts +26 -0
- package/build-types/form-token-field/test/lib/fixtures.d.ts.map +1 -0
- package/build-types/form-token-field/test/lib/token-field-wrapper.d.ts +18 -0
- package/build-types/form-token-field/test/lib/token-field-wrapper.d.ts.map +1 -0
- package/build-types/form-token-field/token-input.d.ts +12 -0
- package/build-types/form-token-field/token-input.d.ts.map +1 -0
- package/build-types/form-token-field/token.d.ts +4 -0
- package/build-types/form-token-field/token.d.ts.map +1 -0
- package/build-types/form-token-field/types.d.ts +176 -0
- package/build-types/form-token-field/types.d.ts.map +1 -0
- package/build-types/grid/hook.d.ts +0 -1
- package/build-types/grid/hook.d.ts.map +1 -1
- package/build-types/h-stack/hook.d.ts +0 -1
- package/build-types/h-stack/hook.d.ts.map +1 -1
- package/build-types/heading/hook.d.ts +0 -1
- package/build-types/heading/hook.d.ts.map +1 -1
- package/build-types/higher-order/with-focus-outside/index.d.ts +1 -1
- package/build-types/input-control/index.d.ts +1 -1
- package/build-types/input-control/index.d.ts.map +1 -1
- package/build-types/input-control/input-field.d.ts +1 -1
- package/build-types/input-control/input-field.d.ts.map +1 -1
- package/build-types/input-control/reducer/reducer.d.ts.map +1 -1
- package/build-types/input-control/stories/index.d.ts +5 -5
- package/build-types/input-control/stories/index.d.ts.map +1 -1
- package/build-types/item-group/item/hook.d.ts +0 -1
- package/build-types/item-group/item/hook.d.ts.map +1 -1
- package/build-types/item-group/item-group/hook.d.ts +0 -1
- package/build-types/item-group/item-group/hook.d.ts.map +1 -1
- package/build-types/navigator/navigator-back-button/hook.d.ts +0 -1
- package/build-types/navigator/navigator-back-button/hook.d.ts.map +1 -1
- package/build-types/navigator/navigator-button/hook.d.ts +0 -1
- package/build-types/navigator/navigator-button/hook.d.ts.map +1 -1
- package/build-types/navigator/navigator-provider/component.d.ts.map +1 -1
- package/build-types/number-control/styles/number-control-styles.d.ts +1 -1
- package/build-types/radio-control/index.d.ts +31 -0
- package/build-types/radio-control/index.d.ts.map +1 -0
- package/build-types/radio-control/stories/index.d.ts +12 -0
- package/build-types/radio-control/stories/index.d.ts.map +1 -0
- package/build-types/radio-control/types.d.ts +29 -0
- package/build-types/radio-control/types.d.ts.map +1 -0
- package/build-types/range-control/index.d.ts +5 -5
- package/build-types/range-control/index.d.ts.map +1 -1
- package/build-types/range-control/input-range.d.ts +4 -4
- package/build-types/range-control/input-range.d.ts.map +1 -1
- package/build-types/range-control/utils.d.ts.map +1 -1
- package/build-types/resizable-box/resize-tooltip/index.d.ts.map +1 -1
- package/build-types/resizable-box/resize-tooltip/utils.d.ts.map +1 -1
- package/build-types/scrollable/hook.d.ts +0 -1
- package/build-types/scrollable/hook.d.ts.map +1 -1
- package/build-types/select-control/index.d.ts +1 -1
- package/build-types/select-control/index.d.ts.map +1 -1
- package/build-types/select-control/stories/index.d.ts +3 -3
- package/build-types/select-control/stories/index.d.ts.map +1 -1
- package/build-types/slot-fill/fill.d.ts.map +1 -1
- package/build-types/slot-fill/slot.d.ts.map +1 -1
- package/build-types/spacer/hook.d.ts +0 -1
- package/build-types/spacer/hook.d.ts.map +1 -1
- package/build-types/surface/hook.d.ts +0 -1
- package/build-types/surface/hook.d.ts.map +1 -1
- package/build-types/text/hook.d.ts +0 -1
- package/build-types/text/hook.d.ts.map +1 -1
- package/build-types/text/utils.d.ts.map +1 -1
- package/build-types/text-control/index.d.ts +1 -1
- package/build-types/text-control/index.d.ts.map +1 -1
- package/build-types/text-control/stories/index.d.ts.map +1 -1
- package/build-types/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.d.ts.map +1 -1
- package/build-types/tools-panel/tools-panel/hook.d.ts +0 -1
- package/build-types/tools-panel/tools-panel/hook.d.ts.map +1 -1
- package/build-types/tools-panel/tools-panel-header/hook.d.ts +0 -1
- package/build-types/tools-panel/tools-panel-header/hook.d.ts.map +1 -1
- package/build-types/tools-panel/tools-panel-item/hook.d.ts +0 -1
- package/build-types/tools-panel/tools-panel-item/hook.d.ts.map +1 -1
- package/build-types/tooltip/index.d.ts.map +1 -1
- package/build-types/tree-select/index.d.ts +53 -0
- package/build-types/tree-select/index.d.ts.map +1 -0
- package/build-types/tree-select/stories/index.d.ts +12 -0
- package/build-types/tree-select/stories/index.d.ts.map +1 -0
- package/build-types/tree-select/types.d.ts +30 -0
- package/build-types/tree-select/types.d.ts.map +1 -0
- package/build-types/truncate/hook.d.ts +0 -1
- package/build-types/truncate/hook.d.ts.map +1 -1
- package/build-types/ui/context/wordpress-component.d.ts.map +1 -1
- package/build-types/ui/control-group/hook.d.ts +0 -1
- package/build-types/ui/control-group/hook.d.ts.map +1 -1
- package/build-types/ui/control-label/hook.d.ts +0 -1
- package/build-types/ui/control-label/hook.d.ts.map +1 -1
- package/build-types/ui/form-group/use-form-group.d.ts +0 -2
- package/build-types/ui/form-group/use-form-group.d.ts.map +1 -1
- package/build-types/unit-control/index.d.ts +1 -1
- package/build-types/unit-control/index.d.ts.map +1 -1
- package/build-types/unit-control/stories/index.d.ts.map +1 -1
- package/build-types/utils/unit-values.d.ts.map +1 -1
- package/build-types/utils/values.d.ts.map +1 -1
- package/build-types/v-stack/hook.d.ts +0 -1
- package/build-types/v-stack/hook.d.ts.map +1 -1
- package/build-types/z-stack/component.d.ts +18 -28
- package/build-types/z-stack/component.d.ts.map +1 -1
- package/build-types/z-stack/stories/index.d.ts +6 -0
- package/build-types/z-stack/stories/index.d.ts.map +1 -0
- package/build-types/z-stack/types.d.ts +33 -0
- package/build-types/z-stack/types.d.ts.map +1 -0
- package/package.json +17 -17
- package/src/alignment-matrix-control/index.js +2 -1
- package/src/angle-picker-control/index.js +1 -1
- package/src/base-control/stories/index.tsx +2 -3
- package/src/border-box-control/border-box-control-linked-button/component.tsx +2 -5
- package/src/border-box-control/utils.ts +5 -2
- package/src/border-control/border-control/hook.ts +2 -3
- package/src/box-control/all-input-control.js +2 -4
- package/src/box-control/axial-input-controls.js +4 -6
- package/src/box-control/index.js +2 -5
- package/src/box-control/input-controls.js +33 -36
- package/src/box-control/unit-control.js +2 -1
- package/src/button/index.native.js +1 -2
- package/src/card/stories/index.js +10 -5
- package/src/checkbox-control/index.tsx +2 -3
- package/src/checkbox-control/stories/index.tsx +2 -3
- package/src/checkbox-control/test/index.tsx +2 -1
- package/src/color-picker/index.native.js +7 -4
- package/src/combobox-control/index.js +4 -2
- package/src/confirm-dialog/component.tsx +7 -8
- package/src/custom-gradient-bar/constants.js +2 -2
- package/src/custom-gradient-bar/control-points.js +20 -16
- package/src/custom-gradient-bar/index.js +11 -11
- package/src/custom-gradient-bar/test/utils.js +79 -0
- package/src/custom-gradient-bar/utils.js +6 -18
- package/src/custom-gradient-picker/style.scss +1 -3
- package/src/custom-gradient-picker/utils.js +4 -3
- package/src/custom-select-control/index.js +2 -1
- package/src/custom-select-control/stories/index.js +1 -2
- package/src/date-time/date/index.tsx +2 -2
- package/src/date-time/date/style.scss +10 -0
- package/src/date-time/date/test/index.tsx +1 -1
- package/src/date-time/date-time/index.tsx +6 -8
- package/src/date-time/stories/date-time.tsx +4 -6
- package/src/date-time/stories/date.tsx +2 -3
- package/src/date-time/time/test/index.tsx +12 -12
- package/src/dimension-control/index.js +1 -2
- package/src/divider/styles.ts +2 -3
- package/src/draggable/index.js +3 -3
- package/src/draggable/index.native.js +12 -4
- package/src/drop-zone/provider.js +1 -2
- package/src/dropdown/index.js +2 -2
- package/src/dropdown-menu/index.js +11 -1
- package/src/dropdown-menu/index.native.js +11 -1
- package/src/external-link/README.md +18 -0
- package/src/external-link/{index.js → index.tsx} +26 -6
- package/src/external-link/stories/index.tsx +36 -0
- package/src/external-link/styles/{external-link-styles.js → external-link-styles.ts} +0 -0
- package/src/external-link/types.ts +15 -0
- package/src/flex/flex/hook.js +4 -1
- package/src/focal-point-picker/controls.js +1 -5
- package/src/focal-point-picker/index.js +2 -8
- package/src/focal-point-picker/media.js +2 -5
- package/src/font-size-picker/index.js +3 -1
- package/src/form-toggle/index.js +2 -1
- package/src/form-toggle/test/index.js +1 -2
- package/src/form-token-field/index.tsx +694 -0
- package/src/form-token-field/stories/index.tsx +103 -0
- package/src/form-token-field/style.scss +2 -1
- package/src/form-token-field/{suggestions-list.js → suggestions-list.tsx} +45 -29
- package/src/form-token-field/test/index.js +64 -31
- package/src/form-token-field/test/lib/{token-field-wrapper.js → token-field-wrapper.tsx} +24 -9
- package/src/form-token-field/token-input.tsx +76 -0
- package/src/form-token-field/{token.js → token.tsx} +4 -2
- package/src/form-token-field/types.ts +178 -0
- package/src/gradient-picker/index.js +4 -3
- package/src/heading/hook.ts +5 -4
- package/src/higher-order/navigate-regions/index.js +7 -5
- package/src/higher-order/with-filters/test/index.js +43 -36
- package/src/higher-order/with-focus-return/index.js +14 -13
- package/src/higher-order/with-spoken-messages/index.js +8 -7
- package/src/higher-order/with-spoken-messages/test/index.js +1 -1
- package/src/icon/index.tsx +2 -2
- package/src/input-control/index.tsx +2 -1
- package/src/input-control/input-field.tsx +2 -1
- package/src/input-control/reducer/reducer.ts +23 -21
- package/src/input-control/utils.ts +1 -1
- package/src/item-group/stories/index.js +2 -1
- package/src/menu-item/test/index.js +2 -1
- package/src/menu-items-choice/index.js +2 -5
- package/src/mobile/bottom-sheet/bottom-sheet-context.native.js +2 -4
- package/src/mobile/bottom-sheet/cell.native.js +2 -3
- package/src/mobile/bottom-sheet/cycle-picker-cell.native.js +3 -5
- package/src/mobile/bottom-sheet/index.native.js +14 -17
- package/src/mobile/bottom-sheet/picker-cell.native.js +2 -7
- package/src/mobile/bottom-sheet/stepper-cell/index.native.js +4 -6
- package/src/mobile/color-settings/index.native.js +2 -4
- package/src/mobile/global-styles-context/index.native.js +8 -7
- package/src/mobile/gradient/index.native.js +12 -9
- package/src/mobile/gradient/test/index.native.js +1 -3
- package/src/mobile/html-text-input/index.native.js +2 -3
- package/src/mobile/inserter-button/index.native.js +2 -6
- package/src/mobile/link-settings/image-link-destinations-screen.native.js +6 -2
- package/src/mobile/media-edit/index.native.js +2 -3
- package/src/mobile/segmented-control/index.native.js +4 -5
- package/src/mobile/utils/test/index.native.js +3 -12
- package/src/modal/index.js +1 -1
- package/src/navigable-container/container.js +3 -2
- package/src/navigable-container/test/menu.js +1 -2
- package/src/navigable-container/test/tabbable.js +1 -2
- package/src/navigation/context.js +2 -5
- package/src/navigation/index.js +2 -1
- package/src/navigation/item/index.js +2 -1
- package/src/navigation/stories/controlled-state.js +1 -1
- package/src/navigation/stories/more-examples.js +2 -3
- package/src/navigation/test/index.js +252 -52
- package/src/navigator/navigator-back-button/hook.ts +14 -12
- package/src/navigator/navigator-button/hook.ts +14 -13
- package/src/navigator/navigator-provider/component.tsx +2 -6
- package/src/navigator/navigator-screen/component.tsx +3 -3
- package/src/notice/index.js +2 -1
- package/src/notice/list.js +3 -1
- package/src/panel/body.js +2 -1
- package/src/placeholder/README.md +7 -6
- package/src/placeholder/index.js +27 -10
- package/src/placeholder/style.scss +23 -0
- package/src/radio-control/README.md +17 -23
- package/src/radio-control/index.tsx +107 -0
- package/src/radio-control/stories/index.tsx +72 -0
- package/src/radio-control/types.ts +32 -0
- package/src/range-control/index.js +4 -2
- package/src/range-control/input-range.js +2 -5
- package/src/range-control/utils.js +3 -1
- package/src/resizable-box/resize-tooltip/index.tsx +2 -1
- package/src/resizable-box/resize-tooltip/utils.ts +1 -5
- package/src/responsive-wrapper/index.js +2 -4
- package/src/sandbox/test/index.js +4 -6
- package/src/select-control/index.tsx +3 -1
- package/src/select-control/stories/index.tsx +3 -4
- package/src/slot-fill/fill.js +1 -5
- package/src/slot-fill/slot.js +12 -2
- package/src/snackbar/index.js +1 -1
- package/src/snackbar/list.js +2 -1
- package/src/tab-panel/index.js +3 -1
- package/src/text/hook.js +4 -1
- package/src/text/utils.js +2 -3
- package/src/text-control/stories/index.tsx +4 -6
- package/src/toggle-control/index.js +1 -2
- package/src/toggle-control/index.native.js +2 -6
- package/src/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.tsx +2 -4
- package/src/toolbar/index.js +1 -2
- package/src/tools-panel/tools-panel/hook.ts +2 -4
- package/src/tools-panel/tools-panel-header/hook.ts +2 -5
- package/src/tooltip/index.js +1 -0
- package/src/tree-grid/roving-tab-index-item.js +2 -4
- package/src/tree-grid/test/index.js +2 -3
- package/src/tree-select/README.md +2 -2
- package/src/tree-select/index.tsx +99 -0
- package/src/tree-select/stories/index.tsx +80 -0
- package/src/tree-select/types.ts +35 -0
- package/src/ui/context/wordpress-component.ts +4 -5
- package/src/ui/form-group/form-group-content.js +4 -4
- package/src/unit-control/index.tsx +7 -9
- package/src/unit-control/stories/index.tsx +8 -12
- package/src/unit-control/test/index.tsx +4 -7
- package/src/utils/hooks/stories/use-cx.js +8 -7
- package/src/utils/hooks/test/use-controlled-state.js +2 -1
- package/src/utils/unit-values.ts +2 -1
- package/src/utils/values.js +2 -3
- package/src/z-stack/README.md +14 -3
- package/src/z-stack/component.tsx +24 -29
- package/src/z-stack/stories/index.tsx +76 -0
- package/src/z-stack/types.ts +33 -0
- package/tsconfig.json +5 -0
- package/tsconfig.tsbuildinfo +1 -1
- package/src/external-link/stories/index.js +0 -23
- package/src/form-token-field/index.js +0 -725
- package/src/form-token-field/stories/index.js +0 -102
- package/src/form-token-field/token-input.js +0 -81
- package/src/radio-control/index.js +0 -69
- package/src/radio-control/stories/index.js +0 -41
- package/src/tree-select/index.js +0 -48
- package/src/tree-select/stories/index.js +0 -80
- package/src/z-stack/stories/index.js +0 -70
|
@@ -1,17 +1,19 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
1
2
|
import { createElement } from "@wordpress/element";
|
|
2
3
|
|
|
3
4
|
/**
|
|
4
5
|
* External dependencies
|
|
5
6
|
*/
|
|
6
|
-
import { last,
|
|
7
|
+
import { last, clone, uniq, map, difference, identity, some } from 'lodash';
|
|
7
8
|
import classnames from 'classnames';
|
|
9
|
+
|
|
8
10
|
/**
|
|
9
11
|
* WordPress dependencies
|
|
10
12
|
*/
|
|
11
|
-
|
|
13
|
+
import { useEffect, useRef, useState } from '@wordpress/element';
|
|
12
14
|
import { __, _n, sprintf } from '@wordpress/i18n';
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
+
import { useDebounce, useInstanceId, usePrevious } from '@wordpress/compose';
|
|
16
|
+
import { speak } from '@wordpress/a11y';
|
|
15
17
|
import { BACKSPACE, ENTER, UP, DOWN, LEFT, RIGHT, SPACE, DELETE, ESCAPE } from '@wordpress/keycodes';
|
|
16
18
|
import isShallowEqual from '@wordpress/is-shallow-equal';
|
|
17
19
|
/**
|
|
@@ -21,155 +23,174 @@ import isShallowEqual from '@wordpress/is-shallow-equal';
|
|
|
21
23
|
import Token from './token';
|
|
22
24
|
import TokenInput from './token-input';
|
|
23
25
|
import SuggestionsList from './suggestions-list';
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* A `FormTokenField` is a field similar to the tags and categories fields in the interim editor chrome,
|
|
29
|
+
* or the "to" field in Mail on OS X. Tokens can be entered by typing them or selecting them from a list of suggested tokens.
|
|
30
|
+
*
|
|
31
|
+
* Up to one hundred suggestions that match what the user has typed so far will be shown from which the user can pick from (auto-complete).
|
|
32
|
+
* Tokens are separated by the "," character. Suggestions can be selected with the up or down arrows and added with the tab or enter key.
|
|
33
|
+
*
|
|
34
|
+
* The `value` property is handled in a manner similar to controlled form components.
|
|
35
|
+
* See [Forms](http://facebook.github.io/react/docs/forms.html) in the React Documentation for more information.
|
|
36
|
+
*/
|
|
37
|
+
export function FormTokenField(props) {
|
|
38
|
+
const {
|
|
39
|
+
autoCapitalize,
|
|
40
|
+
autoComplete,
|
|
41
|
+
maxLength,
|
|
42
|
+
placeholder,
|
|
43
|
+
label = __('Add item'),
|
|
44
|
+
className,
|
|
45
|
+
suggestions = [],
|
|
46
|
+
maxSuggestions = 100,
|
|
47
|
+
value = [],
|
|
48
|
+
displayTransform = identity,
|
|
49
|
+
saveTransform = token => token.trim(),
|
|
50
|
+
onChange = () => {},
|
|
51
|
+
onInputChange = () => {},
|
|
52
|
+
onFocus = undefined,
|
|
53
|
+
isBorderless = false,
|
|
54
|
+
disabled = false,
|
|
55
|
+
tokenizeOnSpace = false,
|
|
56
|
+
messages = {
|
|
57
|
+
added: __('Item added.'),
|
|
58
|
+
removed: __('Item removed.'),
|
|
59
|
+
remove: __('Remove item'),
|
|
60
|
+
__experimentalInvalid: __('Invalid item')
|
|
61
|
+
},
|
|
62
|
+
__experimentalExpandOnFocus = false,
|
|
63
|
+
__experimentalValidateInput = () => true,
|
|
64
|
+
__experimentalShowHowTo = true
|
|
65
|
+
} = props;
|
|
66
|
+
const instanceId = useInstanceId(FormTokenField); // We reset to these initial values again in the onBlur
|
|
67
|
+
|
|
68
|
+
const [incompleteTokenValue, setIncompleteTokenValue] = useState('');
|
|
69
|
+
const [inputOffsetFromEnd, setInputOffsetFromEnd] = useState(0);
|
|
70
|
+
const [isActive, setIsActive] = useState(false);
|
|
71
|
+
const [isExpanded, setIsExpanded] = useState(false);
|
|
72
|
+
const [selectedSuggestionIndex, setSelectedSuggestionIndex] = useState(-1);
|
|
73
|
+
const [selectedSuggestionScroll, setSelectedSuggestionScroll] = useState(false);
|
|
74
|
+
const prevSuggestions = usePrevious(suggestions);
|
|
75
|
+
const prevValue = usePrevious(value);
|
|
76
|
+
const input = useRef(null);
|
|
77
|
+
const tokensAndInput = useRef(null);
|
|
78
|
+
const debouncedSpeak = useDebounce(speak, 500);
|
|
79
|
+
useEffect(() => {
|
|
57
80
|
// Make sure to focus the input when the isActive state is true.
|
|
58
|
-
if (
|
|
59
|
-
|
|
81
|
+
if (isActive && !hasFocus()) {
|
|
82
|
+
focus();
|
|
60
83
|
}
|
|
84
|
+
}, [isActive]);
|
|
85
|
+
useEffect(() => {
|
|
86
|
+
const suggestionsDidUpdate = !isShallowEqual(suggestions, prevSuggestions || []);
|
|
61
87
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
const suggestionsDidUpdate = !isShallowEqual(suggestions, prevProps.suggestions);
|
|
88
|
+
if (suggestionsDidUpdate || value !== prevValue) {
|
|
89
|
+
updateSuggestions(suggestionsDidUpdate);
|
|
90
|
+
} // TODO: updateSuggestions() should first be refactored so its actual deps are clearer.
|
|
91
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
67
92
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
93
|
+
}, [suggestions, prevSuggestions, value, prevValue]);
|
|
94
|
+
useEffect(() => {
|
|
95
|
+
updateSuggestions(); // eslint-disable-next-line react-hooks/exhaustive-deps
|
|
96
|
+
}, [incompleteTokenValue]);
|
|
97
|
+
|
|
98
|
+
if (disabled && isActive) {
|
|
99
|
+
setIsActive(false);
|
|
100
|
+
setIncompleteTokenValue('');
|
|
71
101
|
}
|
|
72
102
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
return null;
|
|
76
|
-
}
|
|
103
|
+
function focus() {
|
|
104
|
+
var _input$current;
|
|
77
105
|
|
|
78
|
-
|
|
79
|
-
isActive: false,
|
|
80
|
-
incompleteTokenValue: ''
|
|
81
|
-
};
|
|
106
|
+
(_input$current = input.current) === null || _input$current === void 0 ? void 0 : _input$current.focus();
|
|
82
107
|
}
|
|
83
108
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
}
|
|
109
|
+
function hasFocus() {
|
|
110
|
+
var _input$current2;
|
|
87
111
|
|
|
88
|
-
|
|
89
|
-
this.tokensAndInput = ref;
|
|
112
|
+
return input.current === ((_input$current2 = input.current) === null || _input$current2 === void 0 ? void 0 : _input$current2.ownerDocument.activeElement);
|
|
90
113
|
}
|
|
91
114
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
if (this.input.hasFocus() || event.target === this.tokensAndInput) {
|
|
98
|
-
this.setState({
|
|
99
|
-
isActive: true,
|
|
100
|
-
isExpanded: !!__experimentalExpandOnFocus || this.state.isExpanded
|
|
101
|
-
});
|
|
115
|
+
function onFocusHandler(event) {
|
|
116
|
+
// If focus is on the input or on the container, set the isActive state to true.
|
|
117
|
+
if (hasFocus() || event.target === tokensAndInput.current) {
|
|
118
|
+
setIsActive(true);
|
|
119
|
+
setIsExpanded(__experimentalExpandOnFocus || isExpanded);
|
|
102
120
|
} else {
|
|
103
121
|
/*
|
|
104
122
|
* Otherwise, focus is on one of the token "remove" buttons and we
|
|
105
123
|
* set the isActive state to false to prevent the input to be
|
|
106
124
|
* re-focused, see componentDidUpdate().
|
|
107
125
|
*/
|
|
108
|
-
|
|
109
|
-
isActive: false
|
|
110
|
-
});
|
|
126
|
+
setIsActive(false);
|
|
111
127
|
}
|
|
112
128
|
|
|
113
|
-
if ('function' === typeof
|
|
114
|
-
|
|
129
|
+
if ('function' === typeof onFocus) {
|
|
130
|
+
onFocus(event);
|
|
115
131
|
}
|
|
116
132
|
}
|
|
117
133
|
|
|
118
|
-
onBlur() {
|
|
119
|
-
if (
|
|
120
|
-
|
|
121
|
-
isActive: false
|
|
122
|
-
});
|
|
134
|
+
function onBlur() {
|
|
135
|
+
if (inputHasValidValue()) {
|
|
136
|
+
setIsActive(false);
|
|
123
137
|
} else {
|
|
124
|
-
|
|
138
|
+
// Reset to initial state
|
|
139
|
+
setIncompleteTokenValue('');
|
|
140
|
+
setInputOffsetFromEnd(0);
|
|
141
|
+
setIsActive(false);
|
|
142
|
+
setIsExpanded(false);
|
|
143
|
+
setSelectedSuggestionIndex(-1);
|
|
144
|
+
setSelectedSuggestionScroll(false);
|
|
125
145
|
}
|
|
126
146
|
}
|
|
127
147
|
|
|
128
|
-
onKeyDown(event) {
|
|
148
|
+
function onKeyDown(event) {
|
|
129
149
|
let preventDefault = false;
|
|
130
150
|
|
|
131
151
|
if (event.defaultPrevented) {
|
|
132
152
|
return;
|
|
133
|
-
}
|
|
153
|
+
} // TODO: replace to event.code;
|
|
154
|
+
|
|
134
155
|
|
|
135
156
|
switch (event.keyCode) {
|
|
136
157
|
case BACKSPACE:
|
|
137
|
-
preventDefault =
|
|
158
|
+
preventDefault = handleDeleteKey(deleteTokenBeforeInput);
|
|
138
159
|
break;
|
|
139
160
|
|
|
140
161
|
case ENTER:
|
|
141
|
-
preventDefault =
|
|
162
|
+
preventDefault = addCurrentToken();
|
|
142
163
|
break;
|
|
143
164
|
|
|
144
165
|
case LEFT:
|
|
145
|
-
preventDefault =
|
|
166
|
+
preventDefault = handleLeftArrowKey();
|
|
146
167
|
break;
|
|
147
168
|
|
|
148
169
|
case UP:
|
|
149
|
-
preventDefault =
|
|
170
|
+
preventDefault = handleUpArrowKey();
|
|
150
171
|
break;
|
|
151
172
|
|
|
152
173
|
case RIGHT:
|
|
153
|
-
preventDefault =
|
|
174
|
+
preventDefault = handleRightArrowKey();
|
|
154
175
|
break;
|
|
155
176
|
|
|
156
177
|
case DOWN:
|
|
157
|
-
preventDefault =
|
|
178
|
+
preventDefault = handleDownArrowKey();
|
|
158
179
|
break;
|
|
159
180
|
|
|
160
181
|
case DELETE:
|
|
161
|
-
preventDefault =
|
|
182
|
+
preventDefault = handleDeleteKey(deleteTokenAfterInput);
|
|
162
183
|
break;
|
|
163
184
|
|
|
164
185
|
case SPACE:
|
|
165
|
-
if (
|
|
166
|
-
preventDefault =
|
|
186
|
+
if (tokenizeOnSpace) {
|
|
187
|
+
preventDefault = addCurrentToken();
|
|
167
188
|
}
|
|
168
189
|
|
|
169
190
|
break;
|
|
170
191
|
|
|
171
192
|
case ESCAPE:
|
|
172
|
-
preventDefault =
|
|
193
|
+
preventDefault = handleEscapeKey(event);
|
|
173
194
|
break;
|
|
174
195
|
|
|
175
196
|
default:
|
|
@@ -181,13 +202,13 @@ class FormTokenField extends Component {
|
|
|
181
202
|
}
|
|
182
203
|
}
|
|
183
204
|
|
|
184
|
-
onKeyPress(event) {
|
|
185
|
-
let preventDefault = false;
|
|
205
|
+
function onKeyPress(event) {
|
|
206
|
+
let preventDefault = false; // TODO: replace to event.code;
|
|
186
207
|
|
|
187
208
|
switch (event.charCode) {
|
|
188
209
|
case 44:
|
|
189
210
|
// Comma.
|
|
190
|
-
preventDefault =
|
|
211
|
+
preventDefault = handleCommaKey();
|
|
191
212
|
break;
|
|
192
213
|
|
|
193
214
|
default:
|
|
@@ -199,212 +220,201 @@ class FormTokenField extends Component {
|
|
|
199
220
|
}
|
|
200
221
|
}
|
|
201
222
|
|
|
202
|
-
onContainerTouched(event) {
|
|
223
|
+
function onContainerTouched(event) {
|
|
203
224
|
// Prevent clicking/touching the tokensAndInput container from blurring
|
|
204
225
|
// the input and adding the current token.
|
|
205
|
-
if (event.target ===
|
|
226
|
+
if (event.target === tokensAndInput.current && isActive) {
|
|
206
227
|
event.preventDefault();
|
|
207
228
|
}
|
|
208
229
|
}
|
|
209
230
|
|
|
210
|
-
onTokenClickRemove(event) {
|
|
211
|
-
|
|
212
|
-
|
|
231
|
+
function onTokenClickRemove(event) {
|
|
232
|
+
deleteToken(event.value);
|
|
233
|
+
focus();
|
|
213
234
|
}
|
|
214
235
|
|
|
215
|
-
onSuggestionHovered(suggestion) {
|
|
216
|
-
const index =
|
|
236
|
+
function onSuggestionHovered(suggestion) {
|
|
237
|
+
const index = getMatchingSuggestions().indexOf(suggestion);
|
|
217
238
|
|
|
218
239
|
if (index >= 0) {
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
selectedSuggestionScroll: false
|
|
222
|
-
});
|
|
240
|
+
setSelectedSuggestionIndex(index);
|
|
241
|
+
setSelectedSuggestionScroll(false);
|
|
223
242
|
}
|
|
224
243
|
}
|
|
225
244
|
|
|
226
|
-
onSuggestionSelected(suggestion) {
|
|
227
|
-
|
|
245
|
+
function onSuggestionSelected(suggestion) {
|
|
246
|
+
addNewToken(suggestion);
|
|
228
247
|
}
|
|
229
248
|
|
|
230
|
-
|
|
249
|
+
function onInputChangeHandler(event) {
|
|
231
250
|
const text = event.value;
|
|
232
|
-
const separator =
|
|
251
|
+
const separator = tokenizeOnSpace ? /[ ,\t]+/ : /[,\t]+/;
|
|
233
252
|
const items = text.split(separator);
|
|
234
253
|
const tokenValue = last(items) || '';
|
|
235
254
|
|
|
236
255
|
if (items.length > 1) {
|
|
237
|
-
|
|
256
|
+
addNewTokens(items.slice(0, -1));
|
|
238
257
|
}
|
|
239
258
|
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
}, this.updateSuggestions);
|
|
243
|
-
this.props.onInputChange(tokenValue);
|
|
259
|
+
setIncompleteTokenValue(tokenValue);
|
|
260
|
+
onInputChange(tokenValue);
|
|
244
261
|
}
|
|
245
262
|
|
|
246
|
-
handleDeleteKey(
|
|
263
|
+
function handleDeleteKey(_deleteToken) {
|
|
247
264
|
let preventDefault = false;
|
|
248
265
|
|
|
249
|
-
if (
|
|
250
|
-
|
|
266
|
+
if (hasFocus() && isInputEmpty()) {
|
|
267
|
+
_deleteToken();
|
|
268
|
+
|
|
251
269
|
preventDefault = true;
|
|
252
270
|
}
|
|
253
271
|
|
|
254
272
|
return preventDefault;
|
|
255
273
|
}
|
|
256
274
|
|
|
257
|
-
handleLeftArrowKey() {
|
|
275
|
+
function handleLeftArrowKey() {
|
|
258
276
|
let preventDefault = false;
|
|
259
277
|
|
|
260
|
-
if (
|
|
261
|
-
|
|
278
|
+
if (isInputEmpty()) {
|
|
279
|
+
moveInputBeforePreviousToken();
|
|
262
280
|
preventDefault = true;
|
|
263
281
|
}
|
|
264
282
|
|
|
265
283
|
return preventDefault;
|
|
266
284
|
}
|
|
267
285
|
|
|
268
|
-
handleRightArrowKey() {
|
|
286
|
+
function handleRightArrowKey() {
|
|
269
287
|
let preventDefault = false;
|
|
270
288
|
|
|
271
|
-
if (
|
|
272
|
-
|
|
289
|
+
if (isInputEmpty()) {
|
|
290
|
+
moveInputAfterNextToken();
|
|
273
291
|
preventDefault = true;
|
|
274
292
|
}
|
|
275
293
|
|
|
276
294
|
return preventDefault;
|
|
277
295
|
}
|
|
278
296
|
|
|
279
|
-
handleUpArrowKey() {
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
297
|
+
function handleUpArrowKey() {
|
|
298
|
+
setSelectedSuggestionIndex(index => {
|
|
299
|
+
return (index === 0 ? getMatchingSuggestions(incompleteTokenValue, suggestions, value, maxSuggestions, saveTransform).length : index) - 1;
|
|
300
|
+
});
|
|
301
|
+
setSelectedSuggestionScroll(true);
|
|
284
302
|
return true; // PreventDefault.
|
|
285
303
|
}
|
|
286
304
|
|
|
287
|
-
handleDownArrowKey() {
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
305
|
+
function handleDownArrowKey() {
|
|
306
|
+
setSelectedSuggestionIndex(index => {
|
|
307
|
+
return (index + 1) % getMatchingSuggestions(incompleteTokenValue, suggestions, value, maxSuggestions, saveTransform).length;
|
|
308
|
+
});
|
|
309
|
+
setSelectedSuggestionScroll(true);
|
|
292
310
|
return true; // PreventDefault.
|
|
293
311
|
}
|
|
294
312
|
|
|
295
|
-
handleEscapeKey(event) {
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
}
|
|
313
|
+
function handleEscapeKey(event) {
|
|
314
|
+
if (event.target instanceof HTMLInputElement) {
|
|
315
|
+
setIncompleteTokenValue(event.target.value);
|
|
316
|
+
setIsExpanded(false);
|
|
317
|
+
setSelectedSuggestionIndex(-1);
|
|
318
|
+
setSelectedSuggestionScroll(false);
|
|
319
|
+
}
|
|
320
|
+
|
|
302
321
|
return true; // PreventDefault.
|
|
303
322
|
}
|
|
304
323
|
|
|
305
|
-
handleCommaKey() {
|
|
306
|
-
if (
|
|
307
|
-
|
|
324
|
+
function handleCommaKey() {
|
|
325
|
+
if (inputHasValidValue()) {
|
|
326
|
+
addNewToken(incompleteTokenValue);
|
|
308
327
|
}
|
|
309
328
|
|
|
310
329
|
return true; // PreventDefault.
|
|
311
330
|
}
|
|
312
331
|
|
|
313
|
-
moveInputToIndex(index) {
|
|
314
|
-
|
|
315
|
-
inputOffsetFromEnd: props.value.length - Math.max(index, -1) - 1
|
|
316
|
-
}));
|
|
332
|
+
function moveInputToIndex(index) {
|
|
333
|
+
setInputOffsetFromEnd(value.length - Math.max(index, -1) - 1);
|
|
317
334
|
}
|
|
318
335
|
|
|
319
|
-
moveInputBeforePreviousToken() {
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
})
|
|
336
|
+
function moveInputBeforePreviousToken() {
|
|
337
|
+
setInputOffsetFromEnd(prevInputOffsetFromEnd => {
|
|
338
|
+
return Math.min(prevInputOffsetFromEnd + 1, value.length);
|
|
339
|
+
});
|
|
323
340
|
}
|
|
324
341
|
|
|
325
|
-
moveInputAfterNextToken() {
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
})
|
|
342
|
+
function moveInputAfterNextToken() {
|
|
343
|
+
setInputOffsetFromEnd(prevInputOffsetFromEnd => {
|
|
344
|
+
return Math.max(prevInputOffsetFromEnd - 1, 0);
|
|
345
|
+
});
|
|
329
346
|
}
|
|
330
347
|
|
|
331
|
-
deleteTokenBeforeInput() {
|
|
332
|
-
const index =
|
|
348
|
+
function deleteTokenBeforeInput() {
|
|
349
|
+
const index = getIndexOfInput() - 1;
|
|
333
350
|
|
|
334
351
|
if (index > -1) {
|
|
335
|
-
|
|
352
|
+
deleteToken(value[index]);
|
|
336
353
|
}
|
|
337
354
|
}
|
|
338
355
|
|
|
339
|
-
deleteTokenAfterInput() {
|
|
340
|
-
const index =
|
|
356
|
+
function deleteTokenAfterInput() {
|
|
357
|
+
const index = getIndexOfInput();
|
|
341
358
|
|
|
342
|
-
if (index <
|
|
343
|
-
|
|
359
|
+
if (index < value.length) {
|
|
360
|
+
deleteToken(value[index]); // Update input offset since it's the offset from the last token.
|
|
344
361
|
|
|
345
|
-
|
|
362
|
+
moveInputToIndex(index);
|
|
346
363
|
}
|
|
347
364
|
}
|
|
348
365
|
|
|
349
|
-
addCurrentToken() {
|
|
366
|
+
function addCurrentToken() {
|
|
350
367
|
let preventDefault = false;
|
|
351
|
-
const selectedSuggestion =
|
|
368
|
+
const selectedSuggestion = getSelectedSuggestion();
|
|
352
369
|
|
|
353
370
|
if (selectedSuggestion) {
|
|
354
|
-
|
|
371
|
+
addNewToken(selectedSuggestion);
|
|
355
372
|
preventDefault = true;
|
|
356
|
-
} else if (
|
|
357
|
-
|
|
373
|
+
} else if (inputHasValidValue()) {
|
|
374
|
+
addNewToken(incompleteTokenValue);
|
|
358
375
|
preventDefault = true;
|
|
359
376
|
}
|
|
360
377
|
|
|
361
378
|
return preventDefault;
|
|
362
379
|
}
|
|
363
380
|
|
|
364
|
-
addNewTokens(tokens) {
|
|
365
|
-
const tokensToAdd = uniq(tokens.map(
|
|
381
|
+
function addNewTokens(tokens) {
|
|
382
|
+
const tokensToAdd = uniq(tokens.map(saveTransform).filter(Boolean).filter(token => !valueContainsToken(token)));
|
|
366
383
|
|
|
367
384
|
if (tokensToAdd.length > 0) {
|
|
368
|
-
const newValue = clone(
|
|
369
|
-
newValue.splice
|
|
370
|
-
|
|
385
|
+
const newValue = clone(value);
|
|
386
|
+
newValue.splice(getIndexOfInput(), 0, ...tokensToAdd);
|
|
387
|
+
onChange(newValue);
|
|
371
388
|
}
|
|
372
389
|
}
|
|
373
390
|
|
|
374
|
-
addNewToken(token) {
|
|
375
|
-
const {
|
|
376
|
-
__experimentalExpandOnFocus,
|
|
377
|
-
__experimentalValidateInput
|
|
378
|
-
} = this.props;
|
|
379
|
-
|
|
391
|
+
function addNewToken(token) {
|
|
380
392
|
if (!__experimentalValidateInput(token)) {
|
|
381
|
-
|
|
393
|
+
speak(messages.__experimentalInvalid, 'assertive');
|
|
382
394
|
return;
|
|
383
395
|
}
|
|
384
396
|
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
isExpanded: !__experimentalExpandOnFocus
|
|
392
|
-
});
|
|
397
|
+
addNewTokens([token]);
|
|
398
|
+
speak(messages.added, 'assertive');
|
|
399
|
+
setIncompleteTokenValue('');
|
|
400
|
+
setSelectedSuggestionIndex(-1);
|
|
401
|
+
setSelectedSuggestionScroll(false);
|
|
402
|
+
setIsExpanded(!__experimentalExpandOnFocus);
|
|
393
403
|
|
|
394
|
-
if (
|
|
395
|
-
|
|
404
|
+
if (isActive) {
|
|
405
|
+
focus();
|
|
396
406
|
}
|
|
397
407
|
}
|
|
398
408
|
|
|
399
|
-
deleteToken(token) {
|
|
400
|
-
const newTokens =
|
|
401
|
-
return
|
|
409
|
+
function deleteToken(token) {
|
|
410
|
+
const newTokens = value.filter(item => {
|
|
411
|
+
return getTokenValue(item) !== getTokenValue(token);
|
|
402
412
|
});
|
|
403
|
-
|
|
404
|
-
|
|
413
|
+
onChange(newTokens);
|
|
414
|
+
speak(messages.removed, 'assertive');
|
|
405
415
|
}
|
|
406
416
|
|
|
407
|
-
getTokenValue(token) {
|
|
417
|
+
function getTokenValue(token) {
|
|
408
418
|
if ('object' === typeof token) {
|
|
409
419
|
return token.value;
|
|
410
420
|
}
|
|
@@ -412,24 +422,39 @@ class FormTokenField extends Component {
|
|
|
412
422
|
return token;
|
|
413
423
|
}
|
|
414
424
|
|
|
415
|
-
getMatchingSuggestions() {
|
|
416
|
-
let searchValue = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] :
|
|
417
|
-
|
|
418
|
-
let
|
|
419
|
-
|
|
420
|
-
let
|
|
421
|
-
|
|
425
|
+
function getMatchingSuggestions() {
|
|
426
|
+
let searchValue = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : incompleteTokenValue;
|
|
427
|
+
|
|
428
|
+
let _suggestions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : suggestions;
|
|
429
|
+
|
|
430
|
+
let _value = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : value;
|
|
431
|
+
|
|
432
|
+
let _maxSuggestions = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : maxSuggestions;
|
|
433
|
+
|
|
434
|
+
let _saveTransform = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : saveTransform;
|
|
435
|
+
|
|
436
|
+
let match = _saveTransform(searchValue);
|
|
437
|
+
|
|
422
438
|
const startsWithMatch = [];
|
|
423
439
|
const containsMatch = [];
|
|
424
440
|
|
|
441
|
+
const normalizedValue = _value.map(item => {
|
|
442
|
+
if (typeof item === 'string') {
|
|
443
|
+
return item;
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
return item.value;
|
|
447
|
+
});
|
|
448
|
+
|
|
425
449
|
if (match.length === 0) {
|
|
426
|
-
|
|
450
|
+
_suggestions = difference(_suggestions, normalizedValue);
|
|
427
451
|
} else {
|
|
428
452
|
match = match.toLocaleLowerCase();
|
|
429
|
-
|
|
453
|
+
|
|
454
|
+
_suggestions.forEach(suggestion => {
|
|
430
455
|
const index = suggestion.toLocaleLowerCase().indexOf(match);
|
|
431
456
|
|
|
432
|
-
if (
|
|
457
|
+
if (normalizedValue.indexOf(suggestion) === -1) {
|
|
433
458
|
if (index === 0) {
|
|
434
459
|
startsWithMatch.push(suggestion);
|
|
435
460
|
} else if (index > 0) {
|
|
@@ -437,62 +462,52 @@ class FormTokenField extends Component {
|
|
|
437
462
|
}
|
|
438
463
|
}
|
|
439
464
|
});
|
|
440
|
-
|
|
465
|
+
|
|
466
|
+
_suggestions = startsWithMatch.concat(containsMatch);
|
|
441
467
|
}
|
|
442
468
|
|
|
443
|
-
return
|
|
469
|
+
return _suggestions.slice(0, _maxSuggestions);
|
|
444
470
|
}
|
|
445
471
|
|
|
446
|
-
getSelectedSuggestion() {
|
|
447
|
-
if (
|
|
448
|
-
return
|
|
472
|
+
function getSelectedSuggestion() {
|
|
473
|
+
if (selectedSuggestionIndex !== -1) {
|
|
474
|
+
return getMatchingSuggestions()[selectedSuggestionIndex];
|
|
449
475
|
}
|
|
476
|
+
|
|
477
|
+
return undefined;
|
|
450
478
|
}
|
|
451
479
|
|
|
452
|
-
valueContainsToken(token) {
|
|
453
|
-
return some(
|
|
454
|
-
return
|
|
480
|
+
function valueContainsToken(token) {
|
|
481
|
+
return some(value, item => {
|
|
482
|
+
return getTokenValue(token) === getTokenValue(item);
|
|
455
483
|
});
|
|
456
484
|
}
|
|
457
485
|
|
|
458
|
-
getIndexOfInput() {
|
|
459
|
-
return
|
|
486
|
+
function getIndexOfInput() {
|
|
487
|
+
return value.length - inputOffsetFromEnd;
|
|
460
488
|
}
|
|
461
489
|
|
|
462
|
-
isInputEmpty() {
|
|
463
|
-
return
|
|
490
|
+
function isInputEmpty() {
|
|
491
|
+
return incompleteTokenValue.length === 0;
|
|
464
492
|
}
|
|
465
493
|
|
|
466
|
-
inputHasValidValue() {
|
|
467
|
-
return
|
|
494
|
+
function inputHasValidValue() {
|
|
495
|
+
return saveTransform(incompleteTokenValue).length > 0;
|
|
468
496
|
}
|
|
469
497
|
|
|
470
|
-
updateSuggestions() {
|
|
498
|
+
function updateSuggestions() {
|
|
471
499
|
let resetSelectedSuggestion = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
|
|
472
|
-
const {
|
|
473
|
-
__experimentalExpandOnFocus
|
|
474
|
-
} = this.props;
|
|
475
|
-
const {
|
|
476
|
-
incompleteTokenValue
|
|
477
|
-
} = this.state;
|
|
478
500
|
const inputHasMinimumChars = incompleteTokenValue.trim().length > 1;
|
|
479
|
-
const matchingSuggestions =
|
|
501
|
+
const matchingSuggestions = getMatchingSuggestions(incompleteTokenValue);
|
|
480
502
|
const hasMatchingSuggestions = matchingSuggestions.length > 0;
|
|
481
|
-
|
|
482
|
-
isExpanded: __experimentalExpandOnFocus || inputHasMinimumChars && hasMatchingSuggestions
|
|
483
|
-
};
|
|
503
|
+
setIsExpanded(__experimentalExpandOnFocus || inputHasMinimumChars && hasMatchingSuggestions);
|
|
484
504
|
|
|
485
505
|
if (resetSelectedSuggestion) {
|
|
486
|
-
|
|
487
|
-
|
|
506
|
+
setSelectedSuggestionIndex(-1);
|
|
507
|
+
setSelectedSuggestionScroll(false);
|
|
488
508
|
}
|
|
489
509
|
|
|
490
|
-
this.setState(newState);
|
|
491
|
-
|
|
492
510
|
if (inputHasMinimumChars) {
|
|
493
|
-
const {
|
|
494
|
-
debouncedSpeak
|
|
495
|
-
} = this.props;
|
|
496
511
|
const message = hasMatchingSuggestions ? sprintf(
|
|
497
512
|
/* translators: %d: number of results. */
|
|
498
513
|
_n('%d result found, use up and down arrow keys to navigate.', '%d results found, use up and down arrow keys to navigate.', matchingSuggestions.length), matchingSuggestions.length) : __('No results.');
|
|
@@ -500,147 +515,100 @@ class FormTokenField extends Component {
|
|
|
500
515
|
}
|
|
501
516
|
}
|
|
502
517
|
|
|
503
|
-
renderTokensAndInput() {
|
|
504
|
-
const components = map(
|
|
505
|
-
components.splice(
|
|
518
|
+
function renderTokensAndInput() {
|
|
519
|
+
const components = map(value, renderToken);
|
|
520
|
+
components.splice(getIndexOfInput(), 0, renderInput());
|
|
506
521
|
return components;
|
|
507
522
|
}
|
|
508
523
|
|
|
509
|
-
renderToken(token, index, tokens) {
|
|
510
|
-
const
|
|
511
|
-
|
|
524
|
+
function renderToken(token, index, tokens) {
|
|
525
|
+
const _value = getTokenValue(token);
|
|
526
|
+
|
|
527
|
+
const status = typeof token !== 'string' ? token.status : undefined;
|
|
512
528
|
const termPosition = index + 1;
|
|
513
529
|
const termsCount = tokens.length;
|
|
514
530
|
return createElement(Token, {
|
|
515
|
-
key: 'token-' +
|
|
516
|
-
value:
|
|
531
|
+
key: 'token-' + _value,
|
|
532
|
+
value: _value,
|
|
517
533
|
status: status,
|
|
518
|
-
title: token.title,
|
|
519
|
-
displayTransform:
|
|
520
|
-
onClickRemove:
|
|
521
|
-
isBorderless: token.isBorderless ||
|
|
522
|
-
onMouseEnter: token.onMouseEnter,
|
|
523
|
-
onMouseLeave: token.onMouseLeave,
|
|
524
|
-
disabled: 'error' !== status &&
|
|
525
|
-
messages:
|
|
534
|
+
title: typeof token !== 'string' ? token.title : undefined,
|
|
535
|
+
displayTransform: displayTransform,
|
|
536
|
+
onClickRemove: onTokenClickRemove,
|
|
537
|
+
isBorderless: typeof token !== 'string' && token.isBorderless || isBorderless,
|
|
538
|
+
onMouseEnter: typeof token !== 'string' ? token.onMouseEnter : undefined,
|
|
539
|
+
onMouseLeave: typeof token !== 'string' ? token.onMouseLeave : undefined,
|
|
540
|
+
disabled: 'error' !== status && disabled,
|
|
541
|
+
messages: messages,
|
|
526
542
|
termsCount: termsCount,
|
|
527
543
|
termPosition: termPosition
|
|
528
544
|
});
|
|
529
545
|
}
|
|
530
546
|
|
|
531
|
-
renderInput() {
|
|
532
|
-
const {
|
|
533
|
-
autoCapitalize,
|
|
534
|
-
autoComplete,
|
|
535
|
-
maxLength,
|
|
536
|
-
placeholder,
|
|
537
|
-
value,
|
|
538
|
-
instanceId
|
|
539
|
-
} = this.props;
|
|
540
|
-
let props = {
|
|
547
|
+
function renderInput() {
|
|
548
|
+
const inputProps = {
|
|
541
549
|
instanceId,
|
|
542
550
|
autoCapitalize,
|
|
543
551
|
autoComplete,
|
|
544
552
|
placeholder: value.length === 0 ? placeholder : '',
|
|
545
|
-
ref: this.bindInput,
|
|
546
553
|
key: 'input',
|
|
547
|
-
disabled: this.props.disabled,
|
|
548
|
-
value: this.state.incompleteTokenValue,
|
|
549
|
-
onBlur: this.onBlur,
|
|
550
|
-
isExpanded: this.state.isExpanded,
|
|
551
|
-
selectedSuggestionIndex: this.state.selectedSuggestionIndex
|
|
552
|
-
};
|
|
553
|
-
|
|
554
|
-
if (!(maxLength && value.length >= maxLength)) {
|
|
555
|
-
props = { ...props,
|
|
556
|
-
onChange: this.onInputChange
|
|
557
|
-
};
|
|
558
|
-
}
|
|
559
|
-
|
|
560
|
-
return createElement(TokenInput, props);
|
|
561
|
-
}
|
|
562
|
-
|
|
563
|
-
render() {
|
|
564
|
-
const {
|
|
565
554
|
disabled,
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
} = this.props;
|
|
571
|
-
const {
|
|
572
|
-
isExpanded
|
|
573
|
-
} = this.state;
|
|
574
|
-
const classes = classnames(className, 'components-form-token-field__input-container', {
|
|
575
|
-
'is-active': this.state.isActive,
|
|
576
|
-
'is-disabled': disabled
|
|
577
|
-
});
|
|
578
|
-
let tokenFieldProps = {
|
|
579
|
-
className: 'components-form-token-field',
|
|
580
|
-
tabIndex: '-1'
|
|
555
|
+
value: incompleteTokenValue,
|
|
556
|
+
onBlur,
|
|
557
|
+
isExpanded,
|
|
558
|
+
selectedSuggestionIndex
|
|
581
559
|
};
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
onKeyDown: this.onKeyDown,
|
|
587
|
-
onKeyPress: this.onKeyPress,
|
|
588
|
-
onFocus: this.onFocus
|
|
589
|
-
});
|
|
590
|
-
} // Disable reason: There is no appropriate role which describes the
|
|
591
|
-
// input container intended accessible usability.
|
|
592
|
-
// TODO: Refactor click detection to use blur to stop propagation.
|
|
593
|
-
|
|
594
|
-
/* eslint-disable jsx-a11y/no-static-element-interactions */
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
return createElement("div", tokenFieldProps, createElement("label", {
|
|
598
|
-
htmlFor: `components-form-token-input-${instanceId}`,
|
|
599
|
-
className: "components-form-token-field__label"
|
|
600
|
-
}, label), createElement("div", {
|
|
601
|
-
ref: this.bindTokensAndInput,
|
|
602
|
-
className: classes,
|
|
603
|
-
tabIndex: "-1",
|
|
604
|
-
onMouseDown: this.onContainerTouched,
|
|
605
|
-
onTouchStart: this.onContainerTouched
|
|
606
|
-
}, this.renderTokensAndInput(), isExpanded && createElement(SuggestionsList, {
|
|
607
|
-
instanceId: instanceId,
|
|
608
|
-
match: this.props.saveTransform(this.state.incompleteTokenValue),
|
|
609
|
-
displayTransform: this.props.displayTransform,
|
|
610
|
-
suggestions: matchingSuggestions,
|
|
611
|
-
selectedIndex: this.state.selectedSuggestionIndex,
|
|
612
|
-
scrollIntoView: this.state.selectedSuggestionScroll,
|
|
613
|
-
onHover: this.onSuggestionHovered,
|
|
614
|
-
onSelect: this.onSuggestionSelected
|
|
615
|
-
})), __experimentalShowHowTo && createElement("p", {
|
|
616
|
-
id: `components-form-token-suggestions-howto-${instanceId}`,
|
|
617
|
-
className: "components-form-token-field__help"
|
|
618
|
-
}, this.props.tokenizeOnSpace ? __('Separate with commas, spaces, or the Enter key.') : __('Separate with commas or the Enter key.')));
|
|
619
|
-
/* eslint-enable jsx-a11y/no-static-element-interactions */
|
|
560
|
+
return createElement(TokenInput, _extends({}, inputProps, {
|
|
561
|
+
onChange: !(maxLength && value.length >= maxLength) ? onInputChangeHandler : undefined,
|
|
562
|
+
ref: input
|
|
563
|
+
}));
|
|
620
564
|
}
|
|
621
565
|
|
|
566
|
+
const classes = classnames(className, 'components-form-token-field__input-container', {
|
|
567
|
+
'is-active': isActive,
|
|
568
|
+
'is-disabled': disabled
|
|
569
|
+
});
|
|
570
|
+
let tokenFieldProps = {
|
|
571
|
+
className: 'components-form-token-field',
|
|
572
|
+
tabIndex: -1
|
|
573
|
+
};
|
|
574
|
+
const matchingSuggestions = getMatchingSuggestions();
|
|
575
|
+
|
|
576
|
+
if (!disabled) {
|
|
577
|
+
tokenFieldProps = Object.assign({}, tokenFieldProps, {
|
|
578
|
+
onKeyDown,
|
|
579
|
+
onKeyPress,
|
|
580
|
+
onFocus: onFocusHandler
|
|
581
|
+
});
|
|
582
|
+
} // Disable reason: There is no appropriate role which describes the
|
|
583
|
+
// input container intended accessible usability.
|
|
584
|
+
// TODO: Refactor click detection to use blur to stop propagation.
|
|
585
|
+
|
|
586
|
+
/* eslint-disable jsx-a11y/no-static-element-interactions */
|
|
587
|
+
|
|
588
|
+
|
|
589
|
+
return createElement("div", tokenFieldProps, createElement("label", {
|
|
590
|
+
htmlFor: `components-form-token-input-${instanceId}`,
|
|
591
|
+
className: "components-form-token-field__label"
|
|
592
|
+
}, label), createElement("div", {
|
|
593
|
+
ref: tokensAndInput,
|
|
594
|
+
className: classes,
|
|
595
|
+
tabIndex: -1,
|
|
596
|
+
onMouseDown: onContainerTouched,
|
|
597
|
+
onTouchStart: onContainerTouched
|
|
598
|
+
}, renderTokensAndInput(), isExpanded && createElement(SuggestionsList, {
|
|
599
|
+
instanceId: instanceId,
|
|
600
|
+
match: saveTransform(incompleteTokenValue),
|
|
601
|
+
displayTransform: displayTransform,
|
|
602
|
+
suggestions: matchingSuggestions,
|
|
603
|
+
selectedIndex: selectedSuggestionIndex,
|
|
604
|
+
scrollIntoView: selectedSuggestionScroll,
|
|
605
|
+
onHover: onSuggestionHovered,
|
|
606
|
+
onSelect: onSuggestionSelected
|
|
607
|
+
})), __experimentalShowHowTo && createElement("p", {
|
|
608
|
+
id: `components-form-token-suggestions-howto-${instanceId}`,
|
|
609
|
+
className: "components-form-token-field__help"
|
|
610
|
+
}, tokenizeOnSpace ? __('Separate with commas, spaces, or the Enter key.') : __('Separate with commas or the Enter key.')));
|
|
611
|
+
/* eslint-enable jsx-a11y/no-static-element-interactions */
|
|
622
612
|
}
|
|
623
|
-
|
|
624
|
-
FormTokenField.defaultProps = {
|
|
625
|
-
suggestions: Object.freeze([]),
|
|
626
|
-
maxSuggestions: 100,
|
|
627
|
-
value: Object.freeze([]),
|
|
628
|
-
displayTransform: identity,
|
|
629
|
-
saveTransform: token => token.trim(),
|
|
630
|
-
onChange: () => {},
|
|
631
|
-
onInputChange: () => {},
|
|
632
|
-
isBorderless: false,
|
|
633
|
-
disabled: false,
|
|
634
|
-
tokenizeOnSpace: false,
|
|
635
|
-
messages: {
|
|
636
|
-
added: __('Item added.'),
|
|
637
|
-
removed: __('Item removed.'),
|
|
638
|
-
remove: __('Remove item'),
|
|
639
|
-
__experimentalInvalid: __('Invalid item')
|
|
640
|
-
},
|
|
641
|
-
__experimentalExpandOnFocus: false,
|
|
642
|
-
__experimentalValidateInput: () => true,
|
|
643
|
-
__experimentalShowHowTo: true
|
|
644
|
-
};
|
|
645
|
-
export default withSpokenMessages(withInstanceId(FormTokenField));
|
|
613
|
+
export default FormTokenField;
|
|
646
614
|
//# sourceMappingURL=index.js.map
|