@wordpress/block-editor 9.6.0 → 9.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +4 -0
- package/build/components/block-alignment-control/use-available-alignments.js +1 -1
- package/build/components/block-alignment-control/use-available-alignments.js.map +1 -1
- package/build/components/block-edit-visually-button/index.js +46 -0
- package/build/components/block-edit-visually-button/index.js.map +1 -0
- package/build/components/block-list/block.js +12 -2
- package/build/components/block-list/block.js.map +1 -1
- package/build/components/block-list/index.native.js +1 -1
- package/build/components/block-list/index.native.js.map +1 -1
- package/build/components/block-popover/inbetween.js +5 -3
- package/build/components/block-popover/inbetween.js.map +1 -1
- package/build/components/block-popover/index.js +10 -4
- package/build/components/block-popover/index.js.map +1 -1
- package/build/components/block-settings-menu/index.js +2 -6
- package/build/components/block-settings-menu/index.js.map +1 -1
- package/build/components/block-styles/index.js +3 -6
- package/build/components/block-styles/index.js.map +1 -1
- package/build/components/block-switcher/index.js +10 -16
- package/build/components/block-switcher/index.js.map +1 -1
- package/build/components/block-toolbar/index.js +5 -1
- package/build/components/block-toolbar/index.js.map +1 -1
- package/build/components/block-tools/selected-block-popover.js +10 -2
- package/build/components/block-tools/selected-block-popover.js.map +1 -1
- package/build/components/block-tools/use-block-toolbar-popover-props.js +126 -0
- package/build/components/block-tools/use-block-toolbar-popover-props.js.map +1 -0
- package/build/components/block-types-list/index.js +1 -1
- package/build/components/block-types-list/index.js.map +1 -1
- package/build/components/border-radius-control/all-input-control.js +31 -3
- package/build/components/border-radius-control/all-input-control.js.map +1 -1
- package/build/components/border-radius-control/index.js +23 -7
- package/build/components/border-radius-control/index.js.map +1 -1
- package/build/components/border-radius-control/input-controls.js +21 -6
- package/build/components/border-radius-control/input-controls.js.map +1 -1
- package/build/components/border-radius-control/utils.js +13 -16
- package/build/components/border-radius-control/utils.js.map +1 -1
- package/build/components/colors/utils.js +6 -2
- package/build/components/colors/utils.js.map +1 -1
- package/build/components/colors/with-colors.js +17 -4
- package/build/components/colors/with-colors.js.map +1 -1
- package/build/components/colors-gradients/control.js +7 -4
- package/build/components/colors-gradients/control.js.map +1 -1
- package/build/components/colors-gradients/dropdown.js +5 -2
- package/build/components/colors-gradients/dropdown.js.map +1 -1
- package/build/components/copy-handler/index.js +6 -0
- package/build/components/copy-handler/index.js.map +1 -1
- package/build/components/date-format-picker/index.js +2 -7
- package/build/components/date-format-picker/index.js.map +1 -1
- package/build/components/duotone/components.js +5 -5
- package/build/components/duotone/components.js.map +1 -1
- package/build/components/font-appearance-control/index.js +10 -4
- package/build/components/font-appearance-control/index.js.map +1 -1
- package/build/components/font-family/index.js +1 -1
- package/build/components/font-family/index.js.map +1 -1
- package/build/components/font-sizes/with-font-sizes.js +17 -4
- package/build/components/font-sizes/with-font-sizes.js.map +1 -1
- package/build/components/image-size-control/index.js +3 -1
- package/build/components/image-size-control/index.js.map +1 -1
- package/build/components/index.js +22 -6
- package/build/components/index.js.map +1 -1
- package/build/components/index.native.js +11 -4
- package/build/components/index.native.js.map +1 -1
- package/build/components/inserter/index.native.js +8 -3
- package/build/components/inserter/index.native.js.map +1 -1
- package/build/components/inserter/search-items.js +22 -4
- package/build/components/inserter/search-items.js.map +1 -1
- package/build/components/inserter-list-item/index.js +2 -19
- package/build/components/inserter-list-item/index.js.map +1 -1
- package/build/components/letter-spacing-control/index.js +6 -3
- package/build/components/letter-spacing-control/index.js.map +1 -1
- package/build/components/line-height-control/index.js +6 -3
- package/build/components/line-height-control/index.js.map +1 -1
- package/build/components/link-control/is-url-like.js +1 -7
- package/build/components/link-control/is-url-like.js.map +1 -1
- package/build/components/link-control/link-preview.js +0 -1
- package/build/components/link-control/link-preview.js.map +1 -1
- package/build/components/link-control/use-search-handler.js +1 -7
- package/build/components/link-control/use-search-handler.js.map +1 -1
- package/build/components/list-view/block-select-button.js +5 -2
- package/build/components/list-view/block-select-button.js.map +1 -1
- package/build/components/list-view/expander.js +3 -1
- package/build/components/list-view/expander.js.map +1 -1
- package/build/components/list-view/use-block-selection.js +1 -7
- package/build/components/list-view/use-block-selection.js.map +1 -1
- package/build/components/media-upload/index.native.js +8 -3
- package/build/components/media-upload/index.native.js.map +1 -1
- package/build/components/preview-options/index.js +2 -2
- package/build/components/preview-options/index.js.map +1 -1
- package/build/components/{use-no-recursive-renders → recursion-provider}/index.js +40 -18
- package/build/components/recursion-provider/index.js.map +1 -0
- package/build/components/rich-text/index.js +6 -1
- package/build/components/rich-text/index.js.map +1 -1
- package/build/components/rich-text/index.native.js +3 -1
- package/build/components/rich-text/index.native.js.map +1 -1
- package/build/components/rich-text/use-before-input-rules.js +110 -0
- package/build/components/rich-text/use-before-input-rules.js.map +1 -0
- package/build/components/rich-text/use-enter.js +0 -4
- package/build/components/rich-text/use-enter.js.map +1 -1
- package/build/components/rich-text/use-format-types.js +8 -11
- package/build/components/rich-text/use-format-types.js.map +1 -1
- package/build/components/spacing-sizes-control/all-input-control.js +53 -0
- package/build/components/spacing-sizes-control/all-input-control.js.map +1 -0
- package/build/components/spacing-sizes-control/axial-input-controls.js +69 -0
- package/build/components/spacing-sizes-control/axial-input-controls.js.map +1 -0
- package/build/components/spacing-sizes-control/index.js +100 -0
- package/build/components/spacing-sizes-control/index.js.map +1 -0
- package/build/components/spacing-sizes-control/input-controls.js +52 -0
- package/build/components/spacing-sizes-control/input-controls.js.map +1 -0
- package/build/components/spacing-sizes-control/linked-button.js +38 -0
- package/build/components/spacing-sizes-control/linked-button.js.map +1 -0
- package/build/components/spacing-sizes-control/spacing-input-control.js +208 -0
- package/build/components/spacing-sizes-control/spacing-input-control.js.map +1 -0
- package/build/components/spacing-sizes-control/utils.js +202 -0
- package/build/components/spacing-sizes-control/utils.js.map +1 -0
- package/build/components/text-decoration-control/index.js +3 -1
- package/build/components/text-decoration-control/index.js.map +1 -1
- package/build/components/text-transform-control/index.js +3 -1
- package/build/components/text-transform-control/index.js.map +1 -1
- package/build/components/url-input/index.js +1 -1
- package/build/components/url-input/index.js.map +1 -1
- package/build/components/url-popover/image-url-input-ui.js +4 -1
- package/build/components/url-popover/image-url-input-ui.js.map +1 -1
- package/build/components/writing-flow/use-arrow-nav.js +4 -25
- package/build/components/writing-flow/use-arrow-nav.js.map +1 -1
- package/build/components/writing-flow/use-drag-selection.js +9 -2
- package/build/components/writing-flow/use-drag-selection.js.map +1 -1
- package/build/components/writing-flow/use-multi-selection.js +4 -2
- package/build/components/writing-flow/use-multi-selection.js.map +1 -1
- package/build/components/writing-flow/use-select-all.js +3 -1
- package/build/components/writing-flow/use-select-all.js.map +1 -1
- package/build/components/writing-flow/use-selection-observer.js +10 -2
- package/build/components/writing-flow/use-selection-observer.js.map +1 -1
- package/build/hooks/border-radius.js +2 -7
- package/build/hooks/border-radius.js.map +1 -1
- package/build/hooks/border.js +2 -2
- package/build/hooks/border.js.map +1 -1
- package/build/hooks/color.js +4 -1
- package/build/hooks/color.js.map +1 -1
- package/build/hooks/dimensions.js +15 -0
- package/build/hooks/dimensions.js.map +1 -1
- package/build/hooks/duotone.js +4 -4
- package/build/hooks/duotone.js.map +1 -1
- package/build/hooks/gap.js +6 -4
- package/build/hooks/gap.js.map +1 -1
- package/build/hooks/generated-class-name.js +1 -7
- package/build/hooks/generated-class-name.js.map +1 -1
- package/build/hooks/layout.js +29 -14
- package/build/hooks/layout.js.map +1 -1
- package/build/hooks/margin.js +28 -12
- package/build/hooks/margin.js.map +1 -1
- package/build/hooks/padding.js +19 -8
- package/build/hooks/padding.js.map +1 -1
- package/build/hooks/style.js +4 -50
- package/build/hooks/style.js.map +1 -1
- package/build/layouts/constrained.js +215 -0
- package/build/layouts/constrained.js.map +1 -0
- package/build/layouts/flex.js +1 -1
- package/build/layouts/flex.js.map +1 -1
- package/build/layouts/flow.js +7 -151
- package/build/layouts/flow.js.map +1 -1
- package/build/layouts/index.js +3 -1
- package/build/layouts/index.js.map +1 -1
- package/build/layouts/utils.js +43 -0
- package/build/layouts/utils.js.map +1 -1
- package/build/store/actions.js +25 -3
- package/build/store/actions.js.map +1 -1
- package/build/store/selectors.js +4 -6
- package/build/store/selectors.js.map +1 -1
- package/build/utils/block-variation-transforms.js +15 -9
- package/build/utils/block-variation-transforms.js.map +1 -1
- package/build/utils/pasting.js +9 -1
- package/build/utils/pasting.js.map +1 -1
- package/build-module/components/block-alignment-control/use-available-alignments.js +1 -1
- package/build-module/components/block-alignment-control/use-available-alignments.js.map +1 -1
- package/build-module/components/block-edit-visually-button/index.js +35 -0
- package/build-module/components/block-edit-visually-button/index.js.map +1 -0
- package/build-module/components/block-list/block.js +13 -3
- package/build-module/components/block-list/block.js.map +1 -1
- package/build-module/components/block-list/index.native.js +1 -1
- package/build-module/components/block-list/index.native.js.map +1 -1
- package/build-module/components/block-popover/inbetween.js +5 -3
- package/build-module/components/block-popover/inbetween.js.map +1 -1
- package/build-module/components/block-popover/index.js +8 -4
- package/build-module/components/block-popover/index.js.map +1 -1
- package/build-module/components/block-settings-menu/index.js +3 -6
- package/build-module/components/block-settings-menu/index.js.map +1 -1
- package/build-module/components/block-styles/index.js +4 -7
- package/build-module/components/block-styles/index.js.map +1 -1
- package/build-module/components/block-switcher/index.js +10 -16
- package/build-module/components/block-switcher/index.js.map +1 -1
- package/build-module/components/block-toolbar/index.js +4 -1
- package/build-module/components/block-toolbar/index.js.map +1 -1
- package/build-module/components/block-tools/selected-block-popover.js +8 -2
- package/build-module/components/block-tools/selected-block-popover.js.map +1 -1
- package/build-module/components/block-tools/use-block-toolbar-popover-props.js +114 -0
- package/build-module/components/block-tools/use-block-toolbar-popover-props.js.map +1 -0
- package/build-module/components/block-types-list/index.js +1 -1
- package/build-module/components/block-types-list/index.js.map +1 -1
- package/build-module/components/border-radius-control/all-input-control.js +32 -4
- package/build-module/components/border-radius-control/all-input-control.js.map +1 -1
- package/build-module/components/border-radius-control/index.js +24 -8
- package/build-module/components/border-radius-control/index.js.map +1 -1
- package/build-module/components/border-radius-control/input-controls.js +22 -7
- package/build-module/components/border-radius-control/input-controls.js.map +1 -1
- package/build-module/components/border-radius-control/utils.js +13 -16
- package/build-module/components/border-radius-control/utils.js.map +1 -1
- package/build-module/components/colors/utils.js +7 -3
- package/build-module/components/colors/utils.js.map +1 -1
- package/build-module/components/colors/with-colors.js +16 -3
- package/build-module/components/colors/with-colors.js.map +1 -1
- package/build-module/components/colors-gradients/control.js +7 -4
- package/build-module/components/colors-gradients/control.js.map +1 -1
- package/build-module/components/colors-gradients/dropdown.js +5 -2
- package/build-module/components/colors-gradients/dropdown.js.map +1 -1
- package/build-module/components/copy-handler/index.js +7 -1
- package/build-module/components/copy-handler/index.js.map +1 -1
- package/build-module/components/date-format-picker/index.js +2 -6
- package/build-module/components/date-format-picker/index.js.map +1 -1
- package/build-module/components/duotone/components.js +5 -5
- package/build-module/components/duotone/components.js.map +1 -1
- package/build-module/components/font-appearance-control/index.js +7 -4
- package/build-module/components/font-appearance-control/index.js.map +1 -1
- package/build-module/components/font-family/index.js +1 -1
- package/build-module/components/font-family/index.js.map +1 -1
- package/build-module/components/font-sizes/with-font-sizes.js +16 -3
- package/build-module/components/font-sizes/with-font-sizes.js.map +1 -1
- package/build-module/components/image-size-control/index.js +3 -1
- package/build-module/components/image-size-control/index.js.map +1 -1
- package/build-module/components/index.js +2 -1
- package/build-module/components/index.js.map +1 -1
- package/build-module/components/index.native.js +1 -1
- package/build-module/components/index.native.js.map +1 -1
- package/build-module/components/inserter/index.native.js +9 -2
- package/build-module/components/inserter/index.native.js.map +1 -1
- package/build-module/components/inserter/search-items.js +19 -5
- package/build-module/components/inserter/search-items.js.map +1 -1
- package/build-module/components/inserter-list-item/index.js +1 -17
- package/build-module/components/inserter-list-item/index.js.map +1 -1
- package/build-module/components/letter-spacing-control/index.js +5 -3
- package/build-module/components/letter-spacing-control/index.js.map +1 -1
- package/build-module/components/line-height-control/index.js +5 -3
- package/build-module/components/line-height-control/index.js.map +1 -1
- package/build-module/components/link-control/is-url-like.js +1 -6
- package/build-module/components/link-control/is-url-like.js.map +1 -1
- package/build-module/components/link-control/link-preview.js +0 -1
- package/build-module/components/link-control/link-preview.js.map +1 -1
- package/build-module/components/link-control/use-search-handler.js +1 -6
- package/build-module/components/link-control/use-search-handler.js.map +1 -1
- package/build-module/components/list-view/block-select-button.js +5 -2
- package/build-module/components/list-view/block-select-button.js.map +1 -1
- package/build-module/components/list-view/expander.js +3 -2
- package/build-module/components/list-view/expander.js.map +1 -1
- package/build-module/components/list-view/use-block-selection.js +1 -6
- package/build-module/components/list-view/use-block-selection.js.map +1 -1
- package/build-module/components/media-upload/index.native.js +9 -2
- package/build-module/components/media-upload/index.native.js.map +1 -1
- package/build-module/components/preview-options/index.js +2 -2
- package/build-module/components/preview-options/index.js.map +1 -1
- package/build-module/components/{use-no-recursive-renders → recursion-provider}/index.js +39 -19
- package/build-module/components/recursion-provider/index.js.map +1 -0
- package/build-module/components/rich-text/index.js +5 -1
- package/build-module/components/rich-text/index.js.map +1 -1
- package/build-module/components/rich-text/index.native.js +3 -1
- package/build-module/components/rich-text/index.native.js.map +1 -1
- package/build-module/components/rich-text/use-before-input-rules.js +96 -0
- package/build-module/components/rich-text/use-before-input-rules.js.map +1 -0
- package/build-module/components/rich-text/use-enter.js +0 -4
- package/build-module/components/rich-text/use-enter.js.map +1 -1
- package/build-module/components/rich-text/use-format-types.js +8 -10
- package/build-module/components/rich-text/use-format-types.js.map +1 -1
- package/build-module/components/spacing-sizes-control/all-input-control.js +41 -0
- package/build-module/components/spacing-sizes-control/all-input-control.js.map +1 -0
- package/build-module/components/spacing-sizes-control/axial-input-controls.js +57 -0
- package/build-module/components/spacing-sizes-control/axial-input-controls.js.map +1 -0
- package/build-module/components/spacing-sizes-control/index.js +83 -0
- package/build-module/components/spacing-sizes-control/index.js.map +1 -0
- package/build-module/components/spacing-sizes-control/input-controls.js +41 -0
- package/build-module/components/spacing-sizes-control/input-controls.js.map +1 -0
- package/build-module/components/spacing-sizes-control/linked-button.js +28 -0
- package/build-module/components/spacing-sizes-control/linked-button.js.map +1 -0
- package/build-module/components/spacing-sizes-control/spacing-input-control.js +192 -0
- package/build-module/components/spacing-sizes-control/spacing-input-control.js.map +1 -0
- package/build-module/components/spacing-sizes-control/utils.js +174 -0
- package/build-module/components/spacing-sizes-control/utils.js.map +1 -0
- package/build-module/components/text-decoration-control/index.js +4 -2
- package/build-module/components/text-decoration-control/index.js.map +1 -1
- package/build-module/components/text-transform-control/index.js +4 -2
- package/build-module/components/text-transform-control/index.js.map +1 -1
- package/build-module/components/url-input/index.js +1 -1
- package/build-module/components/url-input/index.js.map +1 -1
- package/build-module/components/url-popover/image-url-input-ui.js +4 -1
- package/build-module/components/url-popover/image-url-input-ui.js.map +1 -1
- package/build-module/components/writing-flow/use-arrow-nav.js +5 -26
- package/build-module/components/writing-flow/use-arrow-nav.js.map +1 -1
- package/build-module/components/writing-flow/use-drag-selection.js +9 -2
- package/build-module/components/writing-flow/use-drag-selection.js.map +1 -1
- package/build-module/components/writing-flow/use-multi-selection.js +4 -2
- package/build-module/components/writing-flow/use-multi-selection.js.map +1 -1
- package/build-module/components/writing-flow/use-select-all.js +3 -1
- package/build-module/components/writing-flow/use-select-all.js.map +1 -1
- package/build-module/components/writing-flow/use-selection-observer.js +10 -2
- package/build-module/components/writing-flow/use-selection-observer.js.map +1 -1
- package/build-module/hooks/border-radius.js +2 -7
- package/build-module/hooks/border-radius.js.map +1 -1
- package/build-module/hooks/border.js +2 -2
- package/build-module/hooks/border.js.map +1 -1
- package/build-module/hooks/color.js +4 -1
- package/build-module/hooks/color.js.map +1 -1
- package/build-module/hooks/dimensions.js +13 -0
- package/build-module/hooks/dimensions.js.map +1 -1
- package/build-module/hooks/duotone.js +4 -4
- package/build-module/hooks/duotone.js.map +1 -1
- package/build-module/hooks/gap.js +3 -2
- package/build-module/hooks/gap.js.map +1 -1
- package/build-module/hooks/generated-class-name.js +1 -6
- package/build-module/hooks/generated-class-name.js.map +1 -1
- package/build-module/hooks/layout.js +29 -14
- package/build-module/hooks/layout.js.map +1 -1
- package/build-module/hooks/margin.js +26 -12
- package/build-module/hooks/margin.js.map +1 -1
- package/build-module/hooks/padding.js +17 -8
- package/build-module/hooks/padding.js.map +1 -1
- package/build-module/hooks/style.js +7 -53
- package/build-module/hooks/style.js.map +1 -1
- package/build-module/layouts/constrained.js +197 -0
- package/build-module/layouts/constrained.js.map +1 -0
- package/build-module/layouts/flex.js +1 -1
- package/build-module/layouts/flex.js.map +1 -1
- package/build-module/layouts/flow.js +8 -145
- package/build-module/layouts/flow.js.map +1 -1
- package/build-module/layouts/index.js +2 -1
- package/build-module/layouts/index.js.map +1 -1
- package/build-module/layouts/utils.js +40 -0
- package/build-module/layouts/utils.js.map +1 -1
- package/build-module/store/actions.js +25 -3
- package/build-module/store/actions.js.map +1 -1
- package/build-module/store/selectors.js +5 -7
- package/build-module/store/selectors.js.map +1 -1
- package/build-module/utils/block-variation-transforms.js +14 -7
- package/build-module/utils/block-variation-transforms.js.map +1 -1
- package/build-module/utils/pasting.js +9 -1
- package/build-module/utils/pasting.js.map +1 -1
- package/build-style/style-rtl.css +154 -27
- package/build-style/style.css +154 -27
- package/package.json +30 -28
- package/src/components/block-alignment-control/use-available-alignments.js +1 -1
- package/src/components/block-edit-visually-button/index.js +39 -0
- package/src/components/block-list/block.js +13 -2
- package/src/components/block-list/index.native.js +1 -1
- package/src/components/block-popover/inbetween.js +5 -1
- package/src/components/block-popover/index.js +22 -13
- package/src/components/block-popover/style.scss +25 -2
- package/src/components/block-settings-menu/index.js +11 -15
- package/src/components/block-styles/index.js +4 -7
- package/src/components/block-styles/style.scss +10 -0
- package/src/components/block-switcher/index.js +9 -13
- package/src/components/block-switcher/test/index.js +1 -0
- package/src/components/block-toolbar/index.js +2 -0
- package/src/components/block-tools/selected-block-popover.js +7 -0
- package/src/components/block-tools/use-block-toolbar-popover-props.js +123 -0
- package/src/components/block-types-list/index.js +1 -1
- package/src/components/border-radius-control/all-input-control.js +41 -4
- package/src/components/border-radius-control/index.js +29 -6
- package/src/components/border-radius-control/input-controls.js +40 -13
- package/src/components/border-radius-control/test/utils.js +22 -60
- package/src/components/border-radius-control/utils.js +12 -16
- package/src/components/color-palette/test/__snapshots__/control.js.snap +93 -77
- package/src/components/colors/utils.js +5 -2
- package/src/components/colors/with-colors.js +11 -1
- package/src/components/colors-gradients/control.js +12 -8
- package/src/components/colors-gradients/dropdown.js +7 -2
- package/src/components/colors-gradients/style.scss +27 -5
- package/src/components/colors-gradients/test/control.js +3 -3
- package/src/components/copy-handler/index.js +18 -0
- package/src/components/date-format-picker/index.js +12 -14
- package/src/components/date-format-picker/style.scss +0 -4
- package/src/components/duotone/components.js +5 -5
- package/src/components/duotone-control/style.scss +0 -4
- package/src/components/font-appearance-control/index.js +3 -0
- package/src/components/font-appearance-control/style.scss +0 -2
- package/src/components/font-family/index.js +1 -1
- package/src/components/font-sizes/with-font-sizes.js +11 -1
- package/src/components/image-size-control/README.md +7 -0
- package/src/components/image-size-control/index.js +2 -0
- package/src/components/index.js +5 -1
- package/src/components/index.native.js +4 -1
- package/src/components/inserter/index.native.js +7 -2
- package/src/components/inserter/search-items.js +17 -5
- package/src/components/inserter-list-item/index.js +1 -17
- package/src/components/letter-spacing-control/index.js +2 -0
- package/src/components/line-height-control/index.js +2 -0
- package/src/components/link-control/is-url-like.js +1 -6
- package/src/components/link-control/link-preview.js +0 -1
- package/src/components/link-control/test/index.js +540 -893
- package/src/components/link-control/use-search-handler.js +1 -6
- package/src/components/list-view/block-select-button.js +7 -2
- package/src/components/list-view/expander.js +4 -2
- package/src/components/list-view/style.scss +11 -4
- package/src/components/list-view/use-block-selection.js +2 -8
- package/src/components/media-replace-flow/style.scss +1 -0
- package/src/components/media-upload/index.native.js +7 -3
- package/src/components/preview-options/index.js +2 -2
- package/src/components/{use-no-recursive-renders → recursion-provider}/index.js +39 -28
- package/src/components/{use-no-recursive-renders/test/use-no-recursive-renders.js → recursion-provider/test/index.js} +5 -6
- package/src/components/rich-text/README.md +13 -1
- package/src/components/rich-text/index.js +2 -0
- package/src/components/rich-text/index.native.js +2 -0
- package/src/components/rich-text/use-before-input-rules.js +91 -0
- package/src/components/rich-text/use-enter.js +0 -3
- package/src/components/rich-text/use-format-types.js +6 -6
- package/src/components/spacing-sizes-control/all-input-control.js +40 -0
- package/src/components/spacing-sizes-control/axial-input-controls.js +62 -0
- package/src/components/spacing-sizes-control/index.js +91 -0
- package/src/components/spacing-sizes-control/input-controls.js +46 -0
- package/src/components/spacing-sizes-control/linked-button.js +25 -0
- package/src/components/spacing-sizes-control/spacing-input-control.js +280 -0
- package/src/components/spacing-sizes-control/style.scss +122 -0
- package/src/components/spacing-sizes-control/test/utils.js +156 -0
- package/src/components/spacing-sizes-control/utils.js +195 -0
- package/src/components/text-decoration-control/index.js +4 -2
- package/src/components/text-transform-control/index.js +4 -2
- package/src/components/url-input/index.js +1 -1
- package/src/components/url-input/style.scss +2 -2
- package/src/components/url-popover/image-url-input-ui.js +3 -0
- package/src/components/url-popover/style.scss +0 -3
- package/src/components/writing-flow/use-arrow-nav.js +4 -33
- package/src/components/writing-flow/use-drag-selection.js +7 -1
- package/src/components/writing-flow/use-multi-selection.js +4 -1
- package/src/components/writing-flow/use-select-all.js +2 -1
- package/src/components/writing-flow/use-selection-observer.js +10 -2
- package/src/hooks/border-radius.js +2 -6
- package/src/hooks/border.js +2 -2
- package/src/hooks/color.js +13 -3
- package/src/hooks/dimensions.js +15 -0
- package/src/hooks/duotone.js +4 -4
- package/src/hooks/gap.js +7 -2
- package/src/hooks/generated-class-name.js +6 -9
- package/src/hooks/layout.js +53 -16
- package/src/hooks/margin.js +49 -17
- package/src/hooks/padding.js +41 -14
- package/src/hooks/style.js +5 -56
- package/src/hooks/test/gap.js +22 -0
- package/src/hooks/typography.scss +0 -1
- package/src/layouts/constrained.js +217 -0
- package/src/layouts/flex.js +1 -1
- package/src/layouts/flow.js +6 -164
- package/src/layouts/index.js +2 -1
- package/src/layouts/test/constrained.js +21 -0
- package/src/layouts/utils.js +34 -0
- package/src/store/actions.js +32 -4
- package/src/store/selectors.js +5 -4
- package/src/style.scss +1 -0
- package/src/utils/block-variation-transforms.js +13 -6
- package/src/utils/pasting.js +10 -1
- package/src/utils/test/block-variation-transforms.js +24 -0
- package/src/utils/test/pasting.js +10 -0
- package/build/components/block-settings-menu/block-edit-visually-button.js +0 -70
- package/build/components/block-settings-menu/block-edit-visually-button.js.map +0 -1
- package/build/components/use-no-recursive-renders/index.js.map +0 -1
- package/build-module/components/block-settings-menu/block-edit-visually-button.js +0 -56
- package/build-module/components/block-settings-menu/block-edit-visually-button.js.map +0 -1
- package/build-module/components/use-no-recursive-renders/index.js.map +0 -1
- package/src/components/block-settings-menu/block-edit-visually-button.js +0 -52
|
@@ -5,11 +5,6 @@ import { getProtocol, prependHTTP } from '@wordpress/url';
|
|
|
5
5
|
import { useCallback } from '@wordpress/element';
|
|
6
6
|
import { useSelect } from '@wordpress/data';
|
|
7
7
|
|
|
8
|
-
/**
|
|
9
|
-
* External dependencies
|
|
10
|
-
*/
|
|
11
|
-
import { startsWith } from 'lodash';
|
|
12
|
-
|
|
13
8
|
/**
|
|
14
9
|
* Internal dependencies
|
|
15
10
|
*/
|
|
@@ -38,7 +33,7 @@ export const handleDirectEntry = ( val ) => {
|
|
|
38
33
|
type = TEL_TYPE;
|
|
39
34
|
}
|
|
40
35
|
|
|
41
|
-
if ( startsWith(
|
|
36
|
+
if ( val?.startsWith( '#' ) ) {
|
|
42
37
|
type = INTERNAL_TYPE;
|
|
43
38
|
}
|
|
44
39
|
|
|
@@ -90,8 +90,13 @@ function ListViewBlockSelectButton(
|
|
|
90
90
|
<Truncate ellipsizeMode="auto">{ blockTitle }</Truncate>
|
|
91
91
|
</span>
|
|
92
92
|
{ blockInformation?.anchor && (
|
|
93
|
-
<span className="block-editor-list-view-block-select-button__anchor">
|
|
94
|
-
|
|
93
|
+
<span className="block-editor-list-view-block-select-button__anchor-wrapper">
|
|
94
|
+
<Truncate
|
|
95
|
+
className="block-editor-list-view-block-select-button__anchor"
|
|
96
|
+
ellipsizeMode="auto"
|
|
97
|
+
>
|
|
98
|
+
{ blockInformation.anchor }
|
|
99
|
+
</Truncate>
|
|
95
100
|
</span>
|
|
96
101
|
) }
|
|
97
102
|
{ isLocked && (
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* WordPress dependencies
|
|
3
3
|
*/
|
|
4
|
-
import { chevronRightSmall, Icon } from '@wordpress/icons';
|
|
4
|
+
import { chevronRightSmall, chevronLeftSmall, Icon } from '@wordpress/icons';
|
|
5
|
+
import { isRTL } from '@wordpress/i18n';
|
|
6
|
+
|
|
5
7
|
export default function ListViewExpander( { onClick } ) {
|
|
6
8
|
return (
|
|
7
9
|
// Keyboard events are handled by TreeGrid see: components/src/tree-grid/index.js
|
|
@@ -18,7 +20,7 @@ export default function ListViewExpander( { onClick } ) {
|
|
|
18
20
|
onClick={ ( event ) => onClick( event, { forceToggle: true } ) }
|
|
19
21
|
aria-hidden="true"
|
|
20
22
|
>
|
|
21
|
-
<Icon icon={ chevronRightSmall } />
|
|
23
|
+
<Icon icon={ isRTL() ? chevronLeftSmall : chevronRightSmall } />
|
|
22
24
|
</span>
|
|
23
25
|
);
|
|
24
26
|
}
|
|
@@ -312,14 +312,21 @@
|
|
|
312
312
|
}
|
|
313
313
|
}
|
|
314
314
|
|
|
315
|
+
.block-editor-list-view-block-select-button__anchor-wrapper {
|
|
316
|
+
position: relative;
|
|
317
|
+
max-width: min(110px, 40%);
|
|
318
|
+
width: 100%;
|
|
319
|
+
}
|
|
320
|
+
|
|
315
321
|
.block-editor-list-view-block-select-button__anchor {
|
|
322
|
+
position: absolute;
|
|
323
|
+
right: 0;
|
|
324
|
+
transform: translateY(-50%);
|
|
316
325
|
background: rgba($black, 0.1);
|
|
317
326
|
border-radius: $radius-block-ui;
|
|
318
|
-
display: inline-block;
|
|
319
327
|
padding: 2px 6px;
|
|
320
|
-
max-width:
|
|
321
|
-
|
|
322
|
-
text-overflow: ellipsis;
|
|
328
|
+
max-width: 100%;
|
|
329
|
+
box-sizing: border-box;
|
|
323
330
|
}
|
|
324
331
|
|
|
325
332
|
&.is-selected .block-editor-list-view-block-select-button__anchor {
|
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* External dependencies
|
|
3
|
-
*/
|
|
4
|
-
import { difference } from 'lodash';
|
|
5
|
-
|
|
6
1
|
/**
|
|
7
2
|
* WordPress dependencies
|
|
8
3
|
*/
|
|
@@ -126,9 +121,8 @@ export default function useBlockSelection() {
|
|
|
126
121
|
return;
|
|
127
122
|
}
|
|
128
123
|
|
|
129
|
-
const selectionDiff =
|
|
130
|
-
|
|
131
|
-
updatedSelectedBlocks
|
|
124
|
+
const selectionDiff = selectedBlocks.filter(
|
|
125
|
+
( blockId ) => ! updatedSelectedBlocks.includes( blockId )
|
|
132
126
|
);
|
|
133
127
|
|
|
134
128
|
let label;
|
|
@@ -3,8 +3,6 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { Platform } from 'react-native';
|
|
5
5
|
|
|
6
|
-
import { delay } from 'lodash';
|
|
7
|
-
|
|
8
6
|
import prompt from 'react-native-prompt-android';
|
|
9
7
|
|
|
10
8
|
/**
|
|
@@ -46,6 +44,8 @@ const URL_MEDIA_SOURCE = 'URL';
|
|
|
46
44
|
const PICKER_OPENING_DELAY = 200;
|
|
47
45
|
|
|
48
46
|
export class MediaUpload extends Component {
|
|
47
|
+
pickerTimeout;
|
|
48
|
+
|
|
49
49
|
constructor( props ) {
|
|
50
50
|
super( props );
|
|
51
51
|
this.onPickerPresent = this.onPickerPresent.bind( this );
|
|
@@ -78,6 +78,10 @@ export class MediaUpload extends Component {
|
|
|
78
78
|
}
|
|
79
79
|
}
|
|
80
80
|
|
|
81
|
+
componentWillUnmount() {
|
|
82
|
+
clearTimeout( this.pickerTimeout );
|
|
83
|
+
}
|
|
84
|
+
|
|
81
85
|
getAllSources() {
|
|
82
86
|
const { onSelectURL } = this.props;
|
|
83
87
|
|
|
@@ -189,7 +193,7 @@ export class MediaUpload extends Component {
|
|
|
189
193
|
// the delay below is required because on iOS this action sheet gets dismissed by the close event of the Inserter
|
|
190
194
|
// so this delay allows the Inserter to be closed fully before presenting action sheet.
|
|
191
195
|
if ( autoOpen && isIOS ) {
|
|
192
|
-
|
|
196
|
+
this.pickerTimeout = setTimeout(
|
|
193
197
|
() => this.picker.presentPicker(),
|
|
194
198
|
PICKER_OPENING_DELAY
|
|
195
199
|
);
|
|
@@ -33,10 +33,10 @@ export default function PreviewOptions( {
|
|
|
33
33
|
className: 'block-editor-post-preview__button-toggle',
|
|
34
34
|
disabled: ! isEnabled,
|
|
35
35
|
/* translators: button label text should, if possible, be under 16 characters. */
|
|
36
|
-
children: __( '
|
|
36
|
+
children: __( 'View' ),
|
|
37
37
|
};
|
|
38
38
|
const menuProps = {
|
|
39
|
-
'aria-label': __( '
|
|
39
|
+
'aria-label': __( 'View options' ),
|
|
40
40
|
};
|
|
41
41
|
return (
|
|
42
42
|
<DropdownMenu
|
|
@@ -1,12 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* WordPress dependencies
|
|
3
3
|
*/
|
|
4
|
-
import {
|
|
5
|
-
createContext,
|
|
6
|
-
useCallback,
|
|
7
|
-
useContext,
|
|
8
|
-
useMemo,
|
|
9
|
-
} from '@wordpress/element';
|
|
4
|
+
import { createContext, useContext, useMemo } from '@wordpress/element';
|
|
10
5
|
|
|
11
6
|
/**
|
|
12
7
|
* Internal dependencies
|
|
@@ -37,37 +32,53 @@ function addToBlockType( renderedBlocks, blockName, uniqueId ) {
|
|
|
37
32
|
}
|
|
38
33
|
|
|
39
34
|
/**
|
|
40
|
-
* A React
|
|
41
|
-
*
|
|
42
|
-
* function to prevent said recursion.
|
|
35
|
+
* A React context provider for use with the `useHasRecursion` hook to prevent recursive
|
|
36
|
+
* renders.
|
|
43
37
|
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
38
|
+
* Wrap block content with this provider and provide the same `uniqueId` prop as used
|
|
39
|
+
* with `useHasRecursion`.
|
|
40
|
+
*
|
|
41
|
+
* @param {Object} props
|
|
42
|
+
* @param {*} props.uniqueId Any value that acts as a unique identifier for a block instance.
|
|
43
|
+
* @param {string} props.blockName Optional block name.
|
|
44
|
+
* @param {JSX.Element} props.children React children.
|
|
46
45
|
*
|
|
47
|
-
* @return {
|
|
48
|
-
* - a boolean describing whether the provided id
|
|
49
|
-
* has already been rendered;
|
|
50
|
-
* - a React context provider to be used to wrap
|
|
51
|
-
* other elements.
|
|
46
|
+
* @return {JSX.Element} A React element.
|
|
52
47
|
*/
|
|
53
|
-
export
|
|
48
|
+
export function RecursionProvider( { children, uniqueId, blockName = '' } ) {
|
|
54
49
|
const previouslyRenderedBlocks = useContext( RenderedRefsContext );
|
|
55
50
|
const { name } = useBlockEditContext();
|
|
51
|
+
|
|
56
52
|
blockName = blockName || name;
|
|
57
|
-
|
|
58
|
-
previouslyRenderedBlocks[ blockName ]?.has( uniqueId )
|
|
59
|
-
);
|
|
53
|
+
|
|
60
54
|
const newRenderedBlocks = useMemo(
|
|
61
55
|
() => addToBlockType( previouslyRenderedBlocks, blockName, uniqueId ),
|
|
62
56
|
[ previouslyRenderedBlocks, blockName, uniqueId ]
|
|
63
57
|
);
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
),
|
|
70
|
-
[ newRenderedBlocks ]
|
|
58
|
+
|
|
59
|
+
return (
|
|
60
|
+
<RenderedRefsContext.Provider value={ newRenderedBlocks }>
|
|
61
|
+
{ children }
|
|
62
|
+
</RenderedRefsContext.Provider>
|
|
71
63
|
);
|
|
72
|
-
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* A React hook for keeping track of blocks previously rendered up in the block
|
|
68
|
+
* tree. Blocks susceptible to recursion can use this hook in their `Edit`
|
|
69
|
+
* function to prevent said recursion.
|
|
70
|
+
*
|
|
71
|
+
* Use this with the `RecursionProvider` component, using the same `uniqueId` value
|
|
72
|
+
* for both the hook and the provider.
|
|
73
|
+
*
|
|
74
|
+
* @param {*} uniqueId Any value that acts as a unique identifier for a block instance.
|
|
75
|
+
* @param {string} blockName Optional block name.
|
|
76
|
+
*
|
|
77
|
+
* @return {boolean} A boolean describing whether the provided id has already been rendered.
|
|
78
|
+
*/
|
|
79
|
+
export function useHasRecursion( uniqueId, blockName = '' ) {
|
|
80
|
+
const previouslyRenderedBlocks = useContext( RenderedRefsContext );
|
|
81
|
+
const { name } = useBlockEditContext();
|
|
82
|
+
blockName = blockName || name;
|
|
83
|
+
return Boolean( previouslyRenderedBlocks[ blockName ]?.has( uniqueId ) );
|
|
73
84
|
}
|
|
@@ -6,7 +6,7 @@ import { render } from '@testing-library/react';
|
|
|
6
6
|
/**
|
|
7
7
|
* Internal dependencies
|
|
8
8
|
*/
|
|
9
|
-
import
|
|
9
|
+
import { useHasRecursion, RecursionProvider } from '..';
|
|
10
10
|
import {
|
|
11
11
|
BlockEditContextProvider,
|
|
12
12
|
useBlockEditContext,
|
|
@@ -16,15 +16,14 @@ import {
|
|
|
16
16
|
// of calling itself depending on its `uniqueId` attribute.
|
|
17
17
|
function Edit( { attributes: { uniqueId } } ) {
|
|
18
18
|
const { name } = useBlockEditContext();
|
|
19
|
-
const
|
|
20
|
-
useNoRecursiveRenders( uniqueId );
|
|
19
|
+
const hasRecursion = useHasRecursion( uniqueId );
|
|
21
20
|
|
|
22
|
-
if (
|
|
21
|
+
if ( hasRecursion ) {
|
|
23
22
|
return <div className={ `wp-block__${ name }--halted` }>Halt</div>;
|
|
24
23
|
}
|
|
25
24
|
|
|
26
25
|
return (
|
|
27
|
-
<RecursionProvider>
|
|
26
|
+
<RecursionProvider uniqueId={ uniqueId }>
|
|
28
27
|
<div className={ `wp-block__${ name }` }>
|
|
29
28
|
{ uniqueId === 'SIMPLE' && <p>Done</p> }
|
|
30
29
|
{ uniqueId === 'SINGLY-RECURSIVE' && (
|
|
@@ -48,7 +47,7 @@ function Edit( { attributes: { uniqueId } } ) {
|
|
|
48
47
|
);
|
|
49
48
|
}
|
|
50
49
|
|
|
51
|
-
describe( '
|
|
50
|
+
describe( 'useHasRecursion/RecursionProvider', () => {
|
|
52
51
|
const context = { name: 'reusable-block' };
|
|
53
52
|
|
|
54
53
|
it( 'allows a single block to render', () => {
|
|
@@ -43,7 +43,19 @@ _Optional._ Called when the block can be removed. `forward` is true when the sel
|
|
|
43
43
|
|
|
44
44
|
### `allowedFormats: Array`
|
|
45
45
|
|
|
46
|
-
_Optional._ By default, all registered formats are allowed. This setting can be used to fine-tune the allowed formats. Example: `[ 'core/bold', 'core/link' ]`.
|
|
46
|
+
_Optional._ By default, all registered formats are allowed. This setting can be used to fine-tune the allowed formats. If you want to limit the formats allowed, you can specify using allowedFormats property in your code. If you want to allow only bold and italic settings, then you need to pass it in array. Example: `[ 'core/bold', 'core/link' ]`.
|
|
47
|
+
|
|
48
|
+
{% ESNext %}
|
|
49
|
+
|
|
50
|
+
```js
|
|
51
|
+
<RichText
|
|
52
|
+
tagName="h2"
|
|
53
|
+
value={ attributes.content }
|
|
54
|
+
allowedFormats={ [ 'core/bold', 'core/italic' ] } // Allow the content to be made bold or italic, but do not allow othe formatting options
|
|
55
|
+
onChange={ ( content ) => setAttributes( { content } ) }
|
|
56
|
+
placeholder={ __( 'Heading...' ) }
|
|
57
|
+
/>
|
|
58
|
+
```
|
|
47
59
|
|
|
48
60
|
### `withoutInteractiveFormatting: Boolean`
|
|
49
61
|
|
|
@@ -38,6 +38,7 @@ import { store as blockEditorStore } from '../../store';
|
|
|
38
38
|
import { useUndoAutomaticChange } from './use-undo-automatic-change';
|
|
39
39
|
import { useMarkPersistent } from './use-mark-persistent';
|
|
40
40
|
import { usePasteHandler } from './use-paste-handler';
|
|
41
|
+
import { useBeforeInputRules } from './use-before-input-rules';
|
|
41
42
|
import { useInputRules } from './use-input-rules';
|
|
42
43
|
import { useEnter } from './use-enter';
|
|
43
44
|
import { useFormatTypes } from './use-format-types';
|
|
@@ -359,6 +360,7 @@ function RichTextWrapper(
|
|
|
359
360
|
autocompleteProps.ref,
|
|
360
361
|
props.ref,
|
|
361
362
|
richTextRef,
|
|
363
|
+
useBeforeInputRules( { value, onChange } ),
|
|
362
364
|
useInputRules( {
|
|
363
365
|
value,
|
|
364
366
|
onChange,
|
|
@@ -113,6 +113,7 @@ function RichTextWrapper(
|
|
|
113
113
|
setRef,
|
|
114
114
|
disableSuggestions,
|
|
115
115
|
disableAutocorrection,
|
|
116
|
+
containerWidth,
|
|
116
117
|
...props
|
|
117
118
|
},
|
|
118
119
|
forwardedRef
|
|
@@ -639,6 +640,7 @@ function RichTextWrapper(
|
|
|
639
640
|
setRef={ setRef }
|
|
640
641
|
disableSuggestions={ disableSuggestions }
|
|
641
642
|
disableAutocorrection={ disableAutocorrection }
|
|
643
|
+
containerWidth={ containerWidth }
|
|
642
644
|
// Props to be set on the editable container are destructured on the
|
|
643
645
|
// element itself for web (see below), but passed through rich text
|
|
644
646
|
// for native.
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { useRef } from '@wordpress/element';
|
|
5
|
+
import { useRefEffect } from '@wordpress/compose';
|
|
6
|
+
import { insert, isCollapsed } from '@wordpress/rich-text';
|
|
7
|
+
import { useDispatch } from '@wordpress/data';
|
|
8
|
+
import { applyFilters } from '@wordpress/hooks';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Internal dependencies
|
|
12
|
+
*/
|
|
13
|
+
import { store as blockEditorStore } from '../../store';
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* When typing over a selection, the selection will we wrapped by a matching
|
|
17
|
+
* character pair. The second character is optional, it defaults to the first
|
|
18
|
+
* character.
|
|
19
|
+
*
|
|
20
|
+
* @type {string[]} Array of character pairs.
|
|
21
|
+
*/
|
|
22
|
+
const wrapSelectionSettings = [ '`', '"', "'", '“”', '‘’' ];
|
|
23
|
+
|
|
24
|
+
export function useBeforeInputRules( props ) {
|
|
25
|
+
const {
|
|
26
|
+
__unstableMarkLastChangeAsPersistent,
|
|
27
|
+
__unstableMarkAutomaticChange,
|
|
28
|
+
} = useDispatch( blockEditorStore );
|
|
29
|
+
const propsRef = useRef( props );
|
|
30
|
+
propsRef.current = props;
|
|
31
|
+
return useRefEffect( ( element ) => {
|
|
32
|
+
function onInput( event ) {
|
|
33
|
+
const { inputType, data } = event;
|
|
34
|
+
const { value, onChange } = propsRef.current;
|
|
35
|
+
|
|
36
|
+
// Only run the rules when inserting text.
|
|
37
|
+
if ( inputType !== 'insertText' ) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
if ( isCollapsed( value ) ) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const pair = applyFilters(
|
|
46
|
+
'blockEditor.wrapSelectionSettings',
|
|
47
|
+
wrapSelectionSettings
|
|
48
|
+
).find(
|
|
49
|
+
( [ startChar, endChar ] ) =>
|
|
50
|
+
startChar === data || endChar === data
|
|
51
|
+
);
|
|
52
|
+
|
|
53
|
+
if ( ! pair ) {
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
const [ startChar, endChar = startChar ] = pair;
|
|
58
|
+
const start = value.start;
|
|
59
|
+
const end = value.end + startChar.length;
|
|
60
|
+
|
|
61
|
+
let newValue = insert( value, startChar, start, start );
|
|
62
|
+
newValue = insert( newValue, endChar, end, end );
|
|
63
|
+
|
|
64
|
+
__unstableMarkLastChangeAsPersistent();
|
|
65
|
+
onChange( newValue );
|
|
66
|
+
__unstableMarkAutomaticChange();
|
|
67
|
+
|
|
68
|
+
const init = {};
|
|
69
|
+
|
|
70
|
+
for ( const key in event ) {
|
|
71
|
+
init[ key ] = event[ key ];
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
init.data = endChar;
|
|
75
|
+
|
|
76
|
+
const { ownerDocument } = element;
|
|
77
|
+
const { defaultView } = ownerDocument;
|
|
78
|
+
const newEvent = new defaultView.InputEvent( 'input', init );
|
|
79
|
+
|
|
80
|
+
// Dispatch an input event with the new data. This will trigger the
|
|
81
|
+
// input rules.
|
|
82
|
+
event.target.dispatchEvent( newEvent );
|
|
83
|
+
event.preventDefault();
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
element.addEventListener( 'beforeinput', onInput );
|
|
87
|
+
return () => {
|
|
88
|
+
element.removeEventListener( 'beforeinput', onInput );
|
|
89
|
+
};
|
|
90
|
+
}, [] );
|
|
91
|
+
}
|
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* External dependencies
|
|
3
|
-
*/
|
|
4
|
-
import { mapKeys } from 'lodash';
|
|
5
|
-
|
|
6
1
|
/**
|
|
7
2
|
* WordPress dependencies
|
|
8
3
|
*/
|
|
@@ -35,7 +30,12 @@ const interactiveContentTags = new Set( [
|
|
|
35
30
|
|
|
36
31
|
function prefixSelectKeys( selected, prefix ) {
|
|
37
32
|
if ( typeof selected !== 'object' ) return { [ prefix ]: selected };
|
|
38
|
-
return
|
|
33
|
+
return Object.fromEntries(
|
|
34
|
+
Object.entries( selected ).map( ( [ key, value ] ) => [
|
|
35
|
+
`${ prefix }.${ key }`,
|
|
36
|
+
value,
|
|
37
|
+
] )
|
|
38
|
+
);
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
function getPrefixedSelectKeys( selected, prefix ) {
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { __experimentalApplyValueToSides as applyValueToSides } from '@wordpress/components';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Internal dependencies
|
|
8
|
+
*/
|
|
9
|
+
import SpacingInputControl from './spacing-input-control';
|
|
10
|
+
import { getAllRawValue, isValuesMixed, isValuesDefined } from './utils';
|
|
11
|
+
|
|
12
|
+
export default function AllInputControl( {
|
|
13
|
+
onChange,
|
|
14
|
+
values,
|
|
15
|
+
sides,
|
|
16
|
+
spacingSizes,
|
|
17
|
+
type,
|
|
18
|
+
minimumCustomValue,
|
|
19
|
+
} ) {
|
|
20
|
+
const allValue = getAllRawValue( values );
|
|
21
|
+
const hasValues = isValuesDefined( values );
|
|
22
|
+
const isMixed = hasValues && isValuesMixed( values, sides );
|
|
23
|
+
|
|
24
|
+
const handleOnChange = ( next ) => {
|
|
25
|
+
const nextValues = applyValueToSides( values, next, sides );
|
|
26
|
+
onChange( nextValues );
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
return (
|
|
30
|
+
<SpacingInputControl
|
|
31
|
+
value={ allValue }
|
|
32
|
+
onChange={ handleOnChange }
|
|
33
|
+
side={ 'all' }
|
|
34
|
+
spacingSizes={ spacingSizes }
|
|
35
|
+
isMixed={ isMixed }
|
|
36
|
+
type={ type }
|
|
37
|
+
minimumCustomValue={ minimumCustomValue }
|
|
38
|
+
/>
|
|
39
|
+
);
|
|
40
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal dependencies
|
|
3
|
+
*/
|
|
4
|
+
import SpacingInputControl from './spacing-input-control';
|
|
5
|
+
import { LABELS } from './utils';
|
|
6
|
+
|
|
7
|
+
const groupedSides = [ 'vertical', 'horizontal' ];
|
|
8
|
+
|
|
9
|
+
export default function AxialInputControls( {
|
|
10
|
+
onChange,
|
|
11
|
+
values,
|
|
12
|
+
sides,
|
|
13
|
+
spacingSizes,
|
|
14
|
+
type,
|
|
15
|
+
minimumCustomValue,
|
|
16
|
+
} ) {
|
|
17
|
+
const createHandleOnChange = ( side ) => ( next ) => {
|
|
18
|
+
if ( ! onChange ) {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
const nextValues = { ...values };
|
|
22
|
+
|
|
23
|
+
if ( side === 'vertical' ) {
|
|
24
|
+
nextValues.top = next;
|
|
25
|
+
nextValues.bottom = next;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
if ( side === 'horizontal' ) {
|
|
29
|
+
nextValues.left = next;
|
|
30
|
+
nextValues.right = next;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
onChange( nextValues );
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
// Filter sides if custom configuration provided, maintaining default order.
|
|
37
|
+
const filteredSides = sides?.length
|
|
38
|
+
? groupedSides.filter( ( side ) => sides.includes( side ) )
|
|
39
|
+
: groupedSides;
|
|
40
|
+
|
|
41
|
+
return (
|
|
42
|
+
<>
|
|
43
|
+
{ filteredSides.map( ( side ) => {
|
|
44
|
+
const axisValue =
|
|
45
|
+
side === 'vertical' ? values.top : values.left;
|
|
46
|
+
return (
|
|
47
|
+
<SpacingInputControl
|
|
48
|
+
value={ axisValue }
|
|
49
|
+
onChange={ createHandleOnChange( side ) }
|
|
50
|
+
label={ LABELS[ side ] }
|
|
51
|
+
key={ `spacing-sizes-control-${ side }` }
|
|
52
|
+
withInputField={ false }
|
|
53
|
+
side={ side }
|
|
54
|
+
spacingSizes={ spacingSizes }
|
|
55
|
+
type={ type }
|
|
56
|
+
minimumCustomValue={ minimumCustomValue }
|
|
57
|
+
/>
|
|
58
|
+
);
|
|
59
|
+
} ) }
|
|
60
|
+
</>
|
|
61
|
+
);
|
|
62
|
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { useState } from '@wordpress/element';
|
|
5
|
+
import { __ } from '@wordpress/i18n';
|
|
6
|
+
import { __experimentalText as Text } from '@wordpress/components';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Internal dependencies
|
|
10
|
+
*/
|
|
11
|
+
import AllInputControl from './all-input-control';
|
|
12
|
+
import InputControls from './input-controls';
|
|
13
|
+
import AxialInputControls from './axial-input-controls';
|
|
14
|
+
import LinkedButton from './linked-button';
|
|
15
|
+
import { DEFAULT_VALUES, isValuesMixed, isValuesDefined } from './utils';
|
|
16
|
+
import useSetting from '../use-setting';
|
|
17
|
+
|
|
18
|
+
export default function SpacingSizesControl( {
|
|
19
|
+
inputProps,
|
|
20
|
+
onChange,
|
|
21
|
+
label = __( 'Spacing Control' ),
|
|
22
|
+
values,
|
|
23
|
+
sides,
|
|
24
|
+
splitOnAxis = false,
|
|
25
|
+
useSelect,
|
|
26
|
+
minimumCustomValue = 0,
|
|
27
|
+
} ) {
|
|
28
|
+
const spacingSizes = [
|
|
29
|
+
{ name: 0, slug: '0', size: 0 },
|
|
30
|
+
...( useSetting( 'spacing.spacingSizes' ) || [] ),
|
|
31
|
+
];
|
|
32
|
+
|
|
33
|
+
if ( spacingSizes.length > 8 ) {
|
|
34
|
+
spacingSizes.unshift( {
|
|
35
|
+
name: __( 'Default' ),
|
|
36
|
+
slug: 'default',
|
|
37
|
+
size: undefined,
|
|
38
|
+
} );
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const inputValues = values || DEFAULT_VALUES;
|
|
42
|
+
const hasInitialValue = isValuesDefined( values );
|
|
43
|
+
const hasOneSide = sides?.length === 1;
|
|
44
|
+
|
|
45
|
+
const [ isLinked, setIsLinked ] = useState(
|
|
46
|
+
! hasInitialValue || ! isValuesMixed( inputValues, sides ) || hasOneSide
|
|
47
|
+
);
|
|
48
|
+
|
|
49
|
+
const toggleLinked = () => {
|
|
50
|
+
setIsLinked( ! isLinked );
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
const handleOnChange = ( nextValue ) => {
|
|
54
|
+
const newValues = { ...values, ...nextValue };
|
|
55
|
+
onChange( newValues );
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
const inputControlProps = {
|
|
59
|
+
...inputProps,
|
|
60
|
+
onChange: handleOnChange,
|
|
61
|
+
isLinked,
|
|
62
|
+
sides,
|
|
63
|
+
values: inputValues,
|
|
64
|
+
spacingSizes,
|
|
65
|
+
useSelect,
|
|
66
|
+
type: label,
|
|
67
|
+
minimumCustomValue,
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
return (
|
|
71
|
+
<fieldset role="region" className="component-spacing-sizes-control">
|
|
72
|
+
<Text as="legend">{ label }</Text>
|
|
73
|
+
{ ! hasOneSide && (
|
|
74
|
+
<LinkedButton onClick={ toggleLinked } isLinked={ isLinked } />
|
|
75
|
+
) }
|
|
76
|
+
{ isLinked && (
|
|
77
|
+
<AllInputControl
|
|
78
|
+
aria-label={ label }
|
|
79
|
+
{ ...inputControlProps }
|
|
80
|
+
/>
|
|
81
|
+
) }
|
|
82
|
+
|
|
83
|
+
{ ! isLinked && splitOnAxis && (
|
|
84
|
+
<AxialInputControls { ...inputControlProps } />
|
|
85
|
+
) }
|
|
86
|
+
{ ! isLinked && ! splitOnAxis && (
|
|
87
|
+
<InputControls { ...inputControlProps } />
|
|
88
|
+
) }
|
|
89
|
+
</fieldset>
|
|
90
|
+
);
|
|
91
|
+
}
|