@wordpress/components 19.17.0 → 20.0.1-next.d6164808d3.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 +68 -1
- package/build/alignment-matrix-control/index.js +1 -1
- package/build/alignment-matrix-control/index.js.map +1 -1
- package/build/alignment-matrix-control/styles/alignment-matrix-control-styles.js +9 -9
- package/build/alignment-matrix-control/styles/alignment-matrix-control-styles.js.map +1 -1
- package/build/angle-picker-control/index.js +3 -0
- package/build/angle-picker-control/index.js.map +1 -1
- package/build/angle-picker-control/styles/angle-picker-control-styles.js +14 -4
- package/build/angle-picker-control/styles/angle-picker-control-styles.js.map +1 -1
- package/build/autocomplete/index.js +9 -11
- package/build/autocomplete/index.js.map +1 -1
- package/build/base-control/styles/base-control-styles.js +8 -8
- package/build/base-control/styles/base-control-styles.js.map +1 -1
- package/build/base-field/styles.js +5 -5
- package/build/base-field/styles.js.map +1 -1
- package/build/box-control/styles/box-control-visualizer-styles.js +8 -8
- package/build/box-control/styles/box-control-visualizer-styles.js.map +1 -1
- package/build/color-list-picker/index.js +16 -5
- package/build/color-list-picker/index.js.map +1 -1
- package/build/color-palette/index.js +22 -12
- package/build/color-palette/index.js.map +1 -1
- package/build/color-palette/index.native.js +3 -3
- package/build/color-palette/index.native.js.map +1 -1
- package/build/combobox-control/index.js +7 -4
- package/build/combobox-control/index.js.map +1 -1
- package/build/{custom-gradient-bar → custom-gradient-picker/gradient-bar}/constants.js +0 -0
- package/build/custom-gradient-picker/gradient-bar/constants.js.map +1 -0
- package/build/{custom-gradient-bar → custom-gradient-picker/gradient-bar}/control-points.js +34 -41
- package/build/custom-gradient-picker/gradient-bar/control-points.js.map +1 -0
- package/build/{custom-gradient-bar → custom-gradient-picker/gradient-bar}/index.js +0 -1
- package/build/custom-gradient-picker/gradient-bar/index.js.map +1 -0
- package/build/{custom-gradient-bar → custom-gradient-picker/gradient-bar}/utils.js +0 -0
- package/build/custom-gradient-picker/gradient-bar/utils.js.map +1 -0
- package/build/custom-gradient-picker/index.js +19 -4
- package/build/custom-gradient-picker/index.js.map +1 -1
- package/build/custom-select-control/index.js +21 -11
- package/build/custom-select-control/index.js.map +1 -1
- package/build/custom-select-control/styles.js +34 -0
- package/build/custom-select-control/styles.js.map +1 -0
- package/build/date-time/constants.js +9 -0
- package/build/date-time/constants.js.map +1 -0
- package/build/date-time/date/index.js +175 -186
- package/build/date-time/date/index.js.map +1 -1
- package/build/date-time/date/styles.js +59 -40
- package/build/date-time/date/styles.js.map +1 -1
- package/build/date-time/date-time/index.js +5 -2
- package/build/date-time/date-time/index.js.map +1 -1
- package/build/date-time/time/index.js +22 -17
- package/build/date-time/time/index.js.map +1 -1
- package/build/date-time/utils.js +27 -0
- package/build/date-time/utils.js.map +1 -0
- package/build/dimension-control/index.js +2 -6
- package/build/dimension-control/index.js.map +1 -1
- package/build/disabled/index.js +28 -11
- package/build/disabled/index.js.map +1 -1
- package/build/disabled/styles/disabled-styles.js +3 -3
- package/build/disabled/styles/disabled-styles.js.map +1 -1
- package/build/{swatch → disabled}/types.js +0 -0
- package/build/{swatch → disabled}/types.js.map +0 -0
- package/build/dropdown/index.js +5 -6
- package/build/dropdown/index.js.map +1 -1
- package/build/duotone-picker/custom-duotone-bar.js +2 -2
- package/build/duotone-picker/custom-duotone-bar.js.map +1 -1
- package/build/duotone-picker/duotone-picker.js +9 -1
- package/build/duotone-picker/duotone-picker.js.map +1 -1
- package/build/duotone-picker/duotone-swatch.js +13 -3
- package/build/duotone-picker/duotone-swatch.js.map +1 -1
- package/build/focal-point-picker/index.js +4 -6
- package/build/focal-point-picker/index.js.map +1 -1
- package/build/focal-point-picker/styles/focal-point-style.js +4 -4
- package/build/focal-point-picker/styles/focal-point-style.js.map +1 -1
- package/build/font-size-picker/index.js +43 -14
- package/build/font-size-picker/index.js.map +1 -1
- package/build/font-size-picker/utils.js +32 -22
- package/build/font-size-picker/utils.js.map +1 -1
- package/build/form-token-field/index.js +11 -5
- package/build/form-token-field/index.js.map +1 -1
- package/build/gradient-picker/index.js +15 -3
- package/build/gradient-picker/index.js.map +1 -1
- package/build/guide/index.js +5 -3
- package/build/guide/index.js.map +1 -1
- package/build/guide/page-control.js +3 -7
- package/build/guide/page-control.js.map +1 -1
- package/build/item-group/styles.js +10 -10
- package/build/item-group/styles.js.map +1 -1
- package/build/mobile/bottom-sheet/index.native.js +3 -6
- package/build/mobile/bottom-sheet/index.native.js.map +1 -1
- package/build/mobile/global-styles-context/utils.native.js +3 -1
- package/build/mobile/global-styles-context/utils.native.js.map +1 -1
- package/build/mobile/image/index.native.js +6 -26
- package/build/mobile/image/index.native.js.map +1 -1
- package/build/mobile/picker/index.android.js +3 -3
- package/build/mobile/picker/index.android.js.map +1 -1
- package/build/modal/index.js +1 -3
- package/build/modal/index.js.map +1 -1
- package/build/navigable-container/container.js +9 -8
- package/build/navigable-container/container.js.map +1 -1
- package/build/navigator/navigator-back-button/hook.js +0 -4
- package/build/navigator/navigator-back-button/hook.js.map +1 -1
- package/build/navigator/navigator-button/hook.js +0 -4
- package/build/navigator/navigator-button/hook.js.map +1 -1
- package/build/notice/list.js +10 -6
- package/build/notice/list.js.map +1 -1
- package/build/palette-edit/index.js +1 -0
- package/build/palette-edit/index.js.map +1 -1
- package/build/palette-edit/styles.js +10 -10
- package/build/palette-edit/styles.js.map +1 -1
- package/build/popover/index.js +100 -97
- package/build/popover/index.js.map +1 -1
- package/build/popover/utils.js +178 -0
- package/build/popover/utils.js.map +1 -0
- package/build/range-control/index.js +3 -0
- package/build/range-control/index.js.map +1 -1
- package/build/range-control/styles/range-control-styles.js +43 -37
- package/build/range-control/styles/range-control-styles.js.map +1 -1
- package/build/select-control/chevron-down.js +30 -0
- package/build/select-control/chevron-down.js.map +1 -0
- package/build/select-control/index.js +7 -7
- package/build/select-control/index.js.map +1 -1
- package/build/select-control/styles/select-control-styles.js +30 -15
- package/build/select-control/styles/select-control-styles.js.map +1 -1
- package/build/snackbar/list.js +5 -3
- package/build/snackbar/list.js.map +1 -1
- package/build/spinner/index.js +2 -0
- package/build/spinner/index.js.map +1 -1
- package/build/text/styles.js +7 -7
- package/build/text/styles.js.map +1 -1
- package/build/toggle-group-control/toggle-group-control/component.js +16 -8
- package/build/toggle-group-control/toggle-group-control/component.js.map +1 -1
- package/build/toggle-group-control/toggle-group-control/styles.js +7 -5
- package/build/toggle-group-control/toggle-group-control/styles.js.map +1 -1
- package/build/toggle-group-control/toggle-group-control-option/component.js +15 -5
- package/build/toggle-group-control/toggle-group-control-option/component.js.map +1 -1
- package/build/toggle-group-control/toggle-group-control-option-base/component.js +5 -1
- package/build/toggle-group-control/toggle-group-control-option-base/component.js.map +1 -1
- package/build/toggle-group-control/toggle-group-control-option-base/styles.js +20 -7
- package/build/toggle-group-control/toggle-group-control-option-base/styles.js.map +1 -1
- package/build/toggle-group-control/toggle-group-control-option-icon/component.js +26 -7
- package/build/toggle-group-control/toggle-group-control-option-icon/component.js.map +1 -1
- package/build/tools-panel/styles.js +11 -11
- package/build/tools-panel/styles.js.map +1 -1
- package/build/ui/context/context-connect.js +1 -3
- package/build/ui/context/context-connect.js.map +1 -1
- package/build/unit-control/index.js +2 -3
- package/build/unit-control/index.js.map +1 -1
- package/build/utils/colors-values.js +52 -142
- package/build/utils/colors-values.js.map +1 -1
- package/build/utils/config-values.js +1 -1
- package/build/utils/config-values.js.map +1 -1
- package/build/utils/input/input-control.js +1 -1
- package/build/utils/input/input-control.js.map +1 -1
- package/build/utils/rtl.js +6 -5
- package/build/utils/rtl.js.map +1 -1
- package/build/utils/strings.js +50 -0
- package/build/utils/strings.js.map +1 -0
- package/build-module/alignment-matrix-control/index.js +1 -1
- package/build-module/alignment-matrix-control/index.js.map +1 -1
- package/build-module/alignment-matrix-control/styles/alignment-matrix-control-styles.js +9 -9
- package/build-module/alignment-matrix-control/styles/alignment-matrix-control-styles.js.map +1 -1
- package/build-module/angle-picker-control/index.js +3 -0
- package/build-module/angle-picker-control/index.js.map +1 -1
- package/build-module/angle-picker-control/styles/angle-picker-control-styles.js +13 -4
- package/build-module/angle-picker-control/styles/angle-picker-control-styles.js.map +1 -1
- package/build-module/autocomplete/index.js +9 -10
- package/build-module/autocomplete/index.js.map +1 -1
- package/build-module/base-control/styles/base-control-styles.js +8 -8
- package/build-module/base-control/styles/base-control-styles.js.map +1 -1
- package/build-module/base-field/styles.js +5 -5
- package/build-module/base-field/styles.js.map +1 -1
- package/build-module/box-control/styles/box-control-visualizer-styles.js +8 -8
- package/build-module/box-control/styles/box-control-visualizer-styles.js.map +1 -1
- package/build-module/color-list-picker/index.js +13 -5
- package/build-module/color-list-picker/index.js.map +1 -1
- package/build-module/color-palette/index.js +22 -11
- package/build-module/color-palette/index.js.map +1 -1
- package/build-module/color-palette/index.native.js +4 -4
- package/build-module/color-palette/index.native.js.map +1 -1
- package/build-module/combobox-control/index.js +6 -3
- package/build-module/combobox-control/index.js.map +1 -1
- package/build-module/{custom-gradient-bar → custom-gradient-picker/gradient-bar}/constants.js +0 -0
- package/build-module/custom-gradient-picker/gradient-bar/constants.js.map +1 -0
- package/build-module/{custom-gradient-bar → custom-gradient-picker/gradient-bar}/control-points.js +34 -41
- package/build-module/custom-gradient-picker/gradient-bar/control-points.js.map +1 -0
- package/build-module/{custom-gradient-bar → custom-gradient-picker/gradient-bar}/index.js +0 -1
- package/build-module/custom-gradient-picker/gradient-bar/index.js.map +1 -0
- package/build-module/{custom-gradient-bar → custom-gradient-picker/gradient-bar}/utils.js +0 -0
- package/build-module/custom-gradient-picker/gradient-bar/utils.js.map +1 -0
- package/build-module/custom-gradient-picker/index.js +16 -3
- package/build-module/custom-gradient-picker/index.js.map +1 -1
- package/build-module/custom-select-control/index.js +20 -12
- package/build-module/custom-select-control/index.js.map +1 -1
- package/build-module/custom-select-control/styles.js +22 -0
- package/build-module/custom-select-control/styles.js.map +1 -0
- package/build-module/date-time/constants.js +2 -0
- package/build-module/date-time/constants.js.map +1 -0
- package/build-module/date-time/date/index.js +178 -184
- package/build-module/date-time/date/index.js.map +1 -1
- package/build-module/date-time/date/styles.js +47 -38
- package/build-module/date-time/date/styles.js.map +1 -1
- package/build-module/date-time/date-time/index.js +4 -2
- package/build-module/date-time/date-time/index.js.map +1 -1
- package/build-module/date-time/time/index.js +20 -16
- package/build-module/date-time/time/index.js.map +1 -1
- package/build-module/date-time/utils.js +19 -0
- package/build-module/date-time/utils.js.map +1 -0
- package/build-module/dimension-control/index.js +1 -5
- package/build-module/dimension-control/index.js.map +1 -1
- package/build-module/disabled/index.js +28 -11
- package/build-module/disabled/index.js.map +1 -1
- package/build-module/disabled/styles/disabled-styles.js +3 -3
- package/build-module/disabled/styles/disabled-styles.js.map +1 -1
- package/build-module/{swatch → disabled}/types.js +0 -0
- package/build-module/{swatch → disabled}/types.js.map +0 -0
- package/build-module/dropdown/index.js +5 -6
- package/build-module/dropdown/index.js.map +1 -1
- package/build-module/duotone-picker/custom-duotone-bar.js +1 -1
- package/build-module/duotone-picker/custom-duotone-bar.js.map +1 -1
- package/build-module/duotone-picker/duotone-picker.js +7 -1
- package/build-module/duotone-picker/duotone-picker.js.map +1 -1
- package/build-module/duotone-picker/duotone-swatch.js +11 -3
- package/build-module/duotone-picker/duotone-swatch.js.map +1 -1
- package/build-module/focal-point-picker/index.js +4 -5
- package/build-module/focal-point-picker/index.js.map +1 -1
- package/build-module/focal-point-picker/styles/focal-point-style.js +4 -4
- package/build-module/focal-point-picker/styles/focal-point-style.js.map +1 -1
- package/build-module/font-size-picker/index.js +39 -14
- package/build-module/font-size-picker/index.js.map +1 -1
- package/build-module/font-size-picker/utils.js +31 -23
- package/build-module/font-size-picker/utils.js.map +1 -1
- package/build-module/form-token-field/index.js +12 -6
- package/build-module/form-token-field/index.js.map +1 -1
- package/build-module/gradient-picker/index.js +14 -3
- package/build-module/gradient-picker/index.js.map +1 -1
- package/build-module/guide/index.js +5 -3
- package/build-module/guide/index.js.map +1 -1
- package/build-module/guide/page-control.js +3 -6
- package/build-module/guide/page-control.js.map +1 -1
- package/build-module/item-group/styles.js +10 -10
- package/build-module/item-group/styles.js.map +1 -1
- package/build-module/mobile/bottom-sheet/index.native.js +3 -5
- package/build-module/mobile/bottom-sheet/index.native.js.map +1 -1
- package/build-module/mobile/global-styles-context/utils.native.js +2 -1
- package/build-module/mobile/global-styles-context/utils.native.js.map +1 -1
- package/build-module/mobile/image/index.native.js +8 -28
- package/build-module/mobile/image/index.native.js.map +1 -1
- package/build-module/mobile/picker/index.android.js +3 -3
- package/build-module/mobile/picker/index.android.js.map +1 -1
- package/build-module/modal/index.js +1 -2
- package/build-module/modal/index.js.map +1 -1
- package/build-module/navigable-container/container.js +9 -7
- package/build-module/navigable-container/container.js.map +1 -1
- package/build-module/navigator/navigator-back-button/hook.js +0 -4
- package/build-module/navigator/navigator-back-button/hook.js.map +1 -1
- package/build-module/navigator/navigator-button/hook.js +0 -4
- package/build-module/navigator/navigator-button/hook.js.map +1 -1
- package/build-module/notice/list.js +10 -5
- package/build-module/notice/list.js.map +1 -1
- package/build-module/palette-edit/index.js +1 -0
- package/build-module/palette-edit/index.js.map +1 -1
- package/build-module/palette-edit/styles.js +10 -10
- package/build-module/palette-edit/styles.js.map +1 -1
- package/build-module/popover/index.js +100 -98
- package/build-module/popover/index.js.map +1 -1
- package/build-module/popover/utils.js +164 -0
- package/build-module/popover/utils.js.map +1 -0
- package/build-module/range-control/index.js +3 -0
- package/build-module/range-control/index.js.map +1 -1
- package/build-module/range-control/styles/range-control-styles.js +43 -37
- package/build-module/range-control/styles/range-control-styles.js.map +1 -1
- package/build-module/select-control/chevron-down.js +21 -0
- package/build-module/select-control/chevron-down.js.map +1 -0
- package/build-module/select-control/index.js +7 -7
- package/build-module/select-control/index.js.map +1 -1
- package/build-module/select-control/styles/select-control-styles.js +24 -13
- package/build-module/select-control/styles/select-control-styles.js.map +1 -1
- package/build-module/snackbar/list.js +5 -2
- package/build-module/snackbar/list.js.map +1 -1
- package/build-module/spinner/index.js +2 -0
- package/build-module/spinner/index.js.map +1 -1
- package/build-module/text/styles.js +7 -7
- package/build-module/text/styles.js.map +1 -1
- package/build-module/toggle-group-control/toggle-group-control/component.js +14 -7
- package/build-module/toggle-group-control/toggle-group-control/component.js.map +1 -1
- package/build-module/toggle-group-control/toggle-group-control/styles.js +5 -4
- package/build-module/toggle-group-control/toggle-group-control/styles.js.map +1 -1
- package/build-module/toggle-group-control/toggle-group-control-option/component.js +17 -3
- package/build-module/toggle-group-control/toggle-group-control-option/component.js.map +1 -1
- package/build-module/toggle-group-control/toggle-group-control-option-base/component.js +5 -1
- package/build-module/toggle-group-control/toggle-group-control-option-base/component.js.map +1 -1
- package/build-module/toggle-group-control/toggle-group-control-option-base/styles.js +16 -6
- package/build-module/toggle-group-control/toggle-group-control-option-base/styles.js.map +1 -1
- package/build-module/toggle-group-control/toggle-group-control-option-icon/component.js +27 -5
- package/build-module/toggle-group-control/toggle-group-control-option-icon/component.js.map +1 -1
- package/build-module/tools-panel/styles.js +11 -11
- package/build-module/tools-panel/styles.js.map +1 -1
- package/build-module/ui/context/context-connect.js +1 -2
- package/build-module/ui/context/context-connect.js.map +1 -1
- package/build-module/unit-control/index.js +2 -2
- package/build-module/unit-control/index.js.map +1 -1
- package/build-module/utils/colors-values.js +52 -141
- package/build-module/utils/colors-values.js.map +1 -1
- package/build-module/utils/config-values.js +1 -1
- package/build-module/utils/config-values.js.map +1 -1
- package/build-module/utils/input/input-control.js +1 -1
- package/build-module/utils/input/input-control.js.map +1 -1
- package/build-module/utils/rtl.js +6 -4
- package/build-module/utils/rtl.js.map +1 -1
- package/build-module/utils/strings.js +37 -0
- package/build-module/utils/strings.js.map +1 -0
- package/build-style/style-rtl.css +176 -1227
- package/build-style/style.css +171 -1225
- package/build-types/color-palette/index.d.ts +2 -1
- package/build-types/color-palette/index.d.ts.map +1 -1
- package/build-types/color-picker/styles.d.ts +2 -2
- package/build-types/date-time/constants.d.ts +2 -0
- package/build-types/date-time/constants.d.ts.map +1 -0
- package/build-types/date-time/date/index.d.ts +3 -1
- package/build-types/date-time/date/index.d.ts.map +1 -1
- package/build-types/date-time/date/styles.d.ts +22 -8
- package/build-types/date-time/date/styles.d.ts.map +1 -1
- package/build-types/date-time/date/test/index.d.ts +1 -1
- package/build-types/date-time/date/test/index.d.ts.map +1 -1
- package/build-types/date-time/date-time/index.d.ts.map +1 -1
- package/build-types/date-time/time/index.d.ts.map +1 -1
- package/build-types/date-time/utils.d.ts +8 -0
- package/build-types/date-time/utils.d.ts.map +1 -0
- package/build-types/disabled/index.d.ts +35 -28
- package/build-types/disabled/index.d.ts.map +1 -1
- package/build-types/disabled/stories/index.d.ts +13 -0
- package/build-types/disabled/stories/index.d.ts.map +1 -0
- package/build-types/disabled/styles/disabled-styles.d.ts +2 -1
- package/build-types/disabled/styles/disabled-styles.d.ts.map +1 -1
- package/build-types/disabled/test/index.d.ts +2 -0
- package/build-types/{flyout/flyout → disabled/test}/index.d.ts.map +1 -1
- package/build-types/disabled/types.d.ts +14 -0
- package/build-types/disabled/types.d.ts.map +1 -0
- package/build-types/dropdown/index.d.ts.map +1 -1
- package/build-types/form-token-field/index.d.ts.map +1 -1
- package/build-types/form-token-field/stories/index.d.ts +1 -0
- package/build-types/form-token-field/stories/index.d.ts.map +1 -1
- package/build-types/form-token-field/types.d.ts +7 -0
- package/build-types/form-token-field/types.d.ts.map +1 -1
- package/build-types/navigator/navigator-back-button/hook.d.ts +0 -3
- package/build-types/navigator/navigator-back-button/hook.d.ts.map +1 -1
- package/build-types/navigator/navigator-button/hook.d.ts +0 -3
- package/build-types/navigator/navigator-button/hook.d.ts.map +1 -1
- package/build-types/placeholder/test/index.d.ts +2 -0
- package/build-types/{flyout → placeholder/test}/index.d.ts.map +1 -1
- package/build-types/popover/index.d.ts +1 -1
- package/build-types/popover/index.d.ts.map +1 -1
- package/build-types/popover/utils.d.ts +26 -69
- package/build-types/popover/utils.d.ts.map +1 -1
- package/build-types/range-control/index.d.ts +2 -2
- package/build-types/range-control/index.d.ts.map +1 -1
- package/build-types/range-control/styles/range-control-styles.d.ts +5 -2
- package/build-types/range-control/styles/range-control-styles.d.ts.map +1 -1
- package/build-types/range-control/types.d.ts +2 -2
- package/build-types/range-control/types.d.ts.map +1 -1
- package/build-types/select-control/chevron-down.d.ts +4 -0
- package/build-types/select-control/chevron-down.d.ts.map +1 -0
- package/build-types/select-control/index.d.ts.map +1 -1
- package/build-types/select-control/styles/select-control-styles.d.ts +8 -0
- package/build-types/select-control/styles/select-control-styles.d.ts.map +1 -1
- package/build-types/spinner/index.d.ts.map +1 -1
- package/build-types/toggle-group-control/stories/index.d.ts +25 -0
- package/build-types/toggle-group-control/stories/index.d.ts.map +1 -0
- package/build-types/toggle-group-control/test/index.d.ts +2 -0
- package/build-types/toggle-group-control/test/index.d.ts.map +1 -0
- package/build-types/toggle-group-control/toggle-group-control/component.d.ts +6 -3
- package/build-types/toggle-group-control/toggle-group-control/component.d.ts.map +1 -1
- package/build-types/toggle-group-control/toggle-group-control/styles.d.ts +1 -0
- package/build-types/toggle-group-control/toggle-group-control/styles.d.ts.map +1 -1
- package/build-types/toggle-group-control/toggle-group-control-option/component.d.ts +6 -7
- package/build-types/toggle-group-control/toggle-group-control-option/component.d.ts.map +1 -1
- package/build-types/toggle-group-control/toggle-group-control-option-base/component.d.ts.map +1 -1
- package/build-types/toggle-group-control/toggle-group-control-option-base/styles.d.ts +4 -0
- package/build-types/toggle-group-control/toggle-group-control-option-base/styles.d.ts.map +1 -1
- package/build-types/toggle-group-control/toggle-group-control-option-icon/component.d.ts +11 -9
- package/build-types/toggle-group-control/toggle-group-control-option-icon/component.d.ts.map +1 -1
- package/build-types/toggle-group-control/types.d.ts +23 -10
- package/build-types/toggle-group-control/types.d.ts.map +1 -1
- package/build-types/ui/context/context-connect.d.ts +3 -0
- package/build-types/ui/context/context-connect.d.ts.map +1 -1
- package/build-types/ui/form-group/use-form-group.d.ts +2 -2
- package/build-types/unit-control/index.d.ts +2 -1
- package/build-types/unit-control/index.d.ts.map +1 -1
- package/build-types/unit-control/types.d.ts +5 -1
- package/build-types/unit-control/types.d.ts.map +1 -1
- package/build-types/utils/colors-values.d.ts +18 -97
- package/build-types/utils/colors-values.d.ts.map +1 -1
- package/build-types/utils/rtl.d.ts.map +1 -1
- package/build-types/utils/strings.d.ts +2 -0
- package/build-types/utils/strings.d.ts.map +1 -0
- package/package.json +22 -21
- package/src/alignment-matrix-control/index.js +1 -1
- package/src/alignment-matrix-control/stories/index.js +49 -24
- package/src/alignment-matrix-control/styles/alignment-matrix-control-styles.js +1 -3
- package/src/angle-picker-control/index.js +7 -1
- package/src/angle-picker-control/stories/index.js +8 -5
- package/src/angle-picker-control/styles/angle-picker-control-styles.js +12 -3
- package/src/autocomplete/index.js +9 -18
- package/src/base-control/styles/base-control-styles.ts +1 -1
- package/src/base-field/styles.js +1 -1
- package/src/base-field/test/__snapshots__/index.js.snap +2 -2
- package/src/box-control/styles/box-control-visualizer-styles.js +0 -1
- package/src/box-control/test/index.js +8 -8
- package/src/button/test/index.js +188 -146
- package/src/color-list-picker/index.js +15 -3
- package/src/color-list-picker/style.scss +11 -0
- package/src/color-palette/index.js +32 -16
- package/src/color-palette/index.native.js +10 -6
- package/src/color-palette/stories/index.js +1 -1
- package/src/color-palette/test/__snapshots__/index.js.snap +17 -3
- package/src/combobox-control/index.js +6 -5
- package/src/combobox-control/stories/index.js +9 -3
- package/src/combobox-control/style.scss +0 -1
- package/src/confirm-dialog/test/index.js +85 -62
- package/src/{custom-gradient-bar → custom-gradient-picker/gradient-bar}/constants.js +0 -0
- package/src/{custom-gradient-bar → custom-gradient-picker/gradient-bar}/control-points.js +54 -50
- package/src/{custom-gradient-bar → custom-gradient-picker/gradient-bar}/index.js +0 -3
- package/src/{custom-gradient-bar → custom-gradient-picker/gradient-bar}/test/utils.js +0 -0
- package/src/{custom-gradient-bar → custom-gradient-picker/gradient-bar}/utils.js +0 -0
- package/src/custom-gradient-picker/index.js +18 -3
- package/src/custom-gradient-picker/stories/index.js +4 -3
- package/src/custom-gradient-picker/style.scss +30 -27
- package/src/custom-select-control/README.md +10 -0
- package/src/custom-select-control/index.js +22 -16
- package/src/custom-select-control/stories/index.js +1 -1
- package/src/custom-select-control/style.scss +0 -12
- package/src/custom-select-control/styles.ts +28 -0
- package/src/custom-select-control/test/index.js +4 -1
- package/src/date-time/constants.ts +1 -0
- package/src/date-time/date/index.tsx +289 -184
- package/src/date-time/date/styles.ts +86 -27
- package/src/date-time/date/test/index.tsx +18 -28
- package/src/date-time/date-time/index.tsx +3 -2
- package/src/date-time/time/index.tsx +23 -19
- package/src/date-time/utils.ts +17 -0
- package/src/dimension-control/index.js +1 -5
- package/src/disabled/index.tsx +80 -0
- package/src/disabled/stories/index.tsx +87 -0
- package/src/disabled/styles/{disabled-styles.js → disabled-styles.tsx} +0 -0
- package/src/disabled/test/index.tsx +174 -0
- package/src/disabled/types.ts +13 -0
- package/src/dropdown/index.js +3 -5
- package/src/dropdown-menu/stories/index.js +13 -2
- package/src/duotone-picker/custom-duotone-bar.js +1 -1
- package/src/duotone-picker/duotone-picker.js +34 -26
- package/src/duotone-picker/duotone-swatch.js +12 -5
- package/src/duotone-picker/stories/duotone-picker.js +66 -0
- package/src/duotone-picker/stories/duotone-swatch.js +32 -0
- package/src/focal-point-picker/index.js +10 -5
- package/src/focal-point-picker/styles/focal-point-style.js +0 -1
- package/src/focal-point-picker/test/index.js +78 -45
- package/src/font-size-picker/index.js +161 -144
- package/src/font-size-picker/stories/index.js +1 -0
- package/src/font-size-picker/style.scss +8 -5
- package/src/font-size-picker/test/index.js +13 -6
- package/src/font-size-picker/test/{util.js → utils.js} +77 -1
- package/src/font-size-picker/utils.js +38 -23
- package/src/form-token-field/README.md +1 -0
- package/src/form-token-field/index.tsx +24 -10
- package/src/form-token-field/stories/index.tsx +8 -0
- package/src/form-token-field/test/index.js +31 -0
- package/src/form-token-field/types.ts +7 -0
- package/src/gradient-picker/index.js +22 -7
- package/src/gradient-picker/stories/index.js +56 -81
- package/src/guide/index.js +3 -1
- package/src/guide/page-control.js +1 -6
- package/src/guide/stories/index.js +12 -11
- package/src/guide/test/index.js +54 -37
- package/src/guide/test/page-control.js +14 -17
- package/src/higher-order/with-notices/test/index.js +4 -2
- package/src/higher-order/with-spoken-messages/test/index.js +1 -1
- package/src/item-group/styles.ts +3 -3
- package/src/menu-group/test/index.js +18 -7
- package/src/mobile/bottom-sheet/index.native.js +2 -4
- package/src/mobile/global-styles-context/utils.native.js +2 -1
- package/src/mobile/image/index.native.js +9 -30
- package/src/mobile/picker/index.android.js +10 -4
- package/src/mobile/picker/styles.native.scss +4 -4
- package/src/modal/index.js +1 -2
- package/src/modal/test/index.js +11 -9
- package/src/navigable-container/container.js +12 -18
- package/src/navigable-container/test/menu.js +14 -11
- package/src/navigator/navigator-back-button/hook.ts +0 -3
- package/src/navigator/navigator-button/hook.ts +0 -3
- package/src/notice/list.js +12 -10
- package/src/palette-edit/index.js +1 -0
- package/src/palette-edit/styles.js +6 -5
- package/src/placeholder/README.md +1 -1
- package/src/placeholder/style.scss +65 -20
- package/src/placeholder/test/index.tsx +174 -0
- package/src/popover/index.js +133 -112
- package/src/popover/stories/index.js +17 -3
- package/src/popover/test/__snapshots__/index.js.snap +6 -6
- package/src/popover/test/index.js +129 -36
- package/src/popover/utils.js +107 -0
- package/src/range-control/index.tsx +3 -0
- package/src/range-control/styles/range-control-styles.ts +9 -4
- package/src/range-control/types.ts +5 -2
- package/src/select-control/chevron-down.tsx +25 -0
- package/src/select-control/index.tsx +6 -9
- package/src/select-control/styles/select-control-styles.ts +23 -14
- package/src/slot-fill/test/slot.js +5 -5
- package/src/snackbar/list.js +3 -2
- package/src/spinner/index.tsx +2 -0
- package/src/style.scss +0 -2
- package/src/text/styles.js +1 -1
- package/src/text/test/index.tsx +1 -1
- package/src/toggle-group-control/stories/index.tsx +127 -0
- package/src/toggle-group-control/test/__snapshots__/{index.js.snap → index.tsx.snap} +28 -22
- package/src/toggle-group-control/test/{index.js → index.tsx} +2 -4
- package/src/toggle-group-control/toggle-group-control/README.md +2 -0
- package/src/toggle-group-control/toggle-group-control/component.tsx +18 -9
- package/src/toggle-group-control/toggle-group-control/styles.ts +9 -6
- package/src/toggle-group-control/toggle-group-control-option/component.tsx +19 -3
- package/src/toggle-group-control/toggle-group-control-option-base/component.tsx +3 -0
- package/src/toggle-group-control/toggle-group-control-option-base/styles.ts +18 -0
- package/src/toggle-group-control/toggle-group-control-option-icon/README.md +6 -8
- package/src/toggle-group-control/toggle-group-control-option-icon/component.tsx +30 -7
- package/src/toggle-group-control/types.ts +74 -59
- package/src/toolbar/test/index.js +4 -4
- package/src/toolbar-group/test/index.js +9 -15
- package/src/tools-panel/styles.ts +2 -2
- package/src/tools-panel/test/index.js +3 -2
- package/src/tooltip/test/index.js +188 -172
- package/src/ui/context/context-connect.ts +3 -2
- package/src/unit-control/index.tsx +2 -2
- package/src/unit-control/types.ts +10 -1
- package/src/utils/colors-values.js +42 -137
- package/src/utils/config-values.js +1 -1
- package/src/utils/input/input-control.js +6 -6
- package/src/utils/rtl.js +6 -2
- package/src/utils/strings.ts +72 -0
- package/src/utils/test/strings.js +15 -0
- package/tsconfig.json +0 -1
- package/tsconfig.tsbuildinfo +1 -1
- package/build/custom-gradient-bar/constants.js.map +0 -1
- package/build/custom-gradient-bar/control-points.js.map +0 -1
- package/build/custom-gradient-bar/index.js.map +0 -1
- package/build/custom-gradient-bar/utils.js.map +0 -1
- package/build/date-time/date/utils.js +0 -34
- package/build/date-time/date/utils.js.map +0 -1
- package/build/swatch/index.js +0 -41
- package/build/swatch/index.js.map +0 -1
- package/build-module/custom-gradient-bar/constants.js.map +0 -1
- package/build-module/custom-gradient-bar/control-points.js.map +0 -1
- package/build-module/custom-gradient-bar/index.js.map +0 -1
- package/build-module/custom-gradient-bar/utils.js.map +0 -1
- package/build-module/date-time/date/utils.js +0 -22
- package/build-module/date-time/date/utils.js.map +0 -1
- package/build-module/swatch/index.js +0 -30
- package/build-module/swatch/index.js.map +0 -1
- package/build-types/color-picker/color-display.d.ts +0 -13
- package/build-types/color-picker/color-display.d.ts.map +0 -1
- package/build-types/date-time/date/test/utils.d.ts +0 -2
- package/build-types/date-time/date/test/utils.d.ts.map +0 -1
- package/build-types/date-time/date/utils.d.ts +0 -15
- package/build-types/date-time/date/utils.d.ts.map +0 -1
- package/build-types/flyout/context.d.ts +0 -6
- package/build-types/flyout/context.d.ts.map +0 -1
- package/build-types/flyout/flyout/component.d.ts +0 -21
- package/build-types/flyout/flyout/component.d.ts.map +0 -1
- package/build-types/flyout/flyout/hook.d.ts +0 -270
- package/build-types/flyout/flyout/hook.d.ts.map +0 -1
- package/build-types/flyout/flyout/index.d.ts +0 -3
- package/build-types/flyout/flyout-content/component.d.ts +0 -3
- package/build-types/flyout/flyout-content/component.d.ts.map +0 -1
- package/build-types/flyout/flyout-content/index.d.ts +0 -2
- package/build-types/flyout/flyout-content/index.d.ts.map +0 -1
- package/build-types/flyout/index.d.ts +0 -2
- package/build-types/flyout/styles.d.ts +0 -22
- package/build-types/flyout/styles.d.ts.map +0 -1
- package/build-types/flyout/types.d.ts +0 -80
- package/build-types/flyout/types.d.ts.map +0 -1
- package/build-types/flyout/utils.d.ts +0 -8
- package/build-types/flyout/utils.d.ts.map +0 -1
- package/build-types/swatch/index.d.ts +0 -5
- package/build-types/swatch/index.d.ts.map +0 -1
- package/build-types/swatch/types.d.ts +0 -11
- package/build-types/swatch/types.d.ts.map +0 -1
- package/build-types/utils/hooks/use-combined-ref.d.ts +0 -8
- package/build-types/utils/hooks/use-combined-ref.d.ts.map +0 -1
- package/src/date-time/date/datepicker.scss +0 -863
- package/src/date-time/date/style.scss +0 -85
- package/src/date-time/date/test/utils.ts +0 -32
- package/src/date-time/date/utils.ts +0 -20
- package/src/date-time/style.scss +0 -1
- package/src/disabled/index.js +0 -55
- package/src/disabled/stories/index.js +0 -61
- package/src/disabled/test/index.js +0 -240
- package/src/menu-group/test/__snapshots__/index.js.snap +0 -23
- package/src/placeholder/test/index.js +0 -163
- package/src/swatch/index.tsx +0 -22
- package/src/swatch/style.scss +0 -21
- package/src/swatch/types.ts +0 -11
- package/src/toggle-group-control/stories/index.js +0 -203
- package/src/tools-panel/test/__snapshots__/index.js.snap +0 -210
|
@@ -11,6 +11,8 @@ var _element = require("@wordpress/element");
|
|
|
11
11
|
|
|
12
12
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
13
13
|
|
|
14
|
+
var _classnames = _interopRequireDefault(require("classnames"));
|
|
15
|
+
|
|
14
16
|
var _i18n = require("@wordpress/i18n");
|
|
15
17
|
|
|
16
18
|
var _icons = require("@wordpress/icons");
|
|
@@ -33,10 +35,18 @@ var _toggleGroupControl = require("../toggle-group-control");
|
|
|
33
35
|
|
|
34
36
|
var _utils = require("./utils");
|
|
35
37
|
|
|
38
|
+
var _vStack = require("../v-stack");
|
|
39
|
+
|
|
40
|
+
var _hStack = require("../h-stack");
|
|
41
|
+
|
|
36
42
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
37
43
|
|
|
38
44
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
39
45
|
|
|
46
|
+
/**
|
|
47
|
+
* External dependencies
|
|
48
|
+
*/
|
|
49
|
+
|
|
40
50
|
/**
|
|
41
51
|
* WordPress dependencies
|
|
42
52
|
*/
|
|
@@ -44,10 +54,24 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
|
|
|
44
54
|
/**
|
|
45
55
|
* Internal dependencies
|
|
46
56
|
*/
|
|
47
|
-
|
|
57
|
+
// This conditional is needed to maintain the spacing before the slider in the `withSlider` case.
|
|
58
|
+
const MaybeVStack = _ref => {
|
|
59
|
+
let {
|
|
60
|
+
__nextHasNoMarginBottom,
|
|
61
|
+
children
|
|
62
|
+
} = _ref;
|
|
63
|
+
return !__nextHasNoMarginBottom ? children : (0, _element.createElement)(_vStack.VStack, {
|
|
64
|
+
spacing: 6,
|
|
65
|
+
children: children
|
|
66
|
+
});
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
function FontSizePicker(_ref2, ref) {
|
|
48
70
|
var _fontSizes$, _value$endsWith;
|
|
49
71
|
|
|
50
72
|
let {
|
|
73
|
+
/** Start opting into the new margin-free styles that will become the default in a future version. */
|
|
74
|
+
__nextHasNoMarginBottom = false,
|
|
51
75
|
fallbackFontSize,
|
|
52
76
|
fontSizes = [],
|
|
53
77
|
disableCustomFontSizes = false,
|
|
@@ -58,7 +82,7 @@ function FontSizePicker(_ref, ref) {
|
|
|
58
82
|
value,
|
|
59
83
|
withSlider = false,
|
|
60
84
|
withReset = true
|
|
61
|
-
} =
|
|
85
|
+
} = _ref2;
|
|
62
86
|
const hasUnits = [typeof value, typeof (fontSizes === null || fontSizes === void 0 ? void 0 : (_fontSizes$ = fontSizes[0]) === null || _fontSizes$ === void 0 ? void 0 : _fontSizes$.size)].includes('string');
|
|
63
87
|
const noUnitsValue = !hasUnits ? value : parseInt(value);
|
|
64
88
|
const isPixelValue = typeof value === 'number' || (value === null || value === void 0 ? void 0 : (_value$endsWith = value.endsWith) === null || _value$endsWith === void 0 ? void 0 : _value$endsWith.call(value, 'px'));
|
|
@@ -70,14 +94,14 @@ function FontSizePicker(_ref, ref) {
|
|
|
70
94
|
* than six and a select control when they are more.
|
|
71
95
|
*/
|
|
72
96
|
|
|
73
|
-
const fontSizesContainComplexValues = fontSizes.some(
|
|
97
|
+
const fontSizesContainComplexValues = fontSizes.some(_ref3 => {
|
|
74
98
|
let {
|
|
75
99
|
size: sizeArg
|
|
76
|
-
} =
|
|
100
|
+
} = _ref3;
|
|
77
101
|
return !(0, _utils.isSimpleCssValue)(sizeArg);
|
|
78
102
|
});
|
|
79
103
|
const shouldUseSelectControl = fontSizes.length > 5;
|
|
80
|
-
const options = (0, _element.useMemo)(() => (0, _utils.getFontSizeOptions)(shouldUseSelectControl, fontSizes, disableCustomFontSizes
|
|
104
|
+
const options = (0, _element.useMemo)(() => (0, _utils.getFontSizeOptions)(shouldUseSelectControl, fontSizes, disableCustomFontSizes), [shouldUseSelectControl, fontSizes, disableCustomFontSizes]);
|
|
81
105
|
const selectedOption = (0, _utils.getSelectedOption)(fontSizes, value);
|
|
82
106
|
const isCustomValue = selectedOption.slug === _utils.CUSTOM_FONT_SIZE;
|
|
83
107
|
const [showCustomValueControl, setShowCustomValueControl] = (0, _element.useState)(!disableCustomFontSizes && isCustomValue);
|
|
@@ -122,12 +146,11 @@ function FontSizePicker(_ref, ref) {
|
|
|
122
146
|
ref
|
|
123
147
|
}), (0, _element.createElement)(_visuallyHidden.VisuallyHidden, {
|
|
124
148
|
as: "legend"
|
|
125
|
-
}, (0, _i18n.__)('Font size')), (0, _element.createElement)(
|
|
126
|
-
justify: "space-between",
|
|
149
|
+
}, (0, _i18n.__)('Font size')), (0, _element.createElement)(_hStack.HStack, {
|
|
127
150
|
className: `${baseClassName}__header`
|
|
128
|
-
}, (0, _element.createElement)(
|
|
151
|
+
}, (0, _element.createElement)(_baseControl.BaseControl.VisualLabel, null, (0, _i18n.__)('Size'), headerHint && (0, _element.createElement)("span", {
|
|
129
152
|
className: `${baseClassName}__header__hint`
|
|
130
|
-
}, headerHint))
|
|
153
|
+
}, headerHint)), !disableCustomFontSizes && (0, _element.createElement)(_button.default, {
|
|
131
154
|
label: showCustomValueControl ? (0, _i18n.__)('Use size preset') : (0, _i18n.__)('Set custom size'),
|
|
132
155
|
icon: _icons.settings,
|
|
133
156
|
onClick: () => {
|
|
@@ -135,8 +158,12 @@ function FontSizePicker(_ref, ref) {
|
|
|
135
158
|
},
|
|
136
159
|
isPressed: showCustomValueControl,
|
|
137
160
|
isSmall: true
|
|
138
|
-
}))
|
|
139
|
-
|
|
161
|
+
})), (0, _element.createElement)(MaybeVStack, {
|
|
162
|
+
__nextHasNoMarginBottom: __nextHasNoMarginBottom
|
|
163
|
+
}, (0, _element.createElement)("div", {
|
|
164
|
+
className: (0, _classnames.default)(`${baseClassName}__controls`, {
|
|
165
|
+
'is-next-has-no-margin-bottom': __nextHasNoMarginBottom
|
|
166
|
+
})
|
|
140
167
|
}, !!fontSizes.length && shouldUseSelectControl && !showCustomValueControl && (0, _element.createElement)(_customSelectControl.default, {
|
|
141
168
|
__nextUnconstrainedWidth: true,
|
|
142
169
|
className: `${baseClassName}__select`,
|
|
@@ -145,10 +172,10 @@ function FontSizePicker(_ref, ref) {
|
|
|
145
172
|
describedBy: currentFontSizeSR,
|
|
146
173
|
options: options,
|
|
147
174
|
value: options.find(option => option.key === selectedOption.slug),
|
|
148
|
-
onChange:
|
|
175
|
+
onChange: _ref4 => {
|
|
149
176
|
let {
|
|
150
177
|
selectedItem
|
|
151
|
-
} =
|
|
178
|
+
} = _ref4;
|
|
152
179
|
onChange(hasUnits ? selectedItem.size : Number(selectedItem.size));
|
|
153
180
|
|
|
154
181
|
if (selectedItem.key === _utils.CUSTOM_FONT_SIZE) {
|
|
@@ -157,6 +184,7 @@ function FontSizePicker(_ref, ref) {
|
|
|
157
184
|
},
|
|
158
185
|
size: size
|
|
159
186
|
}), !shouldUseSelectControl && !showCustomValueControl && (0, _element.createElement)(_toggleGroupControl.ToggleGroupControl, {
|
|
187
|
+
__nextHasNoMarginBottom: __nextHasNoMarginBottom,
|
|
160
188
|
label: (0, _i18n.__)('Font size'),
|
|
161
189
|
hideLabelFromVision: true,
|
|
162
190
|
value: value,
|
|
@@ -201,6 +229,7 @@ function FontSizePicker(_ref, ref) {
|
|
|
201
229
|
isSmall: true,
|
|
202
230
|
variant: "secondary"
|
|
203
231
|
}, (0, _i18n.__)('Reset'))))), withSlider && (0, _element.createElement)(_rangeControl.default, {
|
|
232
|
+
__nextHasNoMarginBottom: __nextHasNoMarginBottom,
|
|
204
233
|
className: `${baseClassName}__custom-input`,
|
|
205
234
|
label: (0, _i18n.__)('Custom Size'),
|
|
206
235
|
value: isPixelValue && noUnitsValue || '',
|
|
@@ -210,7 +239,7 @@ function FontSizePicker(_ref, ref) {
|
|
|
210
239
|
},
|
|
211
240
|
min: 12,
|
|
212
241
|
max: 100
|
|
213
|
-
}));
|
|
242
|
+
})));
|
|
214
243
|
}
|
|
215
244
|
|
|
216
245
|
var _default = (0, _element.forwardRef)(FontSizePicker);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/components/src/font-size-picker/index.js"],"names":["FontSizePicker","ref","fallbackFontSize","fontSizes","disableCustomFontSizes","onChange","size","value","withSlider","withReset","hasUnits","includes","noUnitsValue","parseInt","isPixelValue","endsWith","units","availableUnits","fontSizesContainComplexValues","some","sizeArg","shouldUseSelectControl","length","options","selectedOption","isCustomValue","slug","CUSTOM_FONT_SIZE","showCustomValueControl","setShowCustomValueControl","headerHint","hint","name","unit","currentFontSizeSR","baseClassName","settings","find","option","key","selectedItem","Number","newValue","map","label","nextSize","parseFloat","undefined"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __, sprintf } from '@wordpress/i18n';\nimport { settings } from '@wordpress/icons';\nimport { useState, useMemo, forwardRef } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { BaseControl } from '../base-control';\nimport Button from '../button';\nimport RangeControl from '../range-control';\nimport { Flex, FlexItem } from '../flex';\nimport { default as UnitControl, useCustomUnits } from '../unit-control';\nimport CustomSelectControl from '../custom-select-control';\nimport { VisuallyHidden } from '../visually-hidden';\nimport {\n\tToggleGroupControl,\n\tToggleGroupControlOption,\n} from '../toggle-group-control';\nimport {\n\tgetFontSizeOptions,\n\tgetSelectedOption,\n\tsplitValueAndUnitFromSize,\n\tisSimpleCssValue,\n\tCUSTOM_FONT_SIZE,\n} from './utils';\n\nfunction FontSizePicker(\n\t{\n\t\tfallbackFontSize,\n\t\tfontSizes = [],\n\t\tdisableCustomFontSizes = false,\n\t\tonChange,\n\t\t/** @type {'default' | '__unstable-large'} */\n\t\tsize = 'default',\n\t\tvalue,\n\t\twithSlider = false,\n\t\twithReset = true,\n\t},\n\tref\n) {\n\tconst hasUnits = [ typeof value, typeof fontSizes?.[ 0 ]?.size ].includes(\n\t\t'string'\n\t);\n\tconst noUnitsValue = ! hasUnits ? value : parseInt( value );\n\tconst isPixelValue = typeof value === 'number' || value?.endsWith?.( 'px' );\n\tconst units = useCustomUnits( {\n\t\tavailableUnits: [ 'px', 'em', 'rem' ],\n\t} );\n\n\t/**\n\t * The main font size UI displays a toggle group when the presets are less\n\t * than six and a select control when they are more.\n\t */\n\tconst fontSizesContainComplexValues = fontSizes.some(\n\t\t( { size: sizeArg } ) => ! isSimpleCssValue( sizeArg )\n\t);\n\tconst shouldUseSelectControl = fontSizes.length > 5;\n\tconst options = useMemo(\n\t\t() =>\n\t\t\tgetFontSizeOptions(\n\t\t\t\tshouldUseSelectControl,\n\t\t\t\tfontSizes,\n\t\t\t\tdisableCustomFontSizes,\n\t\t\t\tfontSizesContainComplexValues\n\t\t\t),\n\t\t[\n\t\t\tshouldUseSelectControl,\n\t\t\tfontSizes,\n\t\t\tdisableCustomFontSizes,\n\t\t\tfontSizesContainComplexValues,\n\t\t]\n\t);\n\tconst selectedOption = getSelectedOption( fontSizes, value );\n\tconst isCustomValue = selectedOption.slug === CUSTOM_FONT_SIZE;\n\tconst [ showCustomValueControl, setShowCustomValueControl ] = useState(\n\t\t! disableCustomFontSizes && isCustomValue\n\t);\n\tconst headerHint = useMemo( () => {\n\t\tif ( showCustomValueControl ) {\n\t\t\treturn `(${ __( 'Custom' ) })`;\n\t\t}\n\n\t\t// If we have a custom value that is not available in the font sizes,\n\t\t// show it as a hint as long as it's a simple CSS value.\n\t\tif ( isCustomValue ) {\n\t\t\treturn isSimpleCssValue( value ) && `(${ value })`;\n\t\t}\n\t\tif ( shouldUseSelectControl ) {\n\t\t\treturn (\n\t\t\t\tisSimpleCssValue( selectedOption?.size ) &&\n\t\t\t\t`(${ selectedOption?.size })`\n\t\t\t);\n\t\t}\n\t\t// Calculate the `hint` for toggle group control.\n\t\tlet hint = selectedOption.name;\n\t\tif (\n\t\t\t! fontSizesContainComplexValues &&\n\t\t\ttypeof selectedOption.size === 'string'\n\t\t) {\n\t\t\tconst [ , unit ] = splitValueAndUnitFromSize( selectedOption.size );\n\t\t\thint += `(${ unit })`;\n\t\t}\n\t\treturn hint;\n\t}, [\n\t\tshowCustomValueControl,\n\t\tselectedOption?.name,\n\t\tselectedOption?.size,\n\t\tvalue,\n\t\tisCustomValue,\n\t\tshouldUseSelectControl,\n\t\tfontSizesContainComplexValues,\n\t] );\n\n\tif ( ! options ) {\n\t\treturn null;\n\t}\n\n\t// This is used for select control only. We need to add support\n\t// for ToggleGroupControl.\n\tconst currentFontSizeSR = sprintf(\n\t\t// translators: %s: Currently selected font size.\n\t\t__( 'Currently selected font size: %s' ),\n\t\tselectedOption.name\n\t);\n\tconst baseClassName = 'components-font-size-picker';\n\treturn (\n\t\t<fieldset className={ baseClassName } { ...( ref ? {} : { ref } ) }>\n\t\t\t<VisuallyHidden as=\"legend\">{ __( 'Font size' ) }</VisuallyHidden>\n\t\t\t<Flex\n\t\t\t\tjustify=\"space-between\"\n\t\t\t\tclassName={ `${ baseClassName }__header` }\n\t\t\t>\n\t\t\t\t<FlexItem>\n\t\t\t\t\t<BaseControl.VisualLabel>\n\t\t\t\t\t\t{ __( 'Size' ) }\n\t\t\t\t\t\t{ headerHint && (\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tclassName={ `${ baseClassName }__header__hint` }\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{ headerHint }\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t) }\n\t\t\t\t\t</BaseControl.VisualLabel>\n\t\t\t\t</FlexItem>\n\t\t\t\t{ ! disableCustomFontSizes && (\n\t\t\t\t\t<FlexItem>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tlabel={\n\t\t\t\t\t\t\t\tshowCustomValueControl\n\t\t\t\t\t\t\t\t\t? __( 'Use size preset' )\n\t\t\t\t\t\t\t\t\t: __( 'Set custom size' )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ticon={ settings }\n\t\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t\tsetShowCustomValueControl(\n\t\t\t\t\t\t\t\t\t! showCustomValueControl\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tisPressed={ showCustomValueControl }\n\t\t\t\t\t\t\tisSmall\n\t\t\t\t\t\t/>\n\t\t\t\t\t</FlexItem>\n\t\t\t\t) }\n\t\t\t</Flex>\n\t\t\t<div className={ `${ baseClassName }__controls` }>\n\t\t\t\t{ !! fontSizes.length &&\n\t\t\t\t\tshouldUseSelectControl &&\n\t\t\t\t\t! showCustomValueControl && (\n\t\t\t\t\t\t<CustomSelectControl\n\t\t\t\t\t\t\t__nextUnconstrainedWidth\n\t\t\t\t\t\t\tclassName={ `${ baseClassName }__select` }\n\t\t\t\t\t\t\tlabel={ __( 'Font size' ) }\n\t\t\t\t\t\t\thideLabelFromVision\n\t\t\t\t\t\t\tdescribedBy={ currentFontSizeSR }\n\t\t\t\t\t\t\toptions={ options }\n\t\t\t\t\t\t\tvalue={ options.find(\n\t\t\t\t\t\t\t\t( option ) => option.key === selectedOption.slug\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\tonChange={ ( { selectedItem } ) => {\n\t\t\t\t\t\t\t\tonChange(\n\t\t\t\t\t\t\t\t\thasUnits\n\t\t\t\t\t\t\t\t\t\t? selectedItem.size\n\t\t\t\t\t\t\t\t\t\t: Number( selectedItem.size )\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tif ( selectedItem.key === CUSTOM_FONT_SIZE ) {\n\t\t\t\t\t\t\t\t\tsetShowCustomValueControl( true );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tsize={ size }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t\t{ ! shouldUseSelectControl && ! showCustomValueControl && (\n\t\t\t\t\t<ToggleGroupControl\n\t\t\t\t\t\tlabel={ __( 'Font size' ) }\n\t\t\t\t\t\thideLabelFromVision\n\t\t\t\t\t\tvalue={ value }\n\t\t\t\t\t\tonChange={ ( newValue ) => {\n\t\t\t\t\t\t\tonChange(\n\t\t\t\t\t\t\t\thasUnits ? newValue : Number( newValue )\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tisBlock\n\t\t\t\t\t\tsize={ size }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ options.map( ( option ) => (\n\t\t\t\t\t\t\t<ToggleGroupControlOption\n\t\t\t\t\t\t\t\tkey={ option.key }\n\t\t\t\t\t\t\t\tvalue={ option.value }\n\t\t\t\t\t\t\t\tlabel={ option.label }\n\t\t\t\t\t\t\t\taria-label={ option.name }\n\t\t\t\t\t\t\t\tshowTooltip={ true }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) ) }\n\t\t\t\t\t</ToggleGroupControl>\n\t\t\t\t) }\n\t\t\t\t{ ! withSlider &&\n\t\t\t\t\t! disableCustomFontSizes &&\n\t\t\t\t\tshowCustomValueControl && (\n\t\t\t\t\t\t<Flex\n\t\t\t\t\t\t\tjustify=\"space-between\"\n\t\t\t\t\t\t\tclassName={ `${ baseClassName }__custom-size-control` }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<FlexItem isBlock>\n\t\t\t\t\t\t\t\t<UnitControl\n\t\t\t\t\t\t\t\t\tlabel={ __( 'Custom' ) }\n\t\t\t\t\t\t\t\t\tlabelPosition=\"top\"\n\t\t\t\t\t\t\t\t\thideLabelFromVision\n\t\t\t\t\t\t\t\t\tvalue={ value }\n\t\t\t\t\t\t\t\t\tonChange={ ( nextSize ) => {\n\t\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\t\t0 === parseFloat( nextSize ) ||\n\t\t\t\t\t\t\t\t\t\t\t! nextSize\n\t\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\t\tonChange( undefined );\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tonChange(\n\t\t\t\t\t\t\t\t\t\t\t\thasUnits\n\t\t\t\t\t\t\t\t\t\t\t\t\t? nextSize\n\t\t\t\t\t\t\t\t\t\t\t\t\t: parseInt( nextSize, 10 )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\tsize={ size }\n\t\t\t\t\t\t\t\t\tunits={ hasUnits ? units : [] }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</FlexItem>\n\t\t\t\t\t\t\t{ withReset && (\n\t\t\t\t\t\t\t\t<FlexItem isBlock>\n\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\tclassName=\"components-color-palette__clear\"\n\t\t\t\t\t\t\t\t\t\tdisabled={ value === undefined }\n\t\t\t\t\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t\t\t\t\tonChange( undefined );\n\t\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\t\tisSmall\n\t\t\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{ __( 'Reset' ) }\n\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t</FlexItem>\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t</Flex>\n\t\t\t\t\t) }\n\t\t\t</div>\n\t\t\t{ withSlider && (\n\t\t\t\t<RangeControl\n\t\t\t\t\tclassName={ `${ baseClassName }__custom-input` }\n\t\t\t\t\tlabel={ __( 'Custom Size' ) }\n\t\t\t\t\tvalue={ ( isPixelValue && noUnitsValue ) || '' }\n\t\t\t\t\tinitialPosition={ fallbackFontSize }\n\t\t\t\t\tonChange={ ( newValue ) => {\n\t\t\t\t\t\tonChange( hasUnits ? newValue + 'px' : newValue );\n\t\t\t\t\t} }\n\t\t\t\t\tmin={ 12 }\n\t\t\t\t\tmax={ 100 }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</fieldset>\n\t);\n}\n\nexport default forwardRef( FontSizePicker );\n"]}
|
|
1
|
+
{"version":3,"sources":["@wordpress/components/src/font-size-picker/index.js"],"names":["MaybeVStack","__nextHasNoMarginBottom","children","FontSizePicker","ref","fallbackFontSize","fontSizes","disableCustomFontSizes","onChange","size","value","withSlider","withReset","hasUnits","includes","noUnitsValue","parseInt","isPixelValue","endsWith","units","availableUnits","fontSizesContainComplexValues","some","sizeArg","shouldUseSelectControl","length","options","selectedOption","isCustomValue","slug","CUSTOM_FONT_SIZE","showCustomValueControl","setShowCustomValueControl","headerHint","hint","name","unit","currentFontSizeSR","baseClassName","settings","find","option","key","selectedItem","Number","newValue","map","label","nextSize","parseFloat","undefined"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport classNames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport { __, sprintf } from '@wordpress/i18n';\nimport { settings } from '@wordpress/icons';\nimport { useState, useMemo, forwardRef } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { BaseControl } from '../base-control';\nimport Button from '../button';\nimport RangeControl from '../range-control';\nimport { Flex, FlexItem } from '../flex';\nimport { default as UnitControl, useCustomUnits } from '../unit-control';\nimport CustomSelectControl from '../custom-select-control';\nimport { VisuallyHidden } from '../visually-hidden';\nimport {\n\tToggleGroupControl,\n\tToggleGroupControlOption,\n} from '../toggle-group-control';\nimport {\n\tgetFontSizeOptions,\n\tgetSelectedOption,\n\tsplitValueAndUnitFromSize,\n\tisSimpleCssValue,\n\tCUSTOM_FONT_SIZE,\n} from './utils';\nimport { VStack } from '../v-stack';\nimport { HStack } from '../h-stack';\n\n// This conditional is needed to maintain the spacing before the slider in the `withSlider` case.\nconst MaybeVStack = ( { __nextHasNoMarginBottom, children } ) =>\n\t! __nextHasNoMarginBottom ? (\n\t\tchildren\n\t) : (\n\t\t<VStack spacing={ 6 } children={ children } />\n\t);\n\nfunction FontSizePicker(\n\t{\n\t\t/** Start opting into the new margin-free styles that will become the default in a future version. */\n\t\t__nextHasNoMarginBottom = false,\n\t\tfallbackFontSize,\n\t\tfontSizes = [],\n\t\tdisableCustomFontSizes = false,\n\t\tonChange,\n\t\t/** @type {'default' | '__unstable-large'} */\n\t\tsize = 'default',\n\t\tvalue,\n\t\twithSlider = false,\n\t\twithReset = true,\n\t},\n\tref\n) {\n\tconst hasUnits = [ typeof value, typeof fontSizes?.[ 0 ]?.size ].includes(\n\t\t'string'\n\t);\n\tconst noUnitsValue = ! hasUnits ? value : parseInt( value );\n\tconst isPixelValue = typeof value === 'number' || value?.endsWith?.( 'px' );\n\tconst units = useCustomUnits( {\n\t\tavailableUnits: [ 'px', 'em', 'rem' ],\n\t} );\n\n\t/**\n\t * The main font size UI displays a toggle group when the presets are less\n\t * than six and a select control when they are more.\n\t */\n\tconst fontSizesContainComplexValues = fontSizes.some(\n\t\t( { size: sizeArg } ) => ! isSimpleCssValue( sizeArg )\n\t);\n\tconst shouldUseSelectControl = fontSizes.length > 5;\n\tconst options = useMemo(\n\t\t() =>\n\t\t\tgetFontSizeOptions(\n\t\t\t\tshouldUseSelectControl,\n\t\t\t\tfontSizes,\n\t\t\t\tdisableCustomFontSizes\n\t\t\t),\n\t\t[ shouldUseSelectControl, fontSizes, disableCustomFontSizes ]\n\t);\n\tconst selectedOption = getSelectedOption( fontSizes, value );\n\tconst isCustomValue = selectedOption.slug === CUSTOM_FONT_SIZE;\n\tconst [ showCustomValueControl, setShowCustomValueControl ] = useState(\n\t\t! disableCustomFontSizes && isCustomValue\n\t);\n\tconst headerHint = useMemo( () => {\n\t\tif ( showCustomValueControl ) {\n\t\t\treturn `(${ __( 'Custom' ) })`;\n\t\t}\n\n\t\t// If we have a custom value that is not available in the font sizes,\n\t\t// show it as a hint as long as it's a simple CSS value.\n\t\tif ( isCustomValue ) {\n\t\t\treturn isSimpleCssValue( value ) && `(${ value })`;\n\t\t}\n\t\tif ( shouldUseSelectControl ) {\n\t\t\treturn (\n\t\t\t\tisSimpleCssValue( selectedOption?.size ) &&\n\t\t\t\t`(${ selectedOption?.size })`\n\t\t\t);\n\t\t}\n\n\t\t// Calculate the `hint` for toggle group control.\n\t\tlet hint = selectedOption.name;\n\t\tif (\n\t\t\t! fontSizesContainComplexValues &&\n\t\t\ttypeof selectedOption.size === 'string'\n\t\t) {\n\t\t\tconst [ , unit ] = splitValueAndUnitFromSize( selectedOption.size );\n\t\t\thint += `(${ unit })`;\n\t\t}\n\t\treturn hint;\n\t}, [\n\t\tshowCustomValueControl,\n\t\tselectedOption?.name,\n\t\tselectedOption?.size,\n\t\tvalue,\n\t\tisCustomValue,\n\t\tshouldUseSelectControl,\n\t\tfontSizesContainComplexValues,\n\t] );\n\n\tif ( ! options ) {\n\t\treturn null;\n\t}\n\n\t// This is used for select control only. We need to add support\n\t// for ToggleGroupControl.\n\tconst currentFontSizeSR = sprintf(\n\t\t// translators: %s: Currently selected font size.\n\t\t__( 'Currently selected font size: %s' ),\n\t\tselectedOption.name\n\t);\n\tconst baseClassName = 'components-font-size-picker';\n\treturn (\n\t\t<fieldset className={ baseClassName } { ...( ref ? {} : { ref } ) }>\n\t\t\t<VisuallyHidden as=\"legend\">{ __( 'Font size' ) }</VisuallyHidden>\n\t\t\t<HStack className={ `${ baseClassName }__header` }>\n\t\t\t\t<BaseControl.VisualLabel>\n\t\t\t\t\t{ __( 'Size' ) }\n\t\t\t\t\t{ headerHint && (\n\t\t\t\t\t\t<span className={ `${ baseClassName }__header__hint` }>\n\t\t\t\t\t\t\t{ headerHint }\n\t\t\t\t\t\t</span>\n\t\t\t\t\t) }\n\t\t\t\t</BaseControl.VisualLabel>\n\t\t\t\t{ ! disableCustomFontSizes && (\n\t\t\t\t\t<Button\n\t\t\t\t\t\tlabel={\n\t\t\t\t\t\t\tshowCustomValueControl\n\t\t\t\t\t\t\t\t? __( 'Use size preset' )\n\t\t\t\t\t\t\t\t: __( 'Set custom size' )\n\t\t\t\t\t\t}\n\t\t\t\t\t\ticon={ settings }\n\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\tsetShowCustomValueControl(\n\t\t\t\t\t\t\t\t! showCustomValueControl\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tisPressed={ showCustomValueControl }\n\t\t\t\t\t\tisSmall\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t</HStack>\n\t\t\t<MaybeVStack __nextHasNoMarginBottom={ __nextHasNoMarginBottom }>\n\t\t\t\t<div\n\t\t\t\t\tclassName={ classNames( `${ baseClassName }__controls`, {\n\t\t\t\t\t\t'is-next-has-no-margin-bottom': __nextHasNoMarginBottom,\n\t\t\t\t\t} ) }\n\t\t\t\t>\n\t\t\t\t\t{ !! fontSizes.length &&\n\t\t\t\t\t\tshouldUseSelectControl &&\n\t\t\t\t\t\t! showCustomValueControl && (\n\t\t\t\t\t\t\t<CustomSelectControl\n\t\t\t\t\t\t\t\t__nextUnconstrainedWidth\n\t\t\t\t\t\t\t\tclassName={ `${ baseClassName }__select` }\n\t\t\t\t\t\t\t\tlabel={ __( 'Font size' ) }\n\t\t\t\t\t\t\t\thideLabelFromVision\n\t\t\t\t\t\t\t\tdescribedBy={ currentFontSizeSR }\n\t\t\t\t\t\t\t\toptions={ options }\n\t\t\t\t\t\t\t\tvalue={ options.find(\n\t\t\t\t\t\t\t\t\t( option ) =>\n\t\t\t\t\t\t\t\t\t\toption.key === selectedOption.slug\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\tonChange={ ( { selectedItem } ) => {\n\t\t\t\t\t\t\t\t\tonChange(\n\t\t\t\t\t\t\t\t\t\thasUnits\n\t\t\t\t\t\t\t\t\t\t\t? selectedItem.size\n\t\t\t\t\t\t\t\t\t\t\t: Number( selectedItem.size )\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\tselectedItem.key === CUSTOM_FONT_SIZE\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\tsetShowCustomValueControl( true );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\tsize={ size }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) }\n\t\t\t\t\t{ ! shouldUseSelectControl && ! showCustomValueControl && (\n\t\t\t\t\t\t<ToggleGroupControl\n\t\t\t\t\t\t\t__nextHasNoMarginBottom={ __nextHasNoMarginBottom }\n\t\t\t\t\t\t\tlabel={ __( 'Font size' ) }\n\t\t\t\t\t\t\thideLabelFromVision\n\t\t\t\t\t\t\tvalue={ value }\n\t\t\t\t\t\t\tonChange={ ( newValue ) => {\n\t\t\t\t\t\t\t\tonChange(\n\t\t\t\t\t\t\t\t\thasUnits ? newValue : Number( newValue )\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tisBlock\n\t\t\t\t\t\t\tsize={ size }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ options.map( ( option ) => (\n\t\t\t\t\t\t\t\t<ToggleGroupControlOption\n\t\t\t\t\t\t\t\t\tkey={ option.key }\n\t\t\t\t\t\t\t\t\tvalue={ option.value }\n\t\t\t\t\t\t\t\t\tlabel={ option.label }\n\t\t\t\t\t\t\t\t\taria-label={ option.name }\n\t\t\t\t\t\t\t\t\tshowTooltip={ true }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) ) }\n\t\t\t\t\t\t</ToggleGroupControl>\n\t\t\t\t\t) }\n\t\t\t\t\t{ ! withSlider &&\n\t\t\t\t\t\t! disableCustomFontSizes &&\n\t\t\t\t\t\tshowCustomValueControl && (\n\t\t\t\t\t\t\t<Flex\n\t\t\t\t\t\t\t\tjustify=\"space-between\"\n\t\t\t\t\t\t\t\tclassName={ `${ baseClassName }__custom-size-control` }\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<FlexItem isBlock>\n\t\t\t\t\t\t\t\t\t<UnitControl\n\t\t\t\t\t\t\t\t\t\tlabel={ __( 'Custom' ) }\n\t\t\t\t\t\t\t\t\t\tlabelPosition=\"top\"\n\t\t\t\t\t\t\t\t\t\thideLabelFromVision\n\t\t\t\t\t\t\t\t\t\tvalue={ value }\n\t\t\t\t\t\t\t\t\t\tonChange={ ( nextSize ) => {\n\t\t\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\t\t\t0 === parseFloat( nextSize ) ||\n\t\t\t\t\t\t\t\t\t\t\t\t! nextSize\n\t\t\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\t\t\tonChange( undefined );\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tonChange(\n\t\t\t\t\t\t\t\t\t\t\t\t\thasUnits\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? nextSize\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: parseInt(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tnextSize,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t10\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t )\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\t\tsize={ size }\n\t\t\t\t\t\t\t\t\t\tunits={ hasUnits ? units : [] }\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</FlexItem>\n\t\t\t\t\t\t\t\t{ withReset && (\n\t\t\t\t\t\t\t\t\t<FlexItem isBlock>\n\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"components-color-palette__clear\"\n\t\t\t\t\t\t\t\t\t\t\tdisabled={ value === undefined }\n\t\t\t\t\t\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t\t\t\t\t\tonChange( undefined );\n\t\t\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\t\t\tisSmall\n\t\t\t\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{ __( 'Reset' ) }\n\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t</FlexItem>\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t</Flex>\n\t\t\t\t\t\t) }\n\t\t\t\t</div>\n\t\t\t\t{ withSlider && (\n\t\t\t\t\t<RangeControl\n\t\t\t\t\t\t__nextHasNoMarginBottom={ __nextHasNoMarginBottom }\n\t\t\t\t\t\tclassName={ `${ baseClassName }__custom-input` }\n\t\t\t\t\t\tlabel={ __( 'Custom Size' ) }\n\t\t\t\t\t\tvalue={ ( isPixelValue && noUnitsValue ) || '' }\n\t\t\t\t\t\tinitialPosition={ fallbackFontSize }\n\t\t\t\t\t\tonChange={ ( newValue ) => {\n\t\t\t\t\t\t\tonChange( hasUnits ? newValue + 'px' : newValue );\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tmin={ 12 }\n\t\t\t\t\t\tmax={ 100 }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t</MaybeVStack>\n\t\t</fieldset>\n\t);\n}\n\nexport default forwardRef( FontSizePicker );\n"]}
|
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.CUSTOM_FONT_SIZE = void 0;
|
|
7
7
|
exports.getFontSizeOptions = getFontSizeOptions;
|
|
8
8
|
exports.getSelectedOption = getSelectedOption;
|
|
9
|
+
exports.getToggleGroupOptions = getToggleGroupOptions;
|
|
9
10
|
exports.isSimpleCssValue = isSimpleCssValue;
|
|
10
11
|
exports.splitValueAndUnitFromSize = splitValueAndUnitFromSize;
|
|
11
12
|
|
|
@@ -26,14 +27,22 @@ const CUSTOM_FONT_SIZE_OPTION = {
|
|
|
26
27
|
name: (0, _i18n.__)('Custom')
|
|
27
28
|
};
|
|
28
29
|
/**
|
|
29
|
-
* In case we have at most five font sizes,
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
* cannot be caluclated properly and the incremental sequence of numbers as labels
|
|
33
|
-
* can help the user better mentally map the different available font sizes.
|
|
30
|
+
* In case we have at most five font sizes, show a `T-shirt size`
|
|
31
|
+
* alias as a label of the font size. The label assumes that the font sizes
|
|
32
|
+
* are ordered accordingly - from smallest to largest.
|
|
34
33
|
*/
|
|
35
34
|
|
|
36
|
-
const FONT_SIZES_ALIASES = [
|
|
35
|
+
const FONT_SIZES_ALIASES = [
|
|
36
|
+
/* translators: S stands for 'small' and is a size label. */
|
|
37
|
+
(0, _i18n.__)('S'),
|
|
38
|
+
/* translators: M stands for 'medium' and is a size label. */
|
|
39
|
+
(0, _i18n.__)('M'),
|
|
40
|
+
/* translators: L stands for 'large' and is a size label. */
|
|
41
|
+
(0, _i18n.__)('L'),
|
|
42
|
+
/* translators: XL stands for 'extra large' and is a size label. */
|
|
43
|
+
(0, _i18n.__)('XL'),
|
|
44
|
+
/* translators: XXL stands for 'extra extra large' and is a size label. */
|
|
45
|
+
(0, _i18n.__)('XXL')];
|
|
37
46
|
/**
|
|
38
47
|
* Helper util to split a font size to its numeric value
|
|
39
48
|
* and its `unit`, if exists.
|
|
@@ -68,20 +77,19 @@ function isSimpleCssValue(value) {
|
|
|
68
77
|
* Return font size options in the proper format depending
|
|
69
78
|
* on the currently used control (select, toggle group).
|
|
70
79
|
*
|
|
71
|
-
* @param {boolean} useSelectControl
|
|
72
|
-
* @param {Object[]} optionsArray
|
|
73
|
-
* @param {
|
|
74
|
-
* @
|
|
75
|
-
* @return {Object[]|null} Array of font sizes in proper format for the used control.
|
|
80
|
+
* @param {boolean} useSelectControl Whether to use a select control.
|
|
81
|
+
* @param {Object[]} optionsArray Array of available font sizes objects.
|
|
82
|
+
* @param {boolean} disableCustomFontSizes Flag that indicates if custom font sizes are disabled.
|
|
83
|
+
* @return {Object[]|null} Array of font sizes in proper format for the used control.
|
|
76
84
|
*/
|
|
77
85
|
|
|
78
86
|
|
|
79
|
-
function getFontSizeOptions(useSelectControl, optionsArray, disableCustomFontSizes
|
|
87
|
+
function getFontSizeOptions(useSelectControl, optionsArray, disableCustomFontSizes) {
|
|
80
88
|
if (disableCustomFontSizes && !optionsArray.length) {
|
|
81
89
|
return null;
|
|
82
90
|
}
|
|
83
91
|
|
|
84
|
-
return useSelectControl ? getSelectOptions(optionsArray, disableCustomFontSizes) : getToggleGroupOptions(optionsArray
|
|
92
|
+
return useSelectControl ? getSelectOptions(optionsArray, disableCustomFontSizes) : getToggleGroupOptions(optionsArray);
|
|
85
93
|
}
|
|
86
94
|
|
|
87
95
|
function getSelectOptions(optionsArray, disableCustomFontSizes) {
|
|
@@ -100,25 +108,27 @@ function getSelectOptions(optionsArray, disableCustomFontSizes) {
|
|
|
100
108
|
};
|
|
101
109
|
});
|
|
102
110
|
}
|
|
111
|
+
/**
|
|
112
|
+
* Build options for the toggle group options.
|
|
113
|
+
*
|
|
114
|
+
* @param {Array} optionsArray An array of font size options.
|
|
115
|
+
* @param {string[]} labelAliases An array of alternative labels.
|
|
116
|
+
* @return {Array} Remapped optionsArray.
|
|
117
|
+
*/
|
|
103
118
|
|
|
104
|
-
|
|
119
|
+
|
|
120
|
+
function getToggleGroupOptions(optionsArray) {
|
|
121
|
+
let labelAliases = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : FONT_SIZES_ALIASES;
|
|
105
122
|
return optionsArray.map((_ref2, index) => {
|
|
106
123
|
let {
|
|
107
124
|
slug,
|
|
108
125
|
size,
|
|
109
126
|
name
|
|
110
127
|
} = _ref2;
|
|
111
|
-
let label = optionsContainComplexCssValues ? FONT_SIZES_ALIASES[index] : size;
|
|
112
|
-
|
|
113
|
-
if (!optionsContainComplexCssValues && typeof size === 'string') {
|
|
114
|
-
const [numericValue] = splitValueAndUnitFromSize(size);
|
|
115
|
-
label = numericValue;
|
|
116
|
-
}
|
|
117
|
-
|
|
118
128
|
return {
|
|
119
129
|
key: slug,
|
|
120
130
|
value: size,
|
|
121
|
-
label,
|
|
131
|
+
label: labelAliases[index],
|
|
122
132
|
name
|
|
123
133
|
};
|
|
124
134
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/components/src/font-size-picker/utils.js"],"names":["DEFAULT_FONT_SIZE","DEFAULT_FONT_SIZE_OPTION","slug","name","CUSTOM_FONT_SIZE","CUSTOM_FONT_SIZE_OPTION","FONT_SIZES_ALIASES","splitValueAndUnitFromSize","size","numericValue","unit","match","isNaN","parseFloat","isFinite","isSimpleCssValue","value","sizeRegex","test","getFontSizeOptions","useSelectControl","optionsArray","disableCustomFontSizes","
|
|
1
|
+
{"version":3,"sources":["@wordpress/components/src/font-size-picker/utils.js"],"names":["DEFAULT_FONT_SIZE","DEFAULT_FONT_SIZE_OPTION","slug","name","CUSTOM_FONT_SIZE","CUSTOM_FONT_SIZE_OPTION","FONT_SIZES_ALIASES","splitValueAndUnitFromSize","size","numericValue","unit","match","isNaN","parseFloat","isFinite","isSimpleCssValue","value","sizeRegex","test","getFontSizeOptions","useSelectControl","optionsArray","disableCustomFontSizes","length","getSelectOptions","getToggleGroupOptions","options","map","key","__experimentalHint","labelAliases","index","label","getSelectedOption","fontSizes","find","font"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\n\nconst DEFAULT_FONT_SIZE = 'default';\nconst DEFAULT_FONT_SIZE_OPTION = {\n\tslug: DEFAULT_FONT_SIZE,\n\tname: __( 'Default' ),\n};\nexport const CUSTOM_FONT_SIZE = 'custom';\nconst CUSTOM_FONT_SIZE_OPTION = {\n\tslug: CUSTOM_FONT_SIZE,\n\tname: __( 'Custom' ),\n};\n\n/**\n * In case we have at most five font sizes, show a `T-shirt size`\n * alias as a label of the font size. The label assumes that the font sizes\n * are ordered accordingly - from smallest to largest.\n */\nconst FONT_SIZES_ALIASES = [\n\t/* translators: S stands for 'small' and is a size label. */\n\t__( 'S' ),\n\t/* translators: M stands for 'medium' and is a size label. */\n\t__( 'M' ),\n\t/* translators: L stands for 'large' and is a size label. */\n\t__( 'L' ),\n\t/* translators: XL stands for 'extra large' and is a size label. */\n\t__( 'XL' ),\n\t/* translators: XXL stands for 'extra extra large' and is a size label. */\n\t__( 'XXL' ),\n];\n\n/**\n * Helper util to split a font size to its numeric value\n * and its `unit`, if exists.\n *\n * @param {string|number} size Font size.\n * @return {[number, string]} An array with the numeric value and the unit if exists.\n */\nexport function splitValueAndUnitFromSize( size ) {\n\tconst [ numericValue, unit ] = `${ size }`.match( /[\\d\\.]+|\\D+/g );\n\n\tif ( ! isNaN( parseFloat( numericValue ) ) && isFinite( numericValue ) ) {\n\t\treturn [ numericValue, unit ];\n\t}\n\n\treturn [];\n}\n\n/**\n * Some themes use css vars for their font sizes, so until we\n * have the way of calculating them don't display them.\n *\n * @param {string|number} value The value that is checked.\n * @return {boolean} Whether the value is a simple css value.\n */\nexport function isSimpleCssValue( value ) {\n\tconst sizeRegex = /^[\\d\\.]+(px|em|rem|vw|vh|%)?$/i;\n\treturn sizeRegex.test( value );\n}\n\n/**\n * Return font size options in the proper format depending\n * on the currently used control (select, toggle group).\n *\n * @param {boolean} useSelectControl Whether to use a select control.\n * @param {Object[]} optionsArray Array of available font sizes objects.\n * @param {boolean} disableCustomFontSizes Flag that indicates if custom font sizes are disabled.\n * @return {Object[]|null} Array of font sizes in proper format for the used control.\n */\nexport function getFontSizeOptions(\n\tuseSelectControl,\n\toptionsArray,\n\tdisableCustomFontSizes\n) {\n\tif ( disableCustomFontSizes && ! optionsArray.length ) {\n\t\treturn null;\n\t}\n\treturn useSelectControl\n\t\t? getSelectOptions( optionsArray, disableCustomFontSizes )\n\t\t: getToggleGroupOptions( optionsArray );\n}\n\nfunction getSelectOptions( optionsArray, disableCustomFontSizes ) {\n\tconst options = [\n\t\tDEFAULT_FONT_SIZE_OPTION,\n\t\t...optionsArray,\n\t\t...( disableCustomFontSizes ? [] : [ CUSTOM_FONT_SIZE_OPTION ] ),\n\t];\n\treturn options.map( ( { slug, name, size } ) => ( {\n\t\tkey: slug,\n\t\tname,\n\t\tsize,\n\t\t__experimentalHint:\n\t\t\tsize && isSimpleCssValue( size ) && parseFloat( size ),\n\t} ) );\n}\n\n/**\n * Build options for the toggle group options.\n *\n * @param {Array} optionsArray An array of font size options.\n * @param {string[]} labelAliases An array of alternative labels.\n * @return {Array} Remapped optionsArray.\n */\nexport function getToggleGroupOptions(\n\toptionsArray,\n\tlabelAliases = FONT_SIZES_ALIASES\n) {\n\treturn optionsArray.map( ( { slug, size, name }, index ) => {\n\t\treturn {\n\t\t\tkey: slug,\n\t\t\tvalue: size,\n\t\t\tlabel: labelAliases[ index ],\n\t\t\tname,\n\t\t};\n\t} );\n}\n\nexport function getSelectedOption( fontSizes, value ) {\n\tif ( ! value ) {\n\t\treturn DEFAULT_FONT_SIZE_OPTION;\n\t}\n\treturn (\n\t\tfontSizes.find( ( font ) => font.size === value ) ||\n\t\tCUSTOM_FONT_SIZE_OPTION\n\t);\n}\n"]}
|
|
@@ -91,7 +91,8 @@ function FormTokenField(props) {
|
|
|
91
91
|
__experimentalExpandOnFocus = false,
|
|
92
92
|
__experimentalValidateInput = () => true,
|
|
93
93
|
__experimentalShowHowTo = true,
|
|
94
|
-
__next36pxDefaultSize = false
|
|
94
|
+
__next36pxDefaultSize = false,
|
|
95
|
+
__experimentalAutoSelectFirstMatch = false
|
|
95
96
|
} = props;
|
|
96
97
|
const instanceId = (0, _compose.useInstanceId)(FormTokenField); // We reset to these initial values again in the onBlur
|
|
97
98
|
|
|
@@ -409,7 +410,7 @@ function FormTokenField(props) {
|
|
|
409
410
|
}
|
|
410
411
|
|
|
411
412
|
function addNewTokens(tokens) {
|
|
412
|
-
const tokensToAdd =
|
|
413
|
+
const tokensToAdd = [...new Set(tokens.map(saveTransform).filter(Boolean).filter(token => !valueContainsToken(token)))];
|
|
413
414
|
|
|
414
415
|
if (tokensToAdd.length > 0) {
|
|
415
416
|
const newValue = (0, _lodash.clone)(value);
|
|
@@ -477,7 +478,7 @@ function FormTokenField(props) {
|
|
|
477
478
|
});
|
|
478
479
|
|
|
479
480
|
if (match.length === 0) {
|
|
480
|
-
_suggestions = (
|
|
481
|
+
_suggestions = _suggestions.filter(suggestion => !normalizedValue.includes(suggestion));
|
|
481
482
|
} else {
|
|
482
483
|
match = match.toLocaleLowerCase();
|
|
483
484
|
|
|
@@ -533,8 +534,13 @@ function FormTokenField(props) {
|
|
|
533
534
|
setIsExpanded(__experimentalExpandOnFocus || inputHasMinimumChars && hasMatchingSuggestions);
|
|
534
535
|
|
|
535
536
|
if (resetSelectedSuggestion) {
|
|
536
|
-
|
|
537
|
-
|
|
537
|
+
if (__experimentalAutoSelectFirstMatch && inputHasMinimumChars && hasMatchingSuggestions) {
|
|
538
|
+
setSelectedSuggestionIndex(0);
|
|
539
|
+
setSelectedSuggestionScroll(true);
|
|
540
|
+
} else {
|
|
541
|
+
setSelectedSuggestionIndex(-1);
|
|
542
|
+
setSelectedSuggestionScroll(false);
|
|
543
|
+
}
|
|
538
544
|
}
|
|
539
545
|
|
|
540
546
|
if (inputHasMinimumChars) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/components/src/form-token-field/index.tsx"],"names":["identity","value","FormTokenField","props","autoCapitalize","autoComplete","maxLength","placeholder","label","className","suggestions","maxSuggestions","displayTransform","saveTransform","token","trim","onChange","onInputChange","onFocus","undefined","isBorderless","disabled","tokenizeOnSpace","messages","added","removed","remove","__experimentalInvalid","__experimentalRenderItem","__experimentalExpandOnFocus","__experimentalValidateInput","__experimentalShowHowTo","__next36pxDefaultSize","instanceId","incompleteTokenValue","setIncompleteTokenValue","inputOffsetFromEnd","setInputOffsetFromEnd","isActive","setIsActive","isExpanded","setIsExpanded","selectedSuggestionIndex","setSelectedSuggestionIndex","selectedSuggestionScroll","setSelectedSuggestionScroll","prevSuggestions","prevValue","input","tokensAndInput","debouncedSpeak","speak","hasFocus","focus","suggestionsDidUpdate","updateSuggestions","current","ownerDocument","activeElement","onFocusHandler","event","target","onBlur","inputHasValidValue","onKeyDown","preventDefault","defaultPrevented","keyCode","BACKSPACE","handleDeleteKey","deleteTokenBeforeInput","ENTER","addCurrentToken","LEFT","handleLeftArrowKey","UP","handleUpArrowKey","RIGHT","handleRightArrowKey","DOWN","handleDownArrowKey","DELETE","deleteTokenAfterInput","SPACE","ESCAPE","handleEscapeKey","onKeyPress","charCode","handleCommaKey","onContainerTouched","onTokenClickRemove","deleteToken","onSuggestionHovered","suggestion","index","getMatchingSuggestions","indexOf","onSuggestionSelected","addNewToken","onInputChangeHandler","text","separator","items","split","tokenValue","length","addNewTokens","slice","_deleteToken","isInputEmpty","moveInputBeforePreviousToken","moveInputAfterNextToken","HTMLInputElement","moveInputToIndex","Math","max","prevInputOffsetFromEnd","min","getIndexOfInput","selectedSuggestion","getSelectedSuggestion","tokens","tokensToAdd","map","filter","Boolean","valueContainsToken","newValue","splice","newTokens","item","getTokenValue","searchValue","_suggestions","_value","_maxSuggestions","_saveTransform","match","startsWithMatch","containsMatch","normalizedValue","toLocaleLowerCase","forEach","push","concat","resetSelectedSuggestion","inputHasMinimumChars","matchingSuggestions","hasMatchingSuggestions","message","renderTokensAndInput","components","renderToken","renderInput","status","termPosition","termsCount","title","onMouseEnter","onMouseLeave","inputProps","key","classes","tokenFieldProps","tabIndex","Object","assign"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { last, clone, uniq, map, difference, some } from 'lodash';\nimport classnames from 'classnames';\nimport type { KeyboardEvent, MouseEvent, TouchEvent } from 'react';\n\n/**\n * WordPress dependencies\n */\nimport { useEffect, useRef, useState } from '@wordpress/element';\nimport { __, _n, sprintf } from '@wordpress/i18n';\nimport { useDebounce, useInstanceId, usePrevious } from '@wordpress/compose';\nimport { speak } from '@wordpress/a11y';\nimport {\n\tBACKSPACE,\n\tENTER,\n\tUP,\n\tDOWN,\n\tLEFT,\n\tRIGHT,\n\tSPACE,\n\tDELETE,\n\tESCAPE,\n} from '@wordpress/keycodes';\nimport isShallowEqual from '@wordpress/is-shallow-equal';\n\n/**\n * Internal dependencies\n */\nimport Token from './token';\nimport TokenInput from './token-input';\nimport { TokensAndInputWrapperFlex } from './styles';\nimport SuggestionsList from './suggestions-list';\nimport type { FormTokenFieldProps, TokenItem } from './types';\nimport { FlexItem } from '../flex';\nimport { StyledLabel } from '../base-control/styles/base-control-styles';\n\nconst identity = ( value: string ) => value;\n\n/**\n * A `FormTokenField` is a field similar to the tags and categories fields in the interim editor chrome,\n * 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.\n *\n * 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).\n * Tokens are separated by the \",\" character. Suggestions can be selected with the up or down arrows and added with the tab or enter key.\n *\n * The `value` property is handled in a manner similar to controlled form components.\n * See [Forms](http://facebook.github.io/react/docs/forms.html) in the React Documentation for more information.\n */\nexport function FormTokenField( props: FormTokenFieldProps ) {\n\tconst {\n\t\tautoCapitalize,\n\t\tautoComplete,\n\t\tmaxLength,\n\t\tplaceholder,\n\t\tlabel = __( 'Add item' ),\n\t\tclassName,\n\t\tsuggestions = [],\n\t\tmaxSuggestions = 100,\n\t\tvalue = [],\n\t\tdisplayTransform = identity,\n\t\tsaveTransform = ( token ) => token.trim(),\n\t\tonChange = () => {},\n\t\tonInputChange = () => {},\n\t\tonFocus = undefined,\n\t\tisBorderless = false,\n\t\tdisabled = false,\n\t\ttokenizeOnSpace = false,\n\t\tmessages = {\n\t\t\tadded: __( 'Item added.' ),\n\t\t\tremoved: __( 'Item removed.' ),\n\t\t\tremove: __( 'Remove item' ),\n\t\t\t__experimentalInvalid: __( 'Invalid item' ),\n\t\t},\n\t\t__experimentalRenderItem,\n\t\t__experimentalExpandOnFocus = false,\n\t\t__experimentalValidateInput = () => true,\n\t\t__experimentalShowHowTo = true,\n\t\t__next36pxDefaultSize = false,\n\t} = props;\n\n\tconst instanceId = useInstanceId( FormTokenField );\n\n\t// We reset to these initial values again in the onBlur\n\tconst [ incompleteTokenValue, setIncompleteTokenValue ] = useState( '' );\n\tconst [ inputOffsetFromEnd, setInputOffsetFromEnd ] = useState( 0 );\n\tconst [ isActive, setIsActive ] = useState( false );\n\tconst [ isExpanded, setIsExpanded ] = useState( false );\n\tconst [ selectedSuggestionIndex, setSelectedSuggestionIndex ] =\n\t\tuseState( -1 );\n\tconst [ selectedSuggestionScroll, setSelectedSuggestionScroll ] =\n\t\tuseState( false );\n\n\tconst prevSuggestions = usePrevious< string[] >( suggestions );\n\tconst prevValue = usePrevious< ( string | TokenItem )[] >( value );\n\n\tconst input = useRef< HTMLInputElement >( null );\n\tconst tokensAndInput = useRef< HTMLInputElement >( null );\n\n\tconst debouncedSpeak = useDebounce( speak, 500 );\n\n\tuseEffect( () => {\n\t\t// Make sure to focus the input when the isActive state is true.\n\t\tif ( isActive && ! hasFocus() ) {\n\t\t\tfocus();\n\t\t}\n\t}, [ isActive ] );\n\n\tuseEffect( () => {\n\t\tconst suggestionsDidUpdate = ! isShallowEqual(\n\t\t\tsuggestions,\n\t\t\tprevSuggestions || []\n\t\t);\n\n\t\tif ( suggestionsDidUpdate || value !== prevValue ) {\n\t\t\tupdateSuggestions( suggestionsDidUpdate );\n\t\t}\n\n\t\t// TODO: updateSuggestions() should first be refactored so its actual deps are clearer.\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [ suggestions, prevSuggestions, value, prevValue ] );\n\n\tuseEffect( () => {\n\t\tupdateSuggestions();\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [ incompleteTokenValue ] );\n\n\tif ( disabled && isActive ) {\n\t\tsetIsActive( false );\n\t\tsetIncompleteTokenValue( '' );\n\t}\n\n\tfunction focus() {\n\t\tinput.current?.focus();\n\t}\n\n\tfunction hasFocus() {\n\t\treturn input.current === input.current?.ownerDocument.activeElement;\n\t}\n\n\tfunction onFocusHandler( event: FocusEvent ) {\n\t\t// If focus is on the input or on the container, set the isActive state to true.\n\t\tif ( hasFocus() || event.target === tokensAndInput.current ) {\n\t\t\tsetIsActive( true );\n\t\t\tsetIsExpanded( __experimentalExpandOnFocus || isExpanded );\n\t\t} else {\n\t\t\t/*\n\t\t\t * Otherwise, focus is on one of the token \"remove\" buttons and we\n\t\t\t * set the isActive state to false to prevent the input to be\n\t\t\t * re-focused, see componentDidUpdate().\n\t\t\t */\n\t\t\tsetIsActive( false );\n\t\t}\n\n\t\tif ( 'function' === typeof onFocus ) {\n\t\t\tonFocus( event );\n\t\t}\n\t}\n\n\tfunction onBlur() {\n\t\tif ( inputHasValidValue() ) {\n\t\t\tsetIsActive( false );\n\t\t} else {\n\t\t\t// Reset to initial state\n\t\t\tsetIncompleteTokenValue( '' );\n\t\t\tsetInputOffsetFromEnd( 0 );\n\t\t\tsetIsActive( false );\n\t\t\tsetIsExpanded( false );\n\t\t\tsetSelectedSuggestionIndex( -1 );\n\t\t\tsetSelectedSuggestionScroll( false );\n\t\t}\n\t}\n\n\tfunction onKeyDown( event: KeyboardEvent ) {\n\t\tlet preventDefault = false;\n\n\t\tif ( event.defaultPrevented ) {\n\t\t\treturn;\n\t\t}\n\t\t// TODO: replace to event.code;\n\t\tswitch ( event.keyCode ) {\n\t\t\tcase BACKSPACE:\n\t\t\t\tpreventDefault = handleDeleteKey( deleteTokenBeforeInput );\n\t\t\t\tbreak;\n\t\t\tcase ENTER:\n\t\t\t\tpreventDefault = addCurrentToken();\n\t\t\t\tbreak;\n\t\t\tcase LEFT:\n\t\t\t\tpreventDefault = handleLeftArrowKey();\n\t\t\t\tbreak;\n\t\t\tcase UP:\n\t\t\t\tpreventDefault = handleUpArrowKey();\n\t\t\t\tbreak;\n\t\t\tcase RIGHT:\n\t\t\t\tpreventDefault = handleRightArrowKey();\n\t\t\t\tbreak;\n\t\t\tcase DOWN:\n\t\t\t\tpreventDefault = handleDownArrowKey();\n\t\t\t\tbreak;\n\t\t\tcase DELETE:\n\t\t\t\tpreventDefault = handleDeleteKey( deleteTokenAfterInput );\n\t\t\t\tbreak;\n\t\t\tcase SPACE:\n\t\t\t\tif ( tokenizeOnSpace ) {\n\t\t\t\t\tpreventDefault = addCurrentToken();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase ESCAPE:\n\t\t\t\tpreventDefault = handleEscapeKey( event );\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif ( preventDefault ) {\n\t\t\tevent.preventDefault();\n\t\t}\n\t}\n\n\tfunction onKeyPress( event: KeyboardEvent ) {\n\t\tlet preventDefault = false;\n\t\t// TODO: replace to event.code;\n\t\tswitch ( event.charCode ) {\n\t\t\tcase 44: // Comma.\n\t\t\t\tpreventDefault = handleCommaKey();\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif ( preventDefault ) {\n\t\t\tevent.preventDefault();\n\t\t}\n\t}\n\n\tfunction onContainerTouched( event: MouseEvent | TouchEvent ) {\n\t\t// Prevent clicking/touching the tokensAndInput container from blurring\n\t\t// the input and adding the current token.\n\t\tif ( event.target === tokensAndInput.current && isActive ) {\n\t\t\tevent.preventDefault();\n\t\t}\n\t}\n\n\tfunction onTokenClickRemove( event: { value: string } ) {\n\t\tdeleteToken( event.value );\n\t\tfocus();\n\t}\n\n\tfunction onSuggestionHovered( suggestion: string ) {\n\t\tconst index = getMatchingSuggestions().indexOf( suggestion );\n\n\t\tif ( index >= 0 ) {\n\t\t\tsetSelectedSuggestionIndex( index );\n\t\t\tsetSelectedSuggestionScroll( false );\n\t\t}\n\t}\n\n\tfunction onSuggestionSelected( suggestion: string ) {\n\t\taddNewToken( suggestion );\n\t}\n\n\tfunction onInputChangeHandler( event: { value: string } ) {\n\t\tconst text = event.value;\n\t\tconst separator = tokenizeOnSpace ? /[ ,\\t]+/ : /[,\\t]+/;\n\t\tconst items = text.split( separator );\n\t\tconst tokenValue = last( items ) || '';\n\n\t\tif ( items.length > 1 ) {\n\t\t\taddNewTokens( items.slice( 0, -1 ) );\n\t\t}\n\t\tsetIncompleteTokenValue( tokenValue );\n\t\tonInputChange( tokenValue );\n\t}\n\n\tfunction handleDeleteKey( _deleteToken: () => void ) {\n\t\tlet preventDefault = false;\n\t\tif ( hasFocus() && isInputEmpty() ) {\n\t\t\t_deleteToken();\n\t\t\tpreventDefault = true;\n\t\t}\n\n\t\treturn preventDefault;\n\t}\n\n\tfunction handleLeftArrowKey() {\n\t\tlet preventDefault = false;\n\t\tif ( isInputEmpty() ) {\n\t\t\tmoveInputBeforePreviousToken();\n\t\t\tpreventDefault = true;\n\t\t}\n\n\t\treturn preventDefault;\n\t}\n\n\tfunction handleRightArrowKey() {\n\t\tlet preventDefault = false;\n\t\tif ( isInputEmpty() ) {\n\t\t\tmoveInputAfterNextToken();\n\t\t\tpreventDefault = true;\n\t\t}\n\n\t\treturn preventDefault;\n\t}\n\n\tfunction handleUpArrowKey() {\n\t\tsetSelectedSuggestionIndex( ( index ) => {\n\t\t\treturn (\n\t\t\t\t( index === 0\n\t\t\t\t\t? getMatchingSuggestions(\n\t\t\t\t\t\t\tincompleteTokenValue,\n\t\t\t\t\t\t\tsuggestions,\n\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\tmaxSuggestions,\n\t\t\t\t\t\t\tsaveTransform\n\t\t\t\t\t ).length\n\t\t\t\t\t: index ) - 1\n\t\t\t);\n\t\t} );\n\t\tsetSelectedSuggestionScroll( true );\n\n\t\treturn true; // PreventDefault.\n\t}\n\n\tfunction handleDownArrowKey() {\n\t\tsetSelectedSuggestionIndex( ( index ) => {\n\t\t\treturn (\n\t\t\t\t( index + 1 ) %\n\t\t\t\tgetMatchingSuggestions(\n\t\t\t\t\tincompleteTokenValue,\n\t\t\t\t\tsuggestions,\n\t\t\t\t\tvalue,\n\t\t\t\t\tmaxSuggestions,\n\t\t\t\t\tsaveTransform\n\t\t\t\t).length\n\t\t\t);\n\t\t} );\n\n\t\tsetSelectedSuggestionScroll( true );\n\t\treturn true; // PreventDefault.\n\t}\n\n\tfunction handleEscapeKey( event: KeyboardEvent ) {\n\t\tif ( event.target instanceof HTMLInputElement ) {\n\t\t\tsetIncompleteTokenValue( event.target.value );\n\t\t\tsetIsExpanded( false );\n\t\t\tsetSelectedSuggestionIndex( -1 );\n\t\t\tsetSelectedSuggestionScroll( false );\n\t\t}\n\n\t\treturn true; // PreventDefault.\n\t}\n\n\tfunction handleCommaKey() {\n\t\tif ( inputHasValidValue() ) {\n\t\t\taddNewToken( incompleteTokenValue );\n\t\t}\n\n\t\treturn true; // PreventDefault.\n\t}\n\n\tfunction moveInputToIndex( index: number ) {\n\t\tsetInputOffsetFromEnd( value.length - Math.max( index, -1 ) - 1 );\n\t}\n\n\tfunction moveInputBeforePreviousToken() {\n\t\tsetInputOffsetFromEnd( ( prevInputOffsetFromEnd ) => {\n\t\t\treturn Math.min( prevInputOffsetFromEnd + 1, value.length );\n\t\t} );\n\t}\n\n\tfunction moveInputAfterNextToken() {\n\t\tsetInputOffsetFromEnd( ( prevInputOffsetFromEnd ) => {\n\t\t\treturn Math.max( prevInputOffsetFromEnd - 1, 0 );\n\t\t} );\n\t}\n\n\tfunction deleteTokenBeforeInput() {\n\t\tconst index = getIndexOfInput() - 1;\n\n\t\tif ( index > -1 ) {\n\t\t\tdeleteToken( value[ index ] );\n\t\t}\n\t}\n\n\tfunction deleteTokenAfterInput() {\n\t\tconst index = getIndexOfInput();\n\n\t\tif ( index < value.length ) {\n\t\t\tdeleteToken( value[ index ] );\n\t\t\t// Update input offset since it's the offset from the last token.\n\t\t\tmoveInputToIndex( index );\n\t\t}\n\t}\n\n\tfunction addCurrentToken() {\n\t\tlet preventDefault = false;\n\t\tconst selectedSuggestion = getSelectedSuggestion();\n\n\t\tif ( selectedSuggestion ) {\n\t\t\taddNewToken( selectedSuggestion );\n\t\t\tpreventDefault = true;\n\t\t} else if ( inputHasValidValue() ) {\n\t\t\taddNewToken( incompleteTokenValue );\n\t\t\tpreventDefault = true;\n\t\t}\n\n\t\treturn preventDefault;\n\t}\n\n\tfunction addNewTokens( tokens: string[] ) {\n\t\tconst tokensToAdd = uniq(\n\t\t\ttokens\n\t\t\t\t.map( saveTransform )\n\t\t\t\t.filter( Boolean )\n\t\t\t\t.filter( ( token ) => ! valueContainsToken( token ) )\n\t\t);\n\n\t\tif ( tokensToAdd.length > 0 ) {\n\t\t\tconst newValue = clone( value );\n\t\t\tnewValue.splice( getIndexOfInput(), 0, ...tokensToAdd );\n\t\t\tonChange( newValue );\n\t\t}\n\t}\n\n\tfunction addNewToken( token: string ) {\n\t\tif ( ! __experimentalValidateInput( token ) ) {\n\t\t\tspeak( messages.__experimentalInvalid, 'assertive' );\n\t\t\treturn;\n\t\t}\n\t\taddNewTokens( [ token ] );\n\t\tspeak( messages.added, 'assertive' );\n\n\t\tsetIncompleteTokenValue( '' );\n\t\tsetSelectedSuggestionIndex( -1 );\n\t\tsetSelectedSuggestionScroll( false );\n\t\tsetIsExpanded( ! __experimentalExpandOnFocus );\n\n\t\tif ( isActive ) {\n\t\t\tfocus();\n\t\t}\n\t}\n\n\tfunction deleteToken( token: string | TokenItem ) {\n\t\tconst newTokens = value.filter( ( item ) => {\n\t\t\treturn getTokenValue( item ) !== getTokenValue( token );\n\t\t} );\n\t\tonChange( newTokens );\n\t\tspeak( messages.removed, 'assertive' );\n\t}\n\n\tfunction getTokenValue( token: { value: string } | string ) {\n\t\tif ( 'object' === typeof token ) {\n\t\t\treturn token.value;\n\t\t}\n\n\t\treturn token;\n\t}\n\n\tfunction getMatchingSuggestions(\n\t\tsearchValue = incompleteTokenValue,\n\t\t_suggestions = suggestions,\n\t\t_value = value,\n\t\t_maxSuggestions = maxSuggestions,\n\t\t_saveTransform = saveTransform\n\t) {\n\t\tlet match = _saveTransform( searchValue );\n\t\tconst startsWithMatch: string[] = [];\n\t\tconst containsMatch: string[] = [];\n\t\tconst normalizedValue = _value.map( ( item ) => {\n\t\t\tif ( typeof item === 'string' ) {\n\t\t\t\treturn item;\n\t\t\t}\n\t\t\treturn item.value;\n\t\t} );\n\n\t\tif ( match.length === 0 ) {\n\t\t\t_suggestions = difference( _suggestions, normalizedValue );\n\t\t} else {\n\t\t\tmatch = match.toLocaleLowerCase();\n\n\t\t\t_suggestions.forEach( ( suggestion ) => {\n\t\t\t\tconst index = suggestion.toLocaleLowerCase().indexOf( match );\n\t\t\t\tif ( normalizedValue.indexOf( suggestion ) === -1 ) {\n\t\t\t\t\tif ( index === 0 ) {\n\t\t\t\t\t\tstartsWithMatch.push( suggestion );\n\t\t\t\t\t} else if ( index > 0 ) {\n\t\t\t\t\t\tcontainsMatch.push( suggestion );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t_suggestions = startsWithMatch.concat( containsMatch );\n\t\t}\n\n\t\treturn _suggestions.slice( 0, _maxSuggestions );\n\t}\n\n\tfunction getSelectedSuggestion() {\n\t\tif ( selectedSuggestionIndex !== -1 ) {\n\t\t\treturn getMatchingSuggestions()[ selectedSuggestionIndex ];\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\tfunction valueContainsToken( token: string ) {\n\t\treturn some( value, ( item ) => {\n\t\t\treturn getTokenValue( token ) === getTokenValue( item );\n\t\t} );\n\t}\n\n\tfunction getIndexOfInput() {\n\t\treturn value.length - inputOffsetFromEnd;\n\t}\n\n\tfunction isInputEmpty() {\n\t\treturn incompleteTokenValue.length === 0;\n\t}\n\n\tfunction inputHasValidValue() {\n\t\treturn saveTransform( incompleteTokenValue ).length > 0;\n\t}\n\n\tfunction updateSuggestions( resetSelectedSuggestion = true ) {\n\t\tconst inputHasMinimumChars = incompleteTokenValue.trim().length > 1;\n\t\tconst matchingSuggestions =\n\t\t\tgetMatchingSuggestions( incompleteTokenValue );\n\t\tconst hasMatchingSuggestions = matchingSuggestions.length > 0;\n\n\t\tsetIsExpanded(\n\t\t\t__experimentalExpandOnFocus ||\n\t\t\t\t( inputHasMinimumChars && hasMatchingSuggestions )\n\t\t);\n\n\t\tif ( resetSelectedSuggestion ) {\n\t\t\tsetSelectedSuggestionIndex( -1 );\n\t\t\tsetSelectedSuggestionScroll( false );\n\t\t}\n\n\t\tif ( inputHasMinimumChars ) {\n\t\t\tconst message = hasMatchingSuggestions\n\t\t\t\t? sprintf(\n\t\t\t\t\t\t/* translators: %d: number of results. */\n\t\t\t\t\t\t_n(\n\t\t\t\t\t\t\t'%d result found, use up and down arrow keys to navigate.',\n\t\t\t\t\t\t\t'%d results found, use up and down arrow keys to navigate.',\n\t\t\t\t\t\t\tmatchingSuggestions.length\n\t\t\t\t\t\t),\n\t\t\t\t\t\tmatchingSuggestions.length\n\t\t\t\t )\n\t\t\t\t: __( 'No results.' );\n\n\t\t\tdebouncedSpeak( message, 'assertive' );\n\t\t}\n\t}\n\n\tfunction renderTokensAndInput() {\n\t\tconst components = map( value, renderToken );\n\t\tcomponents.splice( getIndexOfInput(), 0, renderInput() );\n\n\t\treturn components;\n\t}\n\n\tfunction renderToken(\n\t\ttoken: string | TokenItem,\n\t\tindex: number,\n\t\ttokens: ( string | TokenItem )[]\n\t) {\n\t\tconst _value = getTokenValue( token );\n\t\tconst status = typeof token !== 'string' ? token.status : undefined;\n\t\tconst termPosition = index + 1;\n\t\tconst termsCount = tokens.length;\n\n\t\treturn (\n\t\t\t<FlexItem key={ 'token-' + _value }>\n\t\t\t\t<Token\n\t\t\t\t\tvalue={ _value }\n\t\t\t\t\tstatus={ status }\n\t\t\t\t\ttitle={\n\t\t\t\t\t\ttypeof token !== 'string' ? token.title : undefined\n\t\t\t\t\t}\n\t\t\t\t\tdisplayTransform={ displayTransform }\n\t\t\t\t\tonClickRemove={ onTokenClickRemove }\n\t\t\t\t\tisBorderless={\n\t\t\t\t\t\t( typeof token !== 'string' && token.isBorderless ) ||\n\t\t\t\t\t\tisBorderless\n\t\t\t\t\t}\n\t\t\t\t\tonMouseEnter={\n\t\t\t\t\t\ttypeof token !== 'string'\n\t\t\t\t\t\t\t? token.onMouseEnter\n\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t}\n\t\t\t\t\tonMouseLeave={\n\t\t\t\t\t\ttypeof token !== 'string'\n\t\t\t\t\t\t\t? token.onMouseLeave\n\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t}\n\t\t\t\t\tdisabled={ 'error' !== status && disabled }\n\t\t\t\t\tmessages={ messages }\n\t\t\t\t\ttermsCount={ termsCount }\n\t\t\t\t\ttermPosition={ termPosition }\n\t\t\t\t/>\n\t\t\t</FlexItem>\n\t\t);\n\t}\n\n\tfunction renderInput() {\n\t\tconst inputProps = {\n\t\t\tinstanceId,\n\t\t\tautoCapitalize,\n\t\t\tautoComplete,\n\t\t\tplaceholder: value.length === 0 ? placeholder : '',\n\t\t\tkey: 'input',\n\t\t\tdisabled,\n\t\t\tvalue: incompleteTokenValue,\n\t\t\tonBlur,\n\t\t\tisExpanded,\n\t\t\tselectedSuggestionIndex,\n\t\t};\n\n\t\treturn (\n\t\t\t<TokenInput\n\t\t\t\t{ ...inputProps }\n\t\t\t\tonChange={\n\t\t\t\t\t! ( maxLength && value.length >= maxLength )\n\t\t\t\t\t\t? onInputChangeHandler\n\t\t\t\t\t\t: undefined\n\t\t\t\t}\n\t\t\t\tref={ input }\n\t\t\t/>\n\t\t);\n\t}\n\n\tconst classes = classnames(\n\t\tclassName,\n\t\t'components-form-token-field__input-container',\n\t\t{\n\t\t\t'is-active': isActive,\n\t\t\t'is-disabled': disabled,\n\t\t}\n\t);\n\n\tlet tokenFieldProps = {\n\t\tclassName: 'components-form-token-field',\n\t\ttabIndex: -1,\n\t};\n\tconst matchingSuggestions = getMatchingSuggestions();\n\n\tif ( ! disabled ) {\n\t\ttokenFieldProps = Object.assign( {}, tokenFieldProps, {\n\t\t\tonKeyDown,\n\t\t\tonKeyPress,\n\t\t\tonFocus: onFocusHandler,\n\t\t} );\n\t}\n\n\t// Disable reason: There is no appropriate role which describes the\n\t// input container intended accessible usability.\n\t// TODO: Refactor click detection to use blur to stop propagation.\n\t/* eslint-disable jsx-a11y/no-static-element-interactions */\n\treturn (\n\t\t<div { ...tokenFieldProps }>\n\t\t\t<StyledLabel\n\t\t\t\thtmlFor={ `components-form-token-input-${ instanceId }` }\n\t\t\t\tclassName=\"components-form-token-field__label\"\n\t\t\t>\n\t\t\t\t{ label }\n\t\t\t</StyledLabel>\n\t\t\t<div\n\t\t\t\tref={ tokensAndInput }\n\t\t\t\tclassName={ classes }\n\t\t\t\ttabIndex={ -1 }\n\t\t\t\tonMouseDown={ onContainerTouched }\n\t\t\t\tonTouchStart={ onContainerTouched }\n\t\t\t>\n\t\t\t\t<TokensAndInputWrapperFlex\n\t\t\t\t\tjustify=\"flex-start\"\n\t\t\t\t\talign=\"center\"\n\t\t\t\t\tgap={ 1 }\n\t\t\t\t\twrap={ true }\n\t\t\t\t\t__next36pxDefaultSize={ __next36pxDefaultSize }\n\t\t\t\t\thasTokens={ !! value.length }\n\t\t\t\t>\n\t\t\t\t\t{ renderTokensAndInput() }\n\t\t\t\t</TokensAndInputWrapperFlex>\n\t\t\t\t{ isExpanded && (\n\t\t\t\t\t<SuggestionsList\n\t\t\t\t\t\tinstanceId={ instanceId }\n\t\t\t\t\t\tmatch={ saveTransform( incompleteTokenValue ) }\n\t\t\t\t\t\tdisplayTransform={ displayTransform }\n\t\t\t\t\t\tsuggestions={ matchingSuggestions }\n\t\t\t\t\t\tselectedIndex={ selectedSuggestionIndex }\n\t\t\t\t\t\tscrollIntoView={ selectedSuggestionScroll }\n\t\t\t\t\t\tonHover={ onSuggestionHovered }\n\t\t\t\t\t\tonSelect={ onSuggestionSelected }\n\t\t\t\t\t\t__experimentalRenderItem={ __experimentalRenderItem }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t</div>\n\t\t\t{ __experimentalShowHowTo && (\n\t\t\t\t<p\n\t\t\t\t\tid={ `components-form-token-suggestions-howto-${ instanceId }` }\n\t\t\t\t\tclassName=\"components-form-token-field__help\"\n\t\t\t\t>\n\t\t\t\t\t{ tokenizeOnSpace\n\t\t\t\t\t\t? __(\n\t\t\t\t\t\t\t\t'Separate with commas, spaces, or the Enter key.'\n\t\t\t\t\t\t )\n\t\t\t\t\t\t: __( 'Separate with commas or the Enter key.' ) }\n\t\t\t\t</p>\n\t\t\t) }\n\t\t</div>\n\t);\n\t/* eslint-enable jsx-a11y/no-static-element-interactions */\n}\n\nexport default FormTokenField;\n"]}
|
|
1
|
+
{"version":3,"sources":["@wordpress/components/src/form-token-field/index.tsx"],"names":["identity","value","FormTokenField","props","autoCapitalize","autoComplete","maxLength","placeholder","label","className","suggestions","maxSuggestions","displayTransform","saveTransform","token","trim","onChange","onInputChange","onFocus","undefined","isBorderless","disabled","tokenizeOnSpace","messages","added","removed","remove","__experimentalInvalid","__experimentalRenderItem","__experimentalExpandOnFocus","__experimentalValidateInput","__experimentalShowHowTo","__next36pxDefaultSize","__experimentalAutoSelectFirstMatch","instanceId","incompleteTokenValue","setIncompleteTokenValue","inputOffsetFromEnd","setInputOffsetFromEnd","isActive","setIsActive","isExpanded","setIsExpanded","selectedSuggestionIndex","setSelectedSuggestionIndex","selectedSuggestionScroll","setSelectedSuggestionScroll","prevSuggestions","prevValue","input","tokensAndInput","debouncedSpeak","speak","hasFocus","focus","suggestionsDidUpdate","updateSuggestions","current","ownerDocument","activeElement","onFocusHandler","event","target","onBlur","inputHasValidValue","onKeyDown","preventDefault","defaultPrevented","keyCode","BACKSPACE","handleDeleteKey","deleteTokenBeforeInput","ENTER","addCurrentToken","LEFT","handleLeftArrowKey","UP","handleUpArrowKey","RIGHT","handleRightArrowKey","DOWN","handleDownArrowKey","DELETE","deleteTokenAfterInput","SPACE","ESCAPE","handleEscapeKey","onKeyPress","charCode","handleCommaKey","onContainerTouched","onTokenClickRemove","deleteToken","onSuggestionHovered","suggestion","index","getMatchingSuggestions","indexOf","onSuggestionSelected","addNewToken","onInputChangeHandler","text","separator","items","split","tokenValue","length","addNewTokens","slice","_deleteToken","isInputEmpty","moveInputBeforePreviousToken","moveInputAfterNextToken","HTMLInputElement","moveInputToIndex","Math","max","prevInputOffsetFromEnd","min","getIndexOfInput","selectedSuggestion","getSelectedSuggestion","tokens","tokensToAdd","Set","map","filter","Boolean","valueContainsToken","newValue","splice","newTokens","item","getTokenValue","searchValue","_suggestions","_value","_maxSuggestions","_saveTransform","match","startsWithMatch","containsMatch","normalizedValue","includes","toLocaleLowerCase","forEach","push","concat","resetSelectedSuggestion","inputHasMinimumChars","matchingSuggestions","hasMatchingSuggestions","message","renderTokensAndInput","components","renderToken","renderInput","status","termPosition","termsCount","title","onMouseEnter","onMouseLeave","inputProps","key","classes","tokenFieldProps","tabIndex","Object","assign"],"mappings":";;;;;;;;;;AAUA;;;;AAPA;;AACA;;AAOA;;AACA;;AACA;;AACA;;AAWA;;AAKA;;AACA;;AACA;;AACA;;AAEA;;AACA;;AApCA;AACA;AACA;;AAKA;AACA;AACA;;AAkBA;AACA;AACA;AASA,MAAMA,QAAQ,GAAKC,KAAF,IAAqBA,KAAtC;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,SAASC,cAAT,CAAyBC,KAAzB,EAAsD;AAC5D,QAAM;AACLC,IAAAA,cADK;AAELC,IAAAA,YAFK;AAGLC,IAAAA,SAHK;AAILC,IAAAA,WAJK;AAKLC,IAAAA,KAAK,GAAG,cAAI,UAAJ,CALH;AAMLC,IAAAA,SANK;AAOLC,IAAAA,WAAW,GAAG,EAPT;AAQLC,IAAAA,cAAc,GAAG,GARZ;AASLV,IAAAA,KAAK,GAAG,EATH;AAULW,IAAAA,gBAAgB,GAAGZ,QAVd;AAWLa,IAAAA,aAAa,GAAKC,KAAF,IAAaA,KAAK,CAACC,IAAN,EAXxB;AAYLC,IAAAA,QAAQ,GAAG,MAAM,CAAE,CAZd;AAaLC,IAAAA,aAAa,GAAG,MAAM,CAAE,CAbnB;AAcLC,IAAAA,OAAO,GAAGC,SAdL;AAeLC,IAAAA,YAAY,GAAG,KAfV;AAgBLC,IAAAA,QAAQ,GAAG,KAhBN;AAiBLC,IAAAA,eAAe,GAAG,KAjBb;AAkBLC,IAAAA,QAAQ,GAAG;AACVC,MAAAA,KAAK,EAAE,cAAI,aAAJ,CADG;AAEVC,MAAAA,OAAO,EAAE,cAAI,eAAJ,CAFC;AAGVC,MAAAA,MAAM,EAAE,cAAI,aAAJ,CAHE;AAIVC,MAAAA,qBAAqB,EAAE,cAAI,cAAJ;AAJb,KAlBN;AAwBLC,IAAAA,wBAxBK;AAyBLC,IAAAA,2BAA2B,GAAG,KAzBzB;AA0BLC,IAAAA,2BAA2B,GAAG,MAAM,IA1B/B;AA2BLC,IAAAA,uBAAuB,GAAG,IA3BrB;AA4BLC,IAAAA,qBAAqB,GAAG,KA5BnB;AA6BLC,IAAAA,kCAAkC,GAAG;AA7BhC,MA8BF9B,KA9BJ;AAgCA,QAAM+B,UAAU,GAAG,4BAAehC,cAAf,CAAnB,CAjC4D,CAmC5D;;AACA,QAAM,CAAEiC,oBAAF,EAAwBC,uBAAxB,IAAoD,uBAAU,EAAV,CAA1D;AACA,QAAM,CAAEC,kBAAF,EAAsBC,qBAAtB,IAAgD,uBAAU,CAAV,CAAtD;AACA,QAAM,CAAEC,QAAF,EAAYC,WAAZ,IAA4B,uBAAU,KAAV,CAAlC;AACA,QAAM,CAAEC,UAAF,EAAcC,aAAd,IAAgC,uBAAU,KAAV,CAAtC;AACA,QAAM,CAAEC,uBAAF,EAA2BC,0BAA3B,IACL,uBAAU,CAAC,CAAX,CADD;AAEA,QAAM,CAAEC,wBAAF,EAA4BC,2BAA5B,IACL,uBAAU,KAAV,CADD;AAGA,QAAMC,eAAe,GAAG,0BAAyBrC,WAAzB,CAAxB;AACA,QAAMsC,SAAS,GAAG,0BAAyC/C,KAAzC,CAAlB;AAEA,QAAMgD,KAAK,GAAG,qBAA4B,IAA5B,CAAd;AACA,QAAMC,cAAc,GAAG,qBAA4B,IAA5B,CAAvB;AAEA,QAAMC,cAAc,GAAG,0BAAaC,WAAb,EAAoB,GAApB,CAAvB;AAEA,0BAAW,MAAM;AAChB;AACA,QAAKb,QAAQ,IAAI,CAAEc,QAAQ,EAA3B,EAAgC;AAC/BC,MAAAA,KAAK;AACL;AACD,GALD,EAKG,CAAEf,QAAF,CALH;AAOA,0BAAW,MAAM;AAChB,UAAMgB,oBAAoB,GAAG,CAAE,6BAC9B7C,WAD8B,EAE9BqC,eAAe,IAAI,EAFW,CAA/B;;AAKA,QAAKQ,oBAAoB,IAAItD,KAAK,KAAK+C,SAAvC,EAAmD;AAClDQ,MAAAA,iBAAiB,CAAED,oBAAF,CAAjB;AACA,KARe,CAUhB;AACA;;AACA,GAZD,EAYG,CAAE7C,WAAF,EAAeqC,eAAf,EAAgC9C,KAAhC,EAAuC+C,SAAvC,CAZH;AAcA,0BAAW,MAAM;AAChBQ,IAAAA,iBAAiB,GADD,CAEhB;AACA,GAHD,EAGG,CAAErB,oBAAF,CAHH;;AAKA,MAAKd,QAAQ,IAAIkB,QAAjB,EAA4B;AAC3BC,IAAAA,WAAW,CAAE,KAAF,CAAX;AACAJ,IAAAA,uBAAuB,CAAE,EAAF,CAAvB;AACA;;AAED,WAASkB,KAAT,GAAiB;AAAA;;AAChB,sBAAAL,KAAK,CAACQ,OAAN,kEAAeH,KAAf;AACA;;AAED,WAASD,QAAT,GAAoB;AAAA;;AACnB,WAAOJ,KAAK,CAACQ,OAAN,yBAAkBR,KAAK,CAACQ,OAAxB,oDAAkB,gBAAeC,aAAf,CAA6BC,aAA/C,CAAP;AACA;;AAED,WAASC,cAAT,CAAyBC,KAAzB,EAA6C;AAC5C;AACA,QAAKR,QAAQ,MAAMQ,KAAK,CAACC,MAAN,KAAiBZ,cAAc,CAACO,OAAnD,EAA6D;AAC5DjB,MAAAA,WAAW,CAAE,IAAF,CAAX;AACAE,MAAAA,aAAa,CAAEb,2BAA2B,IAAIY,UAAjC,CAAb;AACA,KAHD,MAGO;AACN;AACH;AACA;AACA;AACA;AACGD,MAAAA,WAAW,CAAE,KAAF,CAAX;AACA;;AAED,QAAK,eAAe,OAAOtB,OAA3B,EAAqC;AACpCA,MAAAA,OAAO,CAAE2C,KAAF,CAAP;AACA;AACD;;AAED,WAASE,MAAT,GAAkB;AACjB,QAAKC,kBAAkB,EAAvB,EAA4B;AAC3BxB,MAAAA,WAAW,CAAE,KAAF,CAAX;AACA,KAFD,MAEO;AACN;AACAJ,MAAAA,uBAAuB,CAAE,EAAF,CAAvB;AACAE,MAAAA,qBAAqB,CAAE,CAAF,CAArB;AACAE,MAAAA,WAAW,CAAE,KAAF,CAAX;AACAE,MAAAA,aAAa,CAAE,KAAF,CAAb;AACAE,MAAAA,0BAA0B,CAAE,CAAC,CAAH,CAA1B;AACAE,MAAAA,2BAA2B,CAAE,KAAF,CAA3B;AACA;AACD;;AAED,WAASmB,SAAT,CAAoBJ,KAApB,EAA2C;AAC1C,QAAIK,cAAc,GAAG,KAArB;;AAEA,QAAKL,KAAK,CAACM,gBAAX,EAA8B;AAC7B;AACA,KALyC,CAM1C;;;AACA,YAASN,KAAK,CAACO,OAAf;AACC,WAAKC,mBAAL;AACCH,QAAAA,cAAc,GAAGI,eAAe,CAAEC,sBAAF,CAAhC;AACA;;AACD,WAAKC,eAAL;AACCN,QAAAA,cAAc,GAAGO,eAAe,EAAhC;AACA;;AACD,WAAKC,cAAL;AACCR,QAAAA,cAAc,GAAGS,kBAAkB,EAAnC;AACA;;AACD,WAAKC,YAAL;AACCV,QAAAA,cAAc,GAAGW,gBAAgB,EAAjC;AACA;;AACD,WAAKC,eAAL;AACCZ,QAAAA,cAAc,GAAGa,mBAAmB,EAApC;AACA;;AACD,WAAKC,cAAL;AACCd,QAAAA,cAAc,GAAGe,kBAAkB,EAAnC;AACA;;AACD,WAAKC,gBAAL;AACChB,QAAAA,cAAc,GAAGI,eAAe,CAAEa,qBAAF,CAAhC;AACA;;AACD,WAAKC,eAAL;AACC,YAAK9D,eAAL,EAAuB;AACtB4C,UAAAA,cAAc,GAAGO,eAAe,EAAhC;AACA;;AACD;;AACD,WAAKY,gBAAL;AACCnB,QAAAA,cAAc,GAAGoB,eAAe,CAAEzB,KAAF,CAAhC;AACA;;AACD;AACC;AA/BF;;AAkCA,QAAKK,cAAL,EAAsB;AACrBL,MAAAA,KAAK,CAACK,cAAN;AACA;AACD;;AAED,WAASqB,UAAT,CAAqB1B,KAArB,EAA4C;AAC3C,QAAIK,cAAc,GAAG,KAArB,CAD2C,CAE3C;;AACA,YAASL,KAAK,CAAC2B,QAAf;AACC,WAAK,EAAL;AAAS;AACRtB,QAAAA,cAAc,GAAGuB,cAAc,EAA/B;AACA;;AACD;AACC;AALF;;AAQA,QAAKvB,cAAL,EAAsB;AACrBL,MAAAA,KAAK,CAACK,cAAN;AACA;AACD;;AAED,WAASwB,kBAAT,CAA6B7B,KAA7B,EAA8D;AAC7D;AACA;AACA,QAAKA,KAAK,CAACC,MAAN,KAAiBZ,cAAc,CAACO,OAAhC,IAA2ClB,QAAhD,EAA2D;AAC1DsB,MAAAA,KAAK,CAACK,cAAN;AACA;AACD;;AAED,WAASyB,kBAAT,CAA6B9B,KAA7B,EAAwD;AACvD+B,IAAAA,WAAW,CAAE/B,KAAK,CAAC5D,KAAR,CAAX;AACAqD,IAAAA,KAAK;AACL;;AAED,WAASuC,mBAAT,CAA8BC,UAA9B,EAAmD;AAClD,UAAMC,KAAK,GAAGC,sBAAsB,GAAGC,OAAzB,CAAkCH,UAAlC,CAAd;;AAEA,QAAKC,KAAK,IAAI,CAAd,EAAkB;AACjBnD,MAAAA,0BAA0B,CAAEmD,KAAF,CAA1B;AACAjD,MAAAA,2BAA2B,CAAE,KAAF,CAA3B;AACA;AACD;;AAED,WAASoD,oBAAT,CAA+BJ,UAA/B,EAAoD;AACnDK,IAAAA,WAAW,CAAEL,UAAF,CAAX;AACA;;AAED,WAASM,oBAAT,CAA+BvC,KAA/B,EAA0D;AACzD,UAAMwC,IAAI,GAAGxC,KAAK,CAAC5D,KAAnB;AACA,UAAMqG,SAAS,GAAGhF,eAAe,GAAG,SAAH,GAAe,QAAhD;AACA,UAAMiF,KAAK,GAAGF,IAAI,CAACG,KAAL,CAAYF,SAAZ,CAAd;AACA,UAAMG,UAAU,GAAG,kBAAMF,KAAN,KAAiB,EAApC;;AAEA,QAAKA,KAAK,CAACG,MAAN,GAAe,CAApB,EAAwB;AACvBC,MAAAA,YAAY,CAAEJ,KAAK,CAACK,KAAN,CAAa,CAAb,EAAgB,CAAC,CAAjB,CAAF,CAAZ;AACA;;AACDxE,IAAAA,uBAAuB,CAAEqE,UAAF,CAAvB;AACAxF,IAAAA,aAAa,CAAEwF,UAAF,CAAb;AACA;;AAED,WAASnC,eAAT,CAA0BuC,YAA1B,EAAqD;AACpD,QAAI3C,cAAc,GAAG,KAArB;;AACA,QAAKb,QAAQ,MAAMyD,YAAY,EAA/B,EAAoC;AACnCD,MAAAA,YAAY;;AACZ3C,MAAAA,cAAc,GAAG,IAAjB;AACA;;AAED,WAAOA,cAAP;AACA;;AAED,WAASS,kBAAT,GAA8B;AAC7B,QAAIT,cAAc,GAAG,KAArB;;AACA,QAAK4C,YAAY,EAAjB,EAAsB;AACrBC,MAAAA,4BAA4B;AAC5B7C,MAAAA,cAAc,GAAG,IAAjB;AACA;;AAED,WAAOA,cAAP;AACA;;AAED,WAASa,mBAAT,GAA+B;AAC9B,QAAIb,cAAc,GAAG,KAArB;;AACA,QAAK4C,YAAY,EAAjB,EAAsB;AACrBE,MAAAA,uBAAuB;AACvB9C,MAAAA,cAAc,GAAG,IAAjB;AACA;;AAED,WAAOA,cAAP;AACA;;AAED,WAASW,gBAAT,GAA4B;AAC3BjC,IAAAA,0BAA0B,CAAImD,KAAF,IAAa;AACxC,aACC,CAAEA,KAAK,KAAK,CAAV,GACCC,sBAAsB,CACtB7D,oBADsB,EAEtBzB,WAFsB,EAGtBT,KAHsB,EAItBU,cAJsB,EAKtBE,aALsB,CAAtB,CAME6F,MAPH,GAQCX,KARH,IAQa,CATd;AAWA,KAZyB,CAA1B;AAaAjD,IAAAA,2BAA2B,CAAE,IAAF,CAA3B;AAEA,WAAO,IAAP,CAhB2B,CAgBd;AACb;;AAED,WAASmC,kBAAT,GAA8B;AAC7BrC,IAAAA,0BAA0B,CAAImD,KAAF,IAAa;AACxC,aACC,CAAEA,KAAK,GAAG,CAAV,IACAC,sBAAsB,CACrB7D,oBADqB,EAErBzB,WAFqB,EAGrBT,KAHqB,EAIrBU,cAJqB,EAKrBE,aALqB,CAAtB,CAME6F,MARH;AAUA,KAXyB,CAA1B;AAaA5D,IAAAA,2BAA2B,CAAE,IAAF,CAA3B;AACA,WAAO,IAAP,CAf6B,CAehB;AACb;;AAED,WAASwC,eAAT,CAA0BzB,KAA1B,EAAiD;AAChD,QAAKA,KAAK,CAACC,MAAN,YAAwBmD,gBAA7B,EAAgD;AAC/C7E,MAAAA,uBAAuB,CAAEyB,KAAK,CAACC,MAAN,CAAa7D,KAAf,CAAvB;AACAyC,MAAAA,aAAa,CAAE,KAAF,CAAb;AACAE,MAAAA,0BAA0B,CAAE,CAAC,CAAH,CAA1B;AACAE,MAAAA,2BAA2B,CAAE,KAAF,CAA3B;AACA;;AAED,WAAO,IAAP,CARgD,CAQnC;AACb;;AAED,WAAS2C,cAAT,GAA0B;AACzB,QAAKzB,kBAAkB,EAAvB,EAA4B;AAC3BmC,MAAAA,WAAW,CAAEhE,oBAAF,CAAX;AACA;;AAED,WAAO,IAAP,CALyB,CAKZ;AACb;;AAED,WAAS+E,gBAAT,CAA2BnB,KAA3B,EAA2C;AAC1CzD,IAAAA,qBAAqB,CAAErC,KAAK,CAACyG,MAAN,GAAeS,IAAI,CAACC,GAAL,CAAUrB,KAAV,EAAiB,CAAC,CAAlB,CAAf,GAAuC,CAAzC,CAArB;AACA;;AAED,WAASgB,4BAAT,GAAwC;AACvCzE,IAAAA,qBAAqB,CAAI+E,sBAAF,IAA8B;AACpD,aAAOF,IAAI,CAACG,GAAL,CAAUD,sBAAsB,GAAG,CAAnC,EAAsCpH,KAAK,CAACyG,MAA5C,CAAP;AACA,KAFoB,CAArB;AAGA;;AAED,WAASM,uBAAT,GAAmC;AAClC1E,IAAAA,qBAAqB,CAAI+E,sBAAF,IAA8B;AACpD,aAAOF,IAAI,CAACC,GAAL,CAAUC,sBAAsB,GAAG,CAAnC,EAAsC,CAAtC,CAAP;AACA,KAFoB,CAArB;AAGA;;AAED,WAAS9C,sBAAT,GAAkC;AACjC,UAAMwB,KAAK,GAAGwB,eAAe,KAAK,CAAlC;;AAEA,QAAKxB,KAAK,GAAG,CAAC,CAAd,EAAkB;AACjBH,MAAAA,WAAW,CAAE3F,KAAK,CAAE8F,KAAF,CAAP,CAAX;AACA;AACD;;AAED,WAASZ,qBAAT,GAAiC;AAChC,UAAMY,KAAK,GAAGwB,eAAe,EAA7B;;AAEA,QAAKxB,KAAK,GAAG9F,KAAK,CAACyG,MAAnB,EAA4B;AAC3Bd,MAAAA,WAAW,CAAE3F,KAAK,CAAE8F,KAAF,CAAP,CAAX,CAD2B,CAE3B;;AACAmB,MAAAA,gBAAgB,CAAEnB,KAAF,CAAhB;AACA;AACD;;AAED,WAAStB,eAAT,GAA2B;AAC1B,QAAIP,cAAc,GAAG,KAArB;AACA,UAAMsD,kBAAkB,GAAGC,qBAAqB,EAAhD;;AAEA,QAAKD,kBAAL,EAA0B;AACzBrB,MAAAA,WAAW,CAAEqB,kBAAF,CAAX;AACAtD,MAAAA,cAAc,GAAG,IAAjB;AACA,KAHD,MAGO,IAAKF,kBAAkB,EAAvB,EAA4B;AAClCmC,MAAAA,WAAW,CAAEhE,oBAAF,CAAX;AACA+B,MAAAA,cAAc,GAAG,IAAjB;AACA;;AAED,WAAOA,cAAP;AACA;;AAED,WAASyC,YAAT,CAAuBe,MAAvB,EAA0C;AACzC,UAAMC,WAAW,GAAG,CACnB,GAAG,IAAIC,GAAJ,CACFF,MAAM,CACJG,GADF,CACOhH,aADP,EAEEiH,MAFF,CAEUC,OAFV,EAGED,MAHF,CAGYhH,KAAF,IAAa,CAAEkH,kBAAkB,CAAElH,KAAF,CAH3C,CADE,CADgB,CAApB;;AASA,QAAK6G,WAAW,CAACjB,MAAZ,GAAqB,CAA1B,EAA8B;AAC7B,YAAMuB,QAAQ,GAAG,mBAAOhI,KAAP,CAAjB;AACAgI,MAAAA,QAAQ,CAACC,MAAT,CAAiBX,eAAe,EAAhC,EAAoC,CAApC,EAAuC,GAAGI,WAA1C;AACA3G,MAAAA,QAAQ,CAAEiH,QAAF,CAAR;AACA;AACD;;AAED,WAAS9B,WAAT,CAAsBrF,KAAtB,EAAsC;AACrC,QAAK,CAAEgB,2BAA2B,CAAEhB,KAAF,CAAlC,EAA8C;AAC7C,uBAAOS,QAAQ,CAACI,qBAAhB,EAAuC,WAAvC;AACA;AACA;;AACDgF,IAAAA,YAAY,CAAE,CAAE7F,KAAF,CAAF,CAAZ;AACA,qBAAOS,QAAQ,CAACC,KAAhB,EAAuB,WAAvB;AAEAY,IAAAA,uBAAuB,CAAE,EAAF,CAAvB;AACAQ,IAAAA,0BAA0B,CAAE,CAAC,CAAH,CAA1B;AACAE,IAAAA,2BAA2B,CAAE,KAAF,CAA3B;AACAJ,IAAAA,aAAa,CAAE,CAAEb,2BAAJ,CAAb;;AAEA,QAAKU,QAAL,EAAgB;AACfe,MAAAA,KAAK;AACL;AACD;;AAED,WAASsC,WAAT,CAAsB9E,KAAtB,EAAkD;AACjD,UAAMqH,SAAS,GAAGlI,KAAK,CAAC6H,MAAN,CAAgBM,IAAF,IAAY;AAC3C,aAAOC,aAAa,CAAED,IAAF,CAAb,KAA0BC,aAAa,CAAEvH,KAAF,CAA9C;AACA,KAFiB,CAAlB;AAGAE,IAAAA,QAAQ,CAAEmH,SAAF,CAAR;AACA,qBAAO5G,QAAQ,CAACE,OAAhB,EAAyB,WAAzB;AACA;;AAED,WAAS4G,aAAT,CAAwBvH,KAAxB,EAA4D;AAC3D,QAAK,aAAa,OAAOA,KAAzB,EAAiC;AAChC,aAAOA,KAAK,CAACb,KAAb;AACA;;AAED,WAAOa,KAAP;AACA;;AAED,WAASkF,sBAAT,GAME;AAAA,QALDsC,WAKC,uEALanG,oBAKb;;AAAA,QAJDoG,YAIC,uEAJc7H,WAId;;AAAA,QAHD8H,MAGC,uEAHQvI,KAGR;;AAAA,QAFDwI,eAEC,uEAFiB9H,cAEjB;;AAAA,QADD+H,cACC,uEADgB7H,aAChB;;AACD,QAAI8H,KAAK,GAAGD,cAAc,CAAEJ,WAAF,CAA1B;;AACA,UAAMM,eAAyB,GAAG,EAAlC;AACA,UAAMC,aAAuB,GAAG,EAAhC;;AACA,UAAMC,eAAe,GAAGN,MAAM,CAACX,GAAP,CAAcO,IAAF,IAAY;AAC/C,UAAK,OAAOA,IAAP,KAAgB,QAArB,EAAgC;AAC/B,eAAOA,IAAP;AACA;;AACD,aAAOA,IAAI,CAACnI,KAAZ;AACA,KALuB,CAAxB;;AAOA,QAAK0I,KAAK,CAACjC,MAAN,KAAiB,CAAtB,EAA0B;AACzB6B,MAAAA,YAAY,GAAGA,YAAY,CAACT,MAAb,CACZhC,UAAF,IAAkB,CAAEgD,eAAe,CAACC,QAAhB,CAA0BjD,UAA1B,CADN,CAAf;AAGA,KAJD,MAIO;AACN6C,MAAAA,KAAK,GAAGA,KAAK,CAACK,iBAAN,EAAR;;AAEAT,MAAAA,YAAY,CAACU,OAAb,CAAwBnD,UAAF,IAAkB;AACvC,cAAMC,KAAK,GAAGD,UAAU,CAACkD,iBAAX,GAA+B/C,OAA/B,CAAwC0C,KAAxC,CAAd;;AACA,YAAKG,eAAe,CAAC7C,OAAhB,CAAyBH,UAAzB,MAA0C,CAAC,CAAhD,EAAoD;AACnD,cAAKC,KAAK,KAAK,CAAf,EAAmB;AAClB6C,YAAAA,eAAe,CAACM,IAAhB,CAAsBpD,UAAtB;AACA,WAFD,MAEO,IAAKC,KAAK,GAAG,CAAb,EAAiB;AACvB8C,YAAAA,aAAa,CAACK,IAAd,CAAoBpD,UAApB;AACA;AACD;AACD,OATD;;AAWAyC,MAAAA,YAAY,GAAGK,eAAe,CAACO,MAAhB,CAAwBN,aAAxB,CAAf;AACA;;AAED,WAAON,YAAY,CAAC3B,KAAb,CAAoB,CAApB,EAAuB6B,eAAvB,CAAP;AACA;;AAED,WAAShB,qBAAT,GAAiC;AAChC,QAAK9E,uBAAuB,KAAK,CAAC,CAAlC,EAAsC;AACrC,aAAOqD,sBAAsB,GAAIrD,uBAAJ,CAA7B;AACA;;AAED,WAAOxB,SAAP;AACA;;AAED,WAAS6G,kBAAT,CAA6BlH,KAA7B,EAA6C;AAC5C,WAAO,kBAAMb,KAAN,EAAemI,IAAF,IAAY;AAC/B,aAAOC,aAAa,CAAEvH,KAAF,CAAb,KAA2BuH,aAAa,CAAED,IAAF,CAA/C;AACA,KAFM,CAAP;AAGA;;AAED,WAASb,eAAT,GAA2B;AAC1B,WAAOtH,KAAK,CAACyG,MAAN,GAAerE,kBAAtB;AACA;;AAED,WAASyE,YAAT,GAAwB;AACvB,WAAO3E,oBAAoB,CAACuE,MAArB,KAAgC,CAAvC;AACA;;AAED,WAAS1C,kBAAT,GAA8B;AAC7B,WAAOnD,aAAa,CAAEsB,oBAAF,CAAb,CAAsCuE,MAAtC,GAA+C,CAAtD;AACA;;AAED,WAASlD,iBAAT,GAA6D;AAAA,QAAjC4F,uBAAiC,uEAAP,IAAO;AAC5D,UAAMC,oBAAoB,GAAGlH,oBAAoB,CAACpB,IAArB,GAA4B2F,MAA5B,GAAqC,CAAlE;AACA,UAAM4C,mBAAmB,GACxBtD,sBAAsB,CAAE7D,oBAAF,CADvB;AAEA,UAAMoH,sBAAsB,GAAGD,mBAAmB,CAAC5C,MAApB,GAA6B,CAA5D;AAEAhE,IAAAA,aAAa,CACZb,2BAA2B,IACxBwH,oBAAoB,IAAIE,sBAFf,CAAb;;AAKA,QAAKH,uBAAL,EAA+B;AAC9B,UACCnH,kCAAkC,IAClCoH,oBADA,IAEAE,sBAHD,EAIE;AACD3G,QAAAA,0BAA0B,CAAE,CAAF,CAA1B;AACAE,QAAAA,2BAA2B,CAAE,IAAF,CAA3B;AACA,OAPD,MAOO;AACNF,QAAAA,0BAA0B,CAAE,CAAC,CAAH,CAA1B;AACAE,QAAAA,2BAA2B,CAAE,KAAF,CAA3B;AACA;AACD;;AAED,QAAKuG,oBAAL,EAA4B;AAC3B,YAAMG,OAAO,GAAGD,sBAAsB,GACnC;AACA;AACA,oBACC,0DADD,EAEC,2DAFD,EAGCD,mBAAmB,CAAC5C,MAHrB,CAFA,EAOA4C,mBAAmB,CAAC5C,MAPpB,CADmC,GAUnC,cAAI,aAAJ,CAVH;AAYAvD,MAAAA,cAAc,CAAEqG,OAAF,EAAW,WAAX,CAAd;AACA;AACD;;AAED,WAASC,oBAAT,GAAgC;AAC/B,UAAMC,UAAU,GAAG,iBAAKzJ,KAAL,EAAY0J,WAAZ,CAAnB;AACAD,IAAAA,UAAU,CAACxB,MAAX,CAAmBX,eAAe,EAAlC,EAAsC,CAAtC,EAAyCqC,WAAW,EAApD;AAEA,WAAOF,UAAP;AACA;;AAED,WAASC,WAAT,CACC7I,KADD,EAECiF,KAFD,EAGC2B,MAHD,EAIE;AACD,UAAMc,MAAM,GAAGH,aAAa,CAAEvH,KAAF,CAA5B;;AACA,UAAM+I,MAAM,GAAG,OAAO/I,KAAP,KAAiB,QAAjB,GAA4BA,KAAK,CAAC+I,MAAlC,GAA2C1I,SAA1D;AACA,UAAM2I,YAAY,GAAG/D,KAAK,GAAG,CAA7B;AACA,UAAMgE,UAAU,GAAGrC,MAAM,CAAChB,MAA1B;AAEA,WACC,4BAAC,cAAD;AAAU,MAAA,GAAG,EAAG,WAAW8B;AAA3B,OACC,4BAAC,cAAD;AACC,MAAA,KAAK,EAAGA,MADT;AAEC,MAAA,MAAM,EAAGqB,MAFV;AAGC,MAAA,KAAK,EACJ,OAAO/I,KAAP,KAAiB,QAAjB,GAA4BA,KAAK,CAACkJ,KAAlC,GAA0C7I,SAJ5C;AAMC,MAAA,gBAAgB,EAAGP,gBANpB;AAOC,MAAA,aAAa,EAAG+E,kBAPjB;AAQC,MAAA,YAAY,EACT,OAAO7E,KAAP,KAAiB,QAAjB,IAA6BA,KAAK,CAACM,YAArC,IACAA,YAVF;AAYC,MAAA,YAAY,EACX,OAAON,KAAP,KAAiB,QAAjB,GACGA,KAAK,CAACmJ,YADT,GAEG9I,SAfL;AAiBC,MAAA,YAAY,EACX,OAAOL,KAAP,KAAiB,QAAjB,GACGA,KAAK,CAACoJ,YADT,GAEG/I,SApBL;AAsBC,MAAA,QAAQ,EAAG,YAAY0I,MAAZ,IAAsBxI,QAtBlC;AAuBC,MAAA,QAAQ,EAAGE,QAvBZ;AAwBC,MAAA,UAAU,EAAGwI,UAxBd;AAyBC,MAAA,YAAY,EAAGD;AAzBhB,MADD,CADD;AA+BA;;AAED,WAASF,WAAT,GAAuB;AACtB,UAAMO,UAAU,GAAG;AAClBjI,MAAAA,UADkB;AAElB9B,MAAAA,cAFkB;AAGlBC,MAAAA,YAHkB;AAIlBE,MAAAA,WAAW,EAAEN,KAAK,CAACyG,MAAN,KAAiB,CAAjB,GAAqBnG,WAArB,GAAmC,EAJ9B;AAKlB6J,MAAAA,GAAG,EAAE,OALa;AAMlB/I,MAAAA,QANkB;AAOlBpB,MAAAA,KAAK,EAAEkC,oBAPW;AAQlB4B,MAAAA,MARkB;AASlBtB,MAAAA,UATkB;AAUlBE,MAAAA;AAVkB,KAAnB;AAaA,WACC,4BAAC,mBAAD,6BACMwH,UADN;AAEC,MAAA,QAAQ,EACP,EAAI7J,SAAS,IAAIL,KAAK,CAACyG,MAAN,IAAgBpG,SAAjC,IACG8F,oBADH,GAEGjF,SALL;AAOC,MAAA,GAAG,EAAG8B;AAPP,OADD;AAWA;;AAED,QAAMoH,OAAO,GAAG,yBACf5J,SADe,EAEf,8CAFe,EAGf;AACC,iBAAa8B,QADd;AAEC,mBAAelB;AAFhB,GAHe,CAAhB;AASA,MAAIiJ,eAAe,GAAG;AACrB7J,IAAAA,SAAS,EAAE,6BADU;AAErB8J,IAAAA,QAAQ,EAAE,CAAC;AAFU,GAAtB;AAIA,QAAMjB,mBAAmB,GAAGtD,sBAAsB,EAAlD;;AAEA,MAAK,CAAE3E,QAAP,EAAkB;AACjBiJ,IAAAA,eAAe,GAAGE,MAAM,CAACC,MAAP,CAAe,EAAf,EAAmBH,eAAnB,EAAoC;AACrDrG,MAAAA,SADqD;AAErDsB,MAAAA,UAFqD;AAGrDrE,MAAAA,OAAO,EAAE0C;AAH4C,KAApC,CAAlB;AAKA,GA3mB2D,CA6mB5D;AACA;AACA;;AACA;;;AACA,SACC,mCAAU0G,eAAV,EACC,4BAAC,8BAAD;AACC,IAAA,OAAO,EAAI,+BAA+BpI,UAAY,EADvD;AAEC,IAAA,SAAS,EAAC;AAFX,KAIG1B,KAJH,CADD,EAOC;AACC,IAAA,GAAG,EAAG0C,cADP;AAEC,IAAA,SAAS,EAAGmH,OAFb;AAGC,IAAA,QAAQ,EAAG,CAAC,CAHb;AAIC,IAAA,WAAW,EAAG3E,kBAJf;AAKC,IAAA,YAAY,EAAGA;AALhB,KAOC,4BAAC,iCAAD;AACC,IAAA,OAAO,EAAC,YADT;AAEC,IAAA,KAAK,EAAC,QAFP;AAGC,IAAA,GAAG,EAAG,CAHP;AAIC,IAAA,IAAI,EAAG,IAJR;AAKC,IAAA,qBAAqB,EAAG1D,qBALzB;AAMC,IAAA,SAAS,EAAG,CAAC,CAAE/B,KAAK,CAACyG;AANtB,KAQG+C,oBAAoB,EARvB,CAPD,EAiBGhH,UAAU,IACX,4BAAC,wBAAD;AACC,IAAA,UAAU,EAAGP,UADd;AAEC,IAAA,KAAK,EAAGrB,aAAa,CAAEsB,oBAAF,CAFtB;AAGC,IAAA,gBAAgB,EAAGvB,gBAHpB;AAIC,IAAA,WAAW,EAAG0I,mBAJf;AAKC,IAAA,aAAa,EAAG3G,uBALjB;AAMC,IAAA,cAAc,EAAGE,wBANlB;AAOC,IAAA,OAAO,EAAGgD,mBAPX;AAQC,IAAA,QAAQ,EAAGK,oBARZ;AASC,IAAA,wBAAwB,EAAGtE;AAT5B,IAlBF,CAPD,EAsCGG,uBAAuB,IACxB;AACC,IAAA,EAAE,EAAI,2CAA2CG,UAAY,EAD9D;AAEC,IAAA,SAAS,EAAC;AAFX,KAIGZ,eAAe,GACd,cACA,iDADA,CADc,GAId,cAAI,wCAAJ,CARJ,CAvCF,CADD;AAqDA;AACA;;eAEcpB,c","sourcesContent":["/**\n * External dependencies\n */\nimport { last, clone, map, some } from 'lodash';\nimport classnames from 'classnames';\nimport type { KeyboardEvent, MouseEvent, TouchEvent } from 'react';\n\n/**\n * WordPress dependencies\n */\nimport { useEffect, useRef, useState } from '@wordpress/element';\nimport { __, _n, sprintf } from '@wordpress/i18n';\nimport { useDebounce, useInstanceId, usePrevious } from '@wordpress/compose';\nimport { speak } from '@wordpress/a11y';\nimport {\n\tBACKSPACE,\n\tENTER,\n\tUP,\n\tDOWN,\n\tLEFT,\n\tRIGHT,\n\tSPACE,\n\tDELETE,\n\tESCAPE,\n} from '@wordpress/keycodes';\nimport isShallowEqual from '@wordpress/is-shallow-equal';\n\n/**\n * Internal dependencies\n */\nimport Token from './token';\nimport TokenInput from './token-input';\nimport { TokensAndInputWrapperFlex } from './styles';\nimport SuggestionsList from './suggestions-list';\nimport type { FormTokenFieldProps, TokenItem } from './types';\nimport { FlexItem } from '../flex';\nimport { StyledLabel } from '../base-control/styles/base-control-styles';\n\nconst identity = ( value: string ) => value;\n\n/**\n * A `FormTokenField` is a field similar to the tags and categories fields in the interim editor chrome,\n * 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.\n *\n * 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).\n * Tokens are separated by the \",\" character. Suggestions can be selected with the up or down arrows and added with the tab or enter key.\n *\n * The `value` property is handled in a manner similar to controlled form components.\n * See [Forms](http://facebook.github.io/react/docs/forms.html) in the React Documentation for more information.\n */\nexport function FormTokenField( props: FormTokenFieldProps ) {\n\tconst {\n\t\tautoCapitalize,\n\t\tautoComplete,\n\t\tmaxLength,\n\t\tplaceholder,\n\t\tlabel = __( 'Add item' ),\n\t\tclassName,\n\t\tsuggestions = [],\n\t\tmaxSuggestions = 100,\n\t\tvalue = [],\n\t\tdisplayTransform = identity,\n\t\tsaveTransform = ( token ) => token.trim(),\n\t\tonChange = () => {},\n\t\tonInputChange = () => {},\n\t\tonFocus = undefined,\n\t\tisBorderless = false,\n\t\tdisabled = false,\n\t\ttokenizeOnSpace = false,\n\t\tmessages = {\n\t\t\tadded: __( 'Item added.' ),\n\t\t\tremoved: __( 'Item removed.' ),\n\t\t\tremove: __( 'Remove item' ),\n\t\t\t__experimentalInvalid: __( 'Invalid item' ),\n\t\t},\n\t\t__experimentalRenderItem,\n\t\t__experimentalExpandOnFocus = false,\n\t\t__experimentalValidateInput = () => true,\n\t\t__experimentalShowHowTo = true,\n\t\t__next36pxDefaultSize = false,\n\t\t__experimentalAutoSelectFirstMatch = false,\n\t} = props;\n\n\tconst instanceId = useInstanceId( FormTokenField );\n\n\t// We reset to these initial values again in the onBlur\n\tconst [ incompleteTokenValue, setIncompleteTokenValue ] = useState( '' );\n\tconst [ inputOffsetFromEnd, setInputOffsetFromEnd ] = useState( 0 );\n\tconst [ isActive, setIsActive ] = useState( false );\n\tconst [ isExpanded, setIsExpanded ] = useState( false );\n\tconst [ selectedSuggestionIndex, setSelectedSuggestionIndex ] =\n\t\tuseState( -1 );\n\tconst [ selectedSuggestionScroll, setSelectedSuggestionScroll ] =\n\t\tuseState( false );\n\n\tconst prevSuggestions = usePrevious< string[] >( suggestions );\n\tconst prevValue = usePrevious< ( string | TokenItem )[] >( value );\n\n\tconst input = useRef< HTMLInputElement >( null );\n\tconst tokensAndInput = useRef< HTMLInputElement >( null );\n\n\tconst debouncedSpeak = useDebounce( speak, 500 );\n\n\tuseEffect( () => {\n\t\t// Make sure to focus the input when the isActive state is true.\n\t\tif ( isActive && ! hasFocus() ) {\n\t\t\tfocus();\n\t\t}\n\t}, [ isActive ] );\n\n\tuseEffect( () => {\n\t\tconst suggestionsDidUpdate = ! isShallowEqual(\n\t\t\tsuggestions,\n\t\t\tprevSuggestions || []\n\t\t);\n\n\t\tif ( suggestionsDidUpdate || value !== prevValue ) {\n\t\t\tupdateSuggestions( suggestionsDidUpdate );\n\t\t}\n\n\t\t// TODO: updateSuggestions() should first be refactored so its actual deps are clearer.\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [ suggestions, prevSuggestions, value, prevValue ] );\n\n\tuseEffect( () => {\n\t\tupdateSuggestions();\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [ incompleteTokenValue ] );\n\n\tif ( disabled && isActive ) {\n\t\tsetIsActive( false );\n\t\tsetIncompleteTokenValue( '' );\n\t}\n\n\tfunction focus() {\n\t\tinput.current?.focus();\n\t}\n\n\tfunction hasFocus() {\n\t\treturn input.current === input.current?.ownerDocument.activeElement;\n\t}\n\n\tfunction onFocusHandler( event: FocusEvent ) {\n\t\t// If focus is on the input or on the container, set the isActive state to true.\n\t\tif ( hasFocus() || event.target === tokensAndInput.current ) {\n\t\t\tsetIsActive( true );\n\t\t\tsetIsExpanded( __experimentalExpandOnFocus || isExpanded );\n\t\t} else {\n\t\t\t/*\n\t\t\t * Otherwise, focus is on one of the token \"remove\" buttons and we\n\t\t\t * set the isActive state to false to prevent the input to be\n\t\t\t * re-focused, see componentDidUpdate().\n\t\t\t */\n\t\t\tsetIsActive( false );\n\t\t}\n\n\t\tif ( 'function' === typeof onFocus ) {\n\t\t\tonFocus( event );\n\t\t}\n\t}\n\n\tfunction onBlur() {\n\t\tif ( inputHasValidValue() ) {\n\t\t\tsetIsActive( false );\n\t\t} else {\n\t\t\t// Reset to initial state\n\t\t\tsetIncompleteTokenValue( '' );\n\t\t\tsetInputOffsetFromEnd( 0 );\n\t\t\tsetIsActive( false );\n\t\t\tsetIsExpanded( false );\n\t\t\tsetSelectedSuggestionIndex( -1 );\n\t\t\tsetSelectedSuggestionScroll( false );\n\t\t}\n\t}\n\n\tfunction onKeyDown( event: KeyboardEvent ) {\n\t\tlet preventDefault = false;\n\n\t\tif ( event.defaultPrevented ) {\n\t\t\treturn;\n\t\t}\n\t\t// TODO: replace to event.code;\n\t\tswitch ( event.keyCode ) {\n\t\t\tcase BACKSPACE:\n\t\t\t\tpreventDefault = handleDeleteKey( deleteTokenBeforeInput );\n\t\t\t\tbreak;\n\t\t\tcase ENTER:\n\t\t\t\tpreventDefault = addCurrentToken();\n\t\t\t\tbreak;\n\t\t\tcase LEFT:\n\t\t\t\tpreventDefault = handleLeftArrowKey();\n\t\t\t\tbreak;\n\t\t\tcase UP:\n\t\t\t\tpreventDefault = handleUpArrowKey();\n\t\t\t\tbreak;\n\t\t\tcase RIGHT:\n\t\t\t\tpreventDefault = handleRightArrowKey();\n\t\t\t\tbreak;\n\t\t\tcase DOWN:\n\t\t\t\tpreventDefault = handleDownArrowKey();\n\t\t\t\tbreak;\n\t\t\tcase DELETE:\n\t\t\t\tpreventDefault = handleDeleteKey( deleteTokenAfterInput );\n\t\t\t\tbreak;\n\t\t\tcase SPACE:\n\t\t\t\tif ( tokenizeOnSpace ) {\n\t\t\t\t\tpreventDefault = addCurrentToken();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase ESCAPE:\n\t\t\t\tpreventDefault = handleEscapeKey( event );\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif ( preventDefault ) {\n\t\t\tevent.preventDefault();\n\t\t}\n\t}\n\n\tfunction onKeyPress( event: KeyboardEvent ) {\n\t\tlet preventDefault = false;\n\t\t// TODO: replace to event.code;\n\t\tswitch ( event.charCode ) {\n\t\t\tcase 44: // Comma.\n\t\t\t\tpreventDefault = handleCommaKey();\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif ( preventDefault ) {\n\t\t\tevent.preventDefault();\n\t\t}\n\t}\n\n\tfunction onContainerTouched( event: MouseEvent | TouchEvent ) {\n\t\t// Prevent clicking/touching the tokensAndInput container from blurring\n\t\t// the input and adding the current token.\n\t\tif ( event.target === tokensAndInput.current && isActive ) {\n\t\t\tevent.preventDefault();\n\t\t}\n\t}\n\n\tfunction onTokenClickRemove( event: { value: string } ) {\n\t\tdeleteToken( event.value );\n\t\tfocus();\n\t}\n\n\tfunction onSuggestionHovered( suggestion: string ) {\n\t\tconst index = getMatchingSuggestions().indexOf( suggestion );\n\n\t\tif ( index >= 0 ) {\n\t\t\tsetSelectedSuggestionIndex( index );\n\t\t\tsetSelectedSuggestionScroll( false );\n\t\t}\n\t}\n\n\tfunction onSuggestionSelected( suggestion: string ) {\n\t\taddNewToken( suggestion );\n\t}\n\n\tfunction onInputChangeHandler( event: { value: string } ) {\n\t\tconst text = event.value;\n\t\tconst separator = tokenizeOnSpace ? /[ ,\\t]+/ : /[,\\t]+/;\n\t\tconst items = text.split( separator );\n\t\tconst tokenValue = last( items ) || '';\n\n\t\tif ( items.length > 1 ) {\n\t\t\taddNewTokens( items.slice( 0, -1 ) );\n\t\t}\n\t\tsetIncompleteTokenValue( tokenValue );\n\t\tonInputChange( tokenValue );\n\t}\n\n\tfunction handleDeleteKey( _deleteToken: () => void ) {\n\t\tlet preventDefault = false;\n\t\tif ( hasFocus() && isInputEmpty() ) {\n\t\t\t_deleteToken();\n\t\t\tpreventDefault = true;\n\t\t}\n\n\t\treturn preventDefault;\n\t}\n\n\tfunction handleLeftArrowKey() {\n\t\tlet preventDefault = false;\n\t\tif ( isInputEmpty() ) {\n\t\t\tmoveInputBeforePreviousToken();\n\t\t\tpreventDefault = true;\n\t\t}\n\n\t\treturn preventDefault;\n\t}\n\n\tfunction handleRightArrowKey() {\n\t\tlet preventDefault = false;\n\t\tif ( isInputEmpty() ) {\n\t\t\tmoveInputAfterNextToken();\n\t\t\tpreventDefault = true;\n\t\t}\n\n\t\treturn preventDefault;\n\t}\n\n\tfunction handleUpArrowKey() {\n\t\tsetSelectedSuggestionIndex( ( index ) => {\n\t\t\treturn (\n\t\t\t\t( index === 0\n\t\t\t\t\t? getMatchingSuggestions(\n\t\t\t\t\t\t\tincompleteTokenValue,\n\t\t\t\t\t\t\tsuggestions,\n\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\tmaxSuggestions,\n\t\t\t\t\t\t\tsaveTransform\n\t\t\t\t\t ).length\n\t\t\t\t\t: index ) - 1\n\t\t\t);\n\t\t} );\n\t\tsetSelectedSuggestionScroll( true );\n\n\t\treturn true; // PreventDefault.\n\t}\n\n\tfunction handleDownArrowKey() {\n\t\tsetSelectedSuggestionIndex( ( index ) => {\n\t\t\treturn (\n\t\t\t\t( index + 1 ) %\n\t\t\t\tgetMatchingSuggestions(\n\t\t\t\t\tincompleteTokenValue,\n\t\t\t\t\tsuggestions,\n\t\t\t\t\tvalue,\n\t\t\t\t\tmaxSuggestions,\n\t\t\t\t\tsaveTransform\n\t\t\t\t).length\n\t\t\t);\n\t\t} );\n\n\t\tsetSelectedSuggestionScroll( true );\n\t\treturn true; // PreventDefault.\n\t}\n\n\tfunction handleEscapeKey( event: KeyboardEvent ) {\n\t\tif ( event.target instanceof HTMLInputElement ) {\n\t\t\tsetIncompleteTokenValue( event.target.value );\n\t\t\tsetIsExpanded( false );\n\t\t\tsetSelectedSuggestionIndex( -1 );\n\t\t\tsetSelectedSuggestionScroll( false );\n\t\t}\n\n\t\treturn true; // PreventDefault.\n\t}\n\n\tfunction handleCommaKey() {\n\t\tif ( inputHasValidValue() ) {\n\t\t\taddNewToken( incompleteTokenValue );\n\t\t}\n\n\t\treturn true; // PreventDefault.\n\t}\n\n\tfunction moveInputToIndex( index: number ) {\n\t\tsetInputOffsetFromEnd( value.length - Math.max( index, -1 ) - 1 );\n\t}\n\n\tfunction moveInputBeforePreviousToken() {\n\t\tsetInputOffsetFromEnd( ( prevInputOffsetFromEnd ) => {\n\t\t\treturn Math.min( prevInputOffsetFromEnd + 1, value.length );\n\t\t} );\n\t}\n\n\tfunction moveInputAfterNextToken() {\n\t\tsetInputOffsetFromEnd( ( prevInputOffsetFromEnd ) => {\n\t\t\treturn Math.max( prevInputOffsetFromEnd - 1, 0 );\n\t\t} );\n\t}\n\n\tfunction deleteTokenBeforeInput() {\n\t\tconst index = getIndexOfInput() - 1;\n\n\t\tif ( index > -1 ) {\n\t\t\tdeleteToken( value[ index ] );\n\t\t}\n\t}\n\n\tfunction deleteTokenAfterInput() {\n\t\tconst index = getIndexOfInput();\n\n\t\tif ( index < value.length ) {\n\t\t\tdeleteToken( value[ index ] );\n\t\t\t// Update input offset since it's the offset from the last token.\n\t\t\tmoveInputToIndex( index );\n\t\t}\n\t}\n\n\tfunction addCurrentToken() {\n\t\tlet preventDefault = false;\n\t\tconst selectedSuggestion = getSelectedSuggestion();\n\n\t\tif ( selectedSuggestion ) {\n\t\t\taddNewToken( selectedSuggestion );\n\t\t\tpreventDefault = true;\n\t\t} else if ( inputHasValidValue() ) {\n\t\t\taddNewToken( incompleteTokenValue );\n\t\t\tpreventDefault = true;\n\t\t}\n\n\t\treturn preventDefault;\n\t}\n\n\tfunction addNewTokens( tokens: string[] ) {\n\t\tconst tokensToAdd = [\n\t\t\t...new Set(\n\t\t\t\ttokens\n\t\t\t\t\t.map( saveTransform )\n\t\t\t\t\t.filter( Boolean )\n\t\t\t\t\t.filter( ( token ) => ! valueContainsToken( token ) )\n\t\t\t),\n\t\t];\n\n\t\tif ( tokensToAdd.length > 0 ) {\n\t\t\tconst newValue = clone( value );\n\t\t\tnewValue.splice( getIndexOfInput(), 0, ...tokensToAdd );\n\t\t\tonChange( newValue );\n\t\t}\n\t}\n\n\tfunction addNewToken( token: string ) {\n\t\tif ( ! __experimentalValidateInput( token ) ) {\n\t\t\tspeak( messages.__experimentalInvalid, 'assertive' );\n\t\t\treturn;\n\t\t}\n\t\taddNewTokens( [ token ] );\n\t\tspeak( messages.added, 'assertive' );\n\n\t\tsetIncompleteTokenValue( '' );\n\t\tsetSelectedSuggestionIndex( -1 );\n\t\tsetSelectedSuggestionScroll( false );\n\t\tsetIsExpanded( ! __experimentalExpandOnFocus );\n\n\t\tif ( isActive ) {\n\t\t\tfocus();\n\t\t}\n\t}\n\n\tfunction deleteToken( token: string | TokenItem ) {\n\t\tconst newTokens = value.filter( ( item ) => {\n\t\t\treturn getTokenValue( item ) !== getTokenValue( token );\n\t\t} );\n\t\tonChange( newTokens );\n\t\tspeak( messages.removed, 'assertive' );\n\t}\n\n\tfunction getTokenValue( token: { value: string } | string ) {\n\t\tif ( 'object' === typeof token ) {\n\t\t\treturn token.value;\n\t\t}\n\n\t\treturn token;\n\t}\n\n\tfunction getMatchingSuggestions(\n\t\tsearchValue = incompleteTokenValue,\n\t\t_suggestions = suggestions,\n\t\t_value = value,\n\t\t_maxSuggestions = maxSuggestions,\n\t\t_saveTransform = saveTransform\n\t) {\n\t\tlet match = _saveTransform( searchValue );\n\t\tconst startsWithMatch: string[] = [];\n\t\tconst containsMatch: string[] = [];\n\t\tconst normalizedValue = _value.map( ( item ) => {\n\t\t\tif ( typeof item === 'string' ) {\n\t\t\t\treturn item;\n\t\t\t}\n\t\t\treturn item.value;\n\t\t} );\n\n\t\tif ( match.length === 0 ) {\n\t\t\t_suggestions = _suggestions.filter(\n\t\t\t\t( suggestion ) => ! normalizedValue.includes( suggestion )\n\t\t\t);\n\t\t} else {\n\t\t\tmatch = match.toLocaleLowerCase();\n\n\t\t\t_suggestions.forEach( ( suggestion ) => {\n\t\t\t\tconst index = suggestion.toLocaleLowerCase().indexOf( match );\n\t\t\t\tif ( normalizedValue.indexOf( suggestion ) === -1 ) {\n\t\t\t\t\tif ( index === 0 ) {\n\t\t\t\t\t\tstartsWithMatch.push( suggestion );\n\t\t\t\t\t} else if ( index > 0 ) {\n\t\t\t\t\t\tcontainsMatch.push( suggestion );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t_suggestions = startsWithMatch.concat( containsMatch );\n\t\t}\n\n\t\treturn _suggestions.slice( 0, _maxSuggestions );\n\t}\n\n\tfunction getSelectedSuggestion() {\n\t\tif ( selectedSuggestionIndex !== -1 ) {\n\t\t\treturn getMatchingSuggestions()[ selectedSuggestionIndex ];\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\tfunction valueContainsToken( token: string ) {\n\t\treturn some( value, ( item ) => {\n\t\t\treturn getTokenValue( token ) === getTokenValue( item );\n\t\t} );\n\t}\n\n\tfunction getIndexOfInput() {\n\t\treturn value.length - inputOffsetFromEnd;\n\t}\n\n\tfunction isInputEmpty() {\n\t\treturn incompleteTokenValue.length === 0;\n\t}\n\n\tfunction inputHasValidValue() {\n\t\treturn saveTransform( incompleteTokenValue ).length > 0;\n\t}\n\n\tfunction updateSuggestions( resetSelectedSuggestion = true ) {\n\t\tconst inputHasMinimumChars = incompleteTokenValue.trim().length > 1;\n\t\tconst matchingSuggestions =\n\t\t\tgetMatchingSuggestions( incompleteTokenValue );\n\t\tconst hasMatchingSuggestions = matchingSuggestions.length > 0;\n\n\t\tsetIsExpanded(\n\t\t\t__experimentalExpandOnFocus ||\n\t\t\t\t( inputHasMinimumChars && hasMatchingSuggestions )\n\t\t);\n\n\t\tif ( resetSelectedSuggestion ) {\n\t\t\tif (\n\t\t\t\t__experimentalAutoSelectFirstMatch &&\n\t\t\t\tinputHasMinimumChars &&\n\t\t\t\thasMatchingSuggestions\n\t\t\t) {\n\t\t\t\tsetSelectedSuggestionIndex( 0 );\n\t\t\t\tsetSelectedSuggestionScroll( true );\n\t\t\t} else {\n\t\t\t\tsetSelectedSuggestionIndex( -1 );\n\t\t\t\tsetSelectedSuggestionScroll( false );\n\t\t\t}\n\t\t}\n\n\t\tif ( inputHasMinimumChars ) {\n\t\t\tconst message = hasMatchingSuggestions\n\t\t\t\t? sprintf(\n\t\t\t\t\t\t/* translators: %d: number of results. */\n\t\t\t\t\t\t_n(\n\t\t\t\t\t\t\t'%d result found, use up and down arrow keys to navigate.',\n\t\t\t\t\t\t\t'%d results found, use up and down arrow keys to navigate.',\n\t\t\t\t\t\t\tmatchingSuggestions.length\n\t\t\t\t\t\t),\n\t\t\t\t\t\tmatchingSuggestions.length\n\t\t\t\t )\n\t\t\t\t: __( 'No results.' );\n\n\t\t\tdebouncedSpeak( message, 'assertive' );\n\t\t}\n\t}\n\n\tfunction renderTokensAndInput() {\n\t\tconst components = map( value, renderToken );\n\t\tcomponents.splice( getIndexOfInput(), 0, renderInput() );\n\n\t\treturn components;\n\t}\n\n\tfunction renderToken(\n\t\ttoken: string | TokenItem,\n\t\tindex: number,\n\t\ttokens: ( string | TokenItem )[]\n\t) {\n\t\tconst _value = getTokenValue( token );\n\t\tconst status = typeof token !== 'string' ? token.status : undefined;\n\t\tconst termPosition = index + 1;\n\t\tconst termsCount = tokens.length;\n\n\t\treturn (\n\t\t\t<FlexItem key={ 'token-' + _value }>\n\t\t\t\t<Token\n\t\t\t\t\tvalue={ _value }\n\t\t\t\t\tstatus={ status }\n\t\t\t\t\ttitle={\n\t\t\t\t\t\ttypeof token !== 'string' ? token.title : undefined\n\t\t\t\t\t}\n\t\t\t\t\tdisplayTransform={ displayTransform }\n\t\t\t\t\tonClickRemove={ onTokenClickRemove }\n\t\t\t\t\tisBorderless={\n\t\t\t\t\t\t( typeof token !== 'string' && token.isBorderless ) ||\n\t\t\t\t\t\tisBorderless\n\t\t\t\t\t}\n\t\t\t\t\tonMouseEnter={\n\t\t\t\t\t\ttypeof token !== 'string'\n\t\t\t\t\t\t\t? token.onMouseEnter\n\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t}\n\t\t\t\t\tonMouseLeave={\n\t\t\t\t\t\ttypeof token !== 'string'\n\t\t\t\t\t\t\t? token.onMouseLeave\n\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t}\n\t\t\t\t\tdisabled={ 'error' !== status && disabled }\n\t\t\t\t\tmessages={ messages }\n\t\t\t\t\ttermsCount={ termsCount }\n\t\t\t\t\ttermPosition={ termPosition }\n\t\t\t\t/>\n\t\t\t</FlexItem>\n\t\t);\n\t}\n\n\tfunction renderInput() {\n\t\tconst inputProps = {\n\t\t\tinstanceId,\n\t\t\tautoCapitalize,\n\t\t\tautoComplete,\n\t\t\tplaceholder: value.length === 0 ? placeholder : '',\n\t\t\tkey: 'input',\n\t\t\tdisabled,\n\t\t\tvalue: incompleteTokenValue,\n\t\t\tonBlur,\n\t\t\tisExpanded,\n\t\t\tselectedSuggestionIndex,\n\t\t};\n\n\t\treturn (\n\t\t\t<TokenInput\n\t\t\t\t{ ...inputProps }\n\t\t\t\tonChange={\n\t\t\t\t\t! ( maxLength && value.length >= maxLength )\n\t\t\t\t\t\t? onInputChangeHandler\n\t\t\t\t\t\t: undefined\n\t\t\t\t}\n\t\t\t\tref={ input }\n\t\t\t/>\n\t\t);\n\t}\n\n\tconst classes = classnames(\n\t\tclassName,\n\t\t'components-form-token-field__input-container',\n\t\t{\n\t\t\t'is-active': isActive,\n\t\t\t'is-disabled': disabled,\n\t\t}\n\t);\n\n\tlet tokenFieldProps = {\n\t\tclassName: 'components-form-token-field',\n\t\ttabIndex: -1,\n\t};\n\tconst matchingSuggestions = getMatchingSuggestions();\n\n\tif ( ! disabled ) {\n\t\ttokenFieldProps = Object.assign( {}, tokenFieldProps, {\n\t\t\tonKeyDown,\n\t\t\tonKeyPress,\n\t\t\tonFocus: onFocusHandler,\n\t\t} );\n\t}\n\n\t// Disable reason: There is no appropriate role which describes the\n\t// input container intended accessible usability.\n\t// TODO: Refactor click detection to use blur to stop propagation.\n\t/* eslint-disable jsx-a11y/no-static-element-interactions */\n\treturn (\n\t\t<div { ...tokenFieldProps }>\n\t\t\t<StyledLabel\n\t\t\t\thtmlFor={ `components-form-token-input-${ instanceId }` }\n\t\t\t\tclassName=\"components-form-token-field__label\"\n\t\t\t>\n\t\t\t\t{ label }\n\t\t\t</StyledLabel>\n\t\t\t<div\n\t\t\t\tref={ tokensAndInput }\n\t\t\t\tclassName={ classes }\n\t\t\t\ttabIndex={ -1 }\n\t\t\t\tonMouseDown={ onContainerTouched }\n\t\t\t\tonTouchStart={ onContainerTouched }\n\t\t\t>\n\t\t\t\t<TokensAndInputWrapperFlex\n\t\t\t\t\tjustify=\"flex-start\"\n\t\t\t\t\talign=\"center\"\n\t\t\t\t\tgap={ 1 }\n\t\t\t\t\twrap={ true }\n\t\t\t\t\t__next36pxDefaultSize={ __next36pxDefaultSize }\n\t\t\t\t\thasTokens={ !! value.length }\n\t\t\t\t>\n\t\t\t\t\t{ renderTokensAndInput() }\n\t\t\t\t</TokensAndInputWrapperFlex>\n\t\t\t\t{ isExpanded && (\n\t\t\t\t\t<SuggestionsList\n\t\t\t\t\t\tinstanceId={ instanceId }\n\t\t\t\t\t\tmatch={ saveTransform( incompleteTokenValue ) }\n\t\t\t\t\t\tdisplayTransform={ displayTransform }\n\t\t\t\t\t\tsuggestions={ matchingSuggestions }\n\t\t\t\t\t\tselectedIndex={ selectedSuggestionIndex }\n\t\t\t\t\t\tscrollIntoView={ selectedSuggestionScroll }\n\t\t\t\t\t\tonHover={ onSuggestionHovered }\n\t\t\t\t\t\tonSelect={ onSuggestionSelected }\n\t\t\t\t\t\t__experimentalRenderItem={ __experimentalRenderItem }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t</div>\n\t\t\t{ __experimentalShowHowTo && (\n\t\t\t\t<p\n\t\t\t\t\tid={ `components-form-token-suggestions-howto-${ instanceId }` }\n\t\t\t\t\tclassName=\"components-form-token-field__help\"\n\t\t\t\t>\n\t\t\t\t\t{ tokenizeOnSpace\n\t\t\t\t\t\t? __(\n\t\t\t\t\t\t\t\t'Separate with commas, spaces, or the Enter key.'\n\t\t\t\t\t\t )\n\t\t\t\t\t\t: __( 'Separate with commas or the Enter key.' ) }\n\t\t\t\t</p>\n\t\t\t) }\n\t\t</div>\n\t);\n\t/* eslint-enable jsx-a11y/no-static-element-interactions */\n}\n\nexport default FormTokenField;\n"]}
|