@wordpress/block-editor 7.0.4 → 8.0.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 +11 -0
- package/README.md +31 -0
- package/build/components/alignment-control/ui.js +1 -2
- package/build/components/alignment-control/ui.js.map +1 -1
- package/build/components/block-icon/index.js +5 -1
- package/build/components/block-icon/index.js.map +1 -1
- package/build/components/block-inspector/index.js +4 -0
- package/build/components/block-inspector/index.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-list/use-block-props/use-multi-selection.js +21 -8
- package/build/components/block-list/use-block-props/use-multi-selection.js.map +1 -1
- package/build/components/block-navigation/dropdown.js +0 -1
- package/build/components/block-navigation/dropdown.js.map +1 -1
- package/build/components/block-patterns-list/index.js +1 -8
- package/build/components/block-patterns-list/index.js.map +1 -1
- package/build/components/block-settings/container.native.js +5 -2
- package/build/components/block-settings/container.native.js.map +1 -1
- package/build/components/block-settings-menu/block-settings-dropdown.js +22 -2
- package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
- package/build/components/block-styles/preview.native.js +2 -2
- package/build/components/block-styles/preview.native.js.map +1 -1
- package/build/components/colors-gradients/control.js +8 -47
- package/build/components/colors-gradients/control.js.map +1 -1
- package/build/components/colors-gradients/panel-color-gradient-settings.js +81 -6
- package/build/components/colors-gradients/panel-color-gradient-settings.js.map +1 -1
- package/build/components/duotone-control/index.js +5 -2
- package/build/components/duotone-control/index.js.map +1 -1
- package/build/components/font-appearance-control/index.js +27 -15
- package/build/components/font-appearance-control/index.js.map +1 -1
- package/build/components/iframe/index.js +1 -1
- package/build/components/iframe/index.js.map +1 -1
- package/build/components/index.js +20 -2
- package/build/components/index.js.map +1 -1
- package/build/components/index.native.js +2 -2
- package/build/components/index.native.js.map +1 -1
- package/build/components/inner-blocks/index.js +5 -4
- package/build/components/inner-blocks/index.js.map +1 -1
- package/build/components/inner-blocks/index.native.js +4 -3
- package/build/components/inner-blocks/index.native.js.map +1 -1
- package/build/components/inserter/block-patterns-explorer/explorer.js +62 -0
- package/build/components/inserter/block-patterns-explorer/explorer.js.map +1 -0
- package/build/components/inserter/block-patterns-explorer/patterns-list.js +111 -0
- package/build/components/inserter/block-patterns-explorer/patterns-list.js.map +1 -0
- package/build/components/inserter/block-patterns-explorer/sidebar.js +78 -0
- package/build/components/inserter/block-patterns-explorer/sidebar.js.map +1 -0
- package/build/components/inserter/block-patterns-tab.js +74 -45
- package/build/components/inserter/block-patterns-tab.js.map +1 -1
- package/build/components/inserter/hooks/use-block-type-impressions.native.js +4 -7
- package/build/components/inserter/hooks/use-block-type-impressions.native.js.map +1 -1
- package/build/components/inserter/pattern-panel.js +19 -10
- package/build/components/inserter/pattern-panel.js.map +1 -1
- package/build/components/inspector-controls/groups.js +3 -1
- package/build/components/inspector-controls/groups.js.map +1 -1
- package/build/components/letter-spacing-control/index.js +9 -6
- package/build/components/letter-spacing-control/index.js.map +1 -1
- package/build/components/link-control/index.js +88 -35
- package/build/components/link-control/index.js.map +1 -1
- package/build/components/link-control/link-preview.js +19 -6
- package/build/components/link-control/link-preview.js.map +1 -1
- package/build/components/link-control/search-input.js +12 -3
- package/build/components/link-control/search-input.js.map +1 -1
- package/build/components/list-view/block.js +49 -23
- package/build/components/list-view/block.js.map +1 -1
- package/build/components/list-view/branch.js +92 -73
- package/build/components/list-view/branch.js.map +1 -1
- package/build/components/list-view/index.js +39 -16
- package/build/components/list-view/index.js.map +1 -1
- package/build/components/list-view/leaf.js +1 -1
- package/build/components/list-view/leaf.js.map +1 -1
- package/build/components/list-view/use-list-view-client-ids.js +8 -58
- package/build/components/list-view/use-list-view-client-ids.js.map +1 -1
- package/build/components/rich-text/embed-handler-picker.native.js +1 -0
- package/build/components/rich-text/embed-handler-picker.native.js.map +1 -1
- package/build/components/rich-text/format-edit.js +28 -2
- package/build/components/rich-text/format-edit.js.map +1 -1
- package/build/components/rich-text/format-toolbar/index.js +2 -1
- package/build/components/rich-text/format-toolbar/index.js.map +1 -1
- package/build/components/url-input/index.js +11 -4
- package/build/components/url-input/index.js.map +1 -1
- package/build/components/use-setting/index.js +48 -9
- package/build/components/use-setting/index.js.map +1 -1
- package/build/hooks/border.js +5 -5
- package/build/hooks/border.js.map +1 -1
- package/build/hooks/color-panel.js +2 -1
- package/build/hooks/color-panel.js.map +1 -1
- package/build/hooks/duotone.js +16 -5
- package/build/hooks/duotone.js.map +1 -1
- package/build/hooks/font-appearance.js +49 -6
- package/build/hooks/font-appearance.js.map +1 -1
- package/build/hooks/font-family.js +37 -16
- package/build/hooks/font-family.js.map +1 -1
- package/build/hooks/font-size.js +51 -9
- package/build/hooks/font-size.js.map +1 -1
- package/build/hooks/index.js +8 -0
- package/build/hooks/index.js.map +1 -1
- package/build/hooks/index.native.js +8 -0
- package/build/hooks/index.native.js.map +1 -1
- package/build/hooks/letter-spacing.js +44 -7
- package/build/hooks/letter-spacing.js.map +1 -1
- package/build/hooks/line-height.js +45 -8
- package/build/hooks/line-height.js.map +1 -1
- package/build/hooks/margin.js +1 -1
- package/build/hooks/margin.js.map +1 -1
- package/build/hooks/padding.js +1 -1
- package/build/hooks/padding.js.map +1 -1
- package/build/hooks/text-decoration.js +42 -6
- package/build/hooks/text-decoration.js.map +1 -1
- package/build/hooks/text-transform.js +42 -6
- package/build/hooks/text-transform.js.map +1 -1
- package/build/hooks/typography.js +108 -8
- package/build/hooks/typography.js.map +1 -1
- package/build/hooks/use-cached-truthy.js +29 -0
- package/build/hooks/use-cached-truthy.js.map +1 -0
- package/build/index.js +7 -0
- package/build/index.js.map +1 -1
- package/build/layouts/flex.js +120 -28
- package/build/layouts/flex.js.map +1 -1
- package/build/store/actions.js +303 -265
- package/build/store/actions.js.map +1 -1
- package/build/store/index.js +1 -3
- package/build/store/index.js.map +1 -1
- package/build/store/reducer.js +23 -22
- package/build/store/reducer.js.map +1 -1
- package/build/store/selectors.js +44 -35
- package/build/store/selectors.js.map +1 -1
- package/build-module/components/alignment-control/ui.js +1 -2
- package/build-module/components/alignment-control/ui.js.map +1 -1
- package/build-module/components/block-icon/index.js +5 -1
- package/build-module/components/block-icon/index.js.map +1 -1
- package/build-module/components/block-inspector/index.js +4 -0
- package/build-module/components/block-inspector/index.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-list/use-block-props/use-multi-selection.js +21 -8
- package/build-module/components/block-list/use-block-props/use-multi-selection.js.map +1 -1
- package/build-module/components/block-navigation/dropdown.js +0 -1
- package/build-module/components/block-navigation/dropdown.js.map +1 -1
- package/build-module/components/block-patterns-list/index.js +1 -6
- package/build-module/components/block-patterns-list/index.js.map +1 -1
- package/build-module/components/block-settings/container.native.js +6 -3
- package/build-module/components/block-settings/container.native.js.map +1 -1
- package/build-module/components/block-settings-menu/block-settings-dropdown.js +24 -4
- package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
- package/build-module/components/block-styles/preview.native.js +2 -2
- package/build-module/components/block-styles/preview.native.js.map +1 -1
- package/build-module/components/colors-gradients/control.js +12 -53
- package/build-module/components/colors-gradients/control.js.map +1 -1
- package/build-module/components/colors-gradients/panel-color-gradient-settings.js +82 -6
- package/build-module/components/colors-gradients/panel-color-gradient-settings.js.map +1 -1
- package/build-module/components/duotone-control/index.js +5 -2
- package/build-module/components/duotone-control/index.js.map +1 -1
- package/build-module/components/font-appearance-control/index.js +23 -15
- package/build-module/components/font-appearance-control/index.js.map +1 -1
- package/build-module/components/iframe/index.js +1 -1
- package/build-module/components/iframe/index.js.map +1 -1
- package/build-module/components/index.js +3 -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/inner-blocks/index.js +6 -5
- package/build-module/components/inner-blocks/index.js.map +1 -1
- package/build-module/components/inner-blocks/index.native.js +5 -4
- package/build-module/components/inner-blocks/index.native.js.map +1 -1
- package/build-module/components/inserter/block-patterns-explorer/explorer.js +50 -0
- package/build-module/components/inserter/block-patterns-explorer/explorer.js.map +1 -0
- package/build-module/components/inserter/block-patterns-explorer/patterns-list.js +92 -0
- package/build-module/components/inserter/block-patterns-explorer/patterns-list.js.map +1 -0
- package/build-module/components/inserter/block-patterns-explorer/sidebar.js +69 -0
- package/build-module/components/inserter/block-patterns-explorer/sidebar.js.map +1 -0
- package/build-module/components/inserter/block-patterns-tab.js +75 -46
- package/build-module/components/inserter/block-patterns-tab.js.map +1 -1
- package/build-module/components/inserter/hooks/use-block-type-impressions.native.js +4 -7
- package/build-module/components/inserter/hooks/use-block-type-impressions.native.js.map +1 -1
- package/build-module/components/inserter/pattern-panel.js +21 -13
- package/build-module/components/inserter/pattern-panel.js.map +1 -1
- package/build-module/components/inspector-controls/groups.js +3 -1
- package/build-module/components/inspector-controls/groups.js.map +1 -1
- package/build-module/components/letter-spacing-control/index.js +9 -6
- package/build-module/components/letter-spacing-control/index.js.map +1 -1
- package/build-module/components/link-control/index.js +88 -36
- package/build-module/components/link-control/index.js.map +1 -1
- package/build-module/components/link-control/link-preview.js +19 -7
- package/build-module/components/link-control/link-preview.js.map +1 -1
- package/build-module/components/link-control/search-input.js +11 -3
- package/build-module/components/link-control/search-input.js.map +1 -1
- package/build-module/components/list-view/block.js +49 -24
- package/build-module/components/list-view/block.js.map +1 -1
- package/build-module/components/list-view/branch.js +92 -73
- package/build-module/components/list-view/branch.js.map +1 -1
- package/build-module/components/list-view/index.js +41 -18
- package/build-module/components/list-view/index.js.map +1 -1
- package/build-module/components/list-view/leaf.js +1 -1
- package/build-module/components/list-view/leaf.js.map +1 -1
- package/build-module/components/list-view/use-list-view-client-ids.js +8 -58
- package/build-module/components/list-view/use-list-view-client-ids.js.map +1 -1
- package/build-module/components/rich-text/embed-handler-picker.native.js +1 -0
- package/build-module/components/rich-text/embed-handler-picker.native.js.map +1 -1
- package/build-module/components/rich-text/format-edit.js +28 -3
- package/build-module/components/rich-text/format-edit.js.map +1 -1
- package/build-module/components/rich-text/format-toolbar/index.js +2 -1
- package/build-module/components/rich-text/format-toolbar/index.js.map +1 -1
- package/build-module/components/url-input/index.js +11 -4
- package/build-module/components/url-input/index.js.map +1 -1
- package/build-module/components/use-setting/index.js +48 -9
- package/build-module/components/use-setting/index.js.map +1 -1
- package/build-module/hooks/border.js +5 -5
- package/build-module/hooks/border.js.map +1 -1
- package/build-module/hooks/color-panel.js +2 -1
- package/build-module/hooks/color-panel.js.map +1 -1
- package/build-module/hooks/duotone.js +16 -5
- package/build-module/hooks/duotone.js.map +1 -1
- package/build-module/hooks/font-appearance.js +45 -6
- package/build-module/hooks/font-appearance.js.map +1 -1
- package/build-module/hooks/font-family.js +33 -16
- package/build-module/hooks/font-family.js.map +1 -1
- package/build-module/hooks/font-size.js +47 -9
- package/build-module/hooks/font-size.js.map +1 -1
- package/build-module/hooks/index.js +1 -0
- package/build-module/hooks/index.js.map +1 -1
- package/build-module/hooks/index.native.js +1 -0
- package/build-module/hooks/index.native.js.map +1 -1
- package/build-module/hooks/letter-spacing.js +40 -7
- package/build-module/hooks/letter-spacing.js.map +1 -1
- package/build-module/hooks/line-height.js +41 -8
- package/build-module/hooks/line-height.js.map +1 -1
- package/build-module/hooks/margin.js +1 -1
- package/build-module/hooks/margin.js.map +1 -1
- package/build-module/hooks/padding.js +1 -1
- package/build-module/hooks/padding.js.map +1 -1
- package/build-module/hooks/text-decoration.js +38 -6
- package/build-module/hooks/text-decoration.js.map +1 -1
- package/build-module/hooks/text-transform.js +38 -6
- package/build-module/hooks/text-transform.js.map +1 -1
- package/build-module/hooks/typography.js +117 -17
- package/build-module/hooks/typography.js.map +1 -1
- package/build-module/hooks/use-cached-truthy.js +21 -0
- package/build-module/hooks/use-cached-truthy.js.map +1 -0
- package/build-module/index.js +1 -1
- package/build-module/index.js.map +1 -1
- package/build-module/layouts/flex.js +124 -32
- package/build-module/layouts/flex.js.map +1 -1
- package/build-module/store/actions.js +266 -241
- package/build-module/store/actions.js.map +1 -1
- package/build-module/store/index.js +1 -2
- package/build-module/store/index.js.map +1 -1
- package/build-module/store/reducer.js +23 -22
- package/build-module/store/reducer.js.map +1 -1
- package/build-module/store/selectors.js +42 -30
- package/build-module/store/selectors.js.map +1 -1
- package/build-style/style-rtl.css +160 -57
- package/build-style/style.css +160 -57
- package/package.json +13 -14
- package/src/components/alignment-control/test/__snapshots__/index.js.snap +0 -2
- package/src/components/alignment-control/ui.js +1 -4
- package/src/components/block-draggable/style.scss +19 -4
- package/src/components/block-icon/index.js +4 -1
- package/src/components/block-inspector/index.js +5 -0
- package/src/components/block-list/index.native.js +1 -1
- package/src/components/block-list/use-block-props/use-multi-selection.js +27 -7
- package/src/components/block-navigation/dropdown.js +0 -1
- package/src/components/block-patterns-list/index.js +1 -8
- package/src/components/block-patterns-list/style.scss +22 -12
- package/src/components/block-settings/container.native.js +7 -0
- package/src/components/block-settings-menu/block-settings-dropdown.js +19 -7
- package/src/components/block-styles/preview.native.js +2 -2
- package/src/components/block-switcher/test/__snapshots__/index.js.snap +1 -1
- package/src/components/color-palette/test/__snapshots__/control.js.snap +88 -63
- package/src/components/colors-gradients/control.js +19 -62
- package/src/components/colors-gradients/panel-color-gradient-settings.js +76 -6
- package/src/components/colors-gradients/style.scss +3 -14
- package/src/components/colors-gradients/test/control.js +0 -16
- package/src/components/duotone-control/index.js +6 -0
- package/src/components/duotone-control/style.scss +27 -12
- package/src/components/font-appearance-control/index.js +22 -14
- package/src/components/iframe/index.js +1 -1
- package/src/components/index.js +3 -4
- package/src/components/index.native.js +1 -4
- package/src/components/inner-blocks/index.js +4 -4
- package/src/components/inner-blocks/index.native.js +7 -4
- package/src/components/inserter/block-patterns-explorer/explorer.js +50 -0
- package/src/components/inserter/block-patterns-explorer/patterns-list.js +122 -0
- package/src/components/inserter/block-patterns-explorer/sidebar.js +73 -0
- package/src/components/inserter/block-patterns-tab.js +107 -80
- package/src/components/inserter/hooks/use-block-type-impressions.native.js +14 -21
- package/src/components/inserter/pattern-panel.js +33 -16
- package/src/components/inserter/style.scss +64 -1
- package/src/components/inserter/test/block-types-tab.native.js +1 -1
- package/src/components/inserter/test/fixtures/index.native.js +12 -0
- package/src/components/inspector-controls/groups.js +4 -0
- package/src/components/letter-spacing-control/index.js +12 -6
- package/src/components/link-control/README.md +7 -0
- package/src/components/link-control/index.js +99 -34
- package/src/components/link-control/link-preview.js +21 -9
- package/src/components/link-control/search-input.js +9 -3
- package/src/components/link-control/style.scss +32 -16
- package/src/components/link-control/test/index.js +179 -4
- package/src/components/list-view/block.js +67 -23
- package/src/components/list-view/branch.js +113 -91
- package/src/components/list-view/index.js +58 -19
- package/src/components/list-view/leaf.js +1 -1
- package/src/components/list-view/style.scss +14 -3
- package/src/components/list-view/use-list-view-client-ids.js +7 -66
- package/src/components/rich-text/embed-handler-picker.native.js +1 -0
- package/src/components/rich-text/format-edit.js +36 -2
- package/src/components/rich-text/format-toolbar/index.js +3 -0
- package/src/components/url-input/index.js +14 -4
- package/src/components/use-setting/index.js +49 -11
- package/src/hooks/border.js +8 -11
- package/src/hooks/color-panel.js +1 -0
- package/src/hooks/duotone.js +21 -7
- package/src/hooks/font-appearance.js +38 -7
- package/src/hooks/font-family.js +29 -13
- package/src/hooks/font-size.js +42 -6
- package/src/hooks/index.js +1 -0
- package/src/hooks/index.native.js +1 -0
- package/src/hooks/layout.scss +3 -1
- package/src/hooks/letter-spacing.js +35 -7
- package/src/hooks/line-height.js +37 -9
- package/src/hooks/margin.js +1 -1
- package/src/hooks/padding.js +1 -1
- package/src/hooks/text-decoration.js +34 -6
- package/src/hooks/text-transform.js +34 -6
- package/src/hooks/typography.js +165 -15
- package/src/hooks/typography.scss +16 -0
- package/src/hooks/use-cached-truthy.js +20 -0
- package/src/index.js +1 -0
- package/src/layouts/flex.js +137 -41
- package/src/store/actions.js +223 -391
- package/src/store/index.js +1 -2
- package/src/store/reducer.js +36 -18
- package/src/store/selectors.js +52 -47
- package/src/store/test/actions.js +395 -694
- package/src/store/test/selectors.js +79 -21
- package/src/style.scss +1 -1
- package/src/utils/test/parse-css-unit-to-px.js +127 -167
- package/build/components/text-decoration-and-transform/index.js +0 -39
- package/build/components/text-decoration-and-transform/index.js.map +0 -1
- package/build/store/controls.js +0 -44
- package/build/store/controls.js.map +0 -1
- package/build-module/components/text-decoration-and-transform/index.js +0 -30
- package/build-module/components/text-decoration-and-transform/index.js.map +0 -1
- package/build-module/store/controls.js +0 -32
- package/build-module/store/controls.js.map +0 -1
- package/src/components/text-decoration-and-transform/index.js +0 -36
- package/src/components/text-decoration-and-transform/style.scss +0 -3
- package/src/store/controls.js +0 -39
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/block-editor/src/components/list-view/index.js"],"names":["useMergeRefs","__experimentalTreeGrid","TreeGrid","AsyncModeProvider","useDispatch","useCallback","useEffect","useMemo","useRef","useReducer","forwardRef","__","ListViewBranch","ListViewContext","ListViewDropIndicator","useListViewClientIds","useListViewDropZone","store","blockEditorStore","noop","expanded","state","action","type","clientId","ListView","blocks","showOnlyCurrentHierarchy","onSelect","__experimentalFeatures","__experimentalPersistentListViewFeatures","props","ref","clientIdsTree","selectedClientIds","draggedClientIds","selectBlock","selectEditorBlock","expandedState","setExpandedState","dropZoneRef","target","blockDropTarget","elementRef","treeGridRef","isMounted","current","expand","collapse","expandRow","row","dataset","block","collapseRow","contextValue","isTreeGridMounted"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\n\nimport { useMergeRefs } from '@wordpress/compose';\nimport { __experimentalTreeGrid as TreeGrid } from '@wordpress/components';\nimport { AsyncModeProvider, useDispatch } from '@wordpress/data';\nimport {\n\tuseCallback,\n\tuseEffect,\n\tuseMemo,\n\tuseRef,\n\tuseReducer,\n\tforwardRef,\n} from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport ListViewBranch from './branch';\nimport { ListViewContext } from './context';\nimport ListViewDropIndicator from './drop-indicator';\nimport useListViewClientIds from './use-list-view-client-ids';\nimport useListViewDropZone from './use-list-view-drop-zone';\nimport { store as blockEditorStore } from '../../store';\n\nconst noop = () => {};\nconst expanded = ( state, action ) => {\n\tswitch ( action.type ) {\n\t\tcase 'expand':\n\t\t\treturn { ...state, ...{ [ action.clientId ]: true } };\n\t\tcase 'collapse':\n\t\t\treturn { ...state, ...{ [ action.clientId ]: false } };\n\t\tdefault:\n\t\t\treturn state;\n\t}\n};\n\n/**\n * Wrap `ListViewRows` with `TreeGrid`. ListViewRows is a\n * recursive component (it renders itself), so this ensures TreeGrid is only\n * present at the very top of the navigation grid.\n *\n * @param {Object} props Components props.\n * @param {Array} props.blocks Custom subset of block client IDs to be used instead of the default hierarchy.\n * @param {Function} props.onSelect Block selection callback.\n * @param {boolean} props.showNestedBlocks Flag to enable displaying nested blocks.\n * @param {boolean} props.showOnlyCurrentHierarchy Flag to limit the list to the current hierarchy of blocks.\n * @param {boolean} props.__experimentalFeatures Flag to enable experimental features.\n * @param {boolean} props.__experimentalPersistentListViewFeatures Flag to enable features for the Persistent List View experiment.\n * @param {Object} ref Forwarded ref\n */\nfunction ListView(\n\t{\n\t\tblocks,\n\t\tshowOnlyCurrentHierarchy,\n\t\tonSelect = noop,\n\t\t__experimentalFeatures,\n\t\t__experimentalPersistentListViewFeatures,\n\t\t...props\n\t},\n\tref\n) {\n\tconst {\n\t\tclientIdsTree,\n\t\tselectedClientIds,\n\t\tdraggedClientIds,\n\t} = useListViewClientIds(\n\t\tblocks,\n\t\tshowOnlyCurrentHierarchy,\n\t\t__experimentalPersistentListViewFeatures\n\t);\n\tconst { selectBlock } = useDispatch( blockEditorStore );\n\tconst selectEditorBlock = useCallback(\n\t\t( clientId ) => {\n\t\t\tselectBlock( clientId );\n\t\t\tonSelect( clientId );\n\t\t},\n\t\t[ selectBlock, onSelect ]\n\t);\n\tconst [ expandedState, setExpandedState ] = useReducer( expanded, {} );\n\n\tconst { ref: dropZoneRef, target: blockDropTarget } = useListViewDropZone();\n\tconst elementRef = useRef();\n\tconst treeGridRef = useMergeRefs( [ elementRef, dropZoneRef, ref ] );\n\n\tconst isMounted = useRef( false );\n\tuseEffect( () => {\n\t\tisMounted.current = true;\n\t}, [] );\n\n\tconst expand = useCallback(\n\t\t( clientId ) => {\n\t\t\tif ( ! clientId ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsetExpandedState( { type: 'expand', clientId } );\n\t\t},\n\t\t[ setExpandedState ]\n\t);\n\tconst collapse = useCallback(\n\t\t( clientId ) => {\n\t\t\tif ( ! clientId ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsetExpandedState( { type: 'collapse', clientId } );\n\t\t},\n\t\t[ setExpandedState ]\n\t);\n\tconst expandRow = ( row ) => {\n\t\texpand( row?.dataset?.block );\n\t};\n\tconst collapseRow = ( row ) => {\n\t\tcollapse( row?.dataset?.block );\n\t};\n\n\tconst contextValue = useMemo(\n\t\t() => ( {\n\t\t\t__experimentalFeatures,\n\t\t\t__experimentalPersistentListViewFeatures,\n\t\t\tisTreeGridMounted: isMounted.current,\n\t\t\tdraggedClientIds,\n\t\t\tselectedClientIds,\n\t\t\texpandedState,\n\t\t\texpand,\n\t\t\tcollapse,\n\t\t} ),\n\t\t[\n\t\t\t__experimentalFeatures,\n\t\t\t__experimentalPersistentListViewFeatures,\n\t\t\tisMounted.current,\n\t\t\tdraggedClientIds,\n\t\t\tselectedClientIds,\n\t\t\texpandedState,\n\t\t\texpand,\n\t\t\tcollapse,\n\t\t]\n\t);\n\n\treturn (\n\t\t<AsyncModeProvider value={ true }>\n\t\t\t<ListViewDropIndicator\n\t\t\t\tlistViewRef={ elementRef }\n\t\t\t\tblockDropTarget={ blockDropTarget }\n\t\t\t/>\n\t\t\t<TreeGrid\n\t\t\t\tclassName=\"block-editor-list-view-tree\"\n\t\t\t\taria-label={ __( 'Block navigation structure' ) }\n\t\t\t\tref={ treeGridRef }\n\t\t\t\tonCollapseRow={ collapseRow }\n\t\t\t\tonExpandRow={ expandRow }\n\t\t\t>\n\t\t\t\t<ListViewContext.Provider value={ contextValue }>\n\t\t\t\t\t<ListViewBranch\n\t\t\t\t\t\tblocks={ clientIdsTree }\n\t\t\t\t\t\tselectBlock={ selectEditorBlock }\n\t\t\t\t\t\t{ ...props }\n\t\t\t\t\t/>\n\t\t\t\t</ListViewContext.Provider>\n\t\t\t</TreeGrid>\n\t\t</AsyncModeProvider>\n\t);\n}\nexport default forwardRef( ListView );\n"]}
|
|
1
|
+
{"version":3,"sources":["@wordpress/block-editor/src/components/list-view/index.js"],"names":["useMergeRefs","__experimentalUseFixedWindowList","useFixedWindowList","__experimentalTreeGrid","TreeGrid","AsyncModeProvider","useDispatch","useSelect","useCallback","useEffect","useMemo","useRef","useReducer","forwardRef","__","ListViewBranch","ListViewContext","ListViewDropIndicator","useListViewClientIds","useListViewDropZone","store","blockEditorStore","noop","expanded","state","action","type","clientId","ListView","blocks","onSelect","__experimentalFeatures","__experimentalPersistentListViewFeatures","__experimentalHideContainerBlockActions","showNestedBlocks","showBlockMovers","props","ref","clientIdsTree","draggedClientIds","selectedClientIds","selectBlock","visibleBlockCount","select","getGlobalBlockCount","getClientIdsOfDescendants","draggedBlockCount","length","selectEditorBlock","expandedState","setExpandedState","dropZoneRef","target","blockDropTarget","elementRef","treeGridRef","isMounted","current","fixedListWindow","useWindowing","windowOverscan","expand","collapse","expandRow","row","dataset","block","collapseRow","contextValue","isTreeGridMounted"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tuseMergeRefs,\n\t__experimentalUseFixedWindowList as useFixedWindowList,\n} from '@wordpress/compose';\nimport { __experimentalTreeGrid as TreeGrid } from '@wordpress/components';\nimport { AsyncModeProvider, useDispatch, useSelect } from '@wordpress/data';\nimport {\n\tuseCallback,\n\tuseEffect,\n\tuseMemo,\n\tuseRef,\n\tuseReducer,\n\tforwardRef,\n} from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport ListViewBranch from './branch';\nimport { ListViewContext } from './context';\nimport ListViewDropIndicator from './drop-indicator';\nimport useListViewClientIds from './use-list-view-client-ids';\nimport useListViewDropZone from './use-list-view-drop-zone';\nimport { store as blockEditorStore } from '../../store';\n\nconst noop = () => {};\nconst expanded = ( state, action ) => {\n\tswitch ( action.type ) {\n\t\tcase 'expand':\n\t\t\treturn { ...state, ...{ [ action.clientId ]: true } };\n\t\tcase 'collapse':\n\t\t\treturn { ...state, ...{ [ action.clientId ]: false } };\n\t\tdefault:\n\t\t\treturn state;\n\t}\n};\n\n/**\n * Wrap `ListViewRows` with `TreeGrid`. ListViewRows is a\n * recursive component (it renders itself), so this ensures TreeGrid is only\n * present at the very top of the navigation grid.\n *\n * @param {Object} props Components props.\n * @param {Array} props.blocks Custom subset of block client IDs to be used instead of the default hierarchy.\n * @param {Function} props.onSelect Block selection callback.\n * @param {boolean} props.showNestedBlocks Flag to enable displaying nested blocks.\n * @param {boolean} props.showBlockMovers Flag to enable block movers\n * @param {boolean} props.__experimentalFeatures Flag to enable experimental features.\n * @param {boolean} props.__experimentalPersistentListViewFeatures Flag to enable features for the Persistent List View experiment.\n * @param {boolean} props.__experimentalHideContainerBlockActions Flag to hide actions of top level blocks (like core/widget-area)\n * @param {Object} ref Forwarded ref\n */\nfunction ListView(\n\t{\n\t\tblocks,\n\t\tonSelect = noop,\n\t\t__experimentalFeatures,\n\t\t__experimentalPersistentListViewFeatures,\n\t\t__experimentalHideContainerBlockActions,\n\t\tshowNestedBlocks,\n\t\tshowBlockMovers,\n\t\t...props\n\t},\n\tref\n) {\n\tconst {\n\t\tclientIdsTree,\n\t\tdraggedClientIds,\n\t\tselectedClientIds,\n\t} = useListViewClientIds( blocks );\n\tconst { selectBlock } = useDispatch( blockEditorStore );\n\tconst { visibleBlockCount } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getGlobalBlockCount, getClientIdsOfDescendants } = select(\n\t\t\t\tblockEditorStore\n\t\t\t);\n\t\t\tconst draggedBlockCount =\n\t\t\t\tdraggedClientIds?.length > 0\n\t\t\t\t\t? getClientIdsOfDescendants( draggedClientIds ).length + 1\n\t\t\t\t\t: 0;\n\t\t\treturn {\n\t\t\t\tvisibleBlockCount: getGlobalBlockCount() - draggedBlockCount,\n\t\t\t};\n\t\t},\n\t\t[ draggedClientIds ]\n\t);\n\tconst selectEditorBlock = useCallback(\n\t\t( clientId ) => {\n\t\t\tselectBlock( clientId );\n\t\t\tonSelect( clientId );\n\t\t},\n\t\t[ selectBlock, onSelect ]\n\t);\n\tconst [ expandedState, setExpandedState ] = useReducer( expanded, {} );\n\n\tconst { ref: dropZoneRef, target: blockDropTarget } = useListViewDropZone();\n\tconst elementRef = useRef();\n\tconst treeGridRef = useMergeRefs( [ elementRef, dropZoneRef, ref ] );\n\n\tconst isMounted = useRef( false );\n\tuseEffect( () => {\n\t\tisMounted.current = true;\n\t}, [] );\n\n\t// List View renders a fixed number of items and relies on each having a fixed item height of 36px.\n\t// If this value changes, we should also change the itemHeight value set in useFixedWindowList.\n\t// See: https://github.com/WordPress/gutenberg/pull/35230 for additional context.\n\tconst [ fixedListWindow ] = useFixedWindowList(\n\t\telementRef,\n\t\t36,\n\t\tvisibleBlockCount,\n\t\t{\n\t\t\tuseWindowing: __experimentalPersistentListViewFeatures,\n\t\t\twindowOverscan: 40,\n\t\t}\n\t);\n\n\tconst expand = useCallback(\n\t\t( clientId ) => {\n\t\t\tif ( ! clientId ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsetExpandedState( { type: 'expand', clientId } );\n\t\t},\n\t\t[ setExpandedState ]\n\t);\n\tconst collapse = useCallback(\n\t\t( clientId ) => {\n\t\t\tif ( ! clientId ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsetExpandedState( { type: 'collapse', clientId } );\n\t\t},\n\t\t[ setExpandedState ]\n\t);\n\tconst expandRow = useCallback(\n\t\t( row ) => {\n\t\t\texpand( row?.dataset?.block );\n\t\t},\n\t\t[ expand ]\n\t);\n\tconst collapseRow = useCallback(\n\t\t( row ) => {\n\t\t\tcollapse( row?.dataset?.block );\n\t\t},\n\t\t[ collapse ]\n\t);\n\n\tconst contextValue = useMemo(\n\t\t() => ( {\n\t\t\t__experimentalFeatures,\n\t\t\t__experimentalPersistentListViewFeatures,\n\t\t\t__experimentalHideContainerBlockActions,\n\t\t\tisTreeGridMounted: isMounted.current,\n\t\t\tdraggedClientIds,\n\t\t\texpandedState,\n\t\t\texpand,\n\t\t\tcollapse,\n\t\t} ),\n\t\t[\n\t\t\t__experimentalFeatures,\n\t\t\t__experimentalPersistentListViewFeatures,\n\t\t\t__experimentalHideContainerBlockActions,\n\t\t\tisMounted.current,\n\t\t\tdraggedClientIds,\n\t\t\texpandedState,\n\t\t\texpand,\n\t\t\tcollapse,\n\t\t]\n\t);\n\n\treturn (\n\t\t<AsyncModeProvider value={ true }>\n\t\t\t<ListViewDropIndicator\n\t\t\t\tlistViewRef={ elementRef }\n\t\t\t\tblockDropTarget={ blockDropTarget }\n\t\t\t/>\n\t\t\t<TreeGrid\n\t\t\t\tclassName=\"block-editor-list-view-tree\"\n\t\t\t\taria-label={ __( 'Block navigation structure' ) }\n\t\t\t\tref={ treeGridRef }\n\t\t\t\tonCollapseRow={ collapseRow }\n\t\t\t\tonExpandRow={ expandRow }\n\t\t\t>\n\t\t\t\t<ListViewContext.Provider value={ contextValue }>\n\t\t\t\t\t<ListViewBranch\n\t\t\t\t\t\tblocks={ clientIdsTree }\n\t\t\t\t\t\tselectBlock={ selectEditorBlock }\n\t\t\t\t\t\tshowNestedBlocks={ showNestedBlocks }\n\t\t\t\t\t\tshowBlockMovers={ showBlockMovers }\n\t\t\t\t\t\tfixedListWindow={ fixedListWindow }\n\t\t\t\t\t\tselectedClientIds={ selectedClientIds }\n\t\t\t\t\t\t{ ...props }\n\t\t\t\t\t/>\n\t\t\t\t</ListViewContext.Provider>\n\t\t\t</TreeGrid>\n\t\t</AsyncModeProvider>\n\t);\n}\nexport default forwardRef( ListView );\n"]}
|
|
@@ -31,7 +31,7 @@ export default function ListViewLeaf({
|
|
|
31
31
|
isSelected,
|
|
32
32
|
adjustScrolling: false,
|
|
33
33
|
enableAnimation: true,
|
|
34
|
-
triggerAnimationOnChange: path
|
|
34
|
+
triggerAnimationOnChange: path
|
|
35
35
|
});
|
|
36
36
|
return createElement(AnimatedTreeGridRow, _extends({
|
|
37
37
|
ref: ref,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/block-editor/src/components/list-view/leaf.js"],"names":["animated","classnames","__experimentalTreeGridRow","TreeGridRow","useMovingAnimation","AnimatedTreeGridRow","ListViewLeaf","isSelected","position","level","rowCount","children","className","path","props","ref","adjustScrolling","enableAnimation","triggerAnimationOnChange"
|
|
1
|
+
{"version":3,"sources":["@wordpress/block-editor/src/components/list-view/leaf.js"],"names":["animated","classnames","__experimentalTreeGridRow","TreeGridRow","useMovingAnimation","AnimatedTreeGridRow","ListViewLeaf","isSelected","position","level","rowCount","children","className","path","props","ref","adjustScrolling","enableAnimation","triggerAnimationOnChange"],"mappings":";;;AAAA;AACA;AACA;AACA,SAASA,QAAT,QAAyB,mBAAzB;AACA,OAAOC,UAAP,MAAuB,YAAvB;AAEA;AACA;AACA;;AACA,SAASC,yBAAyB,IAAIC,WAAtC,QAAyD,uBAAzD;AAEA;AACA;AACA;;AACA,OAAOC,kBAAP,MAA+B,yBAA/B;AAEA,MAAMC,mBAAmB,GAAGL,QAAQ,CAAEG,WAAF,CAApC;AAEA,eAAe,SAASG,YAAT,CAAuB;AACrCC,EAAAA,UADqC;AAErCC,EAAAA,QAFqC;AAGrCC,EAAAA,KAHqC;AAIrCC,EAAAA,QAJqC;AAKrCC,EAAAA,QALqC;AAMrCC,EAAAA,SANqC;AAOrCC,EAAAA,IAPqC;AAQrC,KAAGC;AARkC,CAAvB,EASX;AACH,QAAMC,GAAG,GAAGX,kBAAkB,CAAE;AAC/BG,IAAAA,UAD+B;AAE/BS,IAAAA,eAAe,EAAE,KAFc;AAG/BC,IAAAA,eAAe,EAAE,IAHc;AAI/BC,IAAAA,wBAAwB,EAAEL;AAJK,GAAF,CAA9B;AAOA,SACC,cAAC,mBAAD;AACC,IAAA,GAAG,EAAGE,GADP;AAEC,IAAA,SAAS,EAAGd,UAAU,CAAE,6BAAF,EAAiCW,SAAjC,CAFvB;AAGC,IAAA,KAAK,EAAGH,KAHT;AAIC,IAAA,aAAa,EAAGD,QAJjB;AAKC,IAAA,OAAO,EAAGE;AALX,KAMMI,KANN,GAQGH,QARH,CADD;AAYA","sourcesContent":["/**\n * External dependencies\n */\nimport { animated } from '@react-spring/web';\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport { __experimentalTreeGridRow as TreeGridRow } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport useMovingAnimation from '../use-moving-animation';\n\nconst AnimatedTreeGridRow = animated( TreeGridRow );\n\nexport default function ListViewLeaf( {\n\tisSelected,\n\tposition,\n\tlevel,\n\trowCount,\n\tchildren,\n\tclassName,\n\tpath,\n\t...props\n} ) {\n\tconst ref = useMovingAnimation( {\n\t\tisSelected,\n\t\tadjustScrolling: false,\n\t\tenableAnimation: true,\n\t\ttriggerAnimationOnChange: path,\n\t} );\n\n\treturn (\n\t\t<AnimatedTreeGridRow\n\t\t\tref={ ref }\n\t\t\tclassName={ classnames( 'block-editor-list-view-leaf', className ) }\n\t\t\tlevel={ level }\n\t\t\tpositionInSet={ position }\n\t\t\tsetSize={ rowCount }\n\t\t\t{ ...props }\n\t\t>\n\t\t\t{ children }\n\t\t</AnimatedTreeGridRow>\n\t);\n}\n"]}
|
|
@@ -6,69 +6,19 @@ import { useSelect } from '@wordpress/data';
|
|
|
6
6
|
* Internal dependencies
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
|
-
import { isClientIdSelected } from './utils';
|
|
10
9
|
import { store as blockEditorStore } from '../../store';
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
const {
|
|
14
|
-
getBlockHierarchyRootClientId,
|
|
15
|
-
__unstableGetClientIdsTree,
|
|
16
|
-
__unstableGetClientIdWithClientIdsTree
|
|
17
|
-
} = select(blockEditorStore);
|
|
18
|
-
|
|
19
|
-
if (blocks) {
|
|
20
|
-
return blocks;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
const isSingleBlockSelected = selectedClientIds && !Array.isArray(selectedClientIds);
|
|
24
|
-
|
|
25
|
-
if (!showOnlyCurrentHierarchy || !isSingleBlockSelected) {
|
|
26
|
-
return __unstableGetClientIdsTree();
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
const rootBlock = __unstableGetClientIdWithClientIdsTree(getBlockHierarchyRootClientId(selectedClientIds));
|
|
30
|
-
|
|
31
|
-
if (!rootBlock) {
|
|
32
|
-
return __unstableGetClientIdsTree();
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
const hasHierarchy = !isClientIdSelected(rootBlock.clientId, selectedClientIds) || rootBlock.innerBlocks && rootBlock.innerBlocks.length !== 0;
|
|
36
|
-
|
|
37
|
-
if (hasHierarchy) {
|
|
38
|
-
return [rootBlock];
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
return __unstableGetClientIdsTree();
|
|
42
|
-
}, [blocks, selectedClientIds, showOnlyCurrentHierarchy]);
|
|
43
|
-
|
|
44
|
-
export default function useListViewClientIds(blocks, showOnlyCurrentHierarchy, __experimentalPersistentListViewFeatures) {
|
|
45
|
-
const {
|
|
46
|
-
selectedClientIds,
|
|
47
|
-
draggedClientIds
|
|
48
|
-
} = useSelect(select => {
|
|
10
|
+
export default function useListViewClientIds(blocks) {
|
|
11
|
+
return useSelect(select => {
|
|
49
12
|
const {
|
|
50
|
-
|
|
13
|
+
getDraggedBlockClientIds,
|
|
51
14
|
getSelectedBlockClientIds,
|
|
52
|
-
|
|
15
|
+
__unstableGetClientIdsTree
|
|
53
16
|
} = select(blockEditorStore);
|
|
54
|
-
|
|
55
|
-
if (__experimentalPersistentListViewFeatures) {
|
|
56
|
-
return {
|
|
57
|
-
selectedClientIds: getSelectedBlockClientIds(),
|
|
58
|
-
draggedClientIds: getDraggedBlockClientIds()
|
|
59
|
-
};
|
|
60
|
-
}
|
|
61
|
-
|
|
62
17
|
return {
|
|
63
|
-
selectedClientIds:
|
|
64
|
-
draggedClientIds: getDraggedBlockClientIds()
|
|
18
|
+
selectedClientIds: getSelectedBlockClientIds(),
|
|
19
|
+
draggedClientIds: getDraggedBlockClientIds(),
|
|
20
|
+
clientIdsTree: blocks ? blocks : __unstableGetClientIdsTree()
|
|
65
21
|
};
|
|
66
|
-
}, [
|
|
67
|
-
const clientIdsTree = useListViewClientIdsTree(blocks, selectedClientIds, showOnlyCurrentHierarchy);
|
|
68
|
-
return {
|
|
69
|
-
clientIdsTree,
|
|
70
|
-
selectedClientIds,
|
|
71
|
-
draggedClientIds
|
|
72
|
-
};
|
|
22
|
+
}, [blocks]);
|
|
73
23
|
}
|
|
74
24
|
//# sourceMappingURL=use-list-view-client-ids.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/block-editor/src/components/list-view/use-list-view-client-ids.js"],"names":["useSelect","
|
|
1
|
+
{"version":3,"sources":["@wordpress/block-editor/src/components/list-view/use-list-view-client-ids.js"],"names":["useSelect","store","blockEditorStore","useListViewClientIds","blocks","select","getDraggedBlockClientIds","getSelectedBlockClientIds","__unstableGetClientIdsTree","selectedClientIds","draggedClientIds","clientIdsTree"],"mappings":"AAAA;AACA;AACA;AAEA,SAASA,SAAT,QAA0B,iBAA1B;AAEA;AACA;AACA;;AACA,SAASC,KAAK,IAAIC,gBAAlB,QAA0C,aAA1C;AAEA,eAAe,SAASC,oBAAT,CAA+BC,MAA/B,EAAwC;AACtD,SAAOJ,SAAS,CACbK,MAAF,IAAc;AACb,UAAM;AACLC,MAAAA,wBADK;AAELC,MAAAA,yBAFK;AAGLC,MAAAA;AAHK,QAIFH,MAAM,CAAEH,gBAAF,CAJV;AAMA,WAAO;AACNO,MAAAA,iBAAiB,EAAEF,yBAAyB,EADtC;AAENG,MAAAA,gBAAgB,EAAEJ,wBAAwB,EAFpC;AAGNK,MAAAA,aAAa,EAAEP,MAAM,GAAGA,MAAH,GAAYI,0BAA0B;AAHrD,KAAP;AAKA,GAbc,EAcf,CAAEJ,MAAF,CAde,CAAhB;AAgBA","sourcesContent":["/**\n * WordPress dependencies\n */\n\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\nexport default function useListViewClientIds( blocks ) {\n\treturn useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetDraggedBlockClientIds,\n\t\t\t\tgetSelectedBlockClientIds,\n\t\t\t\t__unstableGetClientIdsTree,\n\t\t\t} = select( blockEditorStore );\n\n\t\t\treturn {\n\t\t\t\tselectedClientIds: getSelectedBlockClientIds(),\n\t\t\t\tdraggedClientIds: getDraggedBlockClientIds(),\n\t\t\t\tclientIdsTree: blocks ? blocks : __unstableGetClientIdsTree(),\n\t\t\t};\n\t\t},\n\t\t[ blocks ]\n\t);\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/block-editor/src/components/rich-text/embed-handler-picker.native.js"],"names":["noop","forwardRef","useRef","useImperativeHandle","memo","useCallback","Picker","__","DEFAULT_PICKER_OPTIONS","id","label","value","onSelect","EmbedHandlerPicker","ref","pickerRef","pickerOptions","current","onPickerSelect","selectedItem","find","item","presentPicker","createEmbed","createLink"],"mappings":";;AAAA;AACA;AACA;AACA,SAASA,IAAT,QAAqB,QAArB;AAEA;AACA;AACA;;AACA,SACCC,UADD,EAECC,MAFD,EAGCC,mBAHD,EAICC,IAJD,EAKCC,WALD,QAMO,oBANP;AAOA,SAASC,MAAT,QAAuB,uBAAvB;AACA,SAASC,EAAT,QAAmB,iBAAnB;AAEA,MAAMC,sBAAsB,GAAG,CAC9B;AACCC,EAAAA,EAAE,EAAE,aADL;AAECC,EAAAA,KAAK,EAAEH,EAAE,CAAE,cAAF,CAFV;AAGCI,EAAAA,KAAK,EAAE,aAHR;AAICC,EAAAA,QAAQ,EAAEZ;AAJX,CAD8B,EAO9B;AACCS,EAAAA,EAAE,EAAE,YADL;AAECC,EAAAA,KAAK,EAAEH,EAAE,CAAE,aAAF,CAFV;AAGCI,EAAAA,KAAK,EAAE,YAHR;AAICC,EAAAA,QAAQ,EAAEZ;AAJX,CAP8B,CAA/B;AAeA,MAAMa,kBAAkB,GAAGZ,UAAU,CAAE,CAAE,EAAF,EAAMa,GAAN,KAAe;AACrD,QAAMC,SAAS,GAAGb,MAAM,EAAxB;AACA,QAAMc,aAAa,GAAGd,MAAM,CAAEM,sBAAF,CAAN,CAAiCS,OAAvD;AAEA,QAAMC,cAAc,GAAGb,WAAW,CAC/BM,KAAF,IAAa;AACZ,UAAMQ,YAAY,GAAGH,aAAa,CAACI,IAAd,CAClBC,IAAF,IAAYA,IAAI,CAACV,KAAL,KAAeA,KADP,CAArB;AAGAQ,IAAAA,YAAY,CAACP,QAAb;AACA,GANgC,EAOjC,CAAEI,aAAF,CAPiC,CAAlC;AAUAb,EAAAA,mBAAmB,CAAEW,GAAF,EAAO,OAAQ;AACjCQ,IAAAA,aAAa,EAAE,CAAE;AAAEC,MAAAA,WAAF;AAAeC,MAAAA;AAAf,KAAF,KAAmC;AAAA;;AACjDR,MAAAA,aAAa,CAAE,CAAF,CAAb,CAAmBJ,QAAnB,GAA8BW,WAA9B;AACAP,MAAAA,aAAa,CAAE,CAAF,CAAb,CAAmBJ,QAAnB,GAA8BY,UAA9B;AACA,4BAAAT,SAAS,CAACE,OAAV,0EAAmBK,aAAnB;AACA;AALgC,GAAR,CAAP,CAAnB;AAQA,SACC,cAAC,MAAD;AACC,IAAA,GAAG,EAAGP,SADP;AAEC,IAAA,OAAO,EAAGC,aAFX;AAGC,IAAA,QAAQ,EAAGE,cAHZ;AAIC,IAAA,
|
|
1
|
+
{"version":3,"sources":["@wordpress/block-editor/src/components/rich-text/embed-handler-picker.native.js"],"names":["noop","forwardRef","useRef","useImperativeHandle","memo","useCallback","Picker","__","DEFAULT_PICKER_OPTIONS","id","label","value","onSelect","EmbedHandlerPicker","ref","pickerRef","pickerOptions","current","onPickerSelect","selectedItem","find","item","presentPicker","createEmbed","createLink"],"mappings":";;AAAA;AACA;AACA;AACA,SAASA,IAAT,QAAqB,QAArB;AAEA;AACA;AACA;;AACA,SACCC,UADD,EAECC,MAFD,EAGCC,mBAHD,EAICC,IAJD,EAKCC,WALD,QAMO,oBANP;AAOA,SAASC,MAAT,QAAuB,uBAAvB;AACA,SAASC,EAAT,QAAmB,iBAAnB;AAEA,MAAMC,sBAAsB,GAAG,CAC9B;AACCC,EAAAA,EAAE,EAAE,aADL;AAECC,EAAAA,KAAK,EAAEH,EAAE,CAAE,cAAF,CAFV;AAGCI,EAAAA,KAAK,EAAE,aAHR;AAICC,EAAAA,QAAQ,EAAEZ;AAJX,CAD8B,EAO9B;AACCS,EAAAA,EAAE,EAAE,YADL;AAECC,EAAAA,KAAK,EAAEH,EAAE,CAAE,aAAF,CAFV;AAGCI,EAAAA,KAAK,EAAE,YAHR;AAICC,EAAAA,QAAQ,EAAEZ;AAJX,CAP8B,CAA/B;AAeA,MAAMa,kBAAkB,GAAGZ,UAAU,CAAE,CAAE,EAAF,EAAMa,GAAN,KAAe;AACrD,QAAMC,SAAS,GAAGb,MAAM,EAAxB;AACA,QAAMc,aAAa,GAAGd,MAAM,CAAEM,sBAAF,CAAN,CAAiCS,OAAvD;AAEA,QAAMC,cAAc,GAAGb,WAAW,CAC/BM,KAAF,IAAa;AACZ,UAAMQ,YAAY,GAAGH,aAAa,CAACI,IAAd,CAClBC,IAAF,IAAYA,IAAI,CAACV,KAAL,KAAeA,KADP,CAArB;AAGAQ,IAAAA,YAAY,CAACP,QAAb;AACA,GANgC,EAOjC,CAAEI,aAAF,CAPiC,CAAlC;AAUAb,EAAAA,mBAAmB,CAAEW,GAAF,EAAO,OAAQ;AACjCQ,IAAAA,aAAa,EAAE,CAAE;AAAEC,MAAAA,WAAF;AAAeC,MAAAA;AAAf,KAAF,KAAmC;AAAA;;AACjDR,MAAAA,aAAa,CAAE,CAAF,CAAb,CAAmBJ,QAAnB,GAA8BW,WAA9B;AACAP,MAAAA,aAAa,CAAE,CAAF,CAAb,CAAmBJ,QAAnB,GAA8BY,UAA9B;AACA,4BAAAT,SAAS,CAACE,OAAV,0EAAmBK,aAAnB;AACA;AALgC,GAAR,CAAP,CAAnB;AAQA,SACC,cAAC,MAAD;AACC,IAAA,GAAG,EAAGP,SADP;AAEC,IAAA,OAAO,EAAGC,aAFX;AAGC,IAAA,QAAQ,EAAGE,cAHZ;AAIC,IAAA,MAAM,EAAC,sBAJR;AAKC,IAAA,gBAAgB,MALjB;AAMC,IAAA,SAAS;AANV,IADD;AAUA,CAhCoC,CAArC;AAkCA,eAAed,IAAI,CAAES,kBAAF,CAAnB","sourcesContent":["/**\n * External dependencies\n */\nimport { noop } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tforwardRef,\n\tuseRef,\n\tuseImperativeHandle,\n\tmemo,\n\tuseCallback,\n} from '@wordpress/element';\nimport { Picker } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\n\nconst DEFAULT_PICKER_OPTIONS = [\n\t{\n\t\tid: 'createEmbed',\n\t\tlabel: __( 'Create embed' ),\n\t\tvalue: 'createEmbed',\n\t\tonSelect: noop,\n\t},\n\t{\n\t\tid: 'createLink',\n\t\tlabel: __( 'Create link' ),\n\t\tvalue: 'createLink',\n\t\tonSelect: noop,\n\t},\n];\n\nconst EmbedHandlerPicker = forwardRef( ( {}, ref ) => {\n\tconst pickerRef = useRef();\n\tconst pickerOptions = useRef( DEFAULT_PICKER_OPTIONS ).current;\n\n\tconst onPickerSelect = useCallback(\n\t\t( value ) => {\n\t\t\tconst selectedItem = pickerOptions.find(\n\t\t\t\t( item ) => item.value === value\n\t\t\t);\n\t\t\tselectedItem.onSelect();\n\t\t},\n\t\t[ pickerOptions ]\n\t);\n\n\tuseImperativeHandle( ref, () => ( {\n\t\tpresentPicker: ( { createEmbed, createLink } ) => {\n\t\t\tpickerOptions[ 0 ].onSelect = createEmbed;\n\t\t\tpickerOptions[ 1 ].onSelect = createLink;\n\t\t\tpickerRef.current?.presentPicker();\n\t\t},\n\t} ) );\n\n\treturn (\n\t\t<Picker\n\t\t\tref={ pickerRef }\n\t\t\toptions={ pickerOptions }\n\t\t\tonChange={ onPickerSelect }\n\t\t\ttestID=\"embed-handler-picker\"\n\t\t\thideCancelButton\n\t\t\tleftAlign\n\t\t/>\n\t);\n} );\n\nexport default memo( EmbedHandlerPicker );\n"]}
|
|
@@ -3,7 +3,12 @@ import { createElement } from "@wordpress/element";
|
|
|
3
3
|
/**
|
|
4
4
|
* WordPress dependencies
|
|
5
5
|
*/
|
|
6
|
-
import { getActiveFormat, getActiveObject } from '@wordpress/rich-text';
|
|
6
|
+
import { getActiveFormat, getActiveObject, isCollapsed } from '@wordpress/rich-text';
|
|
7
|
+
/**
|
|
8
|
+
* External dependencies
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import { find } from 'lodash';
|
|
7
12
|
export default function FormatEdit({
|
|
8
13
|
formatTypes,
|
|
9
14
|
onChange,
|
|
@@ -22,9 +27,29 @@ export default function FormatEdit({
|
|
|
22
27
|
}
|
|
23
28
|
|
|
24
29
|
const activeFormat = getActiveFormat(value, name);
|
|
25
|
-
|
|
30
|
+
let isActive = activeFormat !== undefined;
|
|
26
31
|
const activeObject = getActiveObject(value);
|
|
27
|
-
const isObjectActive = activeObject !== undefined && activeObject.type === name;
|
|
32
|
+
const isObjectActive = activeObject !== undefined && activeObject.type === name; // Edge case: un-collapsed link formats.
|
|
33
|
+
// If there is a missing link format at either end of the selection
|
|
34
|
+
// then we shouldn't show the Edit UI because the selection has exceeded
|
|
35
|
+
// the bounds of the link format.
|
|
36
|
+
// Also if the format objects don't match then we're dealing with two separate
|
|
37
|
+
// links so we should not allow the link to be modified over the top.
|
|
38
|
+
|
|
39
|
+
if (name === 'core/link' && !isCollapsed(value)) {
|
|
40
|
+
const formats = value.formats;
|
|
41
|
+
const linkFormatAtStart = find(formats[value.start], {
|
|
42
|
+
type: 'core/link'
|
|
43
|
+
});
|
|
44
|
+
const linkFormatAtEnd = find(formats[value.end - 1], {
|
|
45
|
+
type: 'core/link'
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
if (!linkFormatAtStart || !linkFormatAtEnd || linkFormatAtStart !== linkFormatAtEnd) {
|
|
49
|
+
isActive = false;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
28
53
|
return createElement(Edit, {
|
|
29
54
|
key: name,
|
|
30
55
|
isActive: isActive,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/block-editor/src/components/rich-text/format-edit.js"],"names":["getActiveFormat","getActiveObject","FormatEdit","formatTypes","onChange","onFocus","value","forwardedRef","map","settings","name","edit","Edit","activeFormat","isActive","undefined","activeObject","isObjectActive","type","attributes"],"mappings":";;AAAA;AACA;AACA;AACA,
|
|
1
|
+
{"version":3,"sources":["@wordpress/block-editor/src/components/rich-text/format-edit.js"],"names":["getActiveFormat","getActiveObject","isCollapsed","find","FormatEdit","formatTypes","onChange","onFocus","value","forwardedRef","map","settings","name","edit","Edit","activeFormat","isActive","undefined","activeObject","isObjectActive","type","formats","linkFormatAtStart","start","linkFormatAtEnd","end","attributes"],"mappings":";;AAAA;AACA;AACA;AACA,SACCA,eADD,EAECC,eAFD,EAGCC,WAHD,QAIO,sBAJP;AAKA;AACA;AACA;;AACA,SAASC,IAAT,QAAqB,QAArB;AAEA,eAAe,SAASC,UAAT,CAAqB;AACnCC,EAAAA,WADmC;AAEnCC,EAAAA,QAFmC;AAGnCC,EAAAA,OAHmC;AAInCC,EAAAA,KAJmC;AAKnCC,EAAAA;AALmC,CAArB,EAMX;AACH,SAAOJ,WAAW,CAACK,GAAZ,CAAmBC,QAAF,IAAgB;AACvC,UAAM;AAAEC,MAAAA,IAAF;AAAQC,MAAAA,IAAI,EAAEC;AAAd,QAAuBH,QAA7B;;AAEA,QAAK,CAAEG,IAAP,EAAc;AACb,aAAO,IAAP;AACA;;AAED,UAAMC,YAAY,GAAGf,eAAe,CAAEQ,KAAF,EAASI,IAAT,CAApC;AACA,QAAII,QAAQ,GAAGD,YAAY,KAAKE,SAAhC;AACA,UAAMC,YAAY,GAAGjB,eAAe,CAAEO,KAAF,CAApC;AACA,UAAMW,cAAc,GACnBD,YAAY,KAAKD,SAAjB,IAA8BC,YAAY,CAACE,IAAb,KAAsBR,IADrD,CAVuC,CAavC;AACA;AACA;AACA;AACA;AACA;;AACA,QAAKA,IAAI,KAAK,WAAT,IAAwB,CAAEV,WAAW,CAAEM,KAAF,CAA1C,EAAsD;AACrD,YAAMa,OAAO,GAAGb,KAAK,CAACa,OAAtB;AAEA,YAAMC,iBAAiB,GAAGnB,IAAI,CAAEkB,OAAO,CAAEb,KAAK,CAACe,KAAR,CAAT,EAA0B;AACvDH,QAAAA,IAAI,EAAE;AADiD,OAA1B,CAA9B;AAIA,YAAMI,eAAe,GAAGrB,IAAI,CAAEkB,OAAO,CAAEb,KAAK,CAACiB,GAAN,GAAY,CAAd,CAAT,EAA4B;AACvDL,QAAAA,IAAI,EAAE;AADiD,OAA5B,CAA5B;;AAIA,UACC,CAAEE,iBAAF,IACA,CAAEE,eADF,IAEAF,iBAAiB,KAAKE,eAHvB,EAIE;AACDR,QAAAA,QAAQ,GAAG,KAAX;AACA;AACD;;AAED,WACC,cAAC,IAAD;AACC,MAAA,GAAG,EAAGJ,IADP;AAEC,MAAA,QAAQ,EAAGI,QAFZ;AAGC,MAAA,gBAAgB,EACfA,QAAQ,GAAGD,YAAY,CAACW,UAAb,IAA2B,EAA9B,GAAmC,EAJ7C;AAMC,MAAA,cAAc,EAAGP,cANlB;AAOC,MAAA,sBAAsB,EACrBA,cAAc,GAAGD,YAAY,CAACQ,UAAb,IAA2B,EAA9B,GAAmC,EARnD;AAUC,MAAA,KAAK,EAAGlB,KAVT;AAWC,MAAA,QAAQ,EAAGF,QAXZ;AAYC,MAAA,OAAO,EAAGC,OAZX;AAaC,MAAA,UAAU,EAAGE;AAbd,MADD;AAiBA,GAxDM,CAAP;AAyDA","sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tgetActiveFormat,\n\tgetActiveObject,\n\tisCollapsed,\n} from '@wordpress/rich-text';\n/**\n * External dependencies\n */\nimport { find } from 'lodash';\n\nexport default function FormatEdit( {\n\tformatTypes,\n\tonChange,\n\tonFocus,\n\tvalue,\n\tforwardedRef,\n} ) {\n\treturn formatTypes.map( ( settings ) => {\n\t\tconst { name, edit: Edit } = settings;\n\n\t\tif ( ! Edit ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst activeFormat = getActiveFormat( value, name );\n\t\tlet isActive = activeFormat !== undefined;\n\t\tconst activeObject = getActiveObject( value );\n\t\tconst isObjectActive =\n\t\t\tactiveObject !== undefined && activeObject.type === name;\n\n\t\t// Edge case: un-collapsed link formats.\n\t\t// If there is a missing link format at either end of the selection\n\t\t// then we shouldn't show the Edit UI because the selection has exceeded\n\t\t// the bounds of the link format.\n\t\t// Also if the format objects don't match then we're dealing with two separate\n\t\t// links so we should not allow the link to be modified over the top.\n\t\tif ( name === 'core/link' && ! isCollapsed( value ) ) {\n\t\t\tconst formats = value.formats;\n\n\t\t\tconst linkFormatAtStart = find( formats[ value.start ], {\n\t\t\t\ttype: 'core/link',\n\t\t\t} );\n\n\t\t\tconst linkFormatAtEnd = find( formats[ value.end - 1 ], {\n\t\t\t\ttype: 'core/link',\n\t\t\t} );\n\n\t\t\tif (\n\t\t\t\t! linkFormatAtStart ||\n\t\t\t\t! linkFormatAtEnd ||\n\t\t\t\tlinkFormatAtStart !== linkFormatAtEnd\n\t\t\t) {\n\t\t\t\tisActive = false;\n\t\t\t}\n\t\t}\n\n\t\treturn (\n\t\t\t<Edit\n\t\t\t\tkey={ name }\n\t\t\t\tisActive={ isActive }\n\t\t\t\tactiveAttributes={\n\t\t\t\t\tisActive ? activeFormat.attributes || {} : {}\n\t\t\t\t}\n\t\t\t\tisObjectActive={ isObjectActive }\n\t\t\t\tactiveObjectAttributes={\n\t\t\t\t\tisObjectActive ? activeObject.attributes || {} : {}\n\t\t\t\t}\n\t\t\t\tvalue={ value }\n\t\t\t\tonChange={ onChange }\n\t\t\t\tonFocus={ onFocus }\n\t\t\t\tcontentRef={ forwardedRef }\n\t\t\t/>\n\t\t);\n\t} );\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/block-editor/src/components/rich-text/format-toolbar/index.js"],"names":["orderBy","classnames","__","ToolbarItem","DropdownMenu","Slot","chevronDown","POPOVER_PROPS","position","isAlternate","FormatToolbar","map","format","fills","length","allProps","props","hasActive","some","isActive","toggleProps","className"],"mappings":";;AAAA;AACA;AACA;AAEA,SAASA,OAAT,QAAwB,QAAxB;AACA,OAAOC,UAAP,MAAuB,YAAvB;AAEA;AACA;AACA;;AAEA,SAASC,EAAT,QAAmB,iBAAnB;AACA,SAASC,WAAT,EAAsBC,YAAtB,EAAoCC,IAApC,QAAgD,uBAAhD;AACA,SAASC,WAAT,QAA4B,kBAA5B;AAEA,MAAMC,aAAa,GAAG;AACrBC,EAAAA,QAAQ,EAAE,cADW;AAErBC,EAAAA,WAAW,EAAE;AAFQ,CAAtB;;AAKA,MAAMC,aAAa,GAAG,MAAM;AAC3B,SACC,8BACG,CAAE,MAAF,EAAU,QAAV,EAAoB,MAApB,EAA6BC,GAA7B,CAAoCC,MAAF,IACnC,cAAC,IAAD;AACC,IAAA,IAAI,EAAI,4BAA4BA,MAAQ,EAD7C;AAEC,IAAA,GAAG,EAAGA;AAFP,IADC,CADH,EAOC,cAAC,IAAD;AAAM,IAAA,IAAI,EAAC;AAAX,KACKC,KAAF,IAAa;AACd,QAAK,CAAEA,KAAK,CAACC,MAAb,EAAsB;AACrB,aAAO,IAAP;AACA;;AAED,UAAMC,QAAQ,GAAGF,KAAK,CAACF,GAAN,CAAW,CAAE,CAAE;AAAEK,MAAAA;AAAF,KAAF,CAAF,KAAqBA,KAAhC,CAAjB;AACA,UAAMC,SAAS,GAAGF,QAAQ,CAACG,IAAT,CACjB,CAAE;AAAEC,MAAAA;AAAF,KAAF,KAAoBA,QADH,CAAlB;AAIA,WACC,cAAC,WAAD,QACKC,WAAF,IACD,cAAC,YAAD;AACC,MAAA,IAAI,EAAGd;AACP;AAFD;AAGC,MAAA,KAAK,EAAGJ,EAAE,CAAE,MAAF,CAHX;AAIC,MAAA,WAAW,EAAG,EACb,GAAGkB,WADU;AAEbC,QAAAA,SAAS,EAAEpB,UAAU,CACpBmB,WAAW,CAACC,SADQ,EAEpB;AAAE,wBAAcJ;AAAhB,SAFoB;
|
|
1
|
+
{"version":3,"sources":["@wordpress/block-editor/src/components/rich-text/format-toolbar/index.js"],"names":["orderBy","classnames","__","ToolbarItem","DropdownMenu","Slot","chevronDown","POPOVER_PROPS","position","isAlternate","FormatToolbar","map","format","fills","length","allProps","props","hasActive","some","isActive","toggleProps","className","describedBy"],"mappings":";;AAAA;AACA;AACA;AAEA,SAASA,OAAT,QAAwB,QAAxB;AACA,OAAOC,UAAP,MAAuB,YAAvB;AAEA;AACA;AACA;;AAEA,SAASC,EAAT,QAAmB,iBAAnB;AACA,SAASC,WAAT,EAAsBC,YAAtB,EAAoCC,IAApC,QAAgD,uBAAhD;AACA,SAASC,WAAT,QAA4B,kBAA5B;AAEA,MAAMC,aAAa,GAAG;AACrBC,EAAAA,QAAQ,EAAE,cADW;AAErBC,EAAAA,WAAW,EAAE;AAFQ,CAAtB;;AAKA,MAAMC,aAAa,GAAG,MAAM;AAC3B,SACC,8BACG,CAAE,MAAF,EAAU,QAAV,EAAoB,MAApB,EAA6BC,GAA7B,CAAoCC,MAAF,IACnC,cAAC,IAAD;AACC,IAAA,IAAI,EAAI,4BAA4BA,MAAQ,EAD7C;AAEC,IAAA,GAAG,EAAGA;AAFP,IADC,CADH,EAOC,cAAC,IAAD;AAAM,IAAA,IAAI,EAAC;AAAX,KACKC,KAAF,IAAa;AACd,QAAK,CAAEA,KAAK,CAACC,MAAb,EAAsB;AACrB,aAAO,IAAP;AACA;;AAED,UAAMC,QAAQ,GAAGF,KAAK,CAACF,GAAN,CAAW,CAAE,CAAE;AAAEK,MAAAA;AAAF,KAAF,CAAF,KAAqBA,KAAhC,CAAjB;AACA,UAAMC,SAAS,GAAGF,QAAQ,CAACG,IAAT,CACjB,CAAE;AAAEC,MAAAA;AAAF,KAAF,KAAoBA,QADH,CAAlB;AAIA,WACC,cAAC,WAAD,QACKC,WAAF,IACD,cAAC,YAAD;AACC,MAAA,IAAI,EAAGd;AACP;AAFD;AAGC,MAAA,KAAK,EAAGJ,EAAE,CAAE,MAAF,CAHX;AAIC,MAAA,WAAW,EAAG,EACb,GAAGkB,WADU;AAEbC,QAAAA,SAAS,EAAEpB,UAAU,CACpBmB,WAAW,CAACC,SADQ,EAEpB;AAAE,wBAAcJ;AAAhB,SAFoB,CAFR;AAMbK,QAAAA,WAAW,EAAEpB,EAAE,CACd,2BADc;AANF,OAJf;AAcC,MAAA,QAAQ,EAAGF,OAAO,CACjBa,KAAK,CAACF,GAAN,CAAW,CAAE,CAAE;AAAEK,QAAAA;AAAF,OAAF,CAAF,KAAqBA,KAAhC,CADiB,EAEjB,OAFiB,CAdnB;AAkBC,MAAA,YAAY,EAAGT;AAlBhB,MAFF,CADD;AA0BA,GArCF,CAPD,CADD;AAiDA,CAlDD;;AAoDA,eAAeG,aAAf","sourcesContent":["/**\n * External dependencies\n */\n\nimport { orderBy } from 'lodash';\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\n\nimport { __ } from '@wordpress/i18n';\nimport { ToolbarItem, DropdownMenu, Slot } from '@wordpress/components';\nimport { chevronDown } from '@wordpress/icons';\n\nconst POPOVER_PROPS = {\n\tposition: 'bottom right',\n\tisAlternate: true,\n};\n\nconst FormatToolbar = () => {\n\treturn (\n\t\t<>\n\t\t\t{ [ 'bold', 'italic', 'link' ].map( ( format ) => (\n\t\t\t\t<Slot\n\t\t\t\t\tname={ `RichText.ToolbarControls.${ format }` }\n\t\t\t\t\tkey={ format }\n\t\t\t\t/>\n\t\t\t) ) }\n\t\t\t<Slot name=\"RichText.ToolbarControls\">\n\t\t\t\t{ ( fills ) => {\n\t\t\t\t\tif ( ! fills.length ) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst allProps = fills.map( ( [ { props } ] ) => props );\n\t\t\t\t\tconst hasActive = allProps.some(\n\t\t\t\t\t\t( { isActive } ) => isActive\n\t\t\t\t\t);\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<ToolbarItem>\n\t\t\t\t\t\t\t{ ( toggleProps ) => (\n\t\t\t\t\t\t\t\t<DropdownMenu\n\t\t\t\t\t\t\t\t\ticon={ chevronDown }\n\t\t\t\t\t\t\t\t\t/* translators: button label text should, if possible, be under 16 characters. */\n\t\t\t\t\t\t\t\t\tlabel={ __( 'More' ) }\n\t\t\t\t\t\t\t\t\ttoggleProps={ {\n\t\t\t\t\t\t\t\t\t\t...toggleProps,\n\t\t\t\t\t\t\t\t\t\tclassName: classnames(\n\t\t\t\t\t\t\t\t\t\t\ttoggleProps.className,\n\t\t\t\t\t\t\t\t\t\t\t{ 'is-pressed': hasActive }\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\tdescribedBy: __(\n\t\t\t\t\t\t\t\t\t\t\t'Displays more block tools'\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\tcontrols={ orderBy(\n\t\t\t\t\t\t\t\t\t\tfills.map( ( [ { props } ] ) => props ),\n\t\t\t\t\t\t\t\t\t\t'title'\n\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\tpopoverProps={ POPOVER_PROPS }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t</ToolbarItem>\n\t\t\t\t\t);\n\t\t\t\t} }\n\t\t\t</Slot>\n\t\t</>\n\t);\n};\n\nexport default FormatToolbar;\n"]}
|
|
@@ -53,7 +53,8 @@ class URLInput extends Component {
|
|
|
53
53
|
selectedSuggestion
|
|
54
54
|
} = this.state;
|
|
55
55
|
const {
|
|
56
|
-
value
|
|
56
|
+
value,
|
|
57
|
+
__experimentalShowInitialSuggestions = false
|
|
57
58
|
} = this.props; // only have to worry about scrolling selected suggestion into view
|
|
58
59
|
// when already expanded
|
|
59
60
|
|
|
@@ -65,11 +66,17 @@ class URLInput extends Component {
|
|
|
65
66
|
this.props.setTimeout(() => {
|
|
66
67
|
this.scrollingIntoView = false;
|
|
67
68
|
}, 100);
|
|
68
|
-
} //
|
|
69
|
+
} // Update suggestions when the value changes
|
|
69
70
|
|
|
70
71
|
|
|
71
|
-
if (prevProps.value !== value && this.
|
|
72
|
-
|
|
72
|
+
if (prevProps.value !== value && !this.props.disableSuggestions && !this.isUpdatingSuggestions) {
|
|
73
|
+
if (value !== null && value !== void 0 && value.length) {
|
|
74
|
+
// If the new value is not empty we need to update with suggestions for it
|
|
75
|
+
this.updateSuggestions(value);
|
|
76
|
+
} else if (__experimentalShowInitialSuggestions) {
|
|
77
|
+
// If the new value is empty and we can show initial suggestions, then show initial suggestions
|
|
78
|
+
this.updateSuggestions();
|
|
79
|
+
}
|
|
73
80
|
}
|
|
74
81
|
}
|
|
75
82
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/block-editor/src/components/url-input/index.js"],"names":["debounce","isFunction","classnames","scrollIntoView","__","sprintf","_n","Component","createRef","UP","DOWN","ENTER","TAB","BaseControl","Button","Spinner","withSpokenMessages","Popover","withInstanceId","withSafeTimeout","compose","withSelect","isURL","store","blockEditorStore","URLInput","constructor","props","onChange","bind","onFocus","onKeyDown","selectLink","handleOnClick","bindSuggestionNode","autocompleteRef","inputRef","updateSuggestions","suggestionNodes","isUpdatingSuggestions","state","suggestions","showSuggestions","selectedSuggestion","suggestionsListboxId","suggestionOptionIdPrefix","componentDidUpdate","prevProps","value","scrollingIntoView","current","onlyScrollIfNeeded","setTimeout","shouldShowInitialSuggestions","componentDidMount","componentWillUnmount","suggestionsRequest","cancel","index","ref","__experimentalShowInitialSuggestions","length","__experimentalFetchLinkSuggestions","fetchLinkSuggestions","__experimentalHandleURLSuggestions","handleURLSuggestions","isInitialSuggestions","trim","setState","loading","request","then","debouncedSpeak","catch","event","inputValue","target","disableSuggestions","keyCode","selectionStart","preventDefault","setSelectionRange","onSubmit","suggestion","previousIndex","nextIndex","speak","url","focus","getDerivedStateFromProps","instanceId","shouldShowSuggestions","hasValue","render","renderControl","renderSuggestions","label","className","isFullWidth","placeholder","__experimentalRenderControl","controlProps","id","inputProps","required","type","role","undefined","__experimentalRenderSuggestions","suggestionsListProps","buildSuggestionItemProps","tabIndex","isLoading","handleSuggestionClick","map","title","select","getSettings"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { debounce, isFunction } from 'lodash';\nimport classnames from 'classnames';\nimport scrollIntoView from 'dom-scroll-into-view';\n\n/**\n * WordPress dependencies\n */\nimport { __, sprintf, _n } from '@wordpress/i18n';\nimport { Component, createRef } from '@wordpress/element';\nimport { UP, DOWN, ENTER, TAB } from '@wordpress/keycodes';\nimport {\n\tBaseControl,\n\tButton,\n\tSpinner,\n\twithSpokenMessages,\n\tPopover,\n} from '@wordpress/components';\nimport { withInstanceId, withSafeTimeout, compose } from '@wordpress/compose';\nimport { withSelect } from '@wordpress/data';\nimport { isURL } from '@wordpress/url';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\nclass URLInput extends Component {\n\tconstructor( props ) {\n\t\tsuper( props );\n\n\t\tthis.onChange = this.onChange.bind( this );\n\t\tthis.onFocus = this.onFocus.bind( this );\n\t\tthis.onKeyDown = this.onKeyDown.bind( this );\n\t\tthis.selectLink = this.selectLink.bind( this );\n\t\tthis.handleOnClick = this.handleOnClick.bind( this );\n\t\tthis.bindSuggestionNode = this.bindSuggestionNode.bind( this );\n\t\tthis.autocompleteRef = props.autocompleteRef || createRef();\n\t\tthis.inputRef = createRef();\n\t\tthis.updateSuggestions = debounce(\n\t\t\tthis.updateSuggestions.bind( this ),\n\t\t\t200\n\t\t);\n\n\t\tthis.suggestionNodes = [];\n\n\t\tthis.isUpdatingSuggestions = false;\n\n\t\tthis.state = {\n\t\t\tsuggestions: [],\n\t\t\tshowSuggestions: false,\n\t\t\tselectedSuggestion: null,\n\n\t\t\tsuggestionsListboxId: '',\n\t\t\tsuggestionOptionIdPrefix: '',\n\t\t};\n\t}\n\n\tcomponentDidUpdate( prevProps ) {\n\t\tconst { showSuggestions, selectedSuggestion } = this.state;\n\t\tconst { value } = this.props;\n\n\t\t// only have to worry about scrolling selected suggestion into view\n\t\t// when already expanded\n\t\tif (\n\t\t\tshowSuggestions &&\n\t\t\tselectedSuggestion !== null &&\n\t\t\tthis.suggestionNodes[ selectedSuggestion ] &&\n\t\t\t! this.scrollingIntoView\n\t\t) {\n\t\t\tthis.scrollingIntoView = true;\n\t\t\tscrollIntoView(\n\t\t\t\tthis.suggestionNodes[ selectedSuggestion ],\n\t\t\t\tthis.autocompleteRef.current,\n\t\t\t\t{\n\t\t\t\t\tonlyScrollIfNeeded: true,\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tthis.props.setTimeout( () => {\n\t\t\t\tthis.scrollingIntoView = false;\n\t\t\t}, 100 );\n\t\t}\n\n\t\t// Only attempt an update on suggestions if the input value has actually changed.\n\t\tif (\n\t\t\tprevProps.value !== value &&\n\t\t\tthis.shouldShowInitialSuggestions()\n\t\t) {\n\t\t\tthis.updateSuggestions();\n\t\t}\n\t}\n\n\tcomponentDidMount() {\n\t\tif ( this.shouldShowInitialSuggestions() ) {\n\t\t\tthis.updateSuggestions();\n\t\t}\n\t}\n\n\tcomponentWillUnmount() {\n\t\tthis.suggestionsRequest?.cancel?.();\n\t\tdelete this.suggestionsRequest;\n\t}\n\n\tbindSuggestionNode( index ) {\n\t\treturn ( ref ) => {\n\t\t\tthis.suggestionNodes[ index ] = ref;\n\t\t};\n\t}\n\n\tshouldShowInitialSuggestions() {\n\t\tconst { suggestions } = this.state;\n\t\tconst {\n\t\t\t__experimentalShowInitialSuggestions = false,\n\t\t\tvalue,\n\t\t} = this.props;\n\t\treturn (\n\t\t\t! this.isUpdatingSuggestions &&\n\t\t\t__experimentalShowInitialSuggestions &&\n\t\t\t! ( value && value.length ) &&\n\t\t\t! ( suggestions && suggestions.length )\n\t\t);\n\t}\n\n\tupdateSuggestions( value = '' ) {\n\t\tconst {\n\t\t\t__experimentalFetchLinkSuggestions: fetchLinkSuggestions,\n\t\t\t__experimentalHandleURLSuggestions: handleURLSuggestions,\n\t\t} = this.props;\n\n\t\tif ( ! fetchLinkSuggestions ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Initial suggestions may only show if there is no value\n\t\t// (note: this includes whitespace).\n\t\tconst isInitialSuggestions = ! value?.length;\n\n\t\t// Trim only now we've determined whether or not it originally had a \"length\"\n\t\t// (even if that value was all whitespace).\n\t\tvalue = value.trim();\n\n\t\t// Allow a suggestions request if:\n\t\t// - there are at least 2 characters in the search input (except manual searches where\n\t\t// search input length is not required to trigger a fetch)\n\t\t// - this is a direct entry (eg: a URL)\n\t\tif (\n\t\t\t! isInitialSuggestions &&\n\t\t\t( value.length < 2 || ( ! handleURLSuggestions && isURL( value ) ) )\n\t\t) {\n\t\t\tthis.setState( {\n\t\t\t\tshowSuggestions: false,\n\t\t\t\tselectedSuggestion: null,\n\t\t\t\tloading: false,\n\t\t\t} );\n\n\t\t\treturn;\n\t\t}\n\n\t\tthis.isUpdatingSuggestions = true;\n\n\t\tthis.setState( {\n\t\t\tselectedSuggestion: null,\n\t\t\tloading: true,\n\t\t} );\n\n\t\tconst request = fetchLinkSuggestions( value, {\n\t\t\tisInitialSuggestions,\n\t\t} );\n\n\t\trequest\n\t\t\t.then( ( suggestions ) => {\n\t\t\t\t// A fetch Promise doesn't have an abort option. It's mimicked by\n\t\t\t\t// comparing the request reference in on the instance, which is\n\t\t\t\t// reset or deleted on subsequent requests or unmounting.\n\t\t\t\tif ( this.suggestionsRequest !== request ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.setState( {\n\t\t\t\t\tsuggestions,\n\t\t\t\t\tloading: false,\n\t\t\t\t\tshowSuggestions: !! suggestions.length,\n\t\t\t\t} );\n\n\t\t\t\tif ( !! suggestions.length ) {\n\t\t\t\t\tthis.props.debouncedSpeak(\n\t\t\t\t\t\tsprintf(\n\t\t\t\t\t\t\t/* translators: %s: number of results. */\n\t\t\t\t\t\t\t_n(\n\t\t\t\t\t\t\t\t'%d result found, use up and down arrow keys to navigate.',\n\t\t\t\t\t\t\t\t'%d results found, use up and down arrow keys to navigate.',\n\t\t\t\t\t\t\t\tsuggestions.length\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\tsuggestions.length\n\t\t\t\t\t\t),\n\t\t\t\t\t\t'assertive'\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tthis.props.debouncedSpeak(\n\t\t\t\t\t\t__( 'No results.' ),\n\t\t\t\t\t\t'assertive'\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tthis.isUpdatingSuggestions = false;\n\t\t\t} )\n\t\t\t.catch( () => {\n\t\t\t\tif ( this.suggestionsRequest === request ) {\n\t\t\t\t\tthis.setState( {\n\t\t\t\t\t\tloading: false,\n\t\t\t\t\t} );\n\t\t\t\t\tthis.isUpdatingSuggestions = false;\n\t\t\t\t}\n\t\t\t} );\n\n\t\t// Note that this assignment is handled *before* the async search request\n\t\t// as a Promise always resolves on the next tick of the event loop.\n\t\tthis.suggestionsRequest = request;\n\t}\n\n\tonChange( event ) {\n\t\tconst inputValue = event.target.value;\n\n\t\tthis.props.onChange( inputValue );\n\t\tif ( ! this.props.disableSuggestions ) {\n\t\t\tthis.updateSuggestions( inputValue );\n\t\t}\n\t}\n\n\tonFocus() {\n\t\tconst { suggestions } = this.state;\n\t\tconst { disableSuggestions, value } = this.props;\n\n\t\t// When opening the link editor, if there's a value present, we want to load the suggestions pane with the results for this input search value\n\t\t// Don't re-run the suggestions on focus if there are already suggestions present (prevents searching again when tabbing between the input and buttons)\n\t\tif (\n\t\t\tvalue &&\n\t\t\t! disableSuggestions &&\n\t\t\t! this.isUpdatingSuggestions &&\n\t\t\t! ( suggestions && suggestions.length )\n\t\t) {\n\t\t\t// Ensure the suggestions are updated with the current input value\n\t\t\tthis.updateSuggestions( value );\n\t\t}\n\t}\n\n\tonKeyDown( event ) {\n\t\tconst {\n\t\t\tshowSuggestions,\n\t\t\tselectedSuggestion,\n\t\t\tsuggestions,\n\t\t\tloading,\n\t\t} = this.state;\n\n\t\t// If the suggestions are not shown or loading, we shouldn't handle the arrow keys\n\t\t// We shouldn't preventDefault to allow block arrow keys navigation\n\t\tif ( ! showSuggestions || ! suggestions.length || loading ) {\n\t\t\t// In the Windows version of Firefox the up and down arrows don't move the caret\n\t\t\t// within an input field like they do for Mac Firefox/Chrome/Safari. This causes\n\t\t\t// a form of focus trapping that is disruptive to the user experience. This disruption\n\t\t\t// only happens if the caret is not in the first or last position in the text input.\n\t\t\t// See: https://github.com/WordPress/gutenberg/issues/5693#issuecomment-436684747\n\t\t\tswitch ( event.keyCode ) {\n\t\t\t\t// When UP is pressed, if the caret is at the start of the text, move it to the 0\n\t\t\t\t// position.\n\t\t\t\tcase UP: {\n\t\t\t\t\tif ( 0 !== event.target.selectionStart ) {\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t// Set the input caret to position 0\n\t\t\t\t\t\tevent.target.setSelectionRange( 0, 0 );\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t// When DOWN is pressed, if the caret is not at the end of the text, move it to the\n\t\t\t\t// last position.\n\t\t\t\tcase DOWN: {\n\t\t\t\t\tif (\n\t\t\t\t\t\tthis.props.value.length !== event.target.selectionStart\n\t\t\t\t\t) {\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t// Set the input caret to the last position\n\t\t\t\t\t\tevent.target.setSelectionRange(\n\t\t\t\t\t\t\tthis.props.value.length,\n\t\t\t\t\t\t\tthis.props.value.length\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\t// Submitting while loading should trigger onSubmit\n\t\t\t\tcase ENTER: {\n\t\t\t\t\tif ( this.props.onSubmit ) {\n\t\t\t\t\t\tthis.props.onSubmit( null, event );\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst suggestion = this.state.suggestions[\n\t\t\tthis.state.selectedSuggestion\n\t\t];\n\n\t\tswitch ( event.keyCode ) {\n\t\t\tcase UP: {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tconst previousIndex = ! selectedSuggestion\n\t\t\t\t\t? suggestions.length - 1\n\t\t\t\t\t: selectedSuggestion - 1;\n\t\t\t\tthis.setState( {\n\t\t\t\t\tselectedSuggestion: previousIndex,\n\t\t\t\t} );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase DOWN: {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tconst nextIndex =\n\t\t\t\t\tselectedSuggestion === null ||\n\t\t\t\t\tselectedSuggestion === suggestions.length - 1\n\t\t\t\t\t\t? 0\n\t\t\t\t\t\t: selectedSuggestion + 1;\n\t\t\t\tthis.setState( {\n\t\t\t\t\tselectedSuggestion: nextIndex,\n\t\t\t\t} );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase TAB: {\n\t\t\t\tif ( this.state.selectedSuggestion !== null ) {\n\t\t\t\t\tthis.selectLink( suggestion );\n\t\t\t\t\t// Announce a link has been selected when tabbing away from the input field.\n\t\t\t\t\tthis.props.speak( __( 'Link selected.' ) );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase ENTER: {\n\t\t\t\tif ( this.state.selectedSuggestion !== null ) {\n\t\t\t\t\tthis.selectLink( suggestion );\n\n\t\t\t\t\tif ( this.props.onSubmit ) {\n\t\t\t\t\t\tthis.props.onSubmit( suggestion, event );\n\t\t\t\t\t}\n\t\t\t\t} else if ( this.props.onSubmit ) {\n\t\t\t\t\tthis.props.onSubmit( null, event );\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tselectLink( suggestion ) {\n\t\tthis.props.onChange( suggestion.url, suggestion );\n\t\tthis.setState( {\n\t\t\tselectedSuggestion: null,\n\t\t\tshowSuggestions: false,\n\t\t} );\n\t}\n\n\thandleOnClick( suggestion ) {\n\t\tthis.selectLink( suggestion );\n\t\t// Move focus to the input field when a link suggestion is clicked.\n\t\tthis.inputRef.current.focus();\n\t}\n\n\tstatic getDerivedStateFromProps(\n\t\t{\n\t\t\tvalue,\n\t\t\tinstanceId,\n\t\t\tdisableSuggestions,\n\t\t\t__experimentalShowInitialSuggestions = false,\n\t\t},\n\t\t{ showSuggestions }\n\t) {\n\t\tlet shouldShowSuggestions = showSuggestions;\n\n\t\tconst hasValue = value && value.length;\n\n\t\tif ( ! __experimentalShowInitialSuggestions && ! hasValue ) {\n\t\t\tshouldShowSuggestions = false;\n\t\t}\n\n\t\tif ( disableSuggestions === true ) {\n\t\t\tshouldShowSuggestions = false;\n\t\t}\n\n\t\treturn {\n\t\t\tshowSuggestions: shouldShowSuggestions,\n\t\t\tsuggestionsListboxId: `block-editor-url-input-suggestions-${ instanceId }`,\n\t\t\tsuggestionOptionIdPrefix: `block-editor-url-input-suggestion-${ instanceId }`,\n\t\t};\n\t}\n\n\trender() {\n\t\treturn (\n\t\t\t<>\n\t\t\t\t{ this.renderControl() }\n\t\t\t\t{ this.renderSuggestions() }\n\t\t\t</>\n\t\t);\n\t}\n\n\trenderControl() {\n\t\tconst {\n\t\t\tlabel,\n\t\t\tclassName,\n\t\t\tisFullWidth,\n\t\t\tinstanceId,\n\t\t\tplaceholder = __( 'Paste URL or type to search' ),\n\t\t\t__experimentalRenderControl: renderControl,\n\t\t\tvalue = '',\n\t\t} = this.props;\n\n\t\tconst {\n\t\t\tloading,\n\t\t\tshowSuggestions,\n\t\t\tselectedSuggestion,\n\t\t\tsuggestionsListboxId,\n\t\t\tsuggestionOptionIdPrefix,\n\t\t} = this.state;\n\n\t\tconst controlProps = {\n\t\t\tid: `url-input-control-${ instanceId }`,\n\t\t\tlabel,\n\t\t\tclassName: classnames( 'block-editor-url-input', className, {\n\t\t\t\t'is-full-width': isFullWidth,\n\t\t\t} ),\n\t\t};\n\n\t\tconst inputProps = {\n\t\t\tvalue,\n\t\t\trequired: true,\n\t\t\tclassName: 'block-editor-url-input__input',\n\t\t\ttype: 'text',\n\t\t\tonChange: this.onChange,\n\t\t\tonFocus: this.onFocus,\n\t\t\tplaceholder,\n\t\t\tonKeyDown: this.onKeyDown,\n\t\t\trole: 'combobox',\n\t\t\t'aria-label': __( 'URL' ),\n\t\t\t'aria-expanded': showSuggestions,\n\t\t\t'aria-autocomplete': 'list',\n\t\t\t'aria-owns': suggestionsListboxId,\n\t\t\t'aria-activedescendant':\n\t\t\t\tselectedSuggestion !== null\n\t\t\t\t\t? `${ suggestionOptionIdPrefix }-${ selectedSuggestion }`\n\t\t\t\t\t: undefined,\n\t\t\tref: this.inputRef,\n\t\t};\n\n\t\tif ( renderControl ) {\n\t\t\treturn renderControl( controlProps, inputProps, loading );\n\t\t}\n\n\t\treturn (\n\t\t\t<BaseControl { ...controlProps }>\n\t\t\t\t<input { ...inputProps } />\n\t\t\t\t{ loading && <Spinner /> }\n\t\t\t</BaseControl>\n\t\t);\n\t}\n\n\trenderSuggestions() {\n\t\tconst {\n\t\t\tclassName,\n\t\t\t__experimentalRenderSuggestions: renderSuggestions,\n\t\t\tvalue = '',\n\t\t\t__experimentalShowInitialSuggestions = false,\n\t\t} = this.props;\n\n\t\tconst {\n\t\t\tshowSuggestions,\n\t\t\tsuggestions,\n\t\t\tselectedSuggestion,\n\t\t\tsuggestionsListboxId,\n\t\t\tsuggestionOptionIdPrefix,\n\t\t\tloading,\n\t\t} = this.state;\n\n\t\tconst suggestionsListProps = {\n\t\t\tid: suggestionsListboxId,\n\t\t\tref: this.autocompleteRef,\n\t\t\trole: 'listbox',\n\t\t};\n\n\t\tconst buildSuggestionItemProps = ( suggestion, index ) => {\n\t\t\treturn {\n\t\t\t\trole: 'option',\n\t\t\t\ttabIndex: '-1',\n\t\t\t\tid: `${ suggestionOptionIdPrefix }-${ index }`,\n\t\t\t\tref: this.bindSuggestionNode( index ),\n\t\t\t\t'aria-selected': index === selectedSuggestion,\n\t\t\t};\n\t\t};\n\n\t\tif (\n\t\t\tisFunction( renderSuggestions ) &&\n\t\t\tshowSuggestions &&\n\t\t\t!! suggestions.length\n\t\t) {\n\t\t\treturn renderSuggestions( {\n\t\t\t\tsuggestions,\n\t\t\t\tselectedSuggestion,\n\t\t\t\tsuggestionsListProps,\n\t\t\t\tbuildSuggestionItemProps,\n\t\t\t\tisLoading: loading,\n\t\t\t\thandleSuggestionClick: this.handleOnClick,\n\t\t\t\tisInitialSuggestions:\n\t\t\t\t\t__experimentalShowInitialSuggestions &&\n\t\t\t\t\t! ( value && value.length ),\n\t\t\t} );\n\t\t}\n\n\t\tif (\n\t\t\t! isFunction( renderSuggestions ) &&\n\t\t\tshowSuggestions &&\n\t\t\t!! suggestions.length\n\t\t) {\n\t\t\treturn (\n\t\t\t\t<Popover position=\"bottom\" noArrow focusOnMount={ false }>\n\t\t\t\t\t<div\n\t\t\t\t\t\t{ ...suggestionsListProps }\n\t\t\t\t\t\tclassName={ classnames(\n\t\t\t\t\t\t\t'block-editor-url-input__suggestions',\n\t\t\t\t\t\t\t`${ className }__suggestions`\n\t\t\t\t\t\t) }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ suggestions.map( ( suggestion, index ) => (\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t{ ...buildSuggestionItemProps(\n\t\t\t\t\t\t\t\t\tsuggestion,\n\t\t\t\t\t\t\t\t\tindex\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\tkey={ suggestion.id }\n\t\t\t\t\t\t\t\tclassName={ classnames(\n\t\t\t\t\t\t\t\t\t'block-editor-url-input__suggestion',\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t'is-selected':\n\t\t\t\t\t\t\t\t\t\t\tindex === selectedSuggestion,\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\tonClick={ () =>\n\t\t\t\t\t\t\t\t\tthis.handleOnClick( suggestion )\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{ suggestion.title }\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t) ) }\n\t\t\t\t\t</div>\n\t\t\t\t</Popover>\n\t\t\t);\n\t\t}\n\t\treturn null;\n\t}\n}\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/url-input/README.md\n */\nexport default compose(\n\twithSafeTimeout,\n\twithSpokenMessages,\n\twithInstanceId,\n\twithSelect( ( select, props ) => {\n\t\t// If a link suggestions handler is already provided then\n\t\t// bail\n\t\tif ( isFunction( props.__experimentalFetchLinkSuggestions ) ) {\n\t\t\treturn;\n\t\t}\n\t\tconst { getSettings } = select( blockEditorStore );\n\t\treturn {\n\t\t\t__experimentalFetchLinkSuggestions: getSettings()\n\t\t\t\t.__experimentalFetchLinkSuggestions,\n\t\t};\n\t} )\n)( URLInput );\n"]}
|
|
1
|
+
{"version":3,"sources":["@wordpress/block-editor/src/components/url-input/index.js"],"names":["debounce","isFunction","classnames","scrollIntoView","__","sprintf","_n","Component","createRef","UP","DOWN","ENTER","TAB","BaseControl","Button","Spinner","withSpokenMessages","Popover","withInstanceId","withSafeTimeout","compose","withSelect","isURL","store","blockEditorStore","URLInput","constructor","props","onChange","bind","onFocus","onKeyDown","selectLink","handleOnClick","bindSuggestionNode","autocompleteRef","inputRef","updateSuggestions","suggestionNodes","isUpdatingSuggestions","state","suggestions","showSuggestions","selectedSuggestion","suggestionsListboxId","suggestionOptionIdPrefix","componentDidUpdate","prevProps","value","__experimentalShowInitialSuggestions","scrollingIntoView","current","onlyScrollIfNeeded","setTimeout","disableSuggestions","length","componentDidMount","shouldShowInitialSuggestions","componentWillUnmount","suggestionsRequest","cancel","index","ref","__experimentalFetchLinkSuggestions","fetchLinkSuggestions","__experimentalHandleURLSuggestions","handleURLSuggestions","isInitialSuggestions","trim","setState","loading","request","then","debouncedSpeak","catch","event","inputValue","target","keyCode","selectionStart","preventDefault","setSelectionRange","onSubmit","suggestion","previousIndex","nextIndex","speak","url","focus","getDerivedStateFromProps","instanceId","shouldShowSuggestions","hasValue","render","renderControl","renderSuggestions","label","className","isFullWidth","placeholder","__experimentalRenderControl","controlProps","id","inputProps","required","type","role","undefined","__experimentalRenderSuggestions","suggestionsListProps","buildSuggestionItemProps","tabIndex","isLoading","handleSuggestionClick","map","title","select","getSettings"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { debounce, isFunction } from 'lodash';\nimport classnames from 'classnames';\nimport scrollIntoView from 'dom-scroll-into-view';\n\n/**\n * WordPress dependencies\n */\nimport { __, sprintf, _n } from '@wordpress/i18n';\nimport { Component, createRef } from '@wordpress/element';\nimport { UP, DOWN, ENTER, TAB } from '@wordpress/keycodes';\nimport {\n\tBaseControl,\n\tButton,\n\tSpinner,\n\twithSpokenMessages,\n\tPopover,\n} from '@wordpress/components';\nimport { withInstanceId, withSafeTimeout, compose } from '@wordpress/compose';\nimport { withSelect } from '@wordpress/data';\nimport { isURL } from '@wordpress/url';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\nclass URLInput extends Component {\n\tconstructor( props ) {\n\t\tsuper( props );\n\n\t\tthis.onChange = this.onChange.bind( this );\n\t\tthis.onFocus = this.onFocus.bind( this );\n\t\tthis.onKeyDown = this.onKeyDown.bind( this );\n\t\tthis.selectLink = this.selectLink.bind( this );\n\t\tthis.handleOnClick = this.handleOnClick.bind( this );\n\t\tthis.bindSuggestionNode = this.bindSuggestionNode.bind( this );\n\t\tthis.autocompleteRef = props.autocompleteRef || createRef();\n\t\tthis.inputRef = createRef();\n\t\tthis.updateSuggestions = debounce(\n\t\t\tthis.updateSuggestions.bind( this ),\n\t\t\t200\n\t\t);\n\n\t\tthis.suggestionNodes = [];\n\n\t\tthis.isUpdatingSuggestions = false;\n\n\t\tthis.state = {\n\t\t\tsuggestions: [],\n\t\t\tshowSuggestions: false,\n\t\t\tselectedSuggestion: null,\n\n\t\t\tsuggestionsListboxId: '',\n\t\t\tsuggestionOptionIdPrefix: '',\n\t\t};\n\t}\n\n\tcomponentDidUpdate( prevProps ) {\n\t\tconst { showSuggestions, selectedSuggestion } = this.state;\n\t\tconst {\n\t\t\tvalue,\n\t\t\t__experimentalShowInitialSuggestions = false,\n\t\t} = this.props;\n\n\t\t// only have to worry about scrolling selected suggestion into view\n\t\t// when already expanded\n\t\tif (\n\t\t\tshowSuggestions &&\n\t\t\tselectedSuggestion !== null &&\n\t\t\tthis.suggestionNodes[ selectedSuggestion ] &&\n\t\t\t! this.scrollingIntoView\n\t\t) {\n\t\t\tthis.scrollingIntoView = true;\n\t\t\tscrollIntoView(\n\t\t\t\tthis.suggestionNodes[ selectedSuggestion ],\n\t\t\t\tthis.autocompleteRef.current,\n\t\t\t\t{\n\t\t\t\t\tonlyScrollIfNeeded: true,\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tthis.props.setTimeout( () => {\n\t\t\t\tthis.scrollingIntoView = false;\n\t\t\t}, 100 );\n\t\t}\n\n\t\t// Update suggestions when the value changes\n\t\tif (\n\t\t\tprevProps.value !== value &&\n\t\t\t! this.props.disableSuggestions &&\n\t\t\t! this.isUpdatingSuggestions\n\t\t) {\n\t\t\tif ( value?.length ) {\n\t\t\t\t// If the new value is not empty we need to update with suggestions for it\n\t\t\t\tthis.updateSuggestions( value );\n\t\t\t} else if ( __experimentalShowInitialSuggestions ) {\n\t\t\t\t// If the new value is empty and we can show initial suggestions, then show initial suggestions\n\t\t\t\tthis.updateSuggestions();\n\t\t\t}\n\t\t}\n\t}\n\n\tcomponentDidMount() {\n\t\tif ( this.shouldShowInitialSuggestions() ) {\n\t\t\tthis.updateSuggestions();\n\t\t}\n\t}\n\n\tcomponentWillUnmount() {\n\t\tthis.suggestionsRequest?.cancel?.();\n\t\tdelete this.suggestionsRequest;\n\t}\n\n\tbindSuggestionNode( index ) {\n\t\treturn ( ref ) => {\n\t\t\tthis.suggestionNodes[ index ] = ref;\n\t\t};\n\t}\n\n\tshouldShowInitialSuggestions() {\n\t\tconst { suggestions } = this.state;\n\t\tconst {\n\t\t\t__experimentalShowInitialSuggestions = false,\n\t\t\tvalue,\n\t\t} = this.props;\n\t\treturn (\n\t\t\t! this.isUpdatingSuggestions &&\n\t\t\t__experimentalShowInitialSuggestions &&\n\t\t\t! ( value && value.length ) &&\n\t\t\t! ( suggestions && suggestions.length )\n\t\t);\n\t}\n\n\tupdateSuggestions( value = '' ) {\n\t\tconst {\n\t\t\t__experimentalFetchLinkSuggestions: fetchLinkSuggestions,\n\t\t\t__experimentalHandleURLSuggestions: handleURLSuggestions,\n\t\t} = this.props;\n\n\t\tif ( ! fetchLinkSuggestions ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Initial suggestions may only show if there is no value\n\t\t// (note: this includes whitespace).\n\t\tconst isInitialSuggestions = ! value?.length;\n\n\t\t// Trim only now we've determined whether or not it originally had a \"length\"\n\t\t// (even if that value was all whitespace).\n\t\tvalue = value.trim();\n\n\t\t// Allow a suggestions request if:\n\t\t// - there are at least 2 characters in the search input (except manual searches where\n\t\t// search input length is not required to trigger a fetch)\n\t\t// - this is a direct entry (eg: a URL)\n\t\tif (\n\t\t\t! isInitialSuggestions &&\n\t\t\t( value.length < 2 || ( ! handleURLSuggestions && isURL( value ) ) )\n\t\t) {\n\t\t\tthis.setState( {\n\t\t\t\tshowSuggestions: false,\n\t\t\t\tselectedSuggestion: null,\n\t\t\t\tloading: false,\n\t\t\t} );\n\n\t\t\treturn;\n\t\t}\n\n\t\tthis.isUpdatingSuggestions = true;\n\n\t\tthis.setState( {\n\t\t\tselectedSuggestion: null,\n\t\t\tloading: true,\n\t\t} );\n\n\t\tconst request = fetchLinkSuggestions( value, {\n\t\t\tisInitialSuggestions,\n\t\t} );\n\n\t\trequest\n\t\t\t.then( ( suggestions ) => {\n\t\t\t\t// A fetch Promise doesn't have an abort option. It's mimicked by\n\t\t\t\t// comparing the request reference in on the instance, which is\n\t\t\t\t// reset or deleted on subsequent requests or unmounting.\n\t\t\t\tif ( this.suggestionsRequest !== request ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.setState( {\n\t\t\t\t\tsuggestions,\n\t\t\t\t\tloading: false,\n\t\t\t\t\tshowSuggestions: !! suggestions.length,\n\t\t\t\t} );\n\n\t\t\t\tif ( !! suggestions.length ) {\n\t\t\t\t\tthis.props.debouncedSpeak(\n\t\t\t\t\t\tsprintf(\n\t\t\t\t\t\t\t/* translators: %s: number of results. */\n\t\t\t\t\t\t\t_n(\n\t\t\t\t\t\t\t\t'%d result found, use up and down arrow keys to navigate.',\n\t\t\t\t\t\t\t\t'%d results found, use up and down arrow keys to navigate.',\n\t\t\t\t\t\t\t\tsuggestions.length\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\tsuggestions.length\n\t\t\t\t\t\t),\n\t\t\t\t\t\t'assertive'\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tthis.props.debouncedSpeak(\n\t\t\t\t\t\t__( 'No results.' ),\n\t\t\t\t\t\t'assertive'\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tthis.isUpdatingSuggestions = false;\n\t\t\t} )\n\t\t\t.catch( () => {\n\t\t\t\tif ( this.suggestionsRequest === request ) {\n\t\t\t\t\tthis.setState( {\n\t\t\t\t\t\tloading: false,\n\t\t\t\t\t} );\n\t\t\t\t\tthis.isUpdatingSuggestions = false;\n\t\t\t\t}\n\t\t\t} );\n\n\t\t// Note that this assignment is handled *before* the async search request\n\t\t// as a Promise always resolves on the next tick of the event loop.\n\t\tthis.suggestionsRequest = request;\n\t}\n\n\tonChange( event ) {\n\t\tconst inputValue = event.target.value;\n\n\t\tthis.props.onChange( inputValue );\n\t\tif ( ! this.props.disableSuggestions ) {\n\t\t\tthis.updateSuggestions( inputValue );\n\t\t}\n\t}\n\n\tonFocus() {\n\t\tconst { suggestions } = this.state;\n\t\tconst { disableSuggestions, value } = this.props;\n\n\t\t// When opening the link editor, if there's a value present, we want to load the suggestions pane with the results for this input search value\n\t\t// Don't re-run the suggestions on focus if there are already suggestions present (prevents searching again when tabbing between the input and buttons)\n\t\tif (\n\t\t\tvalue &&\n\t\t\t! disableSuggestions &&\n\t\t\t! this.isUpdatingSuggestions &&\n\t\t\t! ( suggestions && suggestions.length )\n\t\t) {\n\t\t\t// Ensure the suggestions are updated with the current input value\n\t\t\tthis.updateSuggestions( value );\n\t\t}\n\t}\n\n\tonKeyDown( event ) {\n\t\tconst {\n\t\t\tshowSuggestions,\n\t\t\tselectedSuggestion,\n\t\t\tsuggestions,\n\t\t\tloading,\n\t\t} = this.state;\n\n\t\t// If the suggestions are not shown or loading, we shouldn't handle the arrow keys\n\t\t// We shouldn't preventDefault to allow block arrow keys navigation\n\t\tif ( ! showSuggestions || ! suggestions.length || loading ) {\n\t\t\t// In the Windows version of Firefox the up and down arrows don't move the caret\n\t\t\t// within an input field like they do for Mac Firefox/Chrome/Safari. This causes\n\t\t\t// a form of focus trapping that is disruptive to the user experience. This disruption\n\t\t\t// only happens if the caret is not in the first or last position in the text input.\n\t\t\t// See: https://github.com/WordPress/gutenberg/issues/5693#issuecomment-436684747\n\t\t\tswitch ( event.keyCode ) {\n\t\t\t\t// When UP is pressed, if the caret is at the start of the text, move it to the 0\n\t\t\t\t// position.\n\t\t\t\tcase UP: {\n\t\t\t\t\tif ( 0 !== event.target.selectionStart ) {\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t// Set the input caret to position 0\n\t\t\t\t\t\tevent.target.setSelectionRange( 0, 0 );\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t// When DOWN is pressed, if the caret is not at the end of the text, move it to the\n\t\t\t\t// last position.\n\t\t\t\tcase DOWN: {\n\t\t\t\t\tif (\n\t\t\t\t\t\tthis.props.value.length !== event.target.selectionStart\n\t\t\t\t\t) {\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t// Set the input caret to the last position\n\t\t\t\t\t\tevent.target.setSelectionRange(\n\t\t\t\t\t\t\tthis.props.value.length,\n\t\t\t\t\t\t\tthis.props.value.length\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\t// Submitting while loading should trigger onSubmit\n\t\t\t\tcase ENTER: {\n\t\t\t\t\tif ( this.props.onSubmit ) {\n\t\t\t\t\t\tthis.props.onSubmit( null, event );\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst suggestion = this.state.suggestions[\n\t\t\tthis.state.selectedSuggestion\n\t\t];\n\n\t\tswitch ( event.keyCode ) {\n\t\t\tcase UP: {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tconst previousIndex = ! selectedSuggestion\n\t\t\t\t\t? suggestions.length - 1\n\t\t\t\t\t: selectedSuggestion - 1;\n\t\t\t\tthis.setState( {\n\t\t\t\t\tselectedSuggestion: previousIndex,\n\t\t\t\t} );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase DOWN: {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tconst nextIndex =\n\t\t\t\t\tselectedSuggestion === null ||\n\t\t\t\t\tselectedSuggestion === suggestions.length - 1\n\t\t\t\t\t\t? 0\n\t\t\t\t\t\t: selectedSuggestion + 1;\n\t\t\t\tthis.setState( {\n\t\t\t\t\tselectedSuggestion: nextIndex,\n\t\t\t\t} );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase TAB: {\n\t\t\t\tif ( this.state.selectedSuggestion !== null ) {\n\t\t\t\t\tthis.selectLink( suggestion );\n\t\t\t\t\t// Announce a link has been selected when tabbing away from the input field.\n\t\t\t\t\tthis.props.speak( __( 'Link selected.' ) );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase ENTER: {\n\t\t\t\tif ( this.state.selectedSuggestion !== null ) {\n\t\t\t\t\tthis.selectLink( suggestion );\n\n\t\t\t\t\tif ( this.props.onSubmit ) {\n\t\t\t\t\t\tthis.props.onSubmit( suggestion, event );\n\t\t\t\t\t}\n\t\t\t\t} else if ( this.props.onSubmit ) {\n\t\t\t\t\tthis.props.onSubmit( null, event );\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tselectLink( suggestion ) {\n\t\tthis.props.onChange( suggestion.url, suggestion );\n\t\tthis.setState( {\n\t\t\tselectedSuggestion: null,\n\t\t\tshowSuggestions: false,\n\t\t} );\n\t}\n\n\thandleOnClick( suggestion ) {\n\t\tthis.selectLink( suggestion );\n\t\t// Move focus to the input field when a link suggestion is clicked.\n\t\tthis.inputRef.current.focus();\n\t}\n\n\tstatic getDerivedStateFromProps(\n\t\t{\n\t\t\tvalue,\n\t\t\tinstanceId,\n\t\t\tdisableSuggestions,\n\t\t\t__experimentalShowInitialSuggestions = false,\n\t\t},\n\t\t{ showSuggestions }\n\t) {\n\t\tlet shouldShowSuggestions = showSuggestions;\n\n\t\tconst hasValue = value && value.length;\n\n\t\tif ( ! __experimentalShowInitialSuggestions && ! hasValue ) {\n\t\t\tshouldShowSuggestions = false;\n\t\t}\n\n\t\tif ( disableSuggestions === true ) {\n\t\t\tshouldShowSuggestions = false;\n\t\t}\n\n\t\treturn {\n\t\t\tshowSuggestions: shouldShowSuggestions,\n\t\t\tsuggestionsListboxId: `block-editor-url-input-suggestions-${ instanceId }`,\n\t\t\tsuggestionOptionIdPrefix: `block-editor-url-input-suggestion-${ instanceId }`,\n\t\t};\n\t}\n\n\trender() {\n\t\treturn (\n\t\t\t<>\n\t\t\t\t{ this.renderControl() }\n\t\t\t\t{ this.renderSuggestions() }\n\t\t\t</>\n\t\t);\n\t}\n\n\trenderControl() {\n\t\tconst {\n\t\t\tlabel,\n\t\t\tclassName,\n\t\t\tisFullWidth,\n\t\t\tinstanceId,\n\t\t\tplaceholder = __( 'Paste URL or type to search' ),\n\t\t\t__experimentalRenderControl: renderControl,\n\t\t\tvalue = '',\n\t\t} = this.props;\n\n\t\tconst {\n\t\t\tloading,\n\t\t\tshowSuggestions,\n\t\t\tselectedSuggestion,\n\t\t\tsuggestionsListboxId,\n\t\t\tsuggestionOptionIdPrefix,\n\t\t} = this.state;\n\n\t\tconst controlProps = {\n\t\t\tid: `url-input-control-${ instanceId }`,\n\t\t\tlabel,\n\t\t\tclassName: classnames( 'block-editor-url-input', className, {\n\t\t\t\t'is-full-width': isFullWidth,\n\t\t\t} ),\n\t\t};\n\n\t\tconst inputProps = {\n\t\t\tvalue,\n\t\t\trequired: true,\n\t\t\tclassName: 'block-editor-url-input__input',\n\t\t\ttype: 'text',\n\t\t\tonChange: this.onChange,\n\t\t\tonFocus: this.onFocus,\n\t\t\tplaceholder,\n\t\t\tonKeyDown: this.onKeyDown,\n\t\t\trole: 'combobox',\n\t\t\t'aria-label': __( 'URL' ),\n\t\t\t'aria-expanded': showSuggestions,\n\t\t\t'aria-autocomplete': 'list',\n\t\t\t'aria-owns': suggestionsListboxId,\n\t\t\t'aria-activedescendant':\n\t\t\t\tselectedSuggestion !== null\n\t\t\t\t\t? `${ suggestionOptionIdPrefix }-${ selectedSuggestion }`\n\t\t\t\t\t: undefined,\n\t\t\tref: this.inputRef,\n\t\t};\n\n\t\tif ( renderControl ) {\n\t\t\treturn renderControl( controlProps, inputProps, loading );\n\t\t}\n\n\t\treturn (\n\t\t\t<BaseControl { ...controlProps }>\n\t\t\t\t<input { ...inputProps } />\n\t\t\t\t{ loading && <Spinner /> }\n\t\t\t</BaseControl>\n\t\t);\n\t}\n\n\trenderSuggestions() {\n\t\tconst {\n\t\t\tclassName,\n\t\t\t__experimentalRenderSuggestions: renderSuggestions,\n\t\t\tvalue = '',\n\t\t\t__experimentalShowInitialSuggestions = false,\n\t\t} = this.props;\n\n\t\tconst {\n\t\t\tshowSuggestions,\n\t\t\tsuggestions,\n\t\t\tselectedSuggestion,\n\t\t\tsuggestionsListboxId,\n\t\t\tsuggestionOptionIdPrefix,\n\t\t\tloading,\n\t\t} = this.state;\n\n\t\tconst suggestionsListProps = {\n\t\t\tid: suggestionsListboxId,\n\t\t\tref: this.autocompleteRef,\n\t\t\trole: 'listbox',\n\t\t};\n\n\t\tconst buildSuggestionItemProps = ( suggestion, index ) => {\n\t\t\treturn {\n\t\t\t\trole: 'option',\n\t\t\t\ttabIndex: '-1',\n\t\t\t\tid: `${ suggestionOptionIdPrefix }-${ index }`,\n\t\t\t\tref: this.bindSuggestionNode( index ),\n\t\t\t\t'aria-selected': index === selectedSuggestion,\n\t\t\t};\n\t\t};\n\n\t\tif (\n\t\t\tisFunction( renderSuggestions ) &&\n\t\t\tshowSuggestions &&\n\t\t\t!! suggestions.length\n\t\t) {\n\t\t\treturn renderSuggestions( {\n\t\t\t\tsuggestions,\n\t\t\t\tselectedSuggestion,\n\t\t\t\tsuggestionsListProps,\n\t\t\t\tbuildSuggestionItemProps,\n\t\t\t\tisLoading: loading,\n\t\t\t\thandleSuggestionClick: this.handleOnClick,\n\t\t\t\tisInitialSuggestions:\n\t\t\t\t\t__experimentalShowInitialSuggestions &&\n\t\t\t\t\t! ( value && value.length ),\n\t\t\t} );\n\t\t}\n\n\t\tif (\n\t\t\t! isFunction( renderSuggestions ) &&\n\t\t\tshowSuggestions &&\n\t\t\t!! suggestions.length\n\t\t) {\n\t\t\treturn (\n\t\t\t\t<Popover position=\"bottom\" noArrow focusOnMount={ false }>\n\t\t\t\t\t<div\n\t\t\t\t\t\t{ ...suggestionsListProps }\n\t\t\t\t\t\tclassName={ classnames(\n\t\t\t\t\t\t\t'block-editor-url-input__suggestions',\n\t\t\t\t\t\t\t`${ className }__suggestions`\n\t\t\t\t\t\t) }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ suggestions.map( ( suggestion, index ) => (\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t{ ...buildSuggestionItemProps(\n\t\t\t\t\t\t\t\t\tsuggestion,\n\t\t\t\t\t\t\t\t\tindex\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\tkey={ suggestion.id }\n\t\t\t\t\t\t\t\tclassName={ classnames(\n\t\t\t\t\t\t\t\t\t'block-editor-url-input__suggestion',\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t'is-selected':\n\t\t\t\t\t\t\t\t\t\t\tindex === selectedSuggestion,\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\tonClick={ () =>\n\t\t\t\t\t\t\t\t\tthis.handleOnClick( suggestion )\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{ suggestion.title }\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t) ) }\n\t\t\t\t\t</div>\n\t\t\t\t</Popover>\n\t\t\t);\n\t\t}\n\t\treturn null;\n\t}\n}\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/url-input/README.md\n */\nexport default compose(\n\twithSafeTimeout,\n\twithSpokenMessages,\n\twithInstanceId,\n\twithSelect( ( select, props ) => {\n\t\t// If a link suggestions handler is already provided then\n\t\t// bail\n\t\tif ( isFunction( props.__experimentalFetchLinkSuggestions ) ) {\n\t\t\treturn;\n\t\t}\n\t\tconst { getSettings } = select( blockEditorStore );\n\t\treturn {\n\t\t\t__experimentalFetchLinkSuggestions: getSettings()\n\t\t\t\t.__experimentalFetchLinkSuggestions,\n\t\t};\n\t} )\n)( URLInput );\n"]}
|
|
@@ -21,7 +21,7 @@ const deprecatedFlags = {
|
|
|
21
21
|
'color.customGradient': settings => settings.disableCustomGradients === undefined ? undefined : !settings.disableCustomGradients,
|
|
22
22
|
'typography.fontSizes': settings => settings.fontSizes === undefined ? undefined : settings.fontSizes,
|
|
23
23
|
'typography.customFontSize': settings => settings.disableCustomFontSizes === undefined ? undefined : !settings.disableCustomFontSizes,
|
|
24
|
-
'typography.
|
|
24
|
+
'typography.lineHeight': settings => settings.enableCustomLineHeight,
|
|
25
25
|
'spacing.units': settings => {
|
|
26
26
|
if (settings.enableCustomUnits === undefined) {
|
|
27
27
|
return;
|
|
@@ -33,22 +33,60 @@ const deprecatedFlags = {
|
|
|
33
33
|
|
|
34
34
|
return settings.enableCustomUnits;
|
|
35
35
|
},
|
|
36
|
-
'spacing.
|
|
36
|
+
'spacing.padding': settings => settings.enableCustomSpacing
|
|
37
|
+
};
|
|
38
|
+
const prefixedFlags = {
|
|
39
|
+
/*
|
|
40
|
+
* These were only available in the plugin
|
|
41
|
+
* and can be removed when the minimum WordPress version
|
|
42
|
+
* for the plugin is 5.9.
|
|
43
|
+
*/
|
|
44
|
+
'border.customColor': 'border.color',
|
|
45
|
+
'border.customStyle': 'border.style',
|
|
46
|
+
'border.customWidth': 'border.width',
|
|
47
|
+
'typography.customFontStyle': 'typography.fontStyle',
|
|
48
|
+
'typography.customFontWeight': 'typography.fontWeight',
|
|
49
|
+
'typography.customLetterSpacing': 'typography.letterSpacing',
|
|
50
|
+
'typography.customTextDecorations': 'typography.textDecoration',
|
|
51
|
+
'typography.customTextTransforms': 'typography.textTransform',
|
|
52
|
+
|
|
53
|
+
/*
|
|
54
|
+
* These were part of WordPress 5.8 and we need to keep them.
|
|
55
|
+
*/
|
|
56
|
+
'border.customRadius': 'border.radius',
|
|
57
|
+
'spacing.customMargin': 'spacing.margin',
|
|
58
|
+
'spacing.customPadding': 'spacing.padding',
|
|
59
|
+
'typography.customLineHeight': 'typography.lineHeight'
|
|
60
|
+
};
|
|
61
|
+
/**
|
|
62
|
+
* Remove `custom` prefixes for flags that did not land in 5.8.
|
|
63
|
+
*
|
|
64
|
+
* This provides continued support for `custom` prefixed properties. It will
|
|
65
|
+
* be removed once third party devs have had sufficient time to update themes,
|
|
66
|
+
* plugins, etc.
|
|
67
|
+
*
|
|
68
|
+
* @see https://github.com/WordPress/gutenberg/pull/34485
|
|
69
|
+
*
|
|
70
|
+
* @param {string} path Path to desired value in settings.
|
|
71
|
+
* @return {string} The value for defined setting.
|
|
72
|
+
*/
|
|
73
|
+
|
|
74
|
+
const removeCustomPrefixes = path => {
|
|
75
|
+
return prefixedFlags[path] || path;
|
|
37
76
|
};
|
|
38
77
|
/**
|
|
39
78
|
* Hook that retrieves the editor setting.
|
|
40
79
|
* It works with nested objects using by finding the value at path.
|
|
41
80
|
*
|
|
42
81
|
* @param {string} path The path to the setting.
|
|
43
|
-
*
|
|
44
82
|
* @return {any} Returns the value defined for the setting.
|
|
45
|
-
*
|
|
46
83
|
* @example
|
|
47
84
|
* ```js
|
|
48
85
|
* const isEnabled = useSetting( 'typography.dropCap' );
|
|
49
86
|
* ```
|
|
50
87
|
*/
|
|
51
88
|
|
|
89
|
+
|
|
52
90
|
export default function useSetting(path) {
|
|
53
91
|
const {
|
|
54
92
|
name: blockName
|
|
@@ -59,12 +97,13 @@ export default function useSetting(path) {
|
|
|
59
97
|
const settings = select(blockEditorStore).getSettings(); // 1 - Use __experimental features, if available.
|
|
60
98
|
// We cascade to the all value if the block one is not available.
|
|
61
99
|
|
|
62
|
-
const
|
|
63
|
-
const
|
|
100
|
+
const normalizedPath = removeCustomPrefixes(path);
|
|
101
|
+
const defaultsPath = `__experimentalFeatures.${normalizedPath}`;
|
|
102
|
+
const blockPath = `__experimentalFeatures.blocks.${blockName}.${normalizedPath}`;
|
|
64
103
|
const experimentalFeaturesResult = (_get = get(settings, blockPath)) !== null && _get !== void 0 ? _get : get(settings, defaultsPath);
|
|
65
104
|
|
|
66
105
|
if (experimentalFeaturesResult !== undefined) {
|
|
67
|
-
if (PATHS_WITH_MERGE[
|
|
106
|
+
if (PATHS_WITH_MERGE[normalizedPath]) {
|
|
68
107
|
var _ref, _experimentalFeatures;
|
|
69
108
|
|
|
70
109
|
return (_ref = (_experimentalFeatures = experimentalFeaturesResult.user) !== null && _experimentalFeatures !== void 0 ? _experimentalFeatures : experimentalFeaturesResult.theme) !== null && _ref !== void 0 ? _ref : experimentalFeaturesResult.core;
|
|
@@ -74,7 +113,7 @@ export default function useSetting(path) {
|
|
|
74
113
|
} // 2 - Use deprecated settings, otherwise.
|
|
75
114
|
|
|
76
115
|
|
|
77
|
-
const deprecatedSettingsValue = deprecatedFlags[
|
|
116
|
+
const deprecatedSettingsValue = deprecatedFlags[normalizedPath] ? deprecatedFlags[normalizedPath](settings) : undefined;
|
|
78
117
|
|
|
79
118
|
if (deprecatedSettingsValue !== undefined) {
|
|
80
119
|
return deprecatedSettingsValue;
|
|
@@ -84,7 +123,7 @@ export default function useSetting(path) {
|
|
|
84
123
|
// To remove when __experimentalFeatures are ported to core.
|
|
85
124
|
|
|
86
125
|
|
|
87
|
-
return
|
|
126
|
+
return normalizedPath === 'typography.dropCap' ? true : undefined;
|
|
88
127
|
}, [blockName, path]);
|
|
89
128
|
return setting;
|
|
90
129
|
}
|