@wordpress/components 32.5.0 → 32.6.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/AGENTS.md +2 -2
- package/CHANGELOG.md +40 -0
- package/README.md +18 -4
- package/build/alignment-matrix-control/cell.cjs +3 -3
- package/build/alignment-matrix-control/cell.cjs.map +2 -2
- package/build/alignment-matrix-control/index.cjs +3 -3
- package/build/alignment-matrix-control/index.cjs.map +2 -2
- package/build/autocomplete/autocompleter-ui.cjs +75 -79
- package/build/autocomplete/autocompleter-ui.cjs.map +2 -2
- package/build/autocomplete/get-autocomplete-match.cjs +91 -0
- package/build/autocomplete/get-autocomplete-match.cjs.map +7 -0
- package/build/autocomplete/index.cjs +104 -107
- package/build/autocomplete/index.cjs.map +3 -3
- package/build/box-control/index.cjs +0 -8
- package/build/box-control/index.cjs.map +2 -2
- package/build/box-control/utils.cjs +1 -10
- package/build/box-control/utils.cjs.map +2 -2
- package/build/calendar/utils/use-localization-props.cjs +3 -2
- package/build/calendar/utils/use-localization-props.cjs.map +2 -2
- package/build/custom-gradient-picker/index.cjs.map +2 -2
- package/build/custom-select-control/index.cjs.map +3 -3
- package/build/custom-select-control-v2/custom-select.cjs +2 -2
- package/build/custom-select-control-v2/custom-select.cjs.map +2 -2
- package/build/custom-select-control-v2/index.cjs.map +3 -3
- package/build/date-time/{date → date-picker}/index.cjs +6 -6
- package/build/date-time/{date → date-picker}/index.cjs.map +2 -2
- package/build/date-time/{date → date-picker}/styles.cjs +17 -17
- package/build/date-time/{date → date-picker}/styles.cjs.map +2 -2
- package/build/date-time/{date → date-picker}/use-lilius/index.cjs +1 -1
- package/build/date-time/{date → date-picker}/use-lilius/index.cjs.map +1 -1
- package/build/date-time/date-time/index.cjs +6 -6
- package/build/date-time/date-time/index.cjs.map +2 -2
- package/build/date-time/index.cjs +4 -4
- package/build/date-time/index.cjs.map +2 -2
- package/build/date-time/{time → time-picker}/index.cjs +6 -6
- package/build/date-time/time-picker/index.cjs.map +7 -0
- package/build/date-time/{time → time-picker}/styles.cjs +21 -21
- package/build/date-time/{time → time-picker}/styles.cjs.map +2 -2
- package/build/date-time/{time → time-picker}/time-input/index.cjs +1 -1
- package/build/date-time/{time → time-picker}/time-input/index.cjs.map +1 -1
- package/build/date-time/{time → time-picker}/timezone.cjs +1 -1
- package/build/date-time/{time → time-picker}/timezone.cjs.map +1 -1
- package/build/modal/index.cjs.map +2 -2
- package/build/palette-edit/index.cjs.map +2 -2
- package/build/radio-control/index.cjs +2 -0
- package/build/radio-control/index.cjs.map +2 -2
- package/build/sandbox/index.cjs +127 -3
- package/build/sandbox/index.cjs.map +2 -2
- package/build/textarea-control/styles/textarea-control-styles.cjs +3 -3
- package/build/textarea-control/styles/textarea-control-styles.cjs.map +2 -2
- package/build/validated-form-controls/control-with-error.cjs +12 -8
- package/build/validated-form-controls/control-with-error.cjs.map +2 -2
- package/build-module/alignment-matrix-control/cell.mjs +3 -3
- package/build-module/alignment-matrix-control/cell.mjs.map +2 -2
- package/build-module/alignment-matrix-control/index.mjs +3 -3
- package/build-module/alignment-matrix-control/index.mjs.map +2 -2
- package/build-module/autocomplete/autocompleter-ui.mjs +74 -78
- package/build-module/autocomplete/autocompleter-ui.mjs.map +2 -2
- package/build-module/autocomplete/get-autocomplete-match.mjs +56 -0
- package/build-module/autocomplete/get-autocomplete-match.mjs.map +7 -0
- package/build-module/autocomplete/index.mjs +103 -107
- package/build-module/autocomplete/index.mjs.map +3 -3
- package/build-module/box-control/index.mjs +1 -9
- package/build-module/box-control/index.mjs.map +2 -2
- package/build-module/box-control/utils.mjs +1 -9
- package/build-module/box-control/utils.mjs.map +2 -2
- package/build-module/calendar/utils/use-localization-props.mjs +3 -2
- package/build-module/calendar/utils/use-localization-props.mjs.map +2 -2
- package/build-module/custom-gradient-picker/index.mjs.map +2 -2
- package/build-module/custom-select-control/index.mjs +2 -2
- package/build-module/custom-select-control/index.mjs.map +2 -2
- package/build-module/custom-select-control-v2/custom-select.mjs +2 -2
- package/build-module/custom-select-control-v2/custom-select.mjs.map +2 -2
- package/build-module/custom-select-control-v2/index.mjs +2 -2
- package/build-module/custom-select-control-v2/index.mjs.map +2 -2
- package/build-module/date-time/{date → date-picker}/index.mjs +3 -3
- package/build-module/date-time/{date → date-picker}/index.mjs.map +2 -2
- package/build-module/date-time/{date → date-picker}/styles.mjs +17 -17
- package/build-module/date-time/{date → date-picker}/styles.mjs.map +2 -2
- package/build-module/date-time/{date → date-picker}/use-lilius/index.mjs +1 -1
- package/build-module/date-time/{date → date-picker}/use-lilius/index.mjs.map +1 -1
- package/build-module/date-time/date-time/index.mjs +2 -2
- package/build-module/date-time/date-time/index.mjs.map +1 -1
- package/build-module/date-time/index.mjs +2 -2
- package/build-module/date-time/index.mjs.map +1 -1
- package/build-module/date-time/{time → time-picker}/index.mjs +3 -3
- package/build-module/date-time/time-picker/index.mjs.map +7 -0
- package/build-module/date-time/{time → time-picker}/styles.mjs +21 -21
- package/build-module/date-time/{time → time-picker}/styles.mjs.map +2 -2
- package/build-module/date-time/{time → time-picker}/time-input/index.mjs +1 -1
- package/build-module/date-time/{time → time-picker}/time-input/index.mjs.map +1 -1
- package/build-module/date-time/{time → time-picker}/timezone.mjs +1 -1
- package/build-module/date-time/{time → time-picker}/timezone.mjs.map +1 -1
- package/build-module/modal/index.mjs.map +2 -2
- package/build-module/palette-edit/index.mjs.map +2 -2
- package/build-module/radio-control/index.mjs +2 -0
- package/build-module/radio-control/index.mjs.map +2 -2
- package/build-module/sandbox/index.mjs +128 -4
- package/build-module/sandbox/index.mjs.map +2 -2
- package/build-module/textarea-control/styles/textarea-control-styles.mjs +3 -3
- package/build-module/textarea-control/styles/textarea-control-styles.mjs.map +2 -2
- package/build-module/validated-form-controls/control-with-error.mjs +12 -8
- package/build-module/validated-form-controls/control-with-error.mjs.map +2 -2
- package/build-style/style-rtl.css +83 -26
- package/build-style/style.css +83 -26
- package/build-types/autocomplete/autocompleter-ui.d.ts +2 -2
- package/build-types/autocomplete/autocompleter-ui.d.ts.map +1 -1
- package/build-types/autocomplete/get-autocomplete-match.d.ts +11 -0
- package/build-types/autocomplete/get-autocomplete-match.d.ts.map +1 -0
- package/build-types/autocomplete/index.d.ts +8 -0
- package/build-types/autocomplete/index.d.ts.map +1 -1
- package/build-types/autocomplete/test/get-autocomplete-match.d.ts +2 -0
- package/build-types/autocomplete/test/get-autocomplete-match.d.ts.map +1 -0
- package/build-types/autocomplete/types.d.ts +23 -9
- package/build-types/autocomplete/types.d.ts.map +1 -1
- package/build-types/box-control/index.d.ts.map +1 -1
- package/build-types/box-control/utils.d.ts +7 -16
- package/build-types/box-control/utils.d.ts.map +1 -1
- package/build-types/button/stories/index.story.d.ts +0 -1
- package/build-types/button/stories/index.story.d.ts.map +1 -1
- package/build-types/calendar/utils/use-localization-props.d.ts +3 -3
- package/build-types/calendar/utils/use-localization-props.d.ts.map +1 -1
- package/build-types/checkbox-control/types.d.ts +4 -0
- package/build-types/checkbox-control/types.d.ts.map +1 -1
- package/build-types/custom-gradient-picker/constants.d.ts +2 -2
- package/build-types/custom-gradient-picker/index.d.ts.map +1 -1
- package/build-types/custom-select-control-v2/custom-select.d.ts +3 -3
- package/build-types/custom-select-control-v2/custom-select.d.ts.map +1 -1
- package/build-types/custom-select-control-v2/types.d.ts +1 -1
- package/build-types/custom-select-control-v2/types.d.ts.map +1 -1
- package/build-types/date-time/date-picker/index.d.ts.map +1 -0
- package/build-types/date-time/date-picker/styles.d.ts.map +1 -0
- package/build-types/date-time/date-picker/test/index.d.ts.map +1 -0
- package/build-types/date-time/date-picker/test/use-lilius.d.ts.map +1 -0
- package/build-types/date-time/date-picker/use-lilius/index.d.ts.map +1 -0
- package/build-types/date-time/date-time/index.d.ts +2 -2
- package/build-types/date-time/date-time/index.d.ts.map +1 -1
- package/build-types/date-time/index.d.ts +2 -2
- package/build-types/date-time/index.d.ts.map +1 -1
- package/build-types/date-time/stories/date.story.d.ts +1 -1
- package/build-types/date-time/stories/date.story.d.ts.map +1 -1
- package/build-types/date-time/stories/time.story.d.ts +1 -1
- package/build-types/date-time/stories/time.story.d.ts.map +1 -1
- package/build-types/date-time/{time → time-picker}/index.d.ts +1 -1
- package/build-types/date-time/time-picker/index.d.ts.map +1 -0
- package/build-types/date-time/time-picker/styles.d.ts.map +1 -0
- package/build-types/date-time/time-picker/test/index.d.ts.map +1 -0
- package/build-types/date-time/time-picker/time-input/index.d.ts.map +1 -0
- package/build-types/date-time/time-picker/time-input/test/index.d.ts.map +1 -0
- package/build-types/date-time/time-picker/timezone.d.ts.map +1 -0
- package/build-types/date-time/types.d.ts +1 -1
- package/build-types/date-time/types.d.ts.map +1 -1
- package/build-types/font-size-picker/constants.d.ts +2 -2
- package/build-types/font-size-picker/constants.d.ts.map +1 -1
- package/build-types/modal/index.d.ts.map +1 -1
- package/build-types/palette-edit/index.d.ts +1 -1
- package/build-types/palette-edit/index.d.ts.map +1 -1
- package/build-types/radio-control/index.d.ts.map +1 -1
- package/build-types/radio-control/types.d.ts +6 -0
- package/build-types/radio-control/types.d.ts.map +1 -1
- package/build-types/sandbox/index.d.ts +1 -1
- package/build-types/sandbox/index.d.ts.map +1 -1
- package/build-types/sandbox/types.d.ts +11 -0
- package/build-types/sandbox/types.d.ts.map +1 -1
- package/build-types/textarea-control/stories/index.story.d.ts.map +1 -1
- package/build-types/textarea-control/styles/textarea-control-styles.d.ts.map +1 -1
- package/build-types/validated-form-controls/components/checkbox-control.d.ts +2 -1
- package/build-types/validated-form-controls/components/checkbox-control.d.ts.map +1 -1
- package/build-types/validated-form-controls/components/radio-control.d.ts +2 -1
- package/build-types/validated-form-controls/components/radio-control.d.ts.map +1 -1
- package/build-types/validated-form-controls/control-with-error.d.ts.map +1 -1
- package/package.json +21 -21
- package/src/alignment-matrix-control/README.md +1 -1
- package/src/alignment-matrix-control/style.module.scss +1 -1
- package/src/angle-picker-control/style.module.scss +1 -0
- package/src/autocomplete/README.md +2 -2
- package/src/autocomplete/autocompleter-ui.native.js +166 -173
- package/src/autocomplete/autocompleter-ui.tsx +114 -116
- package/src/autocomplete/get-autocomplete-match.ts +115 -0
- package/src/autocomplete/index.tsx +129 -208
- package/src/autocomplete/test/get-autocomplete-match.ts +338 -0
- package/src/autocomplete/test/index.tsx +112 -4
- package/src/autocomplete/types.ts +17 -10
- package/src/box-control/index.tsx +1 -19
- package/src/box-control/utils.ts +1 -19
- package/src/button/README.md +1 -1
- package/src/button/stories/index.story.tsx +0 -1
- package/src/button/style.scss +1 -7
- package/src/calendar/style.scss +3 -3
- package/src/calendar/utils/use-localization-props.ts +3 -4
- package/src/checkbox-control/style.scss +17 -5
- package/src/checkbox-control/types.ts +4 -0
- package/src/circular-option-picker/style.scss +1 -1
- package/src/color-palette/style.scss +1 -1
- package/src/css.d.ts +1 -0
- package/src/custom-gradient-picker/index.tsx +1 -0
- package/src/custom-select-control/index.tsx +3 -3
- package/src/custom-select-control-v2/custom-select.tsx +4 -4
- package/src/custom-select-control-v2/index.tsx +2 -2
- package/src/custom-select-control-v2/types.ts +1 -1
- package/src/date-time/README.md +3 -3
- package/src/date-time/date-picker/README.md +65 -0
- package/src/date-time/date-time/index.tsx +2 -2
- package/src/date-time/index.ts +2 -2
- package/src/date-time/stories/date.story.tsx +1 -1
- package/src/date-time/stories/time.story.tsx +1 -1
- package/src/date-time/time-picker/README.md +119 -0
- package/src/date-time/{time → time-picker}/index.tsx +1 -1
- package/src/date-time/types.ts +1 -1
- package/src/divider/README.md +5 -6
- package/src/dropdown-menu/style.scss +1 -1
- package/src/flex/stories/index.story.tsx +1 -1
- package/src/form-file-upload/README.md +3 -3
- package/src/form-toggle/style.scss +35 -2
- package/src/form-token-field/style.scss +12 -3
- package/src/gradient-picker/README.md +2 -2
- package/src/h-stack/README.md +10 -15
- package/src/h-stack/stories/index.story.tsx +2 -2
- package/src/heading/stories/index.story.tsx +1 -1
- package/src/higher-order/with-focus-outside/index.native.js +21 -20
- package/src/icon/README.md +1 -1
- package/src/menu/README.md +2 -2
- package/src/mobile/utils/get-px-from-css-unit.native.js +1 -1
- package/src/modal/index.tsx +1 -0
- package/src/palette-edit/index.tsx +1 -0
- package/src/radio-control/index.tsx +2 -0
- package/src/radio-control/style.scss +21 -2
- package/src/radio-control/test/index.tsx +10 -0
- package/src/radio-control/types.ts +6 -0
- package/src/sandbox/index.native.js +2 -2
- package/src/sandbox/index.tsx +191 -11
- package/src/sandbox/test/index.tsx +65 -24
- package/src/sandbox/types.ts +11 -0
- package/src/snackbar/style.scss +2 -2
- package/src/tab-panel/style.scss +1 -1
- package/src/tabs/README.md +6 -6
- package/src/text/stories/index.story.tsx +1 -1
- package/src/textarea-control/stories/index.story.tsx +3 -0
- package/src/textarea-control/styles/textarea-control-styles.ts +6 -0
- package/src/toggle-control/style.scss +1 -1
- package/src/toggle-control/test/index.tsx +8 -2
- package/src/toolbar/toolbar-button/toolbar-button-container.native.js +3 -1
- package/src/tree-select/README.md +1 -1
- package/src/v-stack/README.md +10 -15
- package/src/v-stack/stories/index.story.tsx +2 -2
- package/src/validated-form-controls/control-with-error.tsx +17 -12
- package/src/validated-form-controls/test/control-with-error.tsx +28 -1
- package/src/view/README.md +2 -5
- package/build/date-time/time/index.cjs.map +0 -7
- package/build-module/date-time/time/index.mjs.map +0 -7
- package/build-types/date-time/date/index.d.ts.map +0 -1
- package/build-types/date-time/date/styles.d.ts.map +0 -1
- package/build-types/date-time/date/test/index.d.ts.map +0 -1
- package/build-types/date-time/date/test/use-lilius.d.ts.map +0 -1
- package/build-types/date-time/date/use-lilius/index.d.ts.map +0 -1
- package/build-types/date-time/time/index.d.ts.map +0 -1
- package/build-types/date-time/time/styles.d.ts.map +0 -1
- package/build-types/date-time/time/test/index.d.ts.map +0 -1
- package/build-types/date-time/time/time-input/index.d.ts.map +0 -1
- package/build-types/date-time/time/time-input/test/index.d.ts.map +0 -1
- package/build-types/date-time/time/timezone.d.ts.map +0 -1
- package/src/button/stories/style.css +0 -8
- /package/build-types/date-time/{date → date-picker}/index.d.ts +0 -0
- /package/build-types/date-time/{date → date-picker}/styles.d.ts +0 -0
- /package/build-types/date-time/{date → date-picker}/test/index.d.ts +0 -0
- /package/build-types/date-time/{date → date-picker}/test/use-lilius.d.ts +0 -0
- /package/build-types/date-time/{date → date-picker}/use-lilius/index.d.ts +0 -0
- /package/build-types/date-time/{time → time-picker}/styles.d.ts +0 -0
- /package/build-types/date-time/{time → time-picker}/test/index.d.ts +0 -0
- /package/build-types/date-time/{time → time-picker}/time-input/index.d.ts +0 -0
- /package/build-types/date-time/{time → time-picker}/time-input/test/index.d.ts +0 -0
- /package/build-types/date-time/{time → time-picker}/timezone.d.ts +0 -0
- /package/src/date-time/{date → date-picker}/index.tsx +0 -0
- /package/src/date-time/{date → date-picker}/styles.ts +0 -0
- /package/src/date-time/{date → date-picker}/test/index.tsx +0 -0
- /package/src/date-time/{date → date-picker}/test/use-lilius.ts +0 -0
- /package/src/date-time/{date → date-picker}/use-lilius/index.ts +0 -0
- /package/src/date-time/{time → time-picker}/styles.ts +0 -0
- /package/src/date-time/{time → time-picker}/test/index.tsx +0 -0
- /package/src/date-time/{time → time-picker}/time-input/index.tsx +0 -0
- /package/src/date-time/{time → time-picker}/time-input/test/index.tsx +0 -0
- /package/src/date-time/{time → time-picker}/timezone.tsx +0 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wordpress/components",
|
|
3
|
-
"version": "32.
|
|
3
|
+
"version": "32.6.0",
|
|
4
4
|
"description": "UI components for WordPress.",
|
|
5
5
|
"author": "The WordPress Contributors",
|
|
6
6
|
"license": "GPL-2.0-or-later",
|
|
@@ -64,24 +64,24 @@
|
|
|
64
64
|
"@types/highlight-words-core": "1.2.1",
|
|
65
65
|
"@types/react": "^18.3.27",
|
|
66
66
|
"@use-gesture/react": "^10.3.1",
|
|
67
|
-
"@wordpress/a11y": "^4.
|
|
68
|
-
"@wordpress/base-styles": "^6.
|
|
69
|
-
"@wordpress/compose": "^7.
|
|
70
|
-
"@wordpress/date": "^5.
|
|
71
|
-
"@wordpress/deprecated": "^4.
|
|
72
|
-
"@wordpress/dom": "^4.
|
|
73
|
-
"@wordpress/element": "^6.
|
|
74
|
-
"@wordpress/escape-html": "^3.
|
|
75
|
-
"@wordpress/hooks": "^4.
|
|
76
|
-
"@wordpress/html-entities": "^4.
|
|
77
|
-
"@wordpress/i18n": "^6.
|
|
78
|
-
"@wordpress/icons": "^12.
|
|
79
|
-
"@wordpress/is-shallow-equal": "^5.
|
|
80
|
-
"@wordpress/keycodes": "^4.
|
|
81
|
-
"@wordpress/primitives": "^4.
|
|
82
|
-
"@wordpress/private-apis": "^1.
|
|
83
|
-
"@wordpress/rich-text": "^7.
|
|
84
|
-
"@wordpress/warning": "^3.
|
|
67
|
+
"@wordpress/a11y": "^4.44.0",
|
|
68
|
+
"@wordpress/base-styles": "^6.20.0",
|
|
69
|
+
"@wordpress/compose": "^7.44.0",
|
|
70
|
+
"@wordpress/date": "^5.44.0",
|
|
71
|
+
"@wordpress/deprecated": "^4.44.0",
|
|
72
|
+
"@wordpress/dom": "^4.44.0",
|
|
73
|
+
"@wordpress/element": "^6.44.0",
|
|
74
|
+
"@wordpress/escape-html": "^3.44.0",
|
|
75
|
+
"@wordpress/hooks": "^4.44.0",
|
|
76
|
+
"@wordpress/html-entities": "^4.44.0",
|
|
77
|
+
"@wordpress/i18n": "^6.17.0",
|
|
78
|
+
"@wordpress/icons": "^12.2.0",
|
|
79
|
+
"@wordpress/is-shallow-equal": "^5.44.0",
|
|
80
|
+
"@wordpress/keycodes": "^4.44.0",
|
|
81
|
+
"@wordpress/primitives": "^4.44.0",
|
|
82
|
+
"@wordpress/private-apis": "^1.44.0",
|
|
83
|
+
"@wordpress/rich-text": "^7.44.0",
|
|
84
|
+
"@wordpress/warning": "^3.44.0",
|
|
85
85
|
"change-case": "^4.1.2",
|
|
86
86
|
"clsx": "^2.1.1",
|
|
87
87
|
"colord": "^2.7.0",
|
|
@@ -107,7 +107,7 @@
|
|
|
107
107
|
"@storybook/react-vite": "^10.2.8",
|
|
108
108
|
"@testing-library/jest-dom": "^6.9.1",
|
|
109
109
|
"@types/jest": "^29.5.14",
|
|
110
|
-
"@wordpress/jest-console": "^8.
|
|
110
|
+
"@wordpress/jest-console": "^8.44.0",
|
|
111
111
|
"snapshot-diff": "^0.10.0",
|
|
112
112
|
"storybook": "^10.2.8",
|
|
113
113
|
"timezone-mock": "^1.3.6"
|
|
@@ -119,5 +119,5 @@
|
|
|
119
119
|
"publishConfig": {
|
|
120
120
|
"access": "public"
|
|
121
121
|
},
|
|
122
|
-
"gitHead": "
|
|
122
|
+
"gitHead": "b862d8c84121a47bbeff882f6c87e61681ce2e0d"
|
|
123
123
|
}
|
|
@@ -78,7 +78,7 @@ In addition, a completer may optionally declare:
|
|
|
78
78
|
|
|
79
79
|
#### name
|
|
80
80
|
|
|
81
|
-
The name of the completer. Useful for identifying a specific completer to be overridden via extensibility hooks.
|
|
81
|
+
The name of the completer. Useful for identifying a specific completer to be overridden via extensibility hooks. Each completer should have a unique name.
|
|
82
82
|
|
|
83
83
|
- Type: `String`
|
|
84
84
|
- Required: Yes
|
|
@@ -145,7 +145,7 @@ A class name to apply to the autocompletion popup menu.
|
|
|
145
145
|
|
|
146
146
|
#### isDebounced
|
|
147
147
|
|
|
148
|
-
Whether to
|
|
148
|
+
Whether to debounce the autocompleter. This setting only affects the `options` argument; it is ignored by the `useItems`.
|
|
149
149
|
|
|
150
150
|
- Type: `Boolean`
|
|
151
151
|
- Required: No
|
|
@@ -34,185 +34,178 @@ import { __unstableAutocompletionItemsFill as AutocompletionItemsFill } from '..
|
|
|
34
34
|
|
|
35
35
|
const { compose: stylesCompose } = StyleSheet;
|
|
36
36
|
|
|
37
|
-
export function
|
|
37
|
+
export function AutocompleterUI( {
|
|
38
|
+
autocompleter,
|
|
39
|
+
filterValue,
|
|
40
|
+
selectedIndex,
|
|
41
|
+
onChangeOptions,
|
|
42
|
+
onSelect,
|
|
43
|
+
reset,
|
|
44
|
+
} ) {
|
|
45
|
+
// The useItems hook is derived from the autocompleter prop. This is safe
|
|
46
|
+
// because the parent renders this component with a key that triggers
|
|
47
|
+
// remount when the completer changes.
|
|
38
48
|
const useItems = autocompleter.useItems
|
|
39
49
|
? autocompleter.useItems
|
|
40
50
|
: getDefaultUseItems( autocompleter );
|
|
51
|
+
const [ items ] = useItems( filterValue );
|
|
52
|
+
const filteredItems = items.filter( ( item ) => ! item.isDisabled );
|
|
53
|
+
const scrollViewRef = useRef();
|
|
54
|
+
const animationValue = useRef( new Animated.Value( 0 ) ).current;
|
|
55
|
+
const [ isVisible, setIsVisible ] = useState( false );
|
|
56
|
+
|
|
57
|
+
useEffect( () => {
|
|
58
|
+
if ( ! isVisible && filterValue.length > 0 ) {
|
|
59
|
+
setIsVisible( true );
|
|
60
|
+
}
|
|
61
|
+
}, [ isVisible, filterValue ] );
|
|
41
62
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
const [ items ] = useItems( filterValue );
|
|
51
|
-
const filteredItems = items.filter( ( item ) => ! item.isDisabled );
|
|
52
|
-
const scrollViewRef = useRef();
|
|
53
|
-
const animationValue = useRef( new Animated.Value( 0 ) ).current;
|
|
54
|
-
const [ isVisible, setIsVisible ] = useState( false );
|
|
55
|
-
const { text } = value;
|
|
56
|
-
|
|
57
|
-
useEffect( () => {
|
|
58
|
-
if ( ! isVisible && text.length > 0 ) {
|
|
59
|
-
setIsVisible( true );
|
|
60
|
-
}
|
|
61
|
-
}, [ isVisible, text ] );
|
|
62
|
-
|
|
63
|
-
useLayoutEffect( () => {
|
|
64
|
-
onChangeOptions( items );
|
|
65
|
-
scrollViewRef.current?.scrollTo( { x: 0, animated: false } );
|
|
66
|
-
|
|
67
|
-
if ( isVisible && text.length > 0 ) {
|
|
68
|
-
startAnimation( true );
|
|
69
|
-
} else if ( isVisible && text.length === 0 ) {
|
|
70
|
-
startAnimation( false );
|
|
71
|
-
}
|
|
72
|
-
// We want to avoid introducing unexpected side effects.
|
|
73
|
-
// See https://github.com/WordPress/gutenberg/pull/41820
|
|
74
|
-
}, [ items, isVisible, text ] );
|
|
75
|
-
|
|
76
|
-
const activeItemStyles = usePreferredColorSchemeStyle(
|
|
77
|
-
styles[ 'components-autocomplete__item-active' ],
|
|
78
|
-
styles[ 'components-autocomplete__item-active-dark' ]
|
|
79
|
-
);
|
|
80
|
-
|
|
81
|
-
const iconStyles = usePreferredColorSchemeStyle(
|
|
82
|
-
styles[ 'components-autocomplete__icon' ],
|
|
83
|
-
styles[ 'components-autocomplete__icon-active-dark' ]
|
|
84
|
-
);
|
|
85
|
-
|
|
86
|
-
const activeIconStyles = usePreferredColorSchemeStyle(
|
|
87
|
-
styles[ 'components-autocomplete__icon-active ' ],
|
|
88
|
-
styles[ 'components-autocomplete__icon-active-dark' ]
|
|
89
|
-
);
|
|
90
|
-
|
|
91
|
-
const textStyles = usePreferredColorSchemeStyle(
|
|
92
|
-
styles[ 'components-autocomplete__text' ],
|
|
93
|
-
styles[ 'components-autocomplete__text-dark' ]
|
|
94
|
-
);
|
|
95
|
-
|
|
96
|
-
const activeTextStyles = usePreferredColorSchemeStyle(
|
|
97
|
-
styles[ 'components-autocomplete__text-active' ],
|
|
98
|
-
styles[ 'components-autocomplete__text-active-dark' ]
|
|
99
|
-
);
|
|
100
|
-
|
|
101
|
-
const startAnimation = useCallback(
|
|
102
|
-
( show ) => {
|
|
103
|
-
Animated.timing( animationValue, {
|
|
104
|
-
toValue: show ? 1 : 0,
|
|
105
|
-
duration: show ? 200 : 100,
|
|
106
|
-
useNativeDriver: true,
|
|
107
|
-
} ).start( ( { finished } ) => {
|
|
108
|
-
if ( finished && ! show && isVisible ) {
|
|
109
|
-
setIsVisible( false );
|
|
110
|
-
reset();
|
|
111
|
-
}
|
|
112
|
-
} );
|
|
113
|
-
},
|
|
114
|
-
// We want to avoid introducing unexpected side effects.
|
|
115
|
-
// See https://github.com/WordPress/gutenberg/pull/41820
|
|
116
|
-
[ isVisible ]
|
|
117
|
-
);
|
|
118
|
-
|
|
119
|
-
const contentStyles = {
|
|
120
|
-
transform: [
|
|
121
|
-
{
|
|
122
|
-
translateY: animationValue.interpolate( {
|
|
123
|
-
inputRange: [ 0, 1 ],
|
|
124
|
-
outputRange: [
|
|
125
|
-
styles[ 'components-autocomplete' ].height,
|
|
126
|
-
0,
|
|
127
|
-
],
|
|
128
|
-
} ),
|
|
129
|
-
},
|
|
130
|
-
],
|
|
131
|
-
};
|
|
132
|
-
|
|
133
|
-
if ( ! filteredItems.length > 0 || ! isVisible ) {
|
|
134
|
-
return null;
|
|
63
|
+
useLayoutEffect( () => {
|
|
64
|
+
onChangeOptions( items );
|
|
65
|
+
scrollViewRef.current?.scrollTo( { x: 0, animated: false } );
|
|
66
|
+
|
|
67
|
+
if ( isVisible && filterValue.length > 0 ) {
|
|
68
|
+
startAnimation( true );
|
|
69
|
+
} else if ( isVisible && filterValue.length === 0 ) {
|
|
70
|
+
startAnimation( false );
|
|
135
71
|
}
|
|
72
|
+
// We want to avoid introducing unexpected side effects.
|
|
73
|
+
// See https://github.com/WordPress/gutenberg/pull/41820
|
|
74
|
+
}, [ items, isVisible, filterValue ] );
|
|
75
|
+
|
|
76
|
+
const activeItemStyles = usePreferredColorSchemeStyle(
|
|
77
|
+
styles[ 'components-autocomplete__item-active' ],
|
|
78
|
+
styles[ 'components-autocomplete__item-active-dark' ]
|
|
79
|
+
);
|
|
80
|
+
|
|
81
|
+
const iconStyles = usePreferredColorSchemeStyle(
|
|
82
|
+
styles[ 'components-autocomplete__icon' ],
|
|
83
|
+
styles[ 'components-autocomplete__icon-active-dark' ]
|
|
84
|
+
);
|
|
85
|
+
|
|
86
|
+
const activeIconStyles = usePreferredColorSchemeStyle(
|
|
87
|
+
styles[ 'components-autocomplete__icon-active ' ],
|
|
88
|
+
styles[ 'components-autocomplete__icon-active-dark' ]
|
|
89
|
+
);
|
|
90
|
+
|
|
91
|
+
const textStyles = usePreferredColorSchemeStyle(
|
|
92
|
+
styles[ 'components-autocomplete__text' ],
|
|
93
|
+
styles[ 'components-autocomplete__text-dark' ]
|
|
94
|
+
);
|
|
95
|
+
|
|
96
|
+
const activeTextStyles = usePreferredColorSchemeStyle(
|
|
97
|
+
styles[ 'components-autocomplete__text-active' ],
|
|
98
|
+
styles[ 'components-autocomplete__text-active-dark' ]
|
|
99
|
+
);
|
|
100
|
+
|
|
101
|
+
const startAnimation = useCallback(
|
|
102
|
+
( show ) => {
|
|
103
|
+
Animated.timing( animationValue, {
|
|
104
|
+
toValue: show ? 1 : 0,
|
|
105
|
+
duration: show ? 200 : 100,
|
|
106
|
+
useNativeDriver: true,
|
|
107
|
+
} ).start( ( { finished } ) => {
|
|
108
|
+
if ( finished && ! show && isVisible ) {
|
|
109
|
+
setIsVisible( false );
|
|
110
|
+
reset();
|
|
111
|
+
}
|
|
112
|
+
} );
|
|
113
|
+
},
|
|
114
|
+
// We want to avoid introducing unexpected side effects.
|
|
115
|
+
// See https://github.com/WordPress/gutenberg/pull/41820
|
|
116
|
+
[ isVisible ]
|
|
117
|
+
);
|
|
118
|
+
|
|
119
|
+
const contentStyles = {
|
|
120
|
+
transform: [
|
|
121
|
+
{
|
|
122
|
+
translateY: animationValue.interpolate( {
|
|
123
|
+
inputRange: [ 0, 1 ],
|
|
124
|
+
outputRange: [
|
|
125
|
+
styles[ 'components-autocomplete' ].height,
|
|
126
|
+
0,
|
|
127
|
+
],
|
|
128
|
+
} ),
|
|
129
|
+
},
|
|
130
|
+
],
|
|
131
|
+
};
|
|
136
132
|
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
<View style={ styles[ 'components-autocomplete' ] }>
|
|
140
|
-
<Animated.View style={ contentStyles }>
|
|
141
|
-
<BackgroundView>
|
|
142
|
-
<ScrollView
|
|
143
|
-
testID="autocompleter"
|
|
144
|
-
ref={ scrollViewRef }
|
|
145
|
-
horizontal
|
|
146
|
-
contentContainerStyle={
|
|
147
|
-
styles[ 'components-autocomplete__content' ]
|
|
148
|
-
}
|
|
149
|
-
showsHorizontalScrollIndicator={ false }
|
|
150
|
-
keyboardShouldPersistTaps="always"
|
|
151
|
-
accessibilityLabel={
|
|
152
|
-
// translators: Slash inserter autocomplete results
|
|
153
|
-
__( 'Slash inserter results' )
|
|
154
|
-
}
|
|
155
|
-
>
|
|
156
|
-
{ filteredItems.map( ( option, index ) => {
|
|
157
|
-
const isActive = index === selectedIndex;
|
|
158
|
-
const itemStyle = stylesCompose(
|
|
159
|
-
styles[
|
|
160
|
-
'components-autocomplete__item'
|
|
161
|
-
],
|
|
162
|
-
isActive && activeItemStyles
|
|
163
|
-
);
|
|
164
|
-
const textStyle = stylesCompose(
|
|
165
|
-
textStyles,
|
|
166
|
-
isActive && activeTextStyles
|
|
167
|
-
);
|
|
168
|
-
const iconStyle = stylesCompose(
|
|
169
|
-
iconStyles,
|
|
170
|
-
isActive && activeIconStyles
|
|
171
|
-
);
|
|
172
|
-
const iconSource =
|
|
173
|
-
option?.value?.icon?.src ||
|
|
174
|
-
option?.value?.icon;
|
|
175
|
-
|
|
176
|
-
return (
|
|
177
|
-
<TouchableOpacity
|
|
178
|
-
activeOpacity={ 0.5 }
|
|
179
|
-
style={ itemStyle }
|
|
180
|
-
key={ index }
|
|
181
|
-
onPress={ () => onSelect( option ) }
|
|
182
|
-
accessibilityLabel={ sprintf(
|
|
183
|
-
// translators: %s: Block name e.g. "Image block"
|
|
184
|
-
__( '%s block' ),
|
|
185
|
-
option?.value?.title
|
|
186
|
-
) }
|
|
187
|
-
>
|
|
188
|
-
<View
|
|
189
|
-
style={
|
|
190
|
-
styles[
|
|
191
|
-
'components-autocomplete__icon'
|
|
192
|
-
]
|
|
193
|
-
}
|
|
194
|
-
>
|
|
195
|
-
<Icon
|
|
196
|
-
icon={ iconSource }
|
|
197
|
-
size={ 24 }
|
|
198
|
-
style={ iconStyle }
|
|
199
|
-
/>
|
|
200
|
-
</View>
|
|
201
|
-
<Text style={ textStyle }>
|
|
202
|
-
{ option?.value?.title }
|
|
203
|
-
</Text>
|
|
204
|
-
</TouchableOpacity>
|
|
205
|
-
);
|
|
206
|
-
} ) }
|
|
207
|
-
</ScrollView>
|
|
208
|
-
</BackgroundView>
|
|
209
|
-
</Animated.View>
|
|
210
|
-
</View>
|
|
211
|
-
</AutocompletionItemsFill>
|
|
212
|
-
);
|
|
133
|
+
if ( ! filteredItems.length > 0 || ! isVisible ) {
|
|
134
|
+
return null;
|
|
213
135
|
}
|
|
214
136
|
|
|
215
|
-
return
|
|
137
|
+
return (
|
|
138
|
+
<AutocompletionItemsFill>
|
|
139
|
+
<View style={ styles[ 'components-autocomplete' ] }>
|
|
140
|
+
<Animated.View style={ contentStyles }>
|
|
141
|
+
<BackgroundView>
|
|
142
|
+
<ScrollView
|
|
143
|
+
testID="autocompleter"
|
|
144
|
+
ref={ scrollViewRef }
|
|
145
|
+
horizontal
|
|
146
|
+
contentContainerStyle={
|
|
147
|
+
styles[ 'components-autocomplete__content' ]
|
|
148
|
+
}
|
|
149
|
+
showsHorizontalScrollIndicator={ false }
|
|
150
|
+
keyboardShouldPersistTaps="always"
|
|
151
|
+
accessibilityLabel={
|
|
152
|
+
// translators: Slash inserter autocomplete results
|
|
153
|
+
__( 'Slash inserter results' )
|
|
154
|
+
}
|
|
155
|
+
>
|
|
156
|
+
{ filteredItems.map( ( option, index ) => {
|
|
157
|
+
const isActive = index === selectedIndex;
|
|
158
|
+
const itemStyle = stylesCompose(
|
|
159
|
+
styles[ 'components-autocomplete__item' ],
|
|
160
|
+
isActive && activeItemStyles
|
|
161
|
+
);
|
|
162
|
+
const textStyle = stylesCompose(
|
|
163
|
+
textStyles,
|
|
164
|
+
isActive && activeTextStyles
|
|
165
|
+
);
|
|
166
|
+
const iconStyle = stylesCompose(
|
|
167
|
+
iconStyles,
|
|
168
|
+
isActive && activeIconStyles
|
|
169
|
+
);
|
|
170
|
+
const iconSource =
|
|
171
|
+
option?.value?.icon?.src ||
|
|
172
|
+
option?.value?.icon;
|
|
173
|
+
|
|
174
|
+
return (
|
|
175
|
+
<TouchableOpacity
|
|
176
|
+
activeOpacity={ 0.5 }
|
|
177
|
+
style={ itemStyle }
|
|
178
|
+
key={ index }
|
|
179
|
+
onPress={ () => onSelect( option ) }
|
|
180
|
+
accessibilityLabel={ sprintf(
|
|
181
|
+
// translators: %s: Block name e.g. "Image block"
|
|
182
|
+
__( '%s block' ),
|
|
183
|
+
option?.value?.title
|
|
184
|
+
) }
|
|
185
|
+
>
|
|
186
|
+
<View
|
|
187
|
+
style={
|
|
188
|
+
styles[
|
|
189
|
+
'components-autocomplete__icon'
|
|
190
|
+
]
|
|
191
|
+
}
|
|
192
|
+
>
|
|
193
|
+
<Icon
|
|
194
|
+
icon={ iconSource }
|
|
195
|
+
size={ 24 }
|
|
196
|
+
style={ iconStyle }
|
|
197
|
+
/>
|
|
198
|
+
</View>
|
|
199
|
+
<Text style={ textStyle }>
|
|
200
|
+
{ option?.value?.title }
|
|
201
|
+
</Text>
|
|
202
|
+
</TouchableOpacity>
|
|
203
|
+
);
|
|
204
|
+
} ) }
|
|
205
|
+
</ScrollView>
|
|
206
|
+
</BackgroundView>
|
|
207
|
+
</Animated.View>
|
|
208
|
+
</View>
|
|
209
|
+
</AutocompletionItemsFill>
|
|
210
|
+
);
|
|
216
211
|
}
|
|
217
|
-
|
|
218
|
-
export default getAutoCompleterUI;
|