@wordpress/block-editor 15.8.1-next.16d95556a.0 → 15.8.1-next.dc3f6d3c1.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/build/components/block-inspector/edit-contents.js +19 -23
- package/build/components/block-inspector/edit-contents.js.map +3 -3
- package/build/components/block-inspector/index.js +7 -1
- package/build/components/block-inspector/index.js.map +2 -2
- package/build/components/block-list/block.js +4 -0
- package/build/components/block-list/block.js.map +2 -2
- package/build/components/block-list/use-block-props/index.js +3 -1
- package/build/components/block-list/use-block-props/index.js.map +2 -2
- package/build/components/block-list/use-block-props/use-is-hovered.js +16 -10
- package/build/components/block-list/use-block-props/use-is-hovered.js.map +2 -2
- package/build/components/block-settings-menu-controls/edit-section-menu-item.js +64 -0
- package/build/components/block-settings-menu-controls/edit-section-menu-item.js.map +7 -0
- package/build/components/block-settings-menu-controls/index.js +8 -0
- package/build/components/block-settings-menu-controls/index.js.map +2 -2
- package/build/components/block-toolbar/block-toolbar-icon.js +9 -9
- package/build/components/block-toolbar/block-toolbar-icon.js.map +2 -2
- package/build/components/block-variation-transforms/index.js +32 -5
- package/build/components/block-variation-transforms/index.js.map +2 -2
- package/build/components/border-radius-control/single-input-control.js +1 -0
- package/build/components/border-radius-control/single-input-control.js.map +2 -2
- package/build/components/content-only-controls/index.js +263 -0
- package/build/components/content-only-controls/index.js.map +7 -0
- package/build/components/content-only-controls/link/index.js +204 -0
- package/build/components/content-only-controls/link/index.js.map +7 -0
- package/build/components/content-only-controls/media/index.js +264 -0
- package/build/components/content-only-controls/media/index.js.map +7 -0
- package/build/components/content-only-controls/plain-text/index.js +68 -0
- package/build/components/content-only-controls/plain-text/index.js.map +7 -0
- package/build/components/content-only-controls/rich-text/index.js +197 -0
- package/build/components/content-only-controls/rich-text/index.js.map +7 -0
- package/build/components/content-only-controls/use-inspector-popover-placement.js +41 -0
- package/build/components/content-only-controls/use-inspector-popover-placement.js.map +7 -0
- package/build/components/inserter/media-tab/media-tab.js +1 -33
- package/build/components/inserter/media-tab/media-tab.js.map +3 -3
- package/build/components/inspector-controls-tabs/content-tab.js +6 -2
- package/build/components/inspector-controls-tabs/content-tab.js.map +3 -3
- package/build/components/inspector-controls-tabs/index.js +7 -1
- package/build/components/inspector-controls-tabs/index.js.map +2 -2
- package/build/components/list-view/block-select-button.js +11 -4
- package/build/components/list-view/block-select-button.js.map +2 -2
- package/build/components/media-placeholder/index.js +1 -31
- package/build/components/media-placeholder/index.js.map +3 -3
- package/build/components/media-replace-flow/index.js +4 -30
- package/build/components/media-replace-flow/index.js.map +3 -3
- package/build/components/use-block-display-information/index.js +21 -1
- package/build/components/use-block-display-information/index.js.map +3 -3
- package/build/hooks/block-bindings.js +52 -61
- package/build/hooks/block-bindings.js.map +3 -3
- package/build/hooks/use-content-only-section-edit.js +67 -0
- package/build/hooks/use-content-only-section-edit.js.map +7 -0
- package/build/layouts/constrained.js +2 -2
- package/build/layouts/constrained.js.map +2 -2
- package/build/private-apis.js +2 -3
- package/build/private-apis.js.map +3 -3
- package/build/store/private-keys.js +3 -0
- package/build/store/private-keys.js.map +2 -2
- package/build/store/private-selectors.js +1 -2
- package/build/store/private-selectors.js.map +2 -2
- package/build/store/reducer.js +1 -2
- package/build/store/reducer.js.map +2 -2
- package/build/utils/fit-text-utils.js +9 -1
- package/build/utils/fit-text-utils.js.map +2 -2
- package/build-module/components/block-inspector/edit-contents.js +9 -23
- package/build-module/components/block-inspector/edit-contents.js.map +2 -2
- package/build-module/components/block-inspector/index.js +7 -1
- package/build-module/components/block-inspector/index.js.map +2 -2
- package/build-module/components/block-list/block.js +4 -0
- package/build-module/components/block-list/block.js.map +2 -2
- package/build-module/components/block-list/use-block-props/index.js +3 -1
- package/build-module/components/block-list/use-block-props/index.js.map +2 -2
- package/build-module/components/block-list/use-block-props/use-is-hovered.js +16 -10
- package/build-module/components/block-list/use-block-props/use-is-hovered.js.map +2 -2
- package/build-module/components/block-settings-menu-controls/edit-section-menu-item.js +29 -0
- package/build-module/components/block-settings-menu-controls/edit-section-menu-item.js.map +7 -0
- package/build-module/components/block-settings-menu-controls/index.js +8 -0
- package/build-module/components/block-settings-menu-controls/index.js.map +2 -2
- package/build-module/components/block-toolbar/block-toolbar-icon.js +10 -10
- package/build-module/components/block-toolbar/block-toolbar-icon.js.map +2 -2
- package/build-module/components/block-variation-transforms/index.js +32 -5
- package/build-module/components/block-variation-transforms/index.js.map +2 -2
- package/build-module/components/border-radius-control/single-input-control.js +1 -0
- package/build-module/components/border-radius-control/single-input-control.js.map +2 -2
- package/build-module/components/content-only-controls/index.js +237 -0
- package/build-module/components/content-only-controls/index.js.map +7 -0
- package/build-module/components/content-only-controls/link/index.js +172 -0
- package/build-module/components/content-only-controls/link/index.js.map +7 -0
- package/build-module/components/content-only-controls/media/index.js +243 -0
- package/build-module/components/content-only-controls/media/index.js.map +7 -0
- package/build-module/components/content-only-controls/plain-text/index.js +50 -0
- package/build-module/components/content-only-controls/plain-text/index.js.map +7 -0
- package/build-module/components/content-only-controls/rich-text/index.js +174 -0
- package/build-module/components/content-only-controls/rich-text/index.js.map +7 -0
- package/build-module/components/content-only-controls/use-inspector-popover-placement.js +16 -0
- package/build-module/components/content-only-controls/use-inspector-popover-placement.js.map +7 -0
- package/build-module/components/inserter/media-tab/media-tab.js +2 -34
- package/build-module/components/inserter/media-tab/media-tab.js.map +2 -2
- package/build-module/components/inspector-controls-tabs/content-tab.js +7 -3
- package/build-module/components/inspector-controls-tabs/content-tab.js.map +2 -2
- package/build-module/components/inspector-controls-tabs/index.js +7 -1
- package/build-module/components/inspector-controls-tabs/index.js.map +2 -2
- package/build-module/components/list-view/block-select-button.js +18 -5
- package/build-module/components/list-view/block-select-button.js.map +2 -2
- package/build-module/components/media-placeholder/index.js +1 -31
- package/build-module/components/media-placeholder/index.js.map +2 -2
- package/build-module/components/media-replace-flow/index.js +4 -30
- package/build-module/components/media-replace-flow/index.js.map +2 -2
- package/build-module/components/use-block-display-information/index.js +21 -1
- package/build-module/components/use-block-display-information/index.js.map +3 -3
- package/build-module/hooks/block-bindings.js +57 -62
- package/build-module/hooks/block-bindings.js.map +2 -2
- package/build-module/hooks/use-content-only-section-edit.js +46 -0
- package/build-module/hooks/use-content-only-section-edit.js.map +7 -0
- package/build-module/layouts/constrained.js +2 -2
- package/build-module/layouts/constrained.js.map +2 -2
- package/build-module/private-apis.js +3 -3
- package/build-module/private-apis.js.map +2 -2
- package/build-module/store/private-keys.js +2 -0
- package/build-module/store/private-keys.js.map +2 -2
- package/build-module/store/private-selectors.js +1 -2
- package/build-module/store/private-selectors.js.map +2 -2
- package/build-module/store/reducer.js +1 -2
- package/build-module/store/reducer.js.map +2 -2
- package/build-module/utils/fit-text-utils.js +9 -1
- package/build-module/utils/fit-text-utils.js.map +2 -2
- package/build-style/style-rtl.css +132 -0
- package/build-style/style.css +132 -0
- package/package.json +37 -37
- package/src/components/block-inspector/edit-contents.js +10 -29
- package/src/components/block-inspector/index.js +4 -2
- package/src/components/block-list/block.js +6 -0
- package/src/components/block-list/use-block-props/index.js +3 -1
- package/src/components/block-list/use-block-props/use-is-hovered.js +24 -12
- package/src/components/block-settings-menu-controls/edit-section-menu-item.js +39 -0
- package/src/components/block-settings-menu-controls/index.js +7 -0
- package/src/components/block-toolbar/block-toolbar-icon.js +14 -10
- package/src/components/block-variation-transforms/index.js +96 -35
- package/src/components/border-radius-control/single-input-control.js +1 -0
- package/src/components/content-only-controls/index.js +296 -0
- package/src/components/content-only-controls/link/index.js +195 -0
- package/src/components/content-only-controls/link/styles.scss +23 -0
- package/src/components/content-only-controls/media/index.js +285 -0
- package/src/components/content-only-controls/media/styles.scss +47 -0
- package/src/components/content-only-controls/plain-text/index.js +49 -0
- package/src/components/content-only-controls/rich-text/index.js +193 -0
- package/src/components/content-only-controls/rich-text/styles.scss +24 -0
- package/src/components/content-only-controls/styles.scss +35 -0
- package/src/components/content-only-controls/use-inspector-popover-placement.js +19 -0
- package/src/components/inserter/media-tab/media-tab.js +2 -44
- package/src/components/inspector-controls-tabs/content-tab.js +12 -4
- package/src/components/inspector-controls-tabs/index.js +4 -1
- package/src/components/list-view/block-select-button.js +37 -24
- package/src/components/media-placeholder/index.js +1 -41
- package/src/components/media-replace-flow/index.js +3 -39
- package/src/components/use-block-display-information/index.js +30 -2
- package/src/hooks/block-bindings.js +71 -82
- package/src/hooks/use-content-only-section-edit.js +63 -0
- package/src/layouts/constrained.js +8 -2
- package/src/private-apis.js +2 -2
- package/src/store/private-keys.js +1 -0
- package/src/store/private-selectors.js +1 -2
- package/src/store/reducer.js +0 -3
- package/src/store/test/reducer.js +7 -17
- package/src/style.scss +1 -0
- package/src/utils/fit-text-utils.js +19 -1
- package/build/components/media-upload-modal/index.js +0 -29
- package/build/components/media-upload-modal/index.js.map +0 -7
- package/build-module/components/media-upload-modal/index.js +0 -8
- package/build-module/components/media-upload-modal/index.js.map +0 -7
- package/src/components/media-upload-modal/index.js +0 -18
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
|
|
30
|
+
// packages/block-editor/src/components/content-only-controls/index.js
|
|
31
|
+
var content_only_controls_exports = {};
|
|
32
|
+
__export(content_only_controls_exports, {
|
|
33
|
+
default: () => ContentOnlyControls
|
|
34
|
+
});
|
|
35
|
+
module.exports = __toCommonJS(content_only_controls_exports);
|
|
36
|
+
var import_blocks = require("@wordpress/blocks");
|
|
37
|
+
var import_components = require("@wordpress/components");
|
|
38
|
+
var import_data = require("@wordpress/data");
|
|
39
|
+
var import_i18n = require("@wordpress/i18n");
|
|
40
|
+
var import_icons = require("@wordpress/icons");
|
|
41
|
+
var import_lock_unlock = require("../../lock-unlock");
|
|
42
|
+
var import_store = require("../../store");
|
|
43
|
+
var import_block_icon = __toESM(require("../block-icon"));
|
|
44
|
+
var import_use_block_display_title = __toESM(require("../block-title/use-block-display-title"));
|
|
45
|
+
var import_use_block_display_information = __toESM(require("../use-block-display-information"));
|
|
46
|
+
var import_use_inspector_popover_placement = require("./use-inspector-popover-placement");
|
|
47
|
+
var import_plain_text = __toESM(require("./plain-text"));
|
|
48
|
+
var import_rich_text = __toESM(require("./rich-text"));
|
|
49
|
+
var import_media = __toESM(require("./media"));
|
|
50
|
+
var import_link = __toESM(require("./link"));
|
|
51
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
52
|
+
var controls = {
|
|
53
|
+
PlainText: import_plain_text.default,
|
|
54
|
+
RichText: import_rich_text.default,
|
|
55
|
+
Media: import_media.default,
|
|
56
|
+
Link: import_link.default
|
|
57
|
+
};
|
|
58
|
+
function BlockAttributeToolsPanelItem({
|
|
59
|
+
clientId,
|
|
60
|
+
control,
|
|
61
|
+
blockType,
|
|
62
|
+
attributeValues
|
|
63
|
+
}) {
|
|
64
|
+
const { updateBlockAttributes } = (0, import_data.useDispatch)(import_store.store);
|
|
65
|
+
const ControlComponent = controls[control.type];
|
|
66
|
+
if (!ControlComponent) {
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
70
|
+
ControlComponent,
|
|
71
|
+
{
|
|
72
|
+
clientId,
|
|
73
|
+
control,
|
|
74
|
+
blockType,
|
|
75
|
+
attributeValues,
|
|
76
|
+
updateAttributes: (attributes) => updateBlockAttributes(clientId, attributes)
|
|
77
|
+
}
|
|
78
|
+
);
|
|
79
|
+
}
|
|
80
|
+
function BlockFields({ clientId }) {
|
|
81
|
+
const { attributes, blockType } = (0, import_data.useSelect)(
|
|
82
|
+
(select) => {
|
|
83
|
+
const { getBlockAttributes, getBlockName } = select(import_store.store);
|
|
84
|
+
const { getBlockType } = select(import_blocks.store);
|
|
85
|
+
const blockName = getBlockName(clientId);
|
|
86
|
+
return {
|
|
87
|
+
attributes: getBlockAttributes(clientId),
|
|
88
|
+
blockType: getBlockType(blockName)
|
|
89
|
+
};
|
|
90
|
+
},
|
|
91
|
+
[clientId]
|
|
92
|
+
);
|
|
93
|
+
const blockTitle = (0, import_use_block_display_title.default)({
|
|
94
|
+
clientId,
|
|
95
|
+
context: "list-view"
|
|
96
|
+
});
|
|
97
|
+
const blockInformation = (0, import_use_block_display_information.default)(clientId);
|
|
98
|
+
const popoverPlacementProps = (0, import_use_inspector_popover_placement.useInspectorPopoverPlacement)();
|
|
99
|
+
if (!blockType?.fields?.length) {
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
103
|
+
import_components.__experimentalToolsPanel,
|
|
104
|
+
{
|
|
105
|
+
label: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_components.__experimentalHStack, { spacing: 1, children: [
|
|
106
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_block_icon.default, { icon: blockInformation?.icon }),
|
|
107
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { children: blockTitle })
|
|
108
|
+
] }),
|
|
109
|
+
panelId: clientId,
|
|
110
|
+
dropdownMenuProps: popoverPlacementProps,
|
|
111
|
+
children: blockType?.fields?.map((field, index) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
112
|
+
BlockAttributeToolsPanelItem,
|
|
113
|
+
{
|
|
114
|
+
clientId,
|
|
115
|
+
control: field,
|
|
116
|
+
blockType,
|
|
117
|
+
attributeValues: attributes
|
|
118
|
+
},
|
|
119
|
+
`${clientId}/${index}`
|
|
120
|
+
))
|
|
121
|
+
}
|
|
122
|
+
);
|
|
123
|
+
}
|
|
124
|
+
function DrillDownButton({ clientId }) {
|
|
125
|
+
const blockTitle = (0, import_use_block_display_title.default)({
|
|
126
|
+
clientId,
|
|
127
|
+
context: "list-view"
|
|
128
|
+
});
|
|
129
|
+
const blockInformation = (0, import_use_block_display_information.default)(clientId);
|
|
130
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "block-editor-content-only-controls__button-panel", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
131
|
+
import_components.Navigator.Button,
|
|
132
|
+
{
|
|
133
|
+
path: `/${clientId}`,
|
|
134
|
+
className: "block-editor-content-only-controls__drill-down-button",
|
|
135
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_components.__experimentalHStack, { expanded: true, justify: "space-between", children: [
|
|
136
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_components.__experimentalHStack, { justify: "flex-start", spacing: 1, children: [
|
|
137
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_block_icon.default, { icon: blockInformation?.icon }),
|
|
138
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { children: blockTitle })
|
|
139
|
+
] }),
|
|
140
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_components.Icon, { icon: import_icons.arrowRight })
|
|
141
|
+
] })
|
|
142
|
+
}
|
|
143
|
+
) });
|
|
144
|
+
}
|
|
145
|
+
function ContentOnlyControlsScreen({
|
|
146
|
+
rootClientId,
|
|
147
|
+
contentClientIds,
|
|
148
|
+
parentClientIds,
|
|
149
|
+
isNested
|
|
150
|
+
}) {
|
|
151
|
+
const isRootContentBlock = (0, import_data.useSelect)(
|
|
152
|
+
(select) => {
|
|
153
|
+
const { getBlockName } = select(import_store.store);
|
|
154
|
+
const blockName = getBlockName(rootClientId);
|
|
155
|
+
const { hasContentRoleAttribute } = (0, import_lock_unlock.unlock)(select(import_blocks.store));
|
|
156
|
+
return hasContentRoleAttribute(blockName);
|
|
157
|
+
},
|
|
158
|
+
[rootClientId]
|
|
159
|
+
);
|
|
160
|
+
if (!isRootContentBlock && !contentClientIds.length) {
|
|
161
|
+
return null;
|
|
162
|
+
}
|
|
163
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
|
|
164
|
+
isNested && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "block-editor-content-only-controls__button-panel", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_components.Navigator.BackButton, { className: "block-editor-content-only-controls__back-button", children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_components.__experimentalHStack, { expanded: true, spacing: 1, justify: "flex-start", children: [
|
|
165
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_components.Icon, { icon: import_icons.arrowLeft }),
|
|
166
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { children: (0, import_i18n.__)("Back") })
|
|
167
|
+
] }) }) }),
|
|
168
|
+
isRootContentBlock && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BlockFields, { clientId: rootClientId }),
|
|
169
|
+
contentClientIds.map((clientId) => {
|
|
170
|
+
if (parentClientIds?.[clientId]) {
|
|
171
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
172
|
+
DrillDownButton,
|
|
173
|
+
{
|
|
174
|
+
clientId
|
|
175
|
+
},
|
|
176
|
+
clientId
|
|
177
|
+
);
|
|
178
|
+
}
|
|
179
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BlockFields, { clientId }, clientId);
|
|
180
|
+
})
|
|
181
|
+
] });
|
|
182
|
+
}
|
|
183
|
+
function ContentOnlyControls({ rootClientId }) {
|
|
184
|
+
const { updatedRootClientId, nestedContentClientIds, contentClientIds } = (0, import_data.useSelect)(
|
|
185
|
+
(select) => {
|
|
186
|
+
const { getClientIdsOfDescendants, getBlockEditingMode } = select(import_store.store);
|
|
187
|
+
const _nestedContentClientIds = {};
|
|
188
|
+
const _contentClientIds = [];
|
|
189
|
+
let allNestedClientIds = [];
|
|
190
|
+
const allContentClientIds = getClientIdsOfDescendants(
|
|
191
|
+
rootClientId
|
|
192
|
+
).filter(
|
|
193
|
+
(clientId) => getBlockEditingMode(clientId) === "contentOnly"
|
|
194
|
+
);
|
|
195
|
+
for (const clientId of allContentClientIds) {
|
|
196
|
+
const childClientIds = getClientIdsOfDescendants(
|
|
197
|
+
clientId
|
|
198
|
+
).filter(
|
|
199
|
+
(childClientId) => getBlockEditingMode(childClientId) === "contentOnly"
|
|
200
|
+
);
|
|
201
|
+
if (childClientIds.length > 1 && !allNestedClientIds.includes(clientId)) {
|
|
202
|
+
_nestedContentClientIds[clientId] = childClientIds;
|
|
203
|
+
allNestedClientIds = [
|
|
204
|
+
allNestedClientIds,
|
|
205
|
+
...childClientIds
|
|
206
|
+
];
|
|
207
|
+
}
|
|
208
|
+
if (!allNestedClientIds.includes(clientId)) {
|
|
209
|
+
_contentClientIds.push(clientId);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
if (_contentClientIds.length === 1 && Object.keys(_nestedContentClientIds).length === 1) {
|
|
213
|
+
const onlyParentClientId = Object.keys(
|
|
214
|
+
_nestedContentClientIds
|
|
215
|
+
)[0];
|
|
216
|
+
return {
|
|
217
|
+
updatedRootClientId: onlyParentClientId,
|
|
218
|
+
contentClientIds: _nestedContentClientIds[onlyParentClientId],
|
|
219
|
+
nestedContentClientIds: {}
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
return {
|
|
223
|
+
nestedContentClientIds: _nestedContentClientIds,
|
|
224
|
+
contentClientIds: _contentClientIds
|
|
225
|
+
};
|
|
226
|
+
},
|
|
227
|
+
[rootClientId]
|
|
228
|
+
);
|
|
229
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_components.Navigator, { initialPath: "/", children: [
|
|
230
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
231
|
+
import_components.Navigator.Screen,
|
|
232
|
+
{
|
|
233
|
+
path: "/",
|
|
234
|
+
className: "block-editor-content-only-controls__screen",
|
|
235
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
236
|
+
ContentOnlyControlsScreen,
|
|
237
|
+
{
|
|
238
|
+
rootClientId: updatedRootClientId ?? rootClientId,
|
|
239
|
+
contentClientIds,
|
|
240
|
+
parentClientIds: nestedContentClientIds
|
|
241
|
+
}
|
|
242
|
+
)
|
|
243
|
+
}
|
|
244
|
+
),
|
|
245
|
+
Object.keys(nestedContentClientIds).map((clientId) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
246
|
+
import_components.Navigator.Screen,
|
|
247
|
+
{
|
|
248
|
+
path: `/${clientId}`,
|
|
249
|
+
className: "block-editor-content-only-controls__screen",
|
|
250
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
251
|
+
ContentOnlyControlsScreen,
|
|
252
|
+
{
|
|
253
|
+
isNested: true,
|
|
254
|
+
rootClientId: clientId,
|
|
255
|
+
contentClientIds: nestedContentClientIds[clientId]
|
|
256
|
+
}
|
|
257
|
+
)
|
|
258
|
+
},
|
|
259
|
+
clientId
|
|
260
|
+
))
|
|
261
|
+
] });
|
|
262
|
+
}
|
|
263
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/components/content-only-controls/index.js"],
|
|
4
|
+
"sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { store as blocksStore } from '@wordpress/blocks';\nimport {\n\t__experimentalToolsPanel as ToolsPanel,\n\t__experimentalHStack as HStack,\n\tIcon,\n\tNavigator,\n} from '@wordpress/components';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { __ } from '@wordpress/i18n';\nimport { arrowLeft, arrowRight } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport { unlock } from '../../lock-unlock';\nimport { store as blockEditorStore } from '../../store';\nimport BlockIcon from '../block-icon';\nimport useBlockDisplayTitle from '../block-title/use-block-display-title';\nimport useBlockDisplayInformation from '../use-block-display-information';\nimport { useInspectorPopoverPlacement } from './use-inspector-popover-placement';\n\n// controls\nimport PlainText from './plain-text';\nimport RichText from './rich-text';\nimport Media from './media';\nimport Link from './link';\n\nconst controls = {\n\tPlainText,\n\tRichText,\n\tMedia,\n\tLink,\n};\n\nfunction BlockAttributeToolsPanelItem( {\n\tclientId,\n\tcontrol,\n\tblockType,\n\tattributeValues,\n} ) {\n\tconst { updateBlockAttributes } = useDispatch( blockEditorStore );\n\tconst ControlComponent = controls[ control.type ];\n\n\tif ( ! ControlComponent ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<ControlComponent\n\t\t\tclientId={ clientId }\n\t\t\tcontrol={ control }\n\t\t\tblockType={ blockType }\n\t\t\tattributeValues={ attributeValues }\n\t\t\tupdateAttributes={ ( attributes ) =>\n\t\t\t\tupdateBlockAttributes( clientId, attributes )\n\t\t\t}\n\t\t/>\n\t);\n}\n\nfunction BlockFields( { clientId } ) {\n\tconst { attributes, blockType } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlockAttributes, getBlockName } =\n\t\t\t\tselect( blockEditorStore );\n\t\t\tconst { getBlockType } = select( blocksStore );\n\t\t\tconst blockName = getBlockName( clientId );\n\t\t\treturn {\n\t\t\t\tattributes: getBlockAttributes( clientId ),\n\t\t\t\tblockType: getBlockType( blockName ),\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\n\tconst blockTitle = useBlockDisplayTitle( {\n\t\tclientId,\n\t\tcontext: 'list-view',\n\t} );\n\tconst blockInformation = useBlockDisplayInformation( clientId );\n\tconst popoverPlacementProps = useInspectorPopoverPlacement();\n\n\tif ( ! blockType?.fields?.length ) {\n\t\t// TODO - we might still want to show a placeholder for blocks with no fields.\n\t\t// for example, a way to select the block.\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<ToolsPanel\n\t\t\tlabel={\n\t\t\t\t<HStack spacing={ 1 }>\n\t\t\t\t\t<BlockIcon icon={ blockInformation?.icon } />\n\t\t\t\t\t<div>{ blockTitle }</div>\n\t\t\t\t</HStack>\n\t\t\t}\n\t\t\tpanelId={ clientId }\n\t\t\tdropdownMenuProps={ popoverPlacementProps }\n\t\t>\n\t\t\t{ blockType?.fields?.map( ( field, index ) => (\n\t\t\t\t<BlockAttributeToolsPanelItem\n\t\t\t\t\tkey={ `${ clientId }/${ index }` }\n\t\t\t\t\tclientId={ clientId }\n\t\t\t\t\tcontrol={ field }\n\t\t\t\t\tblockType={ blockType }\n\t\t\t\t\tattributeValues={ attributes }\n\t\t\t\t/>\n\t\t\t) ) }\n\t\t</ToolsPanel>\n\t);\n}\n\nfunction DrillDownButton( { clientId } ) {\n\tconst blockTitle = useBlockDisplayTitle( {\n\t\tclientId,\n\t\tcontext: 'list-view',\n\t} );\n\tconst blockInformation = useBlockDisplayInformation( clientId );\n\treturn (\n\t\t<div className=\"block-editor-content-only-controls__button-panel\">\n\t\t\t<Navigator.Button\n\t\t\t\tpath={ `/${ clientId }` }\n\t\t\t\tclassName=\"block-editor-content-only-controls__drill-down-button\"\n\t\t\t>\n\t\t\t\t<HStack expanded justify=\"space-between\">\n\t\t\t\t\t<HStack justify=\"flex-start\" spacing={ 1 }>\n\t\t\t\t\t\t<BlockIcon icon={ blockInformation?.icon } />\n\t\t\t\t\t\t<div>{ blockTitle }</div>\n\t\t\t\t\t</HStack>\n\t\t\t\t\t<Icon icon={ arrowRight } />\n\t\t\t\t</HStack>\n\t\t\t</Navigator.Button>\n\t\t</div>\n\t);\n}\n\nfunction ContentOnlyControlsScreen( {\n\trootClientId,\n\tcontentClientIds,\n\tparentClientIds,\n\tisNested,\n} ) {\n\tconst isRootContentBlock = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlockName } = select( blockEditorStore );\n\t\t\tconst blockName = getBlockName( rootClientId );\n\t\t\tconst { hasContentRoleAttribute } = unlock( select( blocksStore ) );\n\t\t\treturn hasContentRoleAttribute( blockName );\n\t\t},\n\t\t[ rootClientId ]\n\t);\n\n\tif ( ! isRootContentBlock && ! contentClientIds.length ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t{ isNested && (\n\t\t\t\t<div className=\"block-editor-content-only-controls__button-panel\">\n\t\t\t\t\t<Navigator.BackButton className=\"block-editor-content-only-controls__back-button\">\n\t\t\t\t\t\t<HStack expanded spacing={ 1 } justify=\"flex-start\">\n\t\t\t\t\t\t\t<Icon icon={ arrowLeft } />\n\t\t\t\t\t\t\t<div>{ __( 'Back' ) }</div>\n\t\t\t\t\t\t</HStack>\n\t\t\t\t\t</Navigator.BackButton>\n\t\t\t\t</div>\n\t\t\t) }\n\t\t\t{ isRootContentBlock && <BlockFields clientId={ rootClientId } /> }\n\t\t\t{ contentClientIds.map( ( clientId ) => {\n\t\t\t\tif ( parentClientIds?.[ clientId ] ) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<DrillDownButton\n\t\t\t\t\t\t\tkey={ clientId }\n\t\t\t\t\t\t\tclientId={ clientId }\n\t\t\t\t\t\t/>\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn <BlockFields key={ clientId } clientId={ clientId } />;\n\t\t\t} ) }\n\t\t</>\n\t);\n}\n\nexport default function ContentOnlyControls( { rootClientId } ) {\n\tconst { updatedRootClientId, nestedContentClientIds, contentClientIds } =\n\t\tuseSelect(\n\t\t\t( select ) => {\n\t\t\t\tconst { getClientIdsOfDescendants, getBlockEditingMode } =\n\t\t\t\t\tselect( blockEditorStore );\n\n\t\t\t\t// _nestedContentClientIds is for content blocks within 'drilldowns'.\n\t\t\t\t// It's an object where the key is the parent clientId, and the element is\n\t\t\t\t// an array of child clientIds whose controls are shown within the drilldown.\n\t\t\t\tconst _nestedContentClientIds = {};\n\n\t\t\t\t// _contentClientIds is the list of contentClientIds for blocks being\n\t\t\t\t// shown at the root level. Includes parent blocks that might have a drilldown,\n\t\t\t\t// but not the children of those blocks.\n\t\t\t\tconst _contentClientIds = [];\n\n\t\t\t\t// An array of all nested client ids. Used for ensuring blocks within drilldowns\n\t\t\t\t// don't appear at the root level.\n\t\t\t\tlet allNestedClientIds = [];\n\n\t\t\t\t// A flattened list of all content clientIds to arrange into the\n\t\t\t\t// groups above.\n\t\t\t\tconst allContentClientIds = getClientIdsOfDescendants(\n\t\t\t\t\trootClientId\n\t\t\t\t).filter(\n\t\t\t\t\t( clientId ) =>\n\t\t\t\t\t\tgetBlockEditingMode( clientId ) === 'contentOnly'\n\t\t\t\t);\n\n\t\t\t\tfor ( const clientId of allContentClientIds ) {\n\t\t\t\t\tconst childClientIds = getClientIdsOfDescendants(\n\t\t\t\t\t\tclientId\n\t\t\t\t\t).filter(\n\t\t\t\t\t\t( childClientId ) =>\n\t\t\t\t\t\t\tgetBlockEditingMode( childClientId ) ===\n\t\t\t\t\t\t\t'contentOnly'\n\t\t\t\t\t);\n\n\t\t\t\t\t// If there's more than one child block, use a drilldown.\n\t\t\t\t\tif (\n\t\t\t\t\t\tchildClientIds.length > 1 &&\n\t\t\t\t\t\t! allNestedClientIds.includes( clientId )\n\t\t\t\t\t) {\n\t\t\t\t\t\t_nestedContentClientIds[ clientId ] = childClientIds;\n\t\t\t\t\t\tallNestedClientIds = [\n\t\t\t\t\t\t\tallNestedClientIds,\n\t\t\t\t\t\t\t...childClientIds,\n\t\t\t\t\t\t];\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! allNestedClientIds.includes( clientId ) ) {\n\t\t\t\t\t\t_contentClientIds.push( clientId );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Avoid showing only one drilldown block at the root.\n\t\t\t\tif (\n\t\t\t\t\t_contentClientIds.length === 1 &&\n\t\t\t\t\tObject.keys( _nestedContentClientIds ).length === 1\n\t\t\t\t) {\n\t\t\t\t\tconst onlyParentClientId = Object.keys(\n\t\t\t\t\t\t_nestedContentClientIds\n\t\t\t\t\t)[ 0 ];\n\t\t\t\t\treturn {\n\t\t\t\t\t\tupdatedRootClientId: onlyParentClientId,\n\t\t\t\t\t\tcontentClientIds:\n\t\t\t\t\t\t\t_nestedContentClientIds[ onlyParentClientId ],\n\t\t\t\t\t\tnestedContentClientIds: {},\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tnestedContentClientIds: _nestedContentClientIds,\n\t\t\t\t\tcontentClientIds: _contentClientIds,\n\t\t\t\t};\n\t\t\t},\n\t\t\t[ rootClientId ]\n\t\t);\n\n\treturn (\n\t\t<Navigator initialPath=\"/\">\n\t\t\t<Navigator.Screen\n\t\t\t\tpath=\"/\"\n\t\t\t\tclassName=\"block-editor-content-only-controls__screen\"\n\t\t\t>\n\t\t\t\t<ContentOnlyControlsScreen\n\t\t\t\t\trootClientId={ updatedRootClientId ?? rootClientId }\n\t\t\t\t\tcontentClientIds={ contentClientIds }\n\t\t\t\t\tparentClientIds={ nestedContentClientIds }\n\t\t\t\t/>\n\t\t\t</Navigator.Screen>\n\t\t\t{ Object.keys( nestedContentClientIds ).map( ( clientId ) => (\n\t\t\t\t<Navigator.Screen\n\t\t\t\t\tkey={ clientId }\n\t\t\t\t\tpath={ `/${ clientId }` }\n\t\t\t\t\tclassName=\"block-editor-content-only-controls__screen\"\n\t\t\t\t>\n\t\t\t\t\t<ContentOnlyControlsScreen\n\t\t\t\t\t\tisNested\n\t\t\t\t\t\trootClientId={ clientId }\n\t\t\t\t\t\tcontentClientIds={ nestedContentClientIds[ clientId ] }\n\t\t\t\t\t/>\n\t\t\t\t</Navigator.Screen>\n\t\t\t) ) }\n\t\t</Navigator>\n\t);\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["PlainText", "RichText", "Media", "Link", "blockEditorStore", "blocksStore", "useBlockDisplayTitle", "useBlockDisplayInformation", "ToolsPanel", "HStack", "BlockIcon"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
|
|
30
|
+
// packages/block-editor/src/components/content-only-controls/link/index.js
|
|
31
|
+
var link_exports = {};
|
|
32
|
+
__export(link_exports, {
|
|
33
|
+
NEW_TAB_REL: () => NEW_TAB_REL,
|
|
34
|
+
NEW_TAB_TARGET: () => NEW_TAB_TARGET,
|
|
35
|
+
NOFOLLOW_REL: () => NOFOLLOW_REL,
|
|
36
|
+
default: () => Link,
|
|
37
|
+
getUpdatedLinkAttributes: () => getUpdatedLinkAttributes
|
|
38
|
+
});
|
|
39
|
+
module.exports = __toCommonJS(link_exports);
|
|
40
|
+
var import_components = require("@wordpress/components");
|
|
41
|
+
var import_element = require("@wordpress/element");
|
|
42
|
+
var import_i18n = require("@wordpress/i18n");
|
|
43
|
+
var import_icons = require("@wordpress/icons");
|
|
44
|
+
var import_url = require("@wordpress/url");
|
|
45
|
+
var import_link_control = __toESM(require("../../link-control"));
|
|
46
|
+
var import_use_inspector_popover_placement = require("../use-inspector-popover-placement");
|
|
47
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
48
|
+
var NEW_TAB_REL = "noreferrer noopener";
|
|
49
|
+
var NEW_TAB_TARGET = "_blank";
|
|
50
|
+
var NOFOLLOW_REL = "nofollow";
|
|
51
|
+
function getUpdatedLinkAttributes({
|
|
52
|
+
rel = "",
|
|
53
|
+
url = "",
|
|
54
|
+
opensInNewTab,
|
|
55
|
+
nofollow
|
|
56
|
+
}) {
|
|
57
|
+
let newLinkTarget;
|
|
58
|
+
let updatedRel = rel;
|
|
59
|
+
if (opensInNewTab) {
|
|
60
|
+
newLinkTarget = NEW_TAB_TARGET;
|
|
61
|
+
updatedRel = updatedRel?.includes(NEW_TAB_REL) ? updatedRel : updatedRel + ` ${NEW_TAB_REL}`;
|
|
62
|
+
} else {
|
|
63
|
+
const relRegex = new RegExp(`\\b${NEW_TAB_REL}\\s*`, "g");
|
|
64
|
+
updatedRel = updatedRel?.replace(relRegex, "").trim();
|
|
65
|
+
}
|
|
66
|
+
if (nofollow) {
|
|
67
|
+
updatedRel = updatedRel?.includes(NOFOLLOW_REL) ? updatedRel : (updatedRel + ` ${NOFOLLOW_REL}`).trim();
|
|
68
|
+
} else {
|
|
69
|
+
const relRegex = new RegExp(`\\b${NOFOLLOW_REL}\\s*`, "g");
|
|
70
|
+
updatedRel = updatedRel?.replace(relRegex, "").trim();
|
|
71
|
+
}
|
|
72
|
+
return {
|
|
73
|
+
url: (0, import_url.prependHTTP)(url),
|
|
74
|
+
linkTarget: newLinkTarget,
|
|
75
|
+
rel: updatedRel || void 0
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
function Link({
|
|
79
|
+
clientId,
|
|
80
|
+
control,
|
|
81
|
+
blockType,
|
|
82
|
+
attributeValues,
|
|
83
|
+
updateAttributes
|
|
84
|
+
}) {
|
|
85
|
+
const [isLinkControlOpen, setIsLinkControlOpen] = (0, import_element.useState)(false);
|
|
86
|
+
const { popoverProps } = (0, import_use_inspector_popover_placement.useInspectorPopoverPlacement)({
|
|
87
|
+
isControl: true
|
|
88
|
+
});
|
|
89
|
+
const hrefKey = control.mapping.href;
|
|
90
|
+
const relKey = control.mapping.rel;
|
|
91
|
+
const targetKey = control.mapping.target;
|
|
92
|
+
const destinationKey = control.mapping.destination;
|
|
93
|
+
const href = attributeValues[hrefKey];
|
|
94
|
+
const rel = attributeValues[relKey];
|
|
95
|
+
const target = attributeValues[targetKey];
|
|
96
|
+
const destination = attributeValues[destinationKey];
|
|
97
|
+
const hrefDefaultValue = blockType.attributes[href]?.defaultValue ?? void 0;
|
|
98
|
+
const relDefaultValue = blockType.attributes[rel]?.defaultValue ?? void 0;
|
|
99
|
+
const targetDefaultValue = blockType.attributes[target]?.defaultValue ?? void 0;
|
|
100
|
+
const destinationDefaultValue = blockType.attributes[destination]?.defaultValue ?? void 0;
|
|
101
|
+
const opensInNewTab = target === NEW_TAB_TARGET;
|
|
102
|
+
const nofollow = rel === NOFOLLOW_REL;
|
|
103
|
+
const linkValue = (0, import_element.useMemo)(
|
|
104
|
+
() => ({ url: href, opensInNewTab, nofollow }),
|
|
105
|
+
[href, opensInNewTab, nofollow]
|
|
106
|
+
);
|
|
107
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
108
|
+
import_components.__experimentalToolsPanelItem,
|
|
109
|
+
{
|
|
110
|
+
panelId: clientId,
|
|
111
|
+
label: control.label,
|
|
112
|
+
hasValue: () => !!href,
|
|
113
|
+
onDeselect: () => {
|
|
114
|
+
updateAttributes({
|
|
115
|
+
[hrefKey]: hrefDefaultValue,
|
|
116
|
+
[relKey]: relDefaultValue,
|
|
117
|
+
[targetKey]: targetDefaultValue,
|
|
118
|
+
[destinationKey]: destinationDefaultValue
|
|
119
|
+
});
|
|
120
|
+
},
|
|
121
|
+
isShownByDefault: control.shownByDefault,
|
|
122
|
+
children: [
|
|
123
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
124
|
+
import_components.Button,
|
|
125
|
+
{
|
|
126
|
+
__next40pxDefaultSize: true,
|
|
127
|
+
className: "block-editor-content-only-controls__link",
|
|
128
|
+
onClick: () => {
|
|
129
|
+
setIsLinkControlOpen(true);
|
|
130
|
+
},
|
|
131
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
132
|
+
import_components.__experimentalGrid,
|
|
133
|
+
{
|
|
134
|
+
rowGap: 0,
|
|
135
|
+
columnGap: 8,
|
|
136
|
+
templateColumns: "24px 1fr",
|
|
137
|
+
className: "block-editor-content-only-controls__link-row",
|
|
138
|
+
children: [
|
|
139
|
+
href && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
|
|
140
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_components.Icon, { icon: import_icons.link, size: 24 }),
|
|
141
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "block-editor-content-only-controls__link-title", children: href })
|
|
142
|
+
] }),
|
|
143
|
+
!href && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
|
|
144
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
145
|
+
import_components.Icon,
|
|
146
|
+
{
|
|
147
|
+
icon: import_icons.link,
|
|
148
|
+
size: 24,
|
|
149
|
+
style: { opacity: 0.3 }
|
|
150
|
+
}
|
|
151
|
+
),
|
|
152
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "block-editor-content-only-controls__link-title", children: (0, import_i18n.__)("Link") })
|
|
153
|
+
] })
|
|
154
|
+
]
|
|
155
|
+
}
|
|
156
|
+
)
|
|
157
|
+
}
|
|
158
|
+
),
|
|
159
|
+
isLinkControlOpen && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
160
|
+
import_components.Popover,
|
|
161
|
+
{
|
|
162
|
+
onClose: () => {
|
|
163
|
+
setIsLinkControlOpen(false);
|
|
164
|
+
},
|
|
165
|
+
...popoverProps ?? {},
|
|
166
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
167
|
+
import_link_control.default,
|
|
168
|
+
{
|
|
169
|
+
value: linkValue,
|
|
170
|
+
onChange: (newValues) => {
|
|
171
|
+
const updatedAttrs = getUpdatedLinkAttributes({
|
|
172
|
+
rel,
|
|
173
|
+
...newValues
|
|
174
|
+
});
|
|
175
|
+
updateAttributes({
|
|
176
|
+
[hrefKey]: updatedAttrs.url,
|
|
177
|
+
[relKey]: updatedAttrs.rel,
|
|
178
|
+
[targetKey]: updatedAttrs.linkTarget
|
|
179
|
+
});
|
|
180
|
+
},
|
|
181
|
+
onRemove: () => {
|
|
182
|
+
updateAttributes({
|
|
183
|
+
[hrefKey]: hrefDefaultValue,
|
|
184
|
+
[relKey]: relDefaultValue,
|
|
185
|
+
[targetKey]: targetDefaultValue,
|
|
186
|
+
[destinationKey]: destinationDefaultValue
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
)
|
|
191
|
+
}
|
|
192
|
+
)
|
|
193
|
+
]
|
|
194
|
+
}
|
|
195
|
+
);
|
|
196
|
+
}
|
|
197
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
198
|
+
0 && (module.exports = {
|
|
199
|
+
NEW_TAB_REL,
|
|
200
|
+
NEW_TAB_TARGET,
|
|
201
|
+
NOFOLLOW_REL,
|
|
202
|
+
getUpdatedLinkAttributes
|
|
203
|
+
});
|
|
204
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/components/content-only-controls/link/index.js"],
|
|
4
|
+
"sourcesContent": ["/**\n * WordPress dependencies\n */\nimport {\n\tButton,\n\tIcon,\n\t__experimentalToolsPanelItem as ToolsPanelItem,\n\t__experimentalGrid as Grid,\n\tPopover,\n} from '@wordpress/components';\nimport { useMemo, useState } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\nimport { link } from '@wordpress/icons';\nimport { prependHTTP } from '@wordpress/url';\n\n/**\n * Internal dependencies\n */\nimport LinkControl from '../../link-control';\nimport { useInspectorPopoverPlacement } from '../use-inspector-popover-placement';\n\nexport const NEW_TAB_REL = 'noreferrer noopener';\nexport const NEW_TAB_TARGET = '_blank';\nexport const NOFOLLOW_REL = 'nofollow';\n\n/**\n * Updates the link attributes.\n *\n * @param {Object} attributes The current block attributes.\n * @param {string} attributes.rel The current link rel attribute.\n * @param {string} attributes.url The current link url.\n * @param {boolean} attributes.opensInNewTab Whether the link should open in a new window.\n * @param {boolean} attributes.nofollow Whether the link should be marked as nofollow.\n */\nexport function getUpdatedLinkAttributes( {\n\trel = '',\n\turl = '',\n\topensInNewTab,\n\tnofollow,\n} ) {\n\tlet newLinkTarget;\n\t// Since `rel` is editable attribute, we need to check for existing values and proceed accordingly.\n\tlet updatedRel = rel;\n\n\tif ( opensInNewTab ) {\n\t\tnewLinkTarget = NEW_TAB_TARGET;\n\t\tupdatedRel = updatedRel?.includes( NEW_TAB_REL )\n\t\t\t? updatedRel\n\t\t\t: updatedRel + ` ${ NEW_TAB_REL }`;\n\t} else {\n\t\tconst relRegex = new RegExp( `\\\\b${ NEW_TAB_REL }\\\\s*`, 'g' );\n\t\tupdatedRel = updatedRel?.replace( relRegex, '' ).trim();\n\t}\n\n\tif ( nofollow ) {\n\t\tupdatedRel = updatedRel?.includes( NOFOLLOW_REL )\n\t\t\t? updatedRel\n\t\t\t: ( updatedRel + ` ${ NOFOLLOW_REL }` ).trim();\n\t} else {\n\t\tconst relRegex = new RegExp( `\\\\b${ NOFOLLOW_REL }\\\\s*`, 'g' );\n\t\tupdatedRel = updatedRel?.replace( relRegex, '' ).trim();\n\t}\n\n\treturn {\n\t\turl: prependHTTP( url ),\n\t\tlinkTarget: newLinkTarget,\n\t\trel: updatedRel || undefined,\n\t};\n}\n\nexport default function Link( {\n\tclientId,\n\tcontrol,\n\tblockType,\n\tattributeValues,\n\tupdateAttributes,\n} ) {\n\tconst [ isLinkControlOpen, setIsLinkControlOpen ] = useState( false );\n\tconst { popoverProps } = useInspectorPopoverPlacement( {\n\t\tisControl: true,\n\t} );\n\tconst hrefKey = control.mapping.href;\n\tconst relKey = control.mapping.rel;\n\tconst targetKey = control.mapping.target;\n\tconst destinationKey = control.mapping.destination;\n\n\tconst href = attributeValues[ hrefKey ];\n\tconst rel = attributeValues[ relKey ];\n\tconst target = attributeValues[ targetKey ];\n\tconst destination = attributeValues[ destinationKey ];\n\n\tconst hrefDefaultValue =\n\t\tblockType.attributes[ href ]?.defaultValue ?? undefined;\n\tconst relDefaultValue =\n\t\tblockType.attributes[ rel ]?.defaultValue ?? undefined;\n\tconst targetDefaultValue =\n\t\tblockType.attributes[ target ]?.defaultValue ?? undefined;\n\tconst destinationDefaultValue =\n\t\tblockType.attributes[ destination ]?.defaultValue ?? undefined;\n\n\tconst opensInNewTab = target === NEW_TAB_TARGET;\n\tconst nofollow = rel === NOFOLLOW_REL;\n\n\t// Memoize link value to avoid overriding the LinkControl's internal state.\n\t// This is a temporary fix. See https://github.com/WordPress/gutenberg/issues/51256.\n\tconst linkValue = useMemo(\n\t\t() => ( { url: href, opensInNewTab, nofollow } ),\n\t\t[ href, opensInNewTab, nofollow ]\n\t);\n\n\treturn (\n\t\t<ToolsPanelItem\n\t\t\tpanelId={ clientId }\n\t\t\tlabel={ control.label }\n\t\t\thasValue={ () => !! href }\n\t\t\tonDeselect={ () => {\n\t\t\t\tupdateAttributes( {\n\t\t\t\t\t[ hrefKey ]: hrefDefaultValue,\n\t\t\t\t\t[ relKey ]: relDefaultValue,\n\t\t\t\t\t[ targetKey ]: targetDefaultValue,\n\t\t\t\t\t[ destinationKey ]: destinationDefaultValue,\n\t\t\t\t} );\n\t\t\t} }\n\t\t\tisShownByDefault={ control.shownByDefault }\n\t\t>\n\t\t\t<Button\n\t\t\t\t__next40pxDefaultSize\n\t\t\t\tclassName=\"block-editor-content-only-controls__link\"\n\t\t\t\tonClick={ () => {\n\t\t\t\t\tsetIsLinkControlOpen( true );\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t<Grid\n\t\t\t\t\trowGap={ 0 }\n\t\t\t\t\tcolumnGap={ 8 }\n\t\t\t\t\ttemplateColumns=\"24px 1fr\"\n\t\t\t\t\tclassName=\"block-editor-content-only-controls__link-row\"\n\t\t\t\t>\n\t\t\t\t\t{ href && (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<Icon icon={ link } size={ 24 } />\n\t\t\t\t\t\t\t<span className=\"block-editor-content-only-controls__link-title\">\n\t\t\t\t\t\t\t\t{ href }\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</>\n\t\t\t\t\t) }\n\t\t\t\t\t{ ! href && (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\t\ticon={ link }\n\t\t\t\t\t\t\t\tsize={ 24 }\n\t\t\t\t\t\t\t\tstyle={ { opacity: 0.3 } }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<span className=\"block-editor-content-only-controls__link-title\">\n\t\t\t\t\t\t\t\t{ __( 'Link' ) }\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</>\n\t\t\t\t\t) }\n\t\t\t\t</Grid>\n\t\t\t</Button>\n\t\t\t{ isLinkControlOpen && (\n\t\t\t\t<Popover\n\t\t\t\t\tonClose={ () => {\n\t\t\t\t\t\tsetIsLinkControlOpen( false );\n\t\t\t\t\t} }\n\t\t\t\t\t{ ...( popoverProps ?? {} ) }\n\t\t\t\t>\n\t\t\t\t\t<LinkControl\n\t\t\t\t\t\tvalue={ linkValue }\n\t\t\t\t\t\tonChange={ ( newValues ) => {\n\t\t\t\t\t\t\tconst updatedAttrs = getUpdatedLinkAttributes( {\n\t\t\t\t\t\t\t\trel,\n\t\t\t\t\t\t\t\t...newValues,\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t\tupdateAttributes( {\n\t\t\t\t\t\t\t\t[ hrefKey ]: updatedAttrs.url,\n\t\t\t\t\t\t\t\t[ relKey ]: updatedAttrs.rel,\n\t\t\t\t\t\t\t\t[ targetKey ]: updatedAttrs.linkTarget,\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tonRemove={ () => {\n\t\t\t\t\t\t\tupdateAttributes( {\n\t\t\t\t\t\t\t\t[ hrefKey ]: hrefDefaultValue,\n\t\t\t\t\t\t\t\t[ relKey ]: relDefaultValue,\n\t\t\t\t\t\t\t\t[ targetKey ]: targetDefaultValue,\n\t\t\t\t\t\t\t\t[ destinationKey ]: destinationDefaultValue,\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} }\n\t\t\t\t\t/>\n\t\t\t\t</Popover>\n\t\t\t) }\n\t\t</ToolsPanelItem>\n\t);\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["ToolsPanelItem", "Grid", "LinkControl"]
|
|
7
|
+
}
|