@wordpress/components 32.2.1-next.v.202602111440.0 → 32.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +46 -1
- package/CLAUDE.md +1 -0
- package/build/alignment-matrix-control/cell.cjs +2 -2
- package/build/alignment-matrix-control/cell.cjs.map +1 -1
- package/build/alignment-matrix-control/index.cjs +2 -2
- package/build/alignment-matrix-control/index.cjs.map +1 -1
- package/build/angle-picker-control/angle-circle.cjs +4 -4
- package/build/angle-picker-control/angle-circle.cjs.map +2 -2
- package/build/autocomplete/index.cjs +16 -8
- package/build/autocomplete/index.cjs.map +2 -2
- package/build/clipboard-button/index.cjs +1 -1
- package/build/clipboard-button/index.cjs.map +2 -2
- package/build/color-picker/color-copy-button.cjs +1 -1
- package/build/color-picker/color-copy-button.cjs.map +2 -2
- package/build/confirm-dialog/component.cjs +2 -2
- package/build/confirm-dialog/component.cjs.map +2 -2
- package/build/context/context-system-provider.cjs.map +1 -1
- package/build/custom-gradient-picker/gradient-bar/control-points.cjs +2 -2
- package/build/custom-gradient-picker/gradient-bar/control-points.cjs.map +2 -2
- package/build/date-time/date/index.cjs +1 -1
- package/build/date-time/date/index.cjs.map +2 -2
- package/build/date-time/time/index.cjs +1 -1
- package/build/date-time/time/index.cjs.map +2 -2
- package/build/date-time/utils.cjs +9 -0
- package/build/date-time/utils.cjs.map +2 -2
- package/build/dropdown/index.cjs +1 -1
- package/build/dropdown/index.cjs.map +2 -2
- package/build/external-link/index.cjs +5 -1
- package/build/external-link/index.cjs.map +2 -2
- package/build/higher-order/with-spoken-messages/index.cjs.map +2 -2
- package/build/modal/index.cjs +2 -2
- package/build/modal/index.cjs.map +2 -2
- package/build/modal/use-modal-exit-animation.cjs +2 -2
- package/build/modal/use-modal-exit-animation.cjs.map +2 -2
- package/build/number-control/index.cjs +1 -1
- package/build/number-control/index.cjs.map +2 -2
- package/build/palette-edit/index.cjs +1 -1
- package/build/palette-edit/index.cjs.map +2 -2
- package/build/panel/body.cjs +1 -1
- package/build/panel/body.cjs.map +2 -2
- package/build/private-apis.cjs +0 -2
- package/build/private-apis.cjs.map +2 -2
- package/build/range-control/index.cjs +1 -1
- package/build/range-control/index.cjs.map +2 -2
- package/build/resizable-box/resize-tooltip/utils.cjs +1 -1
- package/build/resizable-box/resize-tooltip/utils.cjs.map +2 -2
- package/build/sandbox/index.cjs +126 -2
- package/build/sandbox/index.cjs.map +2 -2
- package/build/select-control/styles/select-control-styles.cjs +8 -8
- package/build/select-control/styles/select-control-styles.cjs.map +2 -2
- package/build/snackbar/list.cjs +4 -1
- package/build/snackbar/list.cjs.map +2 -2
- package/build/tabs/styles.cjs +5 -5
- package/build/tabs/styles.cjs.map +2 -2
- package/build/text/utils.cjs.map +1 -1
- package/build/toggle-group-control/toggle-group-control-option-base/styles.cjs +8 -8
- package/build/toggle-group-control/toggle-group-control-option-base/styles.cjs.map +2 -2
- package/build/tree-grid/roving-tab-index-item.cjs +1 -1
- package/build/tree-grid/roving-tab-index-item.cjs.map +2 -2
- package/build/utils/element-rect.cjs +1 -1
- package/build/utils/element-rect.cjs.map +2 -2
- package/build/utils/hooks/use-update-effect.cjs.map +1 -1
- package/build/utils/rtl.cjs +2 -2
- package/build/utils/rtl.cjs.map +2 -2
- package/build/utils/use-responsive-value.cjs +1 -7
- package/build/utils/use-responsive-value.cjs.map +2 -2
- package/build/validated-form-controls/control-with-error.cjs +26 -3
- package/build/validated-form-controls/control-with-error.cjs.map +2 -2
- package/build/validated-form-controls/validity-indicator.cjs +2 -0
- package/build/validated-form-controls/validity-indicator.cjs.map +2 -2
- package/build-module/alignment-matrix-control/cell.mjs +2 -2
- package/build-module/alignment-matrix-control/cell.mjs.map +1 -1
- package/build-module/alignment-matrix-control/index.mjs +2 -2
- package/build-module/alignment-matrix-control/index.mjs.map +1 -1
- package/build-module/angle-picker-control/angle-circle.mjs +4 -4
- package/build-module/angle-picker-control/angle-circle.mjs.map +2 -2
- package/build-module/autocomplete/index.mjs +14 -7
- package/build-module/autocomplete/index.mjs.map +2 -2
- package/build-module/clipboard-button/index.mjs +1 -1
- package/build-module/clipboard-button/index.mjs.map +2 -2
- package/build-module/color-picker/color-copy-button.mjs +1 -1
- package/build-module/color-picker/color-copy-button.mjs.map +2 -2
- package/build-module/confirm-dialog/component.mjs +2 -2
- package/build-module/confirm-dialog/component.mjs.map +2 -2
- package/build-module/context/context-system-provider.mjs.map +1 -1
- package/build-module/custom-gradient-picker/gradient-bar/control-points.mjs +2 -2
- package/build-module/custom-gradient-picker/gradient-bar/control-points.mjs.map +2 -2
- package/build-module/date-time/date/index.mjs +1 -1
- package/build-module/date-time/date/index.mjs.map +2 -2
- package/build-module/date-time/time/index.mjs +2 -2
- package/build-module/date-time/time/index.mjs.map +2 -2
- package/build-module/date-time/utils.mjs +8 -0
- package/build-module/date-time/utils.mjs.map +2 -2
- package/build-module/dropdown/index.mjs +1 -1
- package/build-module/dropdown/index.mjs.map +2 -2
- package/build-module/external-link/index.mjs +5 -1
- package/build-module/external-link/index.mjs.map +2 -2
- package/build-module/higher-order/with-spoken-messages/index.mjs.map +2 -2
- package/build-module/modal/index.mjs +2 -2
- package/build-module/modal/index.mjs.map +2 -2
- package/build-module/modal/use-modal-exit-animation.mjs +2 -2
- package/build-module/modal/use-modal-exit-animation.mjs.map +2 -2
- package/build-module/number-control/index.mjs +1 -1
- package/build-module/number-control/index.mjs.map +2 -2
- package/build-module/palette-edit/index.mjs +1 -1
- package/build-module/palette-edit/index.mjs.map +2 -2
- package/build-module/panel/body.mjs +1 -1
- package/build-module/panel/body.mjs.map +2 -2
- package/build-module/private-apis.mjs +0 -2
- package/build-module/private-apis.mjs.map +2 -2
- package/build-module/range-control/index.mjs +1 -1
- package/build-module/range-control/index.mjs.map +2 -2
- package/build-module/resizable-box/resize-tooltip/utils.mjs +1 -1
- package/build-module/resizable-box/resize-tooltip/utils.mjs.map +2 -2
- package/build-module/sandbox/index.mjs +127 -3
- package/build-module/sandbox/index.mjs.map +2 -2
- package/build-module/select-control/styles/select-control-styles.mjs +8 -8
- package/build-module/select-control/styles/select-control-styles.mjs.map +2 -2
- package/build-module/snackbar/list.mjs +4 -1
- package/build-module/snackbar/list.mjs.map +2 -2
- package/build-module/tabs/styles.mjs +5 -5
- package/build-module/tabs/styles.mjs.map +2 -2
- package/build-module/text/utils.mjs.map +1 -1
- package/build-module/toggle-group-control/toggle-group-control-option-base/styles.mjs +8 -8
- package/build-module/toggle-group-control/toggle-group-control-option-base/styles.mjs.map +2 -2
- package/build-module/tree-grid/roving-tab-index-item.mjs +1 -1
- package/build-module/tree-grid/roving-tab-index-item.mjs.map +2 -2
- package/build-module/utils/element-rect.mjs +1 -1
- package/build-module/utils/element-rect.mjs.map +2 -2
- package/build-module/utils/hooks/use-update-effect.mjs.map +1 -1
- package/build-module/utils/rtl.mjs +2 -2
- package/build-module/utils/rtl.mjs.map +2 -2
- package/build-module/utils/use-responsive-value.mjs +1 -7
- package/build-module/utils/use-responsive-value.mjs.map +2 -2
- package/build-module/validated-form-controls/control-with-error.mjs +27 -4
- package/build-module/validated-form-controls/control-with-error.mjs.map +2 -2
- package/build-module/validated-form-controls/validity-indicator.mjs +2 -0
- package/build-module/validated-form-controls/validity-indicator.mjs.map +2 -2
- package/build-style/style-rtl.css +8 -4
- package/build-style/style.css +8 -4
- package/build-types/alignment-matrix-control/styles/alignment-matrix-control-icon-styles.d.ts +19 -0
- package/build-types/alignment-matrix-control/styles/alignment-matrix-control-icon-styles.d.ts.map +1 -0
- package/build-types/alignment-matrix-control/styles/alignment-matrix-control-styles.d.ts +23 -0
- package/build-types/alignment-matrix-control/styles/alignment-matrix-control-styles.d.ts.map +1 -0
- package/build-types/angle-picker-control/angle-circle.d.ts.map +1 -1
- package/build-types/angle-picker-control/index.d.ts +1 -1
- package/build-types/angle-picker-control/stories/index.story.d.ts +1 -1
- package/build-types/angle-picker-control/styles/angle-picker-control-styles.d.ts +25 -0
- package/build-types/angle-picker-control/styles/angle-picker-control-styles.d.ts.map +1 -0
- package/build-types/animate/index.d.ts +1 -1
- package/build-types/animate/index.d.ts.map +1 -1
- package/build-types/animate/types.d.ts +1 -1
- package/build-types/animate/types.d.ts.map +1 -1
- package/build-types/autocomplete/get-autocomplete-match.d.ts +20 -0
- package/build-types/autocomplete/get-autocomplete-match.d.ts.map +1 -0
- package/build-types/autocomplete/index.d.ts +10 -2
- 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 +1 -1
- package/build-types/autocomplete/types.d.ts.map +1 -1
- package/build-types/badge/stories/e2e/index.story.d.ts +7 -0
- package/build-types/badge/stories/e2e/index.story.d.ts.map +1 -0
- package/build-types/base-control/index.d.ts +2 -2
- package/build-types/base-control/stories/index.story.d.ts +1 -1
- package/build-types/border-box-control/border-box-control/hook.d.ts +1 -1
- package/build-types/border-box-control/border-box-control-linked-button/hook.d.ts +1 -1
- package/build-types/border-box-control/border-box-control-split-controls/hook.d.ts +1 -1
- package/build-types/border-box-control/border-box-control-visualizer/hook.d.ts +1 -1
- package/build-types/border-control/border-control/hook.d.ts +1 -1
- package/build-types/border-control/border-control-dropdown/hook.d.ts +1 -1
- package/build-types/border-control/border-control-style-picker/hook.d.ts +267 -0
- package/build-types/border-control/border-control-style-picker/hook.d.ts.map +1 -0
- package/build-types/box-control/all-input-control.d.ts +4 -0
- package/build-types/box-control/all-input-control.d.ts.map +1 -0
- package/build-types/box-control/axial-input-controls.d.ts +4 -0
- package/build-types/box-control/axial-input-controls.d.ts.map +1 -0
- package/build-types/box-control/input-controls.d.ts +4 -0
- package/build-types/box-control/input-controls.d.ts.map +1 -0
- package/build-types/box-control/styles/box-control-styles.d.ts +2 -2
- package/build-types/box-control/styles/box-control-styles.d.ts.map +1 -1
- package/build-types/box-control/styles/box-control-visualizer-styles.d.ts +46 -0
- package/build-types/box-control/styles/box-control-visualizer-styles.d.ts.map +1 -0
- package/build-types/box-control/unit-control.d.ts +4 -0
- package/build-types/box-control/unit-control.d.ts.map +1 -0
- package/build-types/card/card/hook.d.ts +1 -1
- package/build-types/card/card-body/hook.d.ts +1 -1
- package/build-types/card/card-footer/hook.d.ts +1 -1
- package/build-types/card/card-header/hook.d.ts +1 -1
- package/build-types/card/card-media/hook.d.ts +1 -1
- package/build-types/color-palette/stories/index.story.d.ts +6 -5
- package/build-types/color-palette/stories/index.story.d.ts.map +1 -1
- package/build-types/color-palette/styles.d.ts +1 -1
- package/build-types/color-picker/color-copy-button.d.ts.map +1 -1
- package/build-types/color-picker/styles.d.ts +2 -2
- package/build-types/color-picker/styles.d.ts.map +1 -1
- package/build-types/combobox-control/styles.d.ts +1 -1
- package/build-types/context/context-connect.d.ts +2 -2
- package/build-types/context/context-connect.d.ts.map +1 -1
- package/build-types/context/context-system-provider.d.ts +2 -2
- package/build-types/context/context-system-provider.d.ts.map +1 -1
- package/build-types/context/wordpress-component.d.ts +3 -3
- package/build-types/context/wordpress-component.d.ts.map +1 -1
- package/build-types/custom-gradient-picker/gradient-bar/control-points.d.ts.map +1 -1
- package/build-types/custom-gradient-picker/styles/custom-gradient-picker-styles.d.ts +2 -2
- package/build-types/custom-gradient-picker/test/index.d.ts +2 -0
- package/build-types/custom-gradient-picker/test/index.d.ts.map +1 -0
- package/build-types/custom-gradient-picker/types.d.ts +1 -1
- package/build-types/custom-gradient-picker/types.d.ts.map +1 -1
- package/build-types/custom-select-control/styles.d.ts +11 -0
- package/build-types/custom-select-control/styles.d.ts.map +1 -0
- package/build-types/custom-select-control-v2/types.d.ts +4 -4
- package/build-types/custom-select-control-v2/types.d.ts.map +1 -1
- package/build-types/date-time/date/styles.d.ts +2 -2
- package/build-types/date-time/date-picker/index.d.ts +23 -0
- package/build-types/date-time/date-picker/index.d.ts.map +1 -0
- package/build-types/date-time/date-picker/styles.d.ts +45 -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 +2 -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 +2 -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 +169 -0
- package/build-types/date-time/date-picker/use-lilius/index.d.ts.map +1 -0
- package/build-types/date-time/date-time/styles.d.ts +1 -1
- package/build-types/date-time/time/index.d.ts.map +1 -1
- package/build-types/date-time/time-picker/index.d.ts +27 -0
- package/build-types/date-time/time-picker/index.d.ts.map +1 -0
- package/build-types/date-time/time-picker/styles.d.ts +93 -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 +2 -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 +4 -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 +2 -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 +7 -0
- package/build-types/date-time/time-picker/timezone.d.ts.map +1 -0
- package/build-types/date-time/utils.d.ts +9 -0
- package/build-types/date-time/utils.d.ts.map +1 -1
- package/build-types/dimension-control/index.d.ts +28 -0
- package/build-types/dimension-control/index.d.ts.map +1 -0
- package/build-types/dimension-control/sizes.d.ts +26 -0
- package/build-types/dimension-control/sizes.d.ts.map +1 -0
- package/build-types/dimension-control/stories/index.story.d.ts +4 -0
- package/build-types/dimension-control/stories/index.story.d.ts.map +1 -0
- package/build-types/dimension-control/types.d.ts +47 -0
- package/build-types/dimension-control/types.d.ts.map +1 -0
- package/build-types/draggable/types.d.ts +1 -1
- package/build-types/draggable/types.d.ts.map +1 -1
- package/build-types/drop-zone/types.d.ts +1 -1
- package/build-types/drop-zone/types.d.ts.map +1 -1
- package/build-types/dropdown-menu/types.d.ts +1 -1
- package/build-types/dropdown-menu/types.d.ts.map +1 -1
- package/build-types/dropdown-menu-v2/index.d.ts +17 -0
- package/build-types/dropdown-menu-v2/index.d.ts.map +1 -0
- package/build-types/dropdown-menu-v2/stories/index.story.d.ts +11 -0
- package/build-types/dropdown-menu-v2/stories/index.story.d.ts.map +1 -0
- package/build-types/dropdown-menu-v2/styles.d.ts +42 -0
- package/build-types/dropdown-menu-v2/styles.d.ts.map +1 -0
- package/build-types/dropdown-menu-v2/test/index.d.ts +2 -0
- package/build-types/dropdown-menu-v2/test/index.d.ts.map +1 -0
- package/build-types/dropdown-menu-v2/types.d.ts +252 -0
- package/build-types/dropdown-menu-v2/types.d.ts.map +1 -0
- package/build-types/elevation/hook.d.ts +1 -1
- package/build-types/external-link/index.d.ts.map +1 -1
- package/build-types/external-link/styles/external-link-styles.d.ts +10 -0
- package/build-types/external-link/styles/external-link-styles.d.ts.map +1 -0
- package/build-types/flex/flex/hook.d.ts +1 -1
- package/build-types/flex/flex-block/hook.d.ts +1 -1
- package/build-types/flex/flex-item/hook.d.ts +1 -1
- package/build-types/focal-point-picker/styles/focal-point-picker-style.d.ts +1 -1
- package/build-types/font-size-picker/stories/index.story.d.ts +8 -7
- package/build-types/font-size-picker/stories/index.story.d.ts.map +1 -1
- package/build-types/font-size-picker/styles.d.ts +2 -2
- package/build-types/form-token-field/styles.d.ts +1 -1
- package/build-types/gradient-picker/stories/index.story.d.ts +6 -5
- package/build-types/gradient-picker/stories/index.story.d.ts.map +1 -1
- package/build-types/grid/hook.d.ts +1 -1
- package/build-types/h-stack/hook.d.ts +1 -1
- package/build-types/heading/hook.d.ts +1 -1
- package/build-types/higher-order/navigate-regions/index.d.ts +1 -1
- package/build-types/higher-order/with-notices/types.d.ts +1 -1
- package/build-types/higher-order/with-notices/types.d.ts.map +1 -1
- package/build-types/higher-order/with-spoken-messages/index.d.ts +2 -3
- package/build-types/higher-order/with-spoken-messages/index.d.ts.map +1 -1
- package/build-types/icon/index.d.ts +2 -2
- package/build-types/icon/index.d.ts.map +1 -1
- package/build-types/input-control/styles/input-control-styles.d.ts +2 -2
- package/build-types/item-group/item/hook.d.ts +1 -1
- package/build-types/item-group/item-group/hook.d.ts +1 -1
- package/build-types/menu/index.d.ts +2 -2
- package/build-types/menu/item-help-text.d.ts +1 -1
- package/build-types/menu/item-label.d.ts +1 -1
- package/build-types/menu/styles.d.ts +2 -2
- package/build-types/menu-item/index.d.ts +1 -1
- package/build-types/menu-item/stories/index.story.d.ts +4 -4
- package/build-types/menu-item/types.d.ts +1 -1
- package/build-types/menu-item/types.d.ts.map +1 -1
- package/build-types/mobile/inserter-button/sparkles.d.ts +3 -0
- package/build-types/mobile/inserter-button/sparkles.d.ts.map +1 -0
- package/build-types/modal/index.d.ts.map +1 -1
- package/build-types/modal/types.d.ts +1 -1
- package/build-types/modal/types.d.ts.map +1 -1
- package/build-types/modal/use-modal-exit-animation.d.ts +1 -1
- package/build-types/navigation/styles/navigation-styles.d.ts +2 -2
- package/build-types/navigation/types.d.ts +1 -1
- package/build-types/navigation/types.d.ts.map +1 -1
- package/build-types/navigator/navigator-back-button/hook.d.ts +1 -1
- package/build-types/navigator/navigator-back-button/index.d.ts +2 -0
- package/build-types/navigator/navigator-back-button/index.d.ts.map +1 -0
- package/build-types/navigator/navigator-button/hook.d.ts +1 -1
- package/build-types/navigator/navigator-button/index.d.ts +2 -0
- package/build-types/navigator/navigator-button/index.d.ts.map +1 -0
- package/build-types/navigator/navigator-provider/component.d.ts +38 -0
- package/build-types/navigator/navigator-provider/component.d.ts.map +1 -0
- package/build-types/navigator/navigator-provider/index.d.ts +2 -0
- package/build-types/navigator/navigator-provider/index.d.ts.map +1 -0
- package/build-types/navigator/navigator-screen/index.d.ts +2 -0
- package/build-types/navigator/navigator-screen/index.d.ts.map +1 -0
- package/build-types/navigator/navigator-to-parent-button/index.d.ts +2 -0
- package/build-types/navigator/navigator-to-parent-button/index.d.ts.map +1 -0
- package/build-types/palette-edit/styles.d.ts +1 -1
- package/build-types/palette-edit/types.d.ts +1 -1
- package/build-types/palette-edit/types.d.ts.map +1 -1
- package/build-types/panel/types.d.ts +2 -2
- package/build-types/panel/types.d.ts.map +1 -1
- package/build-types/private-apis.d.ts.map +1 -1
- package/build-types/radio-group/radio/index.d.ts +7 -0
- package/build-types/radio-group/radio/index.d.ts.map +1 -0
- package/build-types/radio-group/radio-context/index.d.ts +6 -0
- package/build-types/radio-group/radio-context/index.d.ts.map +1 -0
- package/build-types/range-control/index.d.ts.map +1 -1
- package/build-types/range-control/input-range.d.ts +1 -1
- 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/resizable-box/resize-tooltip/styles/resize-tooltip.styles.d.ts +1 -1
- package/build-types/resizable-box/resize-tooltip/utils.d.ts +1 -1
- package/build-types/resizable-box/resize-tooltip/utils.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/scrollable/hook.d.ts +1 -1
- package/build-types/search-control/types.d.ts +1 -1
- package/build-types/search-control/types.d.ts.map +1 -1
- package/build-types/select-control/styles/select-control-styles.d.ts +2 -2
- package/build-types/select-control/styles/select-control-styles.d.ts.map +1 -1
- package/build-types/slot-fill/bubbles-virtually/fill.d.ts +5 -0
- package/build-types/slot-fill/bubbles-virtually/fill.d.ts.map +1 -0
- package/build-types/slot-fill/bubbles-virtually/slot-fill-context.d.ts +12 -0
- package/build-types/slot-fill/bubbles-virtually/slot-fill-context.d.ts.map +1 -0
- package/build-types/slot-fill/bubbles-virtually/slot-fill-provider.d.ts +4 -0
- package/build-types/slot-fill/bubbles-virtually/slot-fill-provider.d.ts.map +1 -0
- package/build-types/slot-fill/bubbles-virtually/slot.d.ts +1 -1
- package/build-types/slot-fill/types.d.ts +1 -1
- package/build-types/slot-fill/types.d.ts.map +1 -1
- package/build-types/slot-fill/use-slot.d.ts +9 -0
- package/build-types/slot-fill/use-slot.d.ts.map +1 -0
- package/build-types/snackbar/index.d.ts +1 -1
- package/build-types/snackbar/list.d.ts.map +1 -1
- package/build-types/spacer/hook.d.ts +1 -1
- package/build-types/style-provider/test/index.d.ts +2 -0
- package/build-types/style-provider/test/index.d.ts.map +1 -0
- package/build-types/surface/hook.d.ts +1 -1
- package/build-types/tabs/styles.d.ts.map +1 -1
- package/build-types/text/hook.d.ts +1 -1
- package/build-types/text/stories/index.story.d.ts +3 -3
- package/build-types/text/utils.d.ts +18 -18
- package/build-types/text/utils.d.ts.map +1 -1
- package/build-types/theme/stories/index.story.d.ts +1 -1
- 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 +1 -1
- package/build-types/toggle-group-control/types.d.ts +1 -1
- package/build-types/toggle-group-control/types.d.ts.map +1 -1
- package/build-types/tools-panel/tools-panel/hook.d.ts +1 -1
- package/build-types/tools-panel/tools-panel-header/hook.d.ts +1 -1
- package/build-types/tools-panel/tools-panel-item/hook.d.ts +1 -1
- package/build-types/tree-grid/types.d.ts +1 -1
- package/build-types/tree-grid/types.d.ts.map +1 -1
- package/build-types/truncate/hook.d.ts +1 -1
- package/build-types/ui/context/constants.d.ts +8 -0
- package/build-types/ui/context/constants.d.ts.map +1 -0
- package/build-types/ui/context/context-connect.d.ts +40 -0
- package/build-types/ui/context/context-connect.d.ts.map +1 -0
- package/build-types/ui/context/context-system-provider.d.ts +7 -0
- package/build-types/ui/context/context-system-provider.d.ts.map +1 -0
- package/build-types/ui/context/get-styled-class-name-from-key.d.ts +2 -0
- package/build-types/ui/context/get-styled-class-name-from-key.d.ts.map +1 -0
- package/build-types/ui/context/index.d.ts +5 -0
- package/build-types/ui/context/index.d.ts.map +1 -0
- package/build-types/ui/context/test/context-connect.d.ts +2 -0
- package/build-types/ui/context/test/context-connect.d.ts.map +1 -0
- package/build-types/ui/context/test/wordpress-component.d.ts +2 -0
- package/build-types/ui/context/test/wordpress-component.d.ts.map +1 -0
- package/build-types/ui/context/use-context-system.d.ts +20 -0
- package/build-types/ui/context/use-context-system.d.ts.map +1 -0
- package/build-types/ui/context/utils.d.ts +26 -0
- package/build-types/ui/context/utils.d.ts.map +1 -0
- package/build-types/ui/context/wordpress-component.d.ts +32 -0
- package/build-types/ui/context/wordpress-component.d.ts.map +1 -0
- package/build-types/ui/shortcut/component.d.ts +12 -0
- package/build-types/ui/shortcut/component.d.ts.map +1 -0
- package/build-types/ui/shortcut/index.d.ts +3 -0
- package/build-types/ui/shortcut/index.d.ts.map +1 -0
- package/build-types/ui/tooltip/component.d.ts +29 -0
- package/build-types/ui/tooltip/component.d.ts.map +1 -0
- package/build-types/ui/tooltip/content.d.ts +9 -0
- package/build-types/ui/tooltip/content.d.ts.map +1 -0
- package/build-types/ui/tooltip/context.d.ts +10 -0
- package/build-types/ui/tooltip/context.d.ts.map +1 -0
- package/build-types/ui/tooltip/index.d.ts +3 -0
- package/build-types/ui/tooltip/index.d.ts.map +1 -0
- package/build-types/ui/tooltip/styles.d.ts +12 -0
- package/build-types/ui/tooltip/styles.d.ts.map +1 -0
- package/build-types/ui/tooltip/types.d.ts +62 -0
- package/build-types/ui/tooltip/types.d.ts.map +1 -0
- package/build-types/ui/utils/colors.d.ts +17 -0
- package/build-types/ui/utils/colors.d.ts.map +1 -0
- package/build-types/ui/utils/font-size.d.ts +18 -0
- package/build-types/ui/utils/font-size.d.ts.map +1 -0
- package/build-types/ui/utils/get-valid-children.d.ts +13 -0
- package/build-types/ui/utils/get-valid-children.d.ts.map +1 -0
- package/build-types/ui/utils/index.d.ts +2 -0
- package/build-types/ui/utils/index.d.ts.map +1 -0
- package/build-types/ui/utils/space.d.ts +23 -0
- package/build-types/ui/utils/space.d.ts.map +1 -0
- package/build-types/ui/utils/types.d.ts +14 -0
- package/build-types/ui/utils/types.d.ts.map +1 -0
- package/build-types/ui/utils/use-responsive-value.d.ts +5 -0
- package/build-types/ui/utils/use-responsive-value.d.ts.map +1 -0
- package/build-types/utils/hooks/use-latest-ref.d.ts +15 -0
- package/build-types/utils/hooks/use-latest-ref.d.ts.map +1 -0
- package/build-types/utils/hooks/use-update-effect.d.ts +3 -3
- package/build-types/utils/hooks/use-update-effect.d.ts.map +1 -1
- package/build-types/utils/input/base.d.ts +3 -0
- package/build-types/utils/input/base.d.ts.map +1 -0
- package/build-types/utils/input/index.d.ts +2 -0
- package/build-types/utils/input/index.d.ts.map +1 -0
- package/build-types/utils/input/input-control.d.ts +2 -0
- package/build-types/utils/input/input-control.d.ts.map +1 -0
- package/build-types/utils/reduce-motion.d.ts +8 -0
- package/build-types/utils/reduce-motion.d.ts.map +1 -0
- package/build-types/utils/rtl.d.ts +4 -4
- package/build-types/utils/rtl.d.ts.map +1 -1
- package/build-types/utils/use-responsive-value.d.ts.map +1 -1
- package/build-types/utils/z-index.d.ts +3 -0
- package/build-types/utils/z-index.d.ts.map +1 -0
- package/build-types/v-stack/hook.d.ts +1 -1
- package/build-types/v-stack/stories/index.story.d.ts +1 -1
- package/build-types/validated-form-controls/components/range-control.d.ts.map +1 -1
- package/build-types/validated-form-controls/components/stories/overview.story.d.ts.map +1 -1
- package/build-types/validated-form-controls/control-with-error.d.ts.map +1 -1
- package/build-types/validated-form-controls/test/checkbox-control.d.ts +2 -0
- package/build-types/validated-form-controls/test/checkbox-control.d.ts.map +1 -0
- package/build-types/validated-form-controls/test/combobox-control.d.ts +2 -0
- package/build-types/validated-form-controls/test/combobox-control.d.ts.map +1 -0
- package/build-types/validated-form-controls/test/custom-select-control.d.ts +2 -0
- package/build-types/validated-form-controls/test/custom-select-control.d.ts.map +1 -0
- package/build-types/validated-form-controls/test/form-token-field.d.ts +2 -0
- package/build-types/validated-form-controls/test/form-token-field.d.ts.map +1 -0
- package/build-types/validated-form-controls/test/input-control.d.ts +2 -0
- package/build-types/validated-form-controls/test/input-control.d.ts.map +1 -0
- package/build-types/validated-form-controls/test/number-control.d.ts +2 -0
- package/build-types/validated-form-controls/test/number-control.d.ts.map +1 -0
- package/build-types/validated-form-controls/test/radio-control.d.ts +2 -0
- package/build-types/validated-form-controls/test/radio-control.d.ts.map +1 -0
- package/build-types/validated-form-controls/test/range-control.d.ts +2 -0
- package/build-types/validated-form-controls/test/range-control.d.ts.map +1 -0
- package/build-types/validated-form-controls/test/select-control.d.ts +2 -0
- package/build-types/validated-form-controls/test/select-control.d.ts.map +1 -0
- package/build-types/validated-form-controls/test/text-control.d.ts +2 -0
- package/build-types/validated-form-controls/test/text-control.d.ts.map +1 -0
- package/build-types/validated-form-controls/test/textarea-control.d.ts +2 -0
- package/build-types/validated-form-controls/test/textarea-control.d.ts.map +1 -0
- package/build-types/validated-form-controls/test/toggle-control.d.ts +2 -0
- package/build-types/validated-form-controls/test/toggle-control.d.ts.map +1 -0
- package/build-types/validated-form-controls/test/toggle-group-control.d.ts +2 -0
- package/build-types/validated-form-controls/test/toggle-group-control.d.ts.map +1 -0
- package/build-types/validated-form-controls/validity-indicator.d.ts +2 -1
- package/build-types/validated-form-controls/validity-indicator.d.ts.map +1 -1
- package/build-types/view/types.d.ts +8 -0
- package/build-types/view/types.d.ts.map +1 -0
- package/package.json +24 -24
- package/src/alignment-matrix-control/test/index.tsx +1 -1
- package/src/angle-picker-control/angle-circle.tsx +6 -5
- package/src/animate/types.ts +1 -1
- package/src/autocomplete/autocompleter-ui.tsx +1 -1
- package/src/autocomplete/index.tsx +33 -8
- package/src/autocomplete/test/index.tsx +110 -1
- package/src/autocomplete/types.ts +1 -1
- package/src/button/style.scss +8 -5
- package/src/calendar/style.scss +4 -2
- package/src/clipboard-button/index.tsx +1 -1
- package/src/color-palette/stories/index.story.tsx +56 -48
- package/src/color-picker/color-copy-button.tsx +1 -3
- package/src/composite/stories/index.story.tsx +1 -1
- package/src/confirm-dialog/component.tsx +2 -2
- package/src/context/context-connect.ts +3 -3
- package/src/context/context-system-provider.js +4 -4
- package/src/context/wordpress-component.ts +3 -5
- package/src/custom-gradient-picker/gradient-bar/control-points.tsx +3 -2
- package/src/custom-gradient-picker/types.ts +1 -1
- package/src/custom-select-control-v2/custom-select.tsx +1 -1
- package/src/custom-select-control-v2/stories/index.story.tsx +3 -3
- package/src/custom-select-control-v2/test/index.tsx +3 -3
- package/src/custom-select-control-v2/types.ts +4 -4
- package/src/date-time/date/index.tsx +1 -1
- package/src/date-time/test/utils.test.ts +8 -11
- package/src/date-time/time/index.tsx +2 -12
- package/src/date-time/time/test/index.tsx +69 -0
- package/src/date-time/utils.ts +18 -0
- package/src/draggable/index.native.js +17 -17
- package/src/draggable/types.ts +1 -1
- package/src/drop-zone/types.ts +1 -1
- package/src/dropdown/index.tsx +1 -1
- package/src/dropdown-menu/types.ts +1 -1
- package/src/external-link/index.tsx +5 -1
- package/src/font-size-picker/stories/index.story.tsx +133 -125
- package/src/form-token-field/style.scss +1 -0
- package/src/gradient-picker/stories/index.story.tsx +48 -42
- package/src/h-stack/test/index.tsx +1 -1
- package/src/heading/hook.ts +2 -2
- package/src/higher-order/with-notices/test/index.tsx +2 -2
- package/src/higher-order/with-notices/types.ts +1 -1
- package/src/higher-order/with-spoken-messages/index.tsx +2 -4
- package/src/icon/index.tsx +2 -2
- package/src/keyboard-shortcuts/index.tsx +1 -1
- package/src/menu/stories/index.story.tsx +1 -1
- package/src/menu-item/types.ts +1 -1
- package/src/modal/index.tsx +4 -3
- package/src/modal/types.ts +1 -1
- package/src/modal/use-modal-exit-animation.ts +2 -2
- package/src/navigation/README.md +1 -1
- package/src/navigation/types.ts +1 -1
- package/src/number-control/index.tsx +1 -1
- package/src/palette-edit/index.tsx +2 -2
- package/src/palette-edit/types.ts +1 -1
- package/src/panel/README.md +1 -1
- package/src/panel/body.tsx +1 -1
- package/src/panel/types.ts +2 -2
- package/src/popover/stories/index.story.tsx +1 -1
- package/src/private-apis.ts +0 -2
- package/src/radio-control/test/index.tsx +5 -4
- package/src/range-control/index.tsx +1 -1
- package/src/range-control/types.ts +2 -2
- package/src/resizable-box/index.tsx +1 -1
- package/src/resizable-box/resize-tooltip/index.tsx +1 -1
- package/src/resizable-box/resize-tooltip/label.tsx +1 -1
- package/src/resizable-box/resize-tooltip/utils.ts +2 -2
- package/src/sandbox/index.tsx +190 -10
- package/src/sandbox/test/index.tsx +65 -24
- package/src/sandbox/types.ts +11 -0
- package/src/search-control/types.ts +1 -1
- package/src/select-control/styles/select-control-styles.ts +1 -0
- package/src/slot-fill/types.ts +1 -1
- package/src/snackbar/list.tsx +7 -2
- package/src/tabs/styles.ts +1 -0
- package/src/text/utils.ts +18 -18
- package/src/toggle-group-control/test/__snapshots__/index.tsx.snap +18 -16
- package/src/toggle-group-control/toggle-group-control-option-base/component.tsx +1 -1
- package/src/toggle-group-control/toggle-group-control-option-base/styles.ts +4 -6
- package/src/toggle-group-control/types.ts +1 -1
- package/src/tree-grid/roving-tab-index-item.tsx +1 -1
- package/src/tree-grid/types.ts +1 -1
- package/src/utils/element-rect.ts +1 -1
- package/src/utils/hooks/use-update-effect.js +2 -2
- package/src/utils/rtl.js +4 -4
- package/src/utils/use-responsive-value.ts +1 -5
- package/src/v-stack/test/index.tsx +1 -1
- package/src/validated-form-controls/components/stories/overview.story.tsx +2 -1
- package/src/validated-form-controls/control-with-error.tsx +44 -4
- package/src/validated-form-controls/test/checkbox-control.tsx +49 -0
- package/src/validated-form-controls/test/combobox-control.tsx +61 -0
- package/src/validated-form-controls/test/control-with-error.tsx +182 -1
- package/src/validated-form-controls/test/custom-select-control.tsx +60 -0
- package/src/validated-form-controls/test/form-token-field.tsx +52 -0
- package/src/validated-form-controls/test/input-control.tsx +42 -0
- package/src/validated-form-controls/test/number-control.tsx +44 -0
- package/src/validated-form-controls/test/radio-control.tsx +61 -0
- package/src/validated-form-controls/test/range-control.tsx +73 -0
- package/src/validated-form-controls/test/select-control.tsx +57 -0
- package/src/validated-form-controls/test/text-control.tsx +49 -0
- package/src/validated-form-controls/test/textarea-control.tsx +51 -0
- package/src/validated-form-controls/test/toggle-control.tsx +49 -0
- package/src/validated-form-controls/test/toggle-group-control.tsx +28 -0
- package/src/validated-form-controls/validity-indicator.tsx +3 -0
|
@@ -127,7 +127,7 @@ export type PaletteEditListViewProps< T extends Color | Gradient > = {
|
|
|
127
127
|
onChange: ( newElements?: T[] ) => void;
|
|
128
128
|
isGradient: T extends Gradient ? true : false;
|
|
129
129
|
canOnlyChangeValues: PaletteEditProps[ 'canOnlyChangeValues' ];
|
|
130
|
-
addColorRef: React.RefObject< HTMLButtonElement >;
|
|
130
|
+
addColorRef: React.RefObject< HTMLButtonElement | null >;
|
|
131
131
|
editingElement?: EditingElement;
|
|
132
132
|
popoverProps?: PaletteEditProps[ 'popoverProps' ];
|
|
133
133
|
setEditingElement: ( newEditingElement?: EditingElement ) => void;
|
package/src/panel/README.md
CHANGED
package/src/panel/body.tsx
CHANGED
|
@@ -57,7 +57,7 @@ export function UnforwardedPanelBody(
|
|
|
57
57
|
};
|
|
58
58
|
|
|
59
59
|
// Ref is used so that the effect does not re-run upon scrollAfterOpen changing value.
|
|
60
|
-
const scrollAfterOpenRef = useRef< boolean
|
|
60
|
+
const scrollAfterOpenRef = useRef< boolean >( undefined );
|
|
61
61
|
scrollAfterOpenRef.current = scrollAfterOpen;
|
|
62
62
|
// Runs after initial render.
|
|
63
63
|
useUpdateEffect( () => {
|
package/src/panel/types.ts
CHANGED
|
@@ -70,7 +70,7 @@ export type PanelBodyProps = {
|
|
|
70
70
|
/**
|
|
71
71
|
* An icon to be shown next to the title.
|
|
72
72
|
*/
|
|
73
|
-
icon?: JSX.Element;
|
|
73
|
+
icon?: React.JSX.Element;
|
|
74
74
|
/**
|
|
75
75
|
* Whether or not the panel will start open.
|
|
76
76
|
*/
|
|
@@ -104,7 +104,7 @@ export type PanelBodyTitleProps = Omit< ButtonAsButtonProps, 'icon' > & {
|
|
|
104
104
|
/**
|
|
105
105
|
* An icon to be shown next to the title.
|
|
106
106
|
*/
|
|
107
|
-
icon?: JSX.Element;
|
|
107
|
+
icon?: React.JSX.Element;
|
|
108
108
|
/**
|
|
109
109
|
* Whether or not the `PanelBody` is currently opened or not.
|
|
110
110
|
*/
|
|
@@ -93,7 +93,7 @@ export const Default: StoryObj< typeof Popover > = {
|
|
|
93
93
|
decorators: [
|
|
94
94
|
( Story ) => {
|
|
95
95
|
const [ isVisible, setIsVisible ] = useState( false );
|
|
96
|
-
const buttonRef = useRef< HTMLButtonElement
|
|
96
|
+
const buttonRef = useRef< HTMLButtonElement >( undefined );
|
|
97
97
|
const toggleVisible = ( event: React.MouseEvent ) => {
|
|
98
98
|
if ( buttonRef.current && event.target !== buttonRef.current ) {
|
|
99
99
|
return;
|
package/src/private-apis.ts
CHANGED
|
@@ -30,7 +30,6 @@ import {
|
|
|
30
30
|
ValidatedToggleGroupControl,
|
|
31
31
|
} from './validated-form-controls';
|
|
32
32
|
import { ValidatedFormTokenField } from './validated-form-controls/components/form-token-field';
|
|
33
|
-
import { Picker } from './color-picker/picker';
|
|
34
33
|
|
|
35
34
|
export const privateApis = {};
|
|
36
35
|
lock( privateApis, {
|
|
@@ -46,7 +45,6 @@ lock( privateApis, {
|
|
|
46
45
|
DateCalendar,
|
|
47
46
|
DateRangeCalendar,
|
|
48
47
|
TZDate,
|
|
49
|
-
Picker,
|
|
50
48
|
useDrag,
|
|
51
49
|
ValidatedInputControl,
|
|
52
50
|
ValidatedCheckboxControl,
|
|
@@ -238,7 +238,8 @@ describe.each( [
|
|
|
238
238
|
name: defaultProps.options[ 1 ].label,
|
|
239
239
|
} )
|
|
240
240
|
).toHaveFocus();
|
|
241
|
-
|
|
241
|
+
|
|
242
|
+
expect( onChangeSpy ).toHaveBeenCalledTimes( 1 );
|
|
242
243
|
expect( onChangeSpy ).toHaveBeenLastCalledWith(
|
|
243
244
|
defaultProps.options[ 1 ].value
|
|
244
245
|
);
|
|
@@ -253,8 +254,8 @@ describe.each( [
|
|
|
253
254
|
name: defaultProps.options[ 0 ].label,
|
|
254
255
|
} )
|
|
255
256
|
).toHaveFocus();
|
|
256
|
-
|
|
257
|
-
expect( onChangeSpy ).toHaveBeenCalledTimes(
|
|
257
|
+
|
|
258
|
+
expect( onChangeSpy ).toHaveBeenCalledTimes( 3 );
|
|
258
259
|
expect( onChangeSpy ).toHaveBeenLastCalledWith(
|
|
259
260
|
defaultProps.options[ 0 ].value
|
|
260
261
|
);
|
|
@@ -268,7 +269,7 @@ describe.each( [
|
|
|
268
269
|
} )
|
|
269
270
|
).toHaveFocus();
|
|
270
271
|
|
|
271
|
-
expect( onChangeSpy ).toHaveBeenCalledTimes(
|
|
272
|
+
expect( onChangeSpy ).toHaveBeenCalledTimes( 4 );
|
|
272
273
|
expect( onChangeSpy ).toHaveBeenLastCalledWith(
|
|
273
274
|
defaultProps.options[ 2 ].value
|
|
274
275
|
);
|
|
@@ -122,7 +122,7 @@ function UnforwardedRangeControl(
|
|
|
122
122
|
const [ showTooltip, setShowTooltip ] = useState( hasTooltip );
|
|
123
123
|
const [ isFocused, setIsFocused ] = useState( false );
|
|
124
124
|
|
|
125
|
-
const inputRef = useRef< HTMLInputElement >();
|
|
125
|
+
const inputRef = useRef< HTMLInputElement >( null );
|
|
126
126
|
const isCurrentlyFocused = inputRef.current?.matches( ':focus' );
|
|
127
127
|
const isThumbFocused = ! disabled && isFocused;
|
|
128
128
|
|
|
@@ -5,7 +5,7 @@ import type {
|
|
|
5
5
|
CSSProperties,
|
|
6
6
|
FocusEventHandler,
|
|
7
7
|
MouseEventHandler,
|
|
8
|
-
|
|
8
|
+
RefObject,
|
|
9
9
|
} from 'react';
|
|
10
10
|
|
|
11
11
|
/**
|
|
@@ -267,7 +267,7 @@ export type ThumbProps = {
|
|
|
267
267
|
export type TooltipProps = {
|
|
268
268
|
show?: boolean;
|
|
269
269
|
placement?: string;
|
|
270
|
-
inputRef?:
|
|
270
|
+
inputRef?: RefObject< HTMLElement | null >;
|
|
271
271
|
tooltipPlacement?: string;
|
|
272
272
|
value?: ControlledRangeValue;
|
|
273
273
|
renderTooltipContent?: (
|
|
@@ -35,7 +35,7 @@ type LabelProps = React.DetailedHTMLProps<
|
|
|
35
35
|
function Label(
|
|
36
36
|
{ label, position = POSITIONS.corner, zIndex = 1000, ...props }: LabelProps,
|
|
37
37
|
ref: ForwardedRef< HTMLDivElement >
|
|
38
|
-
)
|
|
38
|
+
) {
|
|
39
39
|
const showLabel = !! label;
|
|
40
40
|
|
|
41
41
|
const isBottom = position === POSITIONS.bottom;
|
|
@@ -19,7 +19,7 @@ interface UseResizeLabelProps {
|
|
|
19
19
|
/** The label value. */
|
|
20
20
|
label?: string;
|
|
21
21
|
/** Element to be rendered for resize listening events. */
|
|
22
|
-
resizeListener: JSX.Element;
|
|
22
|
+
resizeListener: React.JSX.Element;
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
interface UseResizeLabelArgs {
|
|
@@ -82,7 +82,7 @@ export function useResizeLabel( {
|
|
|
82
82
|
* This timeout is used with setMoveX and setMoveY to determine of
|
|
83
83
|
* both width and height values have changed at (roughly) the same time.
|
|
84
84
|
*/
|
|
85
|
-
const moveTimeoutRef = useRef< number >();
|
|
85
|
+
const moveTimeoutRef = useRef< number >( undefined );
|
|
86
86
|
|
|
87
87
|
const debounceUnsetMoveXY = useCallback( () => {
|
|
88
88
|
const unsetMoveXY = () => {
|
package/src/sandbox/index.tsx
CHANGED
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
useRef,
|
|
7
7
|
useState,
|
|
8
8
|
useEffect,
|
|
9
|
+
useMemo,
|
|
9
10
|
} from '@wordpress/element';
|
|
10
11
|
import { useFocusableIframe, useMergeRefs } from '@wordpress/compose';
|
|
11
12
|
|
|
@@ -14,6 +15,8 @@ import { useFocusableIframe, useMergeRefs } from '@wordpress/compose';
|
|
|
14
15
|
*/
|
|
15
16
|
import type { SandBoxProps } from './types';
|
|
16
17
|
|
|
18
|
+
type SandBoxContentProps = Omit< SandBoxProps, 'allowSameOrigin' >;
|
|
19
|
+
|
|
17
20
|
const observeAndResizeJS = function () {
|
|
18
21
|
const { MutationObserver } = window;
|
|
19
22
|
|
|
@@ -115,17 +118,176 @@ const style = `
|
|
|
115
118
|
`;
|
|
116
119
|
|
|
117
120
|
/**
|
|
118
|
-
*
|
|
121
|
+
* Builds the full HTML document string for the sandbox iframe content.
|
|
122
|
+
*/
|
|
123
|
+
function buildSandBoxDocument( {
|
|
124
|
+
html,
|
|
125
|
+
title,
|
|
126
|
+
type,
|
|
127
|
+
styles,
|
|
128
|
+
scripts,
|
|
129
|
+
}: {
|
|
130
|
+
html: string;
|
|
131
|
+
title: string;
|
|
132
|
+
type?: string;
|
|
133
|
+
styles: string[];
|
|
134
|
+
scripts: string[];
|
|
135
|
+
} ): string {
|
|
136
|
+
const htmlDoc = (
|
|
137
|
+
<html lang={ document.documentElement.lang } className={ type }>
|
|
138
|
+
<head>
|
|
139
|
+
<title>{ title }</title>
|
|
140
|
+
<style dangerouslySetInnerHTML={ { __html: style } } />
|
|
141
|
+
{ styles.map( ( rules, i ) => (
|
|
142
|
+
<style
|
|
143
|
+
key={ i }
|
|
144
|
+
dangerouslySetInnerHTML={ { __html: rules } }
|
|
145
|
+
/>
|
|
146
|
+
) ) }
|
|
147
|
+
</head>
|
|
148
|
+
<body
|
|
149
|
+
data-resizable-iframe-connected="data-resizable-iframe-connected"
|
|
150
|
+
className={ type }
|
|
151
|
+
>
|
|
152
|
+
<div dangerouslySetInnerHTML={ { __html: html } } />
|
|
153
|
+
<script
|
|
154
|
+
type="text/javascript"
|
|
155
|
+
dangerouslySetInnerHTML={ {
|
|
156
|
+
__html: `(${ observeAndResizeJS.toString() })();`,
|
|
157
|
+
} }
|
|
158
|
+
/>
|
|
159
|
+
{ scripts.map( ( src ) => (
|
|
160
|
+
<script key={ src } src={ src } />
|
|
161
|
+
) ) }
|
|
162
|
+
</body>
|
|
163
|
+
</html>
|
|
164
|
+
);
|
|
165
|
+
|
|
166
|
+
return '<!DOCTYPE html>' + renderToString( htmlDoc );
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* Isolated sandbox that uses the `srcdoc` attribute to render content
|
|
171
|
+
* without `allow-same-origin`. This is the default for user-controlled
|
|
172
|
+
* content (e.g., the HTML block) where same-origin access would be a
|
|
173
|
+
* security risk.
|
|
119
174
|
*
|
|
120
|
-
*
|
|
121
|
-
*
|
|
175
|
+
* Because `srcdoc` is a declarative attribute, the browser automatically
|
|
176
|
+
* re-renders the content when the iframe is moved in the DOM (e.g.,
|
|
177
|
+
* block reordering), so no `load` event listener is needed.
|
|
178
|
+
* The `message` listener is re-synced on every `load` so
|
|
179
|
+
* it follows the iframe if it's reparented into a different document.
|
|
180
|
+
*/
|
|
181
|
+
function IsolatedSandBox( {
|
|
182
|
+
html = '',
|
|
183
|
+
title = '',
|
|
184
|
+
type,
|
|
185
|
+
styles = [],
|
|
186
|
+
scripts = [],
|
|
187
|
+
onFocus,
|
|
188
|
+
tabIndex,
|
|
189
|
+
}: SandBoxContentProps ) {
|
|
190
|
+
const ref = useRef< HTMLIFrameElement >( null );
|
|
191
|
+
const [ width, setWidth ] = useState( 0 );
|
|
192
|
+
const [ height, setHeight ] = useState( 0 );
|
|
193
|
+
|
|
194
|
+
const srcDoc = useMemo(
|
|
195
|
+
() => buildSandBoxDocument( { html, title, type, styles, scripts } ),
|
|
196
|
+
[ html, title, type, styles, scripts ]
|
|
197
|
+
);
|
|
198
|
+
|
|
199
|
+
useEffect( () => {
|
|
200
|
+
const iframe = ref.current;
|
|
201
|
+
if ( ! iframe ) {
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
function checkMessageForResize( event: MessageEvent ) {
|
|
206
|
+
// Verify that the mounted element is the source of the message.
|
|
207
|
+
// iframe.contentWindow is accessible cross-origin as a
|
|
208
|
+
// WindowProxy reference, so this check still works without
|
|
209
|
+
// allow-same-origin.
|
|
210
|
+
if ( ! iframe || iframe.contentWindow !== event.source ) {
|
|
211
|
+
return;
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
// Attempt to parse the message data as JSON if passed as string.
|
|
215
|
+
let data = event.data || {};
|
|
216
|
+
|
|
217
|
+
if ( 'string' === typeof data ) {
|
|
218
|
+
try {
|
|
219
|
+
data = JSON.parse( data );
|
|
220
|
+
} catch {}
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
// Update the state only if the message is formatted as we expect,
|
|
224
|
+
// i.e. as an object with a 'resize' action.
|
|
225
|
+
if ( 'resize' !== data.action ) {
|
|
226
|
+
return;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
setWidth( data.width );
|
|
230
|
+
setHeight( data.height );
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
let currentView: Window | null = null;
|
|
234
|
+
function syncListener() {
|
|
235
|
+
const view = iframe?.ownerDocument?.defaultView ?? null;
|
|
236
|
+
if ( view === currentView ) {
|
|
237
|
+
return;
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
currentView?.removeEventListener(
|
|
241
|
+
'message',
|
|
242
|
+
checkMessageForResize
|
|
243
|
+
);
|
|
244
|
+
|
|
245
|
+
currentView = view;
|
|
246
|
+
currentView?.addEventListener( 'message', checkMessageForResize );
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
syncListener();
|
|
250
|
+
iframe.addEventListener( 'load', syncListener );
|
|
251
|
+
|
|
252
|
+
return () => {
|
|
253
|
+
iframe.removeEventListener( 'load', syncListener );
|
|
254
|
+
currentView?.removeEventListener(
|
|
255
|
+
'message',
|
|
256
|
+
checkMessageForResize
|
|
257
|
+
);
|
|
258
|
+
};
|
|
259
|
+
}, [] );
|
|
260
|
+
|
|
261
|
+
return (
|
|
262
|
+
<iframe
|
|
263
|
+
ref={ useMergeRefs( [ ref, useFocusableIframe() ] ) }
|
|
264
|
+
title={ title }
|
|
265
|
+
tabIndex={ tabIndex }
|
|
266
|
+
className="components-sandbox"
|
|
267
|
+
sandbox="allow-scripts allow-presentation"
|
|
268
|
+
srcDoc={ srcDoc }
|
|
269
|
+
onFocus={ onFocus }
|
|
270
|
+
width={ Math.ceil( width ) }
|
|
271
|
+
height={ Math.ceil( height ) }
|
|
272
|
+
/>
|
|
273
|
+
);
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
/**
|
|
277
|
+
* Same-origin sandbox that writes to `contentDocument` directly. This
|
|
278
|
+
* preserves the parent page's URL as the iframe's document URL, which
|
|
279
|
+
* provides a valid Referer header for nested iframes (required by
|
|
280
|
+
* providers like YouTube).
|
|
122
281
|
*
|
|
123
|
-
*
|
|
124
|
-
*
|
|
125
|
-
*
|
|
126
|
-
*
|
|
282
|
+
* Only used when `allowSameOrigin` is true — i.e., for server-fetched
|
|
283
|
+
* oEmbed previews that are not directly user-controlled.
|
|
284
|
+
*
|
|
285
|
+
* This implementation is intentionally kept close to the original
|
|
286
|
+
* pre-refactor code to preserve past bugfixes:
|
|
287
|
+
* - load listener for iframe re-initialization after DOM moves (#21916)
|
|
288
|
+
* - forceRerender guard to avoid unnecessary full rewrites (#20176)
|
|
127
289
|
*/
|
|
128
|
-
function
|
|
290
|
+
function SameOriginSandBox( {
|
|
129
291
|
html = '',
|
|
130
292
|
title = '',
|
|
131
293
|
type,
|
|
@@ -133,8 +295,8 @@ function SandBox( {
|
|
|
133
295
|
scripts = [],
|
|
134
296
|
onFocus,
|
|
135
297
|
tabIndex,
|
|
136
|
-
}:
|
|
137
|
-
const ref = useRef< HTMLIFrameElement >();
|
|
298
|
+
}: SandBoxContentProps ) {
|
|
299
|
+
const ref = useRef< HTMLIFrameElement >( null );
|
|
138
300
|
const [ width, setWidth ] = useState( 0 );
|
|
139
301
|
const [ height, setHeight ] = useState( 0 );
|
|
140
302
|
|
|
@@ -292,4 +454,22 @@ function SandBox( {
|
|
|
292
454
|
);
|
|
293
455
|
}
|
|
294
456
|
|
|
457
|
+
/**
|
|
458
|
+
* This component provides an isolated environment for arbitrary HTML via iframes.
|
|
459
|
+
*
|
|
460
|
+
* ```jsx
|
|
461
|
+
* import { SandBox } from '@wordpress/components';
|
|
462
|
+
*
|
|
463
|
+
* const MySandBox = () => (
|
|
464
|
+
* <SandBox html="<p>Content</p>" title="SandBox" type="embed" />
|
|
465
|
+
* );
|
|
466
|
+
* ```
|
|
467
|
+
*/
|
|
468
|
+
function SandBox( { allowSameOrigin = false, ...contentProps }: SandBoxProps ) {
|
|
469
|
+
if ( allowSameOrigin ) {
|
|
470
|
+
return <SameOriginSandBox { ...contentProps } />;
|
|
471
|
+
}
|
|
472
|
+
return <IsolatedSandBox { ...contentProps } />;
|
|
473
|
+
}
|
|
474
|
+
|
|
295
475
|
export default SandBox;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* External dependencies
|
|
3
3
|
*/
|
|
4
|
-
import { fireEvent, render, screen
|
|
4
|
+
import { fireEvent, render, screen } from '@testing-library/react';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* WordPress dependencies
|
|
@@ -16,10 +16,7 @@ import SandBox from '..';
|
|
|
16
16
|
describe( 'SandBox', () => {
|
|
17
17
|
const TestWrapper = () => {
|
|
18
18
|
const [ html, setHtml ] = useState(
|
|
19
|
-
|
|
20
|
-
// with iframes so we need to ignore it for the time being.
|
|
21
|
-
'<script type="text/javascript">window.MutationObserver = null;</script>' +
|
|
22
|
-
'<iframe title="Mock Iframe" src="https://super.embed"></iframe>'
|
|
19
|
+
'<iframe title="Mock Iframe" src="https://super.embed"></iframe>'
|
|
23
20
|
);
|
|
24
21
|
|
|
25
22
|
const updateHtml = () => {
|
|
@@ -38,34 +35,78 @@ describe( 'SandBox', () => {
|
|
|
38
35
|
);
|
|
39
36
|
};
|
|
40
37
|
|
|
41
|
-
it( 'should
|
|
38
|
+
it( 'should not include allow-same-origin by default', () => {
|
|
39
|
+
render( <SandBox html="<p>Hello</p>" title="Test" /> );
|
|
40
|
+
|
|
41
|
+
const iframe = screen.getByTitle< HTMLIFrameElement >( 'Test' );
|
|
42
|
+
|
|
43
|
+
expect( iframe ).toHaveAttribute(
|
|
44
|
+
'sandbox',
|
|
45
|
+
'allow-scripts allow-presentation'
|
|
46
|
+
);
|
|
47
|
+
expect( iframe.getAttribute( 'sandbox' ) ).not.toContain(
|
|
48
|
+
'allow-same-origin'
|
|
49
|
+
);
|
|
50
|
+
} );
|
|
51
|
+
|
|
52
|
+
it( 'should set srcdoc with the provided html content', () => {
|
|
53
|
+
render( <SandBox html="<p>Hello</p>" title="Test Title" /> );
|
|
54
|
+
|
|
55
|
+
const iframe = screen.getByTitle< HTMLIFrameElement >( 'Test Title' );
|
|
56
|
+
const srcDoc = iframe.getAttribute( 'srcdoc' ) ?? '';
|
|
57
|
+
|
|
58
|
+
expect( srcDoc ).toContain( '<p>Hello</p>' );
|
|
59
|
+
expect( srcDoc ).toContain( '<title>Test Title</title>' );
|
|
60
|
+
} );
|
|
61
|
+
|
|
62
|
+
it( 'should include custom styles in srcdoc', () => {
|
|
63
|
+
render(
|
|
64
|
+
<SandBox
|
|
65
|
+
html="<p>Styled</p>"
|
|
66
|
+
title="Styled Test"
|
|
67
|
+
styles={ [ '.custom { color: red; }' ] }
|
|
68
|
+
/>
|
|
69
|
+
);
|
|
70
|
+
|
|
71
|
+
const iframe = screen.getByTitle< HTMLIFrameElement >( 'Styled Test' );
|
|
72
|
+
const srcDoc = iframe.getAttribute( 'srcdoc' ) ?? '';
|
|
73
|
+
|
|
74
|
+
expect( srcDoc ).toContain( '.custom { color: red; }' );
|
|
75
|
+
} );
|
|
76
|
+
|
|
77
|
+
it( 'should include script tags in srcdoc', () => {
|
|
78
|
+
render(
|
|
79
|
+
<SandBox
|
|
80
|
+
html="<p>Script</p>"
|
|
81
|
+
title="Script Test"
|
|
82
|
+
scripts={ [ 'https://example.com/embed.js' ] }
|
|
83
|
+
/>
|
|
84
|
+
);
|
|
85
|
+
|
|
86
|
+
const iframe = screen.getByTitle< HTMLIFrameElement >( 'Script Test' );
|
|
87
|
+
const srcDoc = iframe.getAttribute( 'srcdoc' ) ?? '';
|
|
88
|
+
|
|
89
|
+
expect( srcDoc ).toContain(
|
|
90
|
+
'<script src="https://example.com/embed.js">'
|
|
91
|
+
);
|
|
92
|
+
} );
|
|
93
|
+
|
|
94
|
+
it( 'should update srcdoc when html prop changes', () => {
|
|
42
95
|
render( <TestWrapper /> );
|
|
43
96
|
|
|
44
97
|
const iframe =
|
|
45
98
|
screen.getByTitle< HTMLIFrameElement >( 'SandBox Title' );
|
|
46
99
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
let sandboxedIframe = within(
|
|
52
|
-
iframe.contentWindow.document.body
|
|
53
|
-
).getByTitle( 'Mock Iframe' );
|
|
54
|
-
|
|
55
|
-
expect( sandboxedIframe ).toHaveAttribute(
|
|
56
|
-
'src',
|
|
57
|
-
'https://super.embed'
|
|
100
|
+
expect( iframe ).toHaveAttribute(
|
|
101
|
+
'srcdoc',
|
|
102
|
+
expect.stringContaining( 'https://super.embed' )
|
|
58
103
|
);
|
|
59
104
|
|
|
60
105
|
fireEvent.click( screen.getByRole( 'button' ) );
|
|
61
106
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
expect( sandboxedIframe ).toHaveAttribute(
|
|
67
|
-
'src',
|
|
68
|
-
'https://another.super.embed'
|
|
107
|
+
expect( iframe ).toHaveAttribute(
|
|
108
|
+
'srcdoc',
|
|
109
|
+
expect.stringContaining( 'https://another.super.embed' )
|
|
69
110
|
);
|
|
70
111
|
} );
|
|
71
112
|
} );
|
package/src/sandbox/types.ts
CHANGED
|
@@ -1,4 +1,15 @@
|
|
|
1
1
|
export type SandBoxProps = {
|
|
2
|
+
/**
|
|
3
|
+
* Whether to include `allow-same-origin` in the iframe's sandbox
|
|
4
|
+
* attribute. When true, nested iframes (such as third-party embeds)
|
|
5
|
+
* can access their own origin's cookies and storage.
|
|
6
|
+
*
|
|
7
|
+
* Only enable this for content that is NOT directly user-controlled,
|
|
8
|
+
* such as server-fetched oEmbed previews.
|
|
9
|
+
*
|
|
10
|
+
* @default false
|
|
11
|
+
*/
|
|
12
|
+
allowSameOrigin?: boolean;
|
|
2
13
|
/**
|
|
3
14
|
* The HTML to render in the body of the iframe document.
|
|
4
15
|
*
|
|
@@ -162,6 +162,7 @@ export const Select = styled.select< SelectProps >`
|
|
|
162
162
|
cursor: inherit;
|
|
163
163
|
display: block;
|
|
164
164
|
font-family: inherit;
|
|
165
|
+
line-height: 1.3; // Override forms.css styles, large enough value to prevent descender clipping without affecting height
|
|
165
166
|
margin: 0;
|
|
166
167
|
width: 100%;
|
|
167
168
|
max-width: none;
|
package/src/slot-fill/types.ts
CHANGED
|
@@ -113,7 +113,7 @@ export type SlotFillProviderProps = {
|
|
|
113
113
|
};
|
|
114
114
|
|
|
115
115
|
export type SlotFillInstance = {};
|
|
116
|
-
export type SlotRef = RefObject< HTMLElement >;
|
|
116
|
+
export type SlotRef = RefObject< HTMLElement | null >;
|
|
117
117
|
export type SlotRecord = { instance: SlotFillInstance } & (
|
|
118
118
|
| { type: 'children' }
|
|
119
119
|
| { type: 'portal'; ref: SlotRef; fillProps: FillProps }
|
package/src/snackbar/list.tsx
CHANGED
|
@@ -66,7 +66,7 @@ export function SnackbarList( {
|
|
|
66
66
|
children,
|
|
67
67
|
onRemove,
|
|
68
68
|
}: WordPressComponentProps< SnackbarListProps, 'div' > ) {
|
|
69
|
-
const listRef = useRef< HTMLDivElement
|
|
69
|
+
const listRef = useRef< HTMLDivElement >( null );
|
|
70
70
|
const isReducedMotion = useReducedMotion();
|
|
71
71
|
className = clsx( 'components-snackbar-list', className );
|
|
72
72
|
const removeNotice =
|
|
@@ -86,7 +86,12 @@ export function SnackbarList( {
|
|
|
86
86
|
|
|
87
87
|
return (
|
|
88
88
|
<motion.div
|
|
89
|
-
layout={
|
|
89
|
+
layout={ isReducedMotion ? false : 'position' } // See https://www.framer.com/docs/animation/#layout-animations
|
|
90
|
+
// Ensures a stable full-width bounding box so that
|
|
91
|
+
// `layout="position"` only ever detects vertical
|
|
92
|
+
// shifts, preventing horizontal animation when
|
|
93
|
+
// notice text changes in place.
|
|
94
|
+
style={ { width: '100%' } }
|
|
90
95
|
initial="init"
|
|
91
96
|
animate="open"
|
|
92
97
|
exit="exit"
|
package/src/tabs/styles.ts
CHANGED
|
@@ -162,6 +162,7 @@ export const Tab = styled( Ariakit.Tab )`
|
|
|
162
162
|
align-items: center;
|
|
163
163
|
cursor: pointer;
|
|
164
164
|
line-height: 1.2; // Characters in some languages (e.g. Japanese) may have a native higher line-height.
|
|
165
|
+
font-family: ${ font( 'default.fontFamily' ) };
|
|
165
166
|
font-weight: 400;
|
|
166
167
|
font-size: ${ font( 'default.fontSize' ) };
|
|
167
168
|
color: ${ COLORS.theme.foreground };
|
package/src/text/utils.ts
CHANGED
|
@@ -17,37 +17,37 @@ import { createElement } from '@wordpress/element';
|
|
|
17
17
|
|
|
18
18
|
/**
|
|
19
19
|
* @typedef Options
|
|
20
|
-
* @property {string}
|
|
21
|
-
* @property {number}
|
|
22
|
-
* @property {
|
|
23
|
-
* @property {boolean}
|
|
24
|
-
* @property {boolean}
|
|
25
|
-
* @property {string}
|
|
26
|
-
* @property {
|
|
27
|
-
* @property {string | Record<string, unknown>}
|
|
28
|
-
* @property {
|
|
29
|
-
* @property {keyof JSX.IntrinsicElements}
|
|
30
|
-
* @property {
|
|
31
|
-
* @property {string[]}
|
|
32
|
-
* @property {string}
|
|
33
|
-
* @property {
|
|
20
|
+
* @property {string} [activeClassName=''] Classname for active highlighted areas.
|
|
21
|
+
* @property {number} [activeIndex=-1] The index of the active highlighted area.
|
|
22
|
+
* @property {React.CSSProperties} [activeStyle] Styles to apply to the active highlighted area.
|
|
23
|
+
* @property {boolean} [autoEscape] Whether to automatically escape text.
|
|
24
|
+
* @property {boolean} [caseSensitive=false] Whether to highlight in a case-sensitive manner.
|
|
25
|
+
* @property {string} children Children to highlight.
|
|
26
|
+
* @property {FindAllArgs['findChunks']} [findChunks] Custom `findChunks` function to pass to `highlight-words-core`.
|
|
27
|
+
* @property {string | Record<string, unknown>} [highlightClassName=''] Classname to apply to highlighted text or a Record of classnames to apply to given text (which should be the key).
|
|
28
|
+
* @property {React.CSSProperties} [highlightStyle={}] Styles to apply to highlighted text.
|
|
29
|
+
* @property {keyof React.JSX.IntrinsicElements} [highlightTag='mark'] Tag to use for the highlighted text.
|
|
30
|
+
* @property {FindAllArgs['sanitize']} [sanitize] Custom `sanitize` function to pass to `highlight-words-core`.
|
|
31
|
+
* @property {string[]} [searchWords=[]] Words to search for and highlight.
|
|
32
|
+
* @property {string} [unhighlightClassName=''] Classname to apply to unhighlighted text.
|
|
33
|
+
* @property {React.CSSProperties} [unhighlightStyle] Style to apply to unhighlighted text.
|
|
34
34
|
*/
|
|
35
35
|
|
|
36
36
|
interface Options {
|
|
37
37
|
activeClassName?: string;
|
|
38
38
|
activeIndex?: number;
|
|
39
|
-
activeStyle?: React.
|
|
39
|
+
activeStyle?: React.CSSProperties;
|
|
40
40
|
autoEscape?: boolean;
|
|
41
41
|
caseSensitive?: boolean;
|
|
42
42
|
children: string;
|
|
43
43
|
findChunks?: FindAllArgs[ 'findChunks' ];
|
|
44
44
|
highlightClassName?: string | Record< string, unknown >;
|
|
45
|
-
highlightStyle?: React.
|
|
46
|
-
highlightTag?: keyof JSX.IntrinsicElements;
|
|
45
|
+
highlightStyle?: React.CSSProperties;
|
|
46
|
+
highlightTag?: keyof React.JSX.IntrinsicElements;
|
|
47
47
|
sanitize?: FindAllArgs[ 'sanitize' ];
|
|
48
48
|
searchWords?: string[];
|
|
49
49
|
unhighlightClassName?: string;
|
|
50
|
-
unhighlightStyle?: React.
|
|
50
|
+
unhighlightStyle?: React.CSSProperties;
|
|
51
51
|
}
|
|
52
52
|
|
|
53
53
|
/**
|