@wordpress/block-editor 13.0.3 → 13.2.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 +21 -17
- package/README.md +1 -1
- package/build/components/block-lock/modal.js +67 -67
- package/build/components/block-lock/modal.js.map +1 -1
- package/build/components/block-mover/index.js +12 -6
- package/build/components/block-mover/index.js.map +1 -1
- package/build/components/child-layout-control/index.js +185 -127
- package/build/components/child-layout-control/index.js.map +1 -1
- package/build/components/date-format-picker/index.js +18 -10
- package/build/components/date-format-picker/index.js.map +1 -1
- package/build/components/grid/grid-item-movers.js +97 -0
- package/build/components/grid/grid-item-movers.js.map +1 -0
- package/build/components/{grid-visualizer → grid}/grid-item-resizer.js +18 -56
- package/build/components/grid/grid-item-resizer.js.map +1 -0
- package/build/components/grid/grid-visualizer.js +225 -0
- package/build/components/grid/grid-visualizer.js.map +1 -0
- package/build/components/{grid-visualizer → grid}/index.js +14 -0
- package/build/components/grid/index.js.map +1 -0
- package/build/components/grid/use-get-number-of-blocks-before-cell.js +40 -0
- package/build/components/grid/use-get-number-of-blocks-before-cell.js.map +1 -0
- package/build/components/grid/use-grid-layout-sync.js +162 -0
- package/build/components/grid/use-grid-layout-sync.js.map +1 -0
- package/build/components/grid/utils.js +145 -0
- package/build/components/grid/utils.js.map +1 -0
- package/build/components/inner-blocks/index.js +1 -1
- package/build/components/inner-blocks/index.js.map +1 -1
- package/build/components/inserter/block-types-tab.native.js +1 -1
- package/build/components/inserter/block-types-tab.native.js.map +1 -1
- package/build/components/link-control/link-preview.js +12 -1
- package/build/components/link-control/link-preview.js.map +1 -1
- package/build/components/provider/use-block-sync.js +1 -7
- package/build/components/provider/use-block-sync.js.map +1 -1
- package/build/components/rich-text/event-listeners/input-rules.js +1 -0
- package/build/components/rich-text/event-listeners/input-rules.js.map +1 -1
- package/build/components/rich-text/index.native.js +14 -4
- package/build/components/rich-text/index.native.js.map +1 -1
- package/build/components/rich-text/native/index.native.js +20 -4
- package/build/components/rich-text/native/index.native.js.map +1 -1
- package/build/hooks/block-style-variation.js +2 -2
- package/build/hooks/block-style-variation.js.map +1 -1
- package/build/hooks/layout-child.js +29 -21
- package/build/hooks/layout-child.js.map +1 -1
- package/build/layouts/grid.js +24 -47
- package/build/layouts/grid.js.map +1 -1
- package/build/store/private-actions.js +0 -34
- package/build/store/private-actions.js.map +1 -1
- package/build-module/components/block-lock/modal.js +67 -67
- package/build-module/components/block-lock/modal.js.map +1 -1
- package/build-module/components/block-mover/index.js +12 -6
- package/build-module/components/block-mover/index.js.map +1 -1
- package/build-module/components/child-layout-control/index.js +185 -127
- package/build-module/components/child-layout-control/index.js.map +1 -1
- package/build-module/components/date-format-picker/index.js +19 -11
- package/build-module/components/date-format-picker/index.js.map +1 -1
- package/build-module/components/grid/grid-item-movers.js +90 -0
- package/build-module/components/grid/grid-item-movers.js.map +1 -0
- package/build-module/components/{grid-visualizer → grid}/grid-item-resizer.js +13 -51
- package/build-module/components/grid/grid-item-resizer.js.map +1 -0
- package/build-module/components/grid/grid-visualizer.js +217 -0
- package/build-module/components/grid/grid-visualizer.js.map +1 -0
- package/build-module/components/grid/index.js +5 -0
- package/build-module/components/grid/index.js.map +1 -0
- package/build-module/components/grid/use-get-number-of-blocks-before-cell.js +33 -0
- package/build-module/components/grid/use-get-number-of-blocks-before-cell.js.map +1 -0
- package/build-module/components/grid/use-grid-layout-sync.js +155 -0
- package/build-module/components/grid/use-grid-layout-sync.js.map +1 -0
- package/build-module/components/grid/utils.js +131 -0
- package/build-module/components/grid/utils.js.map +1 -0
- package/build-module/components/inner-blocks/index.js +1 -1
- package/build-module/components/inner-blocks/index.js.map +1 -1
- package/build-module/components/inserter/block-types-tab.native.js +1 -1
- package/build-module/components/inserter/block-types-tab.native.js.map +1 -1
- package/build-module/components/link-control/link-preview.js +14 -1
- package/build-module/components/link-control/link-preview.js.map +1 -1
- package/build-module/components/provider/use-block-sync.js +1 -7
- package/build-module/components/provider/use-block-sync.js.map +1 -1
- package/build-module/components/rich-text/event-listeners/input-rules.js +1 -1
- package/build-module/components/rich-text/event-listeners/input-rules.js.map +1 -1
- package/build-module/components/rich-text/index.native.js +15 -5
- package/build-module/components/rich-text/index.native.js.map +1 -1
- package/build-module/components/rich-text/native/index.native.js +20 -4
- package/build-module/components/rich-text/native/index.native.js.map +1 -1
- package/build-module/hooks/block-style-variation.js +2 -2
- package/build-module/hooks/block-style-variation.js.map +1 -1
- package/build-module/hooks/layout-child.js +27 -19
- package/build-module/hooks/layout-child.js.map +1 -1
- package/build-module/layouts/grid.js +24 -47
- package/build-module/layouts/grid.js.map +1 -1
- package/build-module/store/private-actions.js +0 -33
- package/build-module/store/private-actions.js.map +1 -1
- package/build-style/style-rtl.css +38 -16
- package/build-style/style.css +38 -16
- package/package.json +31 -31
- package/src/components/block-lock/modal.js +95 -82
- package/src/components/block-lock/style.scss +11 -1
- package/src/components/block-mover/index.js +37 -24
- package/src/components/child-layout-control/index.js +224 -159
- package/src/components/date-format-picker/index.js +25 -13
- package/src/components/grid/grid-item-movers.js +128 -0
- package/src/components/{grid-visualizer → grid}/grid-item-resizer.js +14 -52
- package/src/components/grid/grid-visualizer.js +267 -0
- package/src/components/grid/index.js +4 -0
- package/src/components/grid/style.scss +63 -0
- package/src/components/grid/use-get-number-of-blocks-before-cell.js +30 -0
- package/src/components/grid/use-grid-layout-sync.js +167 -0
- package/src/components/grid/utils.js +178 -0
- package/src/components/inner-blocks/index.js +3 -1
- package/src/components/inserter/block-types-tab.native.js +2 -1
- package/src/components/link-control/link-preview.js +18 -1
- package/src/components/provider/use-block-sync.js +0 -6
- package/src/components/rich-text/event-listeners/input-rules.js +1 -1
- package/src/components/rich-text/index.native.js +14 -8
- package/src/components/rich-text/native/index.native.js +20 -1
- package/src/hooks/block-style-variation.js +2 -2
- package/src/hooks/layout-child.js +34 -14
- package/src/layouts/grid.js +54 -62
- package/src/store/private-actions.js +0 -29
- package/src/style.scss +1 -1
- package/build/components/grid-visualizer/grid-item-resizer.js.map +0 -1
- package/build/components/grid-visualizer/grid-visualizer.js +0 -92
- package/build/components/grid-visualizer/grid-visualizer.js.map +0 -1
- package/build/components/grid-visualizer/index.js.map +0 -1
- package/build/components/grid-visualizer/utils.js +0 -10
- package/build/components/grid-visualizer/utils.js.map +0 -1
- package/build/store/undo-ignore.js +0 -11
- package/build/store/undo-ignore.js.map +0 -1
- package/build-module/components/grid-visualizer/grid-item-resizer.js.map +0 -1
- package/build-module/components/grid-visualizer/grid-visualizer.js +0 -84
- package/build-module/components/grid-visualizer/grid-visualizer.js.map +0 -1
- package/build-module/components/grid-visualizer/index.js +0 -3
- package/build-module/components/grid-visualizer/index.js.map +0 -1
- package/build-module/components/grid-visualizer/utils.js +0 -4
- package/build-module/components/grid-visualizer/utils.js.map +0 -1
- package/build-module/store/undo-ignore.js +0 -5
- package/build-module/store/undo-ignore.js.map +0 -1
- package/src/components/grid-visualizer/grid-visualizer.js +0 -101
- package/src/components/grid-visualizer/index.js +0 -2
- package/src/components/grid-visualizer/style.scss +0 -34
- package/src/components/grid-visualizer/utils.js +0 -5
- package/src/store/undo-ignore.js +0 -4
- /package/src/components/font-sizes/{README.MD → README.md} +0 -0
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { useSelect } from '@wordpress/data';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Internal dependencies
|
|
8
|
+
*/
|
|
9
|
+
import { store as blockEditorStore } from '../../store';
|
|
10
|
+
export function useGetNumberOfBlocksBeforeCell(gridClientId, numColumns) {
|
|
11
|
+
const {
|
|
12
|
+
getBlockOrder,
|
|
13
|
+
getBlockAttributes
|
|
14
|
+
} = useSelect(blockEditorStore);
|
|
15
|
+
const getNumberOfBlocksBeforeCell = (column, row) => {
|
|
16
|
+
const targetIndex = (row - 1) * numColumns + column - 1;
|
|
17
|
+
let count = 0;
|
|
18
|
+
for (const clientId of getBlockOrder(gridClientId)) {
|
|
19
|
+
var _getBlockAttributes$s;
|
|
20
|
+
const {
|
|
21
|
+
columnStart,
|
|
22
|
+
rowStart
|
|
23
|
+
} = (_getBlockAttributes$s = getBlockAttributes(clientId).style?.layout) !== null && _getBlockAttributes$s !== void 0 ? _getBlockAttributes$s : {};
|
|
24
|
+
const cellIndex = (rowStart - 1) * numColumns + columnStart - 1;
|
|
25
|
+
if (cellIndex < targetIndex) {
|
|
26
|
+
count++;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return count;
|
|
30
|
+
};
|
|
31
|
+
return getNumberOfBlocksBeforeCell;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=use-get-number-of-blocks-before-cell.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useSelect","store","blockEditorStore","useGetNumberOfBlocksBeforeCell","gridClientId","numColumns","getBlockOrder","getBlockAttributes","getNumberOfBlocksBeforeCell","column","row","targetIndex","count","clientId","_getBlockAttributes$s","columnStart","rowStart","style","layout","cellIndex"],"sources":["@wordpress/block-editor/src/components/grid/use-get-number-of-blocks-before-cell.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\nexport function useGetNumberOfBlocksBeforeCell( gridClientId, numColumns ) {\n\tconst { getBlockOrder, getBlockAttributes } = useSelect( blockEditorStore );\n\n\tconst getNumberOfBlocksBeforeCell = ( column, row ) => {\n\t\tconst targetIndex = ( row - 1 ) * numColumns + column - 1;\n\n\t\tlet count = 0;\n\t\tfor ( const clientId of getBlockOrder( gridClientId ) ) {\n\t\t\tconst { columnStart, rowStart } =\n\t\t\t\tgetBlockAttributes( clientId ).style?.layout ?? {};\n\t\t\tconst cellIndex = ( rowStart - 1 ) * numColumns + columnStart - 1;\n\t\t\tif ( cellIndex < targetIndex ) {\n\t\t\t\tcount++;\n\t\t\t}\n\t\t}\n\t\treturn count;\n\t};\n\n\treturn getNumberOfBlocksBeforeCell;\n}\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,SAAS,QAAQ,iBAAiB;;AAE3C;AACA;AACA;AACA,SAASC,KAAK,IAAIC,gBAAgB,QAAQ,aAAa;AAEvD,OAAO,SAASC,8BAA8BA,CAAEC,YAAY,EAAEC,UAAU,EAAG;EAC1E,MAAM;IAAEC,aAAa;IAAEC;EAAmB,CAAC,GAAGP,SAAS,CAAEE,gBAAiB,CAAC;EAE3E,MAAMM,2BAA2B,GAAGA,CAAEC,MAAM,EAAEC,GAAG,KAAM;IACtD,MAAMC,WAAW,GAAG,CAAED,GAAG,GAAG,CAAC,IAAKL,UAAU,GAAGI,MAAM,GAAG,CAAC;IAEzD,IAAIG,KAAK,GAAG,CAAC;IACb,KAAM,MAAMC,QAAQ,IAAIP,aAAa,CAAEF,YAAa,CAAC,EAAG;MAAA,IAAAU,qBAAA;MACvD,MAAM;QAAEC,WAAW;QAAEC;MAAS,CAAC,IAAAF,qBAAA,GAC9BP,kBAAkB,CAAEM,QAAS,CAAC,CAACI,KAAK,EAAEC,MAAM,cAAAJ,qBAAA,cAAAA,qBAAA,GAAI,CAAC,CAAC;MACnD,MAAMK,SAAS,GAAG,CAAEH,QAAQ,GAAG,CAAC,IAAKX,UAAU,GAAGU,WAAW,GAAG,CAAC;MACjE,IAAKI,SAAS,GAAGR,WAAW,EAAG;QAC9BC,KAAK,EAAE;MACR;IACD;IACA,OAAOA,KAAK;EACb,CAAC;EAED,OAAOJ,2BAA2B;AACnC","ignoreList":[]}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { useDispatch, useSelect } from '@wordpress/data';
|
|
5
|
+
import { useEffect } from '@wordpress/element';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Internal dependencies
|
|
9
|
+
*/
|
|
10
|
+
import { store as blockEditorStore } from '../../store';
|
|
11
|
+
import { GridRect } from './utils';
|
|
12
|
+
export function useGridLayoutSync({
|
|
13
|
+
clientId: gridClientId
|
|
14
|
+
}) {
|
|
15
|
+
const {
|
|
16
|
+
gridLayout,
|
|
17
|
+
blockOrder
|
|
18
|
+
} = useSelect(select => {
|
|
19
|
+
var _getBlockAttributes$l;
|
|
20
|
+
const {
|
|
21
|
+
getBlockAttributes,
|
|
22
|
+
getBlockOrder
|
|
23
|
+
} = select(blockEditorStore);
|
|
24
|
+
return {
|
|
25
|
+
gridLayout: (_getBlockAttributes$l = getBlockAttributes(gridClientId).layout) !== null && _getBlockAttributes$l !== void 0 ? _getBlockAttributes$l : {},
|
|
26
|
+
blockOrder: getBlockOrder(gridClientId)
|
|
27
|
+
};
|
|
28
|
+
}, [gridClientId]);
|
|
29
|
+
const {
|
|
30
|
+
getBlockAttributes
|
|
31
|
+
} = useSelect(blockEditorStore);
|
|
32
|
+
const {
|
|
33
|
+
updateBlockAttributes,
|
|
34
|
+
__unstableMarkNextChangeAsNotPersistent
|
|
35
|
+
} = useDispatch(blockEditorStore);
|
|
36
|
+
useEffect(() => {
|
|
37
|
+
const updates = {};
|
|
38
|
+
const {
|
|
39
|
+
columnCount,
|
|
40
|
+
rowCount = 2
|
|
41
|
+
} = gridLayout;
|
|
42
|
+
const isManualGrid = !!columnCount;
|
|
43
|
+
if (isManualGrid) {
|
|
44
|
+
const rects = [];
|
|
45
|
+
let cellsTaken = 0;
|
|
46
|
+
|
|
47
|
+
// Respect the position of blocks that already have a columnStart and rowStart value.
|
|
48
|
+
for (const clientId of blockOrder) {
|
|
49
|
+
const attributes = getBlockAttributes(clientId);
|
|
50
|
+
const {
|
|
51
|
+
columnStart,
|
|
52
|
+
rowStart,
|
|
53
|
+
columnSpan = 1,
|
|
54
|
+
rowSpan = 1
|
|
55
|
+
} = attributes.style?.layout || {};
|
|
56
|
+
cellsTaken += columnSpan * rowSpan;
|
|
57
|
+
if (!columnStart || !rowStart) {
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
rects.push(new GridRect({
|
|
61
|
+
columnStart,
|
|
62
|
+
rowStart,
|
|
63
|
+
columnSpan,
|
|
64
|
+
rowSpan
|
|
65
|
+
}));
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// Ensure there's enough rows to fit all blocks.
|
|
69
|
+
const minimumNeededRows = Math.ceil(cellsTaken / columnCount);
|
|
70
|
+
if (rowCount < minimumNeededRows) {
|
|
71
|
+
updates[gridClientId] = {
|
|
72
|
+
layout: {
|
|
73
|
+
...gridLayout,
|
|
74
|
+
rowCount: minimumNeededRows
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// When in manual mode, ensure that every block has a columnStart and rowStart value.
|
|
80
|
+
for (const clientId of blockOrder) {
|
|
81
|
+
const attributes = getBlockAttributes(clientId);
|
|
82
|
+
const {
|
|
83
|
+
columnStart,
|
|
84
|
+
rowStart,
|
|
85
|
+
columnSpan,
|
|
86
|
+
rowSpan
|
|
87
|
+
} = attributes.style?.layout || {};
|
|
88
|
+
if (columnStart && rowStart) {
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
const [newColumnStart, newRowStart] = getFirstEmptyCell(rects, columnCount, minimumNeededRows, columnSpan, rowSpan);
|
|
92
|
+
rects.push(new GridRect({
|
|
93
|
+
columnStart: newColumnStart,
|
|
94
|
+
rowStart: newRowStart,
|
|
95
|
+
columnSpan,
|
|
96
|
+
rowSpan
|
|
97
|
+
}));
|
|
98
|
+
updates[clientId] = {
|
|
99
|
+
style: {
|
|
100
|
+
...attributes.style,
|
|
101
|
+
layout: {
|
|
102
|
+
...attributes.style?.layout,
|
|
103
|
+
columnStart: newColumnStart,
|
|
104
|
+
rowStart: newRowStart
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
} else {
|
|
110
|
+
// When in auto mode, remove all of the columnStart and rowStart values.
|
|
111
|
+
for (const clientId of blockOrder) {
|
|
112
|
+
const attributes = getBlockAttributes(clientId);
|
|
113
|
+
const {
|
|
114
|
+
columnStart,
|
|
115
|
+
rowStart,
|
|
116
|
+
...layout
|
|
117
|
+
} = attributes.style?.layout || {};
|
|
118
|
+
// Only update attributes if columnStart or rowStart are set.
|
|
119
|
+
if (columnStart || rowStart) {
|
|
120
|
+
updates[clientId] = {
|
|
121
|
+
style: {
|
|
122
|
+
...attributes.style,
|
|
123
|
+
layout
|
|
124
|
+
}
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
if (Object.keys(updates).length) {
|
|
130
|
+
__unstableMarkNextChangeAsNotPersistent();
|
|
131
|
+
updateBlockAttributes(Object.keys(updates), updates, /* uniqueByBlock: */true);
|
|
132
|
+
}
|
|
133
|
+
}, [
|
|
134
|
+
// Actual deps to sync:
|
|
135
|
+
gridClientId, gridLayout, blockOrder,
|
|
136
|
+
// Needed for linter:
|
|
137
|
+
__unstableMarkNextChangeAsNotPersistent, getBlockAttributes, updateBlockAttributes]);
|
|
138
|
+
}
|
|
139
|
+
function getFirstEmptyCell(rects, columnCount, rowCount, columnSpan = 1, rowSpan = 1) {
|
|
140
|
+
for (let row = 1; row <= rowCount; row++) {
|
|
141
|
+
for (let column = 1; column <= columnCount; column++) {
|
|
142
|
+
const rect = new GridRect({
|
|
143
|
+
columnStart: column,
|
|
144
|
+
rowStart: row,
|
|
145
|
+
columnSpan,
|
|
146
|
+
rowSpan
|
|
147
|
+
});
|
|
148
|
+
if (!rects.some(r => r.intersectsRect(rect))) {
|
|
149
|
+
return [column, row];
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
return [1, 1];
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=use-grid-layout-sync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useDispatch","useSelect","useEffect","store","blockEditorStore","GridRect","useGridLayoutSync","clientId","gridClientId","gridLayout","blockOrder","select","_getBlockAttributes$l","getBlockAttributes","getBlockOrder","layout","updateBlockAttributes","__unstableMarkNextChangeAsNotPersistent","updates","columnCount","rowCount","isManualGrid","rects","cellsTaken","attributes","columnStart","rowStart","columnSpan","rowSpan","style","push","minimumNeededRows","Math","ceil","newColumnStart","newRowStart","getFirstEmptyCell","Object","keys","length","row","column","rect","some","r","intersectsRect"],"sources":["@wordpress/block-editor/src/components/grid/use-grid-layout-sync.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { useEffect } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport { GridRect } from './utils';\n\nexport function useGridLayoutSync( { clientId: gridClientId } ) {\n\tconst { gridLayout, blockOrder } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlockAttributes, getBlockOrder } =\n\t\t\t\tselect( blockEditorStore );\n\t\t\treturn {\n\t\t\t\tgridLayout: getBlockAttributes( gridClientId ).layout ?? {},\n\t\t\t\tblockOrder: getBlockOrder( gridClientId ),\n\t\t\t};\n\t\t},\n\t\t[ gridClientId ]\n\t);\n\n\tconst { getBlockAttributes } = useSelect( blockEditorStore );\n\tconst { updateBlockAttributes, __unstableMarkNextChangeAsNotPersistent } =\n\t\tuseDispatch( blockEditorStore );\n\n\tuseEffect( () => {\n\t\tconst updates = {};\n\n\t\tconst { columnCount, rowCount = 2 } = gridLayout;\n\t\tconst isManualGrid = !! columnCount;\n\n\t\tif ( isManualGrid ) {\n\t\t\tconst rects = [];\n\t\t\tlet cellsTaken = 0;\n\n\t\t\t// Respect the position of blocks that already have a columnStart and rowStart value.\n\t\t\tfor ( const clientId of blockOrder ) {\n\t\t\t\tconst attributes = getBlockAttributes( clientId );\n\t\t\t\tconst {\n\t\t\t\t\tcolumnStart,\n\t\t\t\t\trowStart,\n\t\t\t\t\tcolumnSpan = 1,\n\t\t\t\t\trowSpan = 1,\n\t\t\t\t} = attributes.style?.layout || {};\n\t\t\t\tcellsTaken += columnSpan * rowSpan;\n\t\t\t\tif ( ! columnStart || ! rowStart ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\trects.push(\n\t\t\t\t\tnew GridRect( {\n\t\t\t\t\t\tcolumnStart,\n\t\t\t\t\t\trowStart,\n\t\t\t\t\t\tcolumnSpan,\n\t\t\t\t\t\trowSpan,\n\t\t\t\t\t} )\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Ensure there's enough rows to fit all blocks.\n\t\t\tconst minimumNeededRows = Math.ceil( cellsTaken / columnCount );\n\t\t\tif ( rowCount < minimumNeededRows ) {\n\t\t\t\tupdates[ gridClientId ] = {\n\t\t\t\t\tlayout: {\n\t\t\t\t\t\t...gridLayout,\n\t\t\t\t\t\trowCount: minimumNeededRows,\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// When in manual mode, ensure that every block has a columnStart and rowStart value.\n\t\t\tfor ( const clientId of blockOrder ) {\n\t\t\t\tconst attributes = getBlockAttributes( clientId );\n\t\t\t\tconst { columnStart, rowStart, columnSpan, rowSpan } =\n\t\t\t\t\tattributes.style?.layout || {};\n\t\t\t\tif ( columnStart && rowStart ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst [ newColumnStart, newRowStart ] = getFirstEmptyCell(\n\t\t\t\t\trects,\n\t\t\t\t\tcolumnCount,\n\t\t\t\t\tminimumNeededRows,\n\t\t\t\t\tcolumnSpan,\n\t\t\t\t\trowSpan\n\t\t\t\t);\n\t\t\t\trects.push(\n\t\t\t\t\tnew GridRect( {\n\t\t\t\t\t\tcolumnStart: newColumnStart,\n\t\t\t\t\t\trowStart: newRowStart,\n\t\t\t\t\t\tcolumnSpan,\n\t\t\t\t\t\trowSpan,\n\t\t\t\t\t} )\n\t\t\t\t);\n\t\t\t\tupdates[ clientId ] = {\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\t...attributes.style,\n\t\t\t\t\t\tlayout: {\n\t\t\t\t\t\t\t...attributes.style?.layout,\n\t\t\t\t\t\t\tcolumnStart: newColumnStart,\n\t\t\t\t\t\t\trowStart: newRowStart,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\t\t} else {\n\t\t\t// When in auto mode, remove all of the columnStart and rowStart values.\n\t\t\tfor ( const clientId of blockOrder ) {\n\t\t\t\tconst attributes = getBlockAttributes( clientId );\n\t\t\t\tconst { columnStart, rowStart, ...layout } =\n\t\t\t\t\tattributes.style?.layout || {};\n\t\t\t\t// Only update attributes if columnStart or rowStart are set.\n\t\t\t\tif ( columnStart || rowStart ) {\n\t\t\t\t\tupdates[ clientId ] = {\n\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\t...attributes.style,\n\t\t\t\t\t\t\tlayout,\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( Object.keys( updates ).length ) {\n\t\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\t\tupdateBlockAttributes(\n\t\t\t\tObject.keys( updates ),\n\t\t\t\tupdates,\n\t\t\t\t/* uniqueByBlock: */ true\n\t\t\t);\n\t\t}\n\t}, [\n\t\t// Actual deps to sync:\n\t\tgridClientId,\n\t\tgridLayout,\n\t\tblockOrder,\n\t\t// Needed for linter:\n\t\t__unstableMarkNextChangeAsNotPersistent,\n\t\tgetBlockAttributes,\n\t\tupdateBlockAttributes,\n\t] );\n}\n\nfunction getFirstEmptyCell(\n\trects,\n\tcolumnCount,\n\trowCount,\n\tcolumnSpan = 1,\n\trowSpan = 1\n) {\n\tfor ( let row = 1; row <= rowCount; row++ ) {\n\t\tfor ( let column = 1; column <= columnCount; column++ ) {\n\t\t\tconst rect = new GridRect( {\n\t\t\t\tcolumnStart: column,\n\t\t\t\trowStart: row,\n\t\t\t\tcolumnSpan,\n\t\t\t\trowSpan,\n\t\t\t} );\n\t\t\tif ( ! rects.some( ( r ) => r.intersectsRect( rect ) ) ) {\n\t\t\t\treturn [ column, row ];\n\t\t\t}\n\t\t}\n\t}\n\treturn [ 1, 1 ];\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
export function range(start, length) {
|
|
2
|
+
return Array.from({
|
|
3
|
+
length
|
|
4
|
+
}, (_, i) => start + i);
|
|
5
|
+
}
|
|
6
|
+
export class GridRect {
|
|
7
|
+
constructor({
|
|
8
|
+
columnStart,
|
|
9
|
+
rowStart,
|
|
10
|
+
columnEnd,
|
|
11
|
+
rowEnd,
|
|
12
|
+
columnSpan,
|
|
13
|
+
rowSpan
|
|
14
|
+
} = {}) {
|
|
15
|
+
this.columnStart = columnStart !== null && columnStart !== void 0 ? columnStart : 1;
|
|
16
|
+
this.rowStart = rowStart !== null && rowStart !== void 0 ? rowStart : 1;
|
|
17
|
+
if (columnSpan !== undefined) {
|
|
18
|
+
this.columnEnd = this.columnStart + columnSpan - 1;
|
|
19
|
+
} else {
|
|
20
|
+
this.columnEnd = columnEnd !== null && columnEnd !== void 0 ? columnEnd : this.columnStart;
|
|
21
|
+
}
|
|
22
|
+
if (rowSpan !== undefined) {
|
|
23
|
+
this.rowEnd = this.rowStart + rowSpan - 1;
|
|
24
|
+
} else {
|
|
25
|
+
this.rowEnd = rowEnd !== null && rowEnd !== void 0 ? rowEnd : this.rowStart;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
get columnSpan() {
|
|
29
|
+
return this.columnEnd - this.columnStart + 1;
|
|
30
|
+
}
|
|
31
|
+
get rowSpan() {
|
|
32
|
+
return this.rowEnd - this.rowStart + 1;
|
|
33
|
+
}
|
|
34
|
+
contains(column, row) {
|
|
35
|
+
return column >= this.columnStart && column <= this.columnEnd && row >= this.rowStart && row <= this.rowEnd;
|
|
36
|
+
}
|
|
37
|
+
containsRect(rect) {
|
|
38
|
+
return this.contains(rect.columnStart, rect.rowStart) && this.contains(rect.columnEnd, rect.rowEnd);
|
|
39
|
+
}
|
|
40
|
+
intersectsRect(rect) {
|
|
41
|
+
return this.columnStart <= rect.columnEnd && this.columnEnd >= rect.columnStart && this.rowStart <= rect.rowEnd && this.rowEnd >= rect.rowStart;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
export function getComputedCSS(element, property) {
|
|
45
|
+
return element.ownerDocument.defaultView.getComputedStyle(element).getPropertyValue(property);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Given a grid-template-columns or grid-template-rows CSS property value, gets the start and end
|
|
50
|
+
* position in pixels of each grid track.
|
|
51
|
+
*
|
|
52
|
+
* https://css-tricks.com/snippets/css/complete-guide-grid/#aa-grid-track
|
|
53
|
+
*
|
|
54
|
+
* @param {string} template The grid-template-columns or grid-template-rows CSS property value.
|
|
55
|
+
* Only supports fixed sizes in pixels.
|
|
56
|
+
* @param {number} gap The gap between grid tracks in pixels.
|
|
57
|
+
*
|
|
58
|
+
* @return {Array<{start: number, end: number}>} An array of objects with the start and end
|
|
59
|
+
* position in pixels of each grid track.
|
|
60
|
+
*/
|
|
61
|
+
export function getGridTracks(template, gap) {
|
|
62
|
+
const tracks = [];
|
|
63
|
+
for (const size of template.split(' ')) {
|
|
64
|
+
const previousTrack = tracks[tracks.length - 1];
|
|
65
|
+
const start = previousTrack ? previousTrack.end + gap : 0;
|
|
66
|
+
const end = start + parseFloat(size);
|
|
67
|
+
tracks.push({
|
|
68
|
+
start,
|
|
69
|
+
end
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
return tracks;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Given an array of grid tracks and a position in pixels, gets the index of the closest track to
|
|
77
|
+
* that position.
|
|
78
|
+
*
|
|
79
|
+
* https://css-tricks.com/snippets/css/complete-guide-grid/#aa-grid-track
|
|
80
|
+
*
|
|
81
|
+
* @param {Array<{start: number, end: number}>} tracks An array of objects with the start and end
|
|
82
|
+
* position in pixels of each grid track.
|
|
83
|
+
* @param {number} position The position in pixels.
|
|
84
|
+
* @param {string} edge The edge of the track to compare the
|
|
85
|
+
* position to. Either 'start' or 'end'.
|
|
86
|
+
*
|
|
87
|
+
* @return {number} The index of the closest track to the position. 0-based, unlike CSS grid which
|
|
88
|
+
* is 1-based.
|
|
89
|
+
*/
|
|
90
|
+
export function getClosestTrack(tracks, position, edge = 'start') {
|
|
91
|
+
return tracks.reduce((closest, track, index) => Math.abs(track[edge] - position) < Math.abs(tracks[closest][edge] - position) ? index : closest, 0);
|
|
92
|
+
}
|
|
93
|
+
export function getGridRect(gridElement, rect) {
|
|
94
|
+
const columnGap = parseFloat(getComputedCSS(gridElement, 'column-gap'));
|
|
95
|
+
const rowGap = parseFloat(getComputedCSS(gridElement, 'row-gap'));
|
|
96
|
+
const gridColumnTracks = getGridTracks(getComputedCSS(gridElement, 'grid-template-columns'), columnGap);
|
|
97
|
+
const gridRowTracks = getGridTracks(getComputedCSS(gridElement, 'grid-template-rows'), rowGap);
|
|
98
|
+
const columnStart = getClosestTrack(gridColumnTracks, rect.left) + 1;
|
|
99
|
+
const rowStart = getClosestTrack(gridRowTracks, rect.top) + 1;
|
|
100
|
+
const columnEnd = getClosestTrack(gridColumnTracks, rect.right, 'end') + 1;
|
|
101
|
+
const rowEnd = getClosestTrack(gridRowTracks, rect.bottom, 'end') + 1;
|
|
102
|
+
return new GridRect({
|
|
103
|
+
columnStart,
|
|
104
|
+
columnEnd,
|
|
105
|
+
rowStart,
|
|
106
|
+
rowEnd
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
export function getGridItemRect(gridItemElement) {
|
|
110
|
+
return getGridRect(gridItemElement.parentElement, new window.DOMRect(gridItemElement.offsetLeft, gridItemElement.offsetTop, gridItemElement.offsetWidth, gridItemElement.offsetHeight));
|
|
111
|
+
}
|
|
112
|
+
export function getGridInfo(gridElement) {
|
|
113
|
+
const gridTemplateColumns = getComputedCSS(gridElement, 'grid-template-columns');
|
|
114
|
+
const gridTemplateRows = getComputedCSS(gridElement, 'grid-template-rows');
|
|
115
|
+
const numColumns = gridTemplateColumns.split(' ').length;
|
|
116
|
+
const numRows = gridTemplateRows.split(' ').length;
|
|
117
|
+
const numItems = numColumns * numRows;
|
|
118
|
+
return {
|
|
119
|
+
numColumns,
|
|
120
|
+
numRows,
|
|
121
|
+
numItems,
|
|
122
|
+
currentColor: getComputedCSS(gridElement, 'color'),
|
|
123
|
+
style: {
|
|
124
|
+
gridTemplateColumns,
|
|
125
|
+
gridTemplateRows,
|
|
126
|
+
gap: getComputedCSS(gridElement, 'gap'),
|
|
127
|
+
padding: getComputedCSS(gridElement, 'padding')
|
|
128
|
+
}
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["range","start","length","Array","from","_","i","GridRect","constructor","columnStart","rowStart","columnEnd","rowEnd","columnSpan","rowSpan","undefined","contains","column","row","containsRect","rect","intersectsRect","getComputedCSS","element","property","ownerDocument","defaultView","getComputedStyle","getPropertyValue","getGridTracks","template","gap","tracks","size","split","previousTrack","end","parseFloat","push","getClosestTrack","position","edge","reduce","closest","track","index","Math","abs","getGridRect","gridElement","columnGap","rowGap","gridColumnTracks","gridRowTracks","left","top","right","bottom","getGridItemRect","gridItemElement","parentElement","window","DOMRect","offsetLeft","offsetTop","offsetWidth","offsetHeight","getGridInfo","gridTemplateColumns","gridTemplateRows","numColumns","numRows","numItems","currentColor","style","padding"],"sources":["@wordpress/block-editor/src/components/grid/utils.js"],"sourcesContent":["export function range( start, length ) {\n\treturn Array.from( { length }, ( _, i ) => start + i );\n}\n\nexport class GridRect {\n\tconstructor( {\n\t\tcolumnStart,\n\t\trowStart,\n\t\tcolumnEnd,\n\t\trowEnd,\n\t\tcolumnSpan,\n\t\trowSpan,\n\t} = {} ) {\n\t\tthis.columnStart = columnStart ?? 1;\n\t\tthis.rowStart = rowStart ?? 1;\n\t\tif ( columnSpan !== undefined ) {\n\t\t\tthis.columnEnd = this.columnStart + columnSpan - 1;\n\t\t} else {\n\t\t\tthis.columnEnd = columnEnd ?? this.columnStart;\n\t\t}\n\t\tif ( rowSpan !== undefined ) {\n\t\t\tthis.rowEnd = this.rowStart + rowSpan - 1;\n\t\t} else {\n\t\t\tthis.rowEnd = rowEnd ?? this.rowStart;\n\t\t}\n\t}\n\n\tget columnSpan() {\n\t\treturn this.columnEnd - this.columnStart + 1;\n\t}\n\n\tget rowSpan() {\n\t\treturn this.rowEnd - this.rowStart + 1;\n\t}\n\n\tcontains( column, row ) {\n\t\treturn (\n\t\t\tcolumn >= this.columnStart &&\n\t\t\tcolumn <= this.columnEnd &&\n\t\t\trow >= this.rowStart &&\n\t\t\trow <= this.rowEnd\n\t\t);\n\t}\n\n\tcontainsRect( rect ) {\n\t\treturn (\n\t\t\tthis.contains( rect.columnStart, rect.rowStart ) &&\n\t\t\tthis.contains( rect.columnEnd, rect.rowEnd )\n\t\t);\n\t}\n\n\tintersectsRect( rect ) {\n\t\treturn (\n\t\t\tthis.columnStart <= rect.columnEnd &&\n\t\t\tthis.columnEnd >= rect.columnStart &&\n\t\t\tthis.rowStart <= rect.rowEnd &&\n\t\t\tthis.rowEnd >= rect.rowStart\n\t\t);\n\t}\n}\n\nexport function getComputedCSS( element, property ) {\n\treturn element.ownerDocument.defaultView\n\t\t.getComputedStyle( element )\n\t\t.getPropertyValue( property );\n}\n\n/**\n * Given a grid-template-columns or grid-template-rows CSS property value, gets the start and end\n * position in pixels of each grid track.\n *\n * https://css-tricks.com/snippets/css/complete-guide-grid/#aa-grid-track\n *\n * @param {string} template The grid-template-columns or grid-template-rows CSS property value.\n * Only supports fixed sizes in pixels.\n * @param {number} gap The gap between grid tracks in pixels.\n *\n * @return {Array<{start: number, end: number}>} An array of objects with the start and end\n * position in pixels of each grid track.\n */\nexport function getGridTracks( template, gap ) {\n\tconst tracks = [];\n\tfor ( const size of template.split( ' ' ) ) {\n\t\tconst previousTrack = tracks[ tracks.length - 1 ];\n\t\tconst start = previousTrack ? previousTrack.end + gap : 0;\n\t\tconst end = start + parseFloat( size );\n\t\ttracks.push( { start, end } );\n\t}\n\treturn tracks;\n}\n\n/**\n * Given an array of grid tracks and a position in pixels, gets the index of the closest track to\n * that position.\n *\n * https://css-tricks.com/snippets/css/complete-guide-grid/#aa-grid-track\n *\n * @param {Array<{start: number, end: number}>} tracks An array of objects with the start and end\n * position in pixels of each grid track.\n * @param {number} position The position in pixels.\n * @param {string} edge The edge of the track to compare the\n * position to. Either 'start' or 'end'.\n *\n * @return {number} The index of the closest track to the position. 0-based, unlike CSS grid which\n * is 1-based.\n */\nexport function getClosestTrack( tracks, position, edge = 'start' ) {\n\treturn tracks.reduce(\n\t\t( closest, track, index ) =>\n\t\t\tMath.abs( track[ edge ] - position ) <\n\t\t\tMath.abs( tracks[ closest ][ edge ] - position )\n\t\t\t\t? index\n\t\t\t\t: closest,\n\t\t0\n\t);\n}\n\nexport function getGridRect( gridElement, rect ) {\n\tconst columnGap = parseFloat( getComputedCSS( gridElement, 'column-gap' ) );\n\tconst rowGap = parseFloat( getComputedCSS( gridElement, 'row-gap' ) );\n\tconst gridColumnTracks = getGridTracks(\n\t\tgetComputedCSS( gridElement, 'grid-template-columns' ),\n\t\tcolumnGap\n\t);\n\tconst gridRowTracks = getGridTracks(\n\t\tgetComputedCSS( gridElement, 'grid-template-rows' ),\n\t\trowGap\n\t);\n\tconst columnStart = getClosestTrack( gridColumnTracks, rect.left ) + 1;\n\tconst rowStart = getClosestTrack( gridRowTracks, rect.top ) + 1;\n\tconst columnEnd =\n\t\tgetClosestTrack( gridColumnTracks, rect.right, 'end' ) + 1;\n\tconst rowEnd = getClosestTrack( gridRowTracks, rect.bottom, 'end' ) + 1;\n\treturn new GridRect( {\n\t\tcolumnStart,\n\t\tcolumnEnd,\n\t\trowStart,\n\t\trowEnd,\n\t} );\n}\n\nexport function getGridItemRect( gridItemElement ) {\n\treturn getGridRect(\n\t\tgridItemElement.parentElement,\n\t\tnew window.DOMRect(\n\t\t\tgridItemElement.offsetLeft,\n\t\t\tgridItemElement.offsetTop,\n\t\t\tgridItemElement.offsetWidth,\n\t\t\tgridItemElement.offsetHeight\n\t\t)\n\t);\n}\n\nexport function getGridInfo( gridElement ) {\n\tconst gridTemplateColumns = getComputedCSS(\n\t\tgridElement,\n\t\t'grid-template-columns'\n\t);\n\tconst gridTemplateRows = getComputedCSS(\n\t\tgridElement,\n\t\t'grid-template-rows'\n\t);\n\tconst numColumns = gridTemplateColumns.split( ' ' ).length;\n\tconst numRows = gridTemplateRows.split( ' ' ).length;\n\tconst numItems = numColumns * numRows;\n\treturn {\n\t\tnumColumns,\n\t\tnumRows,\n\t\tnumItems,\n\t\tcurrentColor: getComputedCSS( gridElement, 'color' ),\n\t\tstyle: {\n\t\t\tgridTemplateColumns,\n\t\t\tgridTemplateRows,\n\t\t\tgap: getComputedCSS( gridElement, 'gap' ),\n\t\t\tpadding: getComputedCSS( gridElement, 'padding' ),\n\t\t},\n\t};\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -226,7 +226,7 @@ export function useInnerBlocksProps(props = {}, options = {}) {
|
|
|
226
226
|
rootClientId: clientId,
|
|
227
227
|
parentClientId
|
|
228
228
|
});
|
|
229
|
-
const ref = useMergeRefs([props.ref, __unstableDisableDropZone || isDropZoneDisabled ? null : blockDropZoneRef]);
|
|
229
|
+
const ref = useMergeRefs([props.ref, __unstableDisableDropZone || isDropZoneDisabled || layout?.columnCount && window.__experimentalEnableGridInteractivity ? null : blockDropZoneRef]);
|
|
230
230
|
const innerBlocksProps = {
|
|
231
231
|
__experimentalCaptureToolbars,
|
|
232
232
|
layout,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["clsx","useMergeRefs","forwardRef","useMemo","memo","useSelect","getBlockSupport","store","blocksStore","__unstableGetInnerBlocksProps","getInnerBlocksProps","ButtonBlockAppender","DefaultBlockAppender","useNestedSettingsUpdate","useInnerBlockTemplateSync","useBlockContext","BlockListItems","BlockContextProvider","useBlockEditContext","useBlockSync","blockEditorStore","useBlockDropZone","unlock","jsx","_jsx","EMPTY_OBJECT","BlockContext","children","clientId","context","value","BlockListItemsMemo","UncontrolledInnerBlocks","props","allowedBlocks","prioritizedInserterBlocks","defaultBlock","directInsert","__experimentalDefaultBlock","__experimentalDirectInsert","template","templateLock","wrapperRef","templateInsertUpdatesSelection","__experimentalCaptureToolbars","captureToolbars","__experimentalAppenderTagName","renderAppender","orientation","placeholder","layout","name","blockType","parentLock","defaultLayout","defaultLayoutBlockSupport","allowSizingOnChildren","usedLayout","memoedLayout","items","rootClientId","Object","keys","providesContext","length","ControlledInnerBlocks","ForwardedInnerBlocks","ref","innerBlocksProps","useInnerBlocksProps","className","options","__unstableDisableLayoutClassNames","__unstableDisableDropZone","dropZoneElement","__unstableLayoutClassNames","layoutClassNames","selected","select","getBlockName","isBlockSelected","hasSelectedInnerBlock","__unstableGetEditorMode","getTemplateLock","getBlockRootClientId","getBlockEditingMode","getBlockSettings","isDragging","getSettings","_isDropZoneDisabled","sectionRootClientId","isDropZoneDisabled","hasBlockSupport","getBlockType","blockName","enableClickThrough","blockEditingMode","parentClientId","undefined","hasOverlay","blockDropZoneRef","InnerBlocks","onChange","save","Content"],"sources":["@wordpress/block-editor/src/components/inner-blocks/index.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { useMergeRefs } from '@wordpress/compose';\nimport { forwardRef, useMemo, memo } from '@wordpress/element';\nimport { useSelect } from '@wordpress/data';\nimport {\n\tgetBlockSupport,\n\tstore as blocksStore,\n\t__unstableGetInnerBlocksProps as getInnerBlocksProps,\n} from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport ButtonBlockAppender from './button-block-appender';\nimport DefaultBlockAppender from './default-block-appender';\nimport useNestedSettingsUpdate from './use-nested-settings-update';\nimport useInnerBlockTemplateSync from './use-inner-block-template-sync';\nimport useBlockContext from './use-block-context';\nimport { BlockListItems } from '../block-list';\nimport { BlockContextProvider } from '../block-context';\nimport { useBlockEditContext } from '../block-edit/context';\nimport useBlockSync from '../provider/use-block-sync';\nimport { store as blockEditorStore } from '../../store';\nimport useBlockDropZone from '../use-block-drop-zone';\nimport { unlock } from '../../lock-unlock';\n\nconst EMPTY_OBJECT = {};\n\nfunction BlockContext( { children, clientId } ) {\n\tconst context = useBlockContext( clientId );\n\treturn (\n\t\t<BlockContextProvider value={ context }>\n\t\t\t{ children }\n\t\t</BlockContextProvider>\n\t);\n}\n\nconst BlockListItemsMemo = memo( BlockListItems );\n\n/**\n * InnerBlocks is a component which allows a single block to have multiple blocks\n * as children. The UncontrolledInnerBlocks component is used whenever the inner\n * blocks are not controlled by another entity. In other words, it is normally\n * used for inner blocks in the post editor\n *\n * @param {Object} props The component props.\n */\nfunction UncontrolledInnerBlocks( props ) {\n\tconst {\n\t\tclientId,\n\t\tallowedBlocks,\n\t\tprioritizedInserterBlocks,\n\t\tdefaultBlock,\n\t\tdirectInsert,\n\t\t__experimentalDefaultBlock,\n\t\t__experimentalDirectInsert,\n\t\ttemplate,\n\t\ttemplateLock,\n\t\twrapperRef,\n\t\ttemplateInsertUpdatesSelection,\n\t\t__experimentalCaptureToolbars: captureToolbars,\n\t\t__experimentalAppenderTagName,\n\t\trenderAppender,\n\t\torientation,\n\t\tplaceholder,\n\t\tlayout,\n\t\tname,\n\t\tblockType,\n\t\tparentLock,\n\t\tdefaultLayout,\n\t} = props;\n\n\tuseNestedSettingsUpdate(\n\t\tclientId,\n\t\tparentLock,\n\t\tallowedBlocks,\n\t\tprioritizedInserterBlocks,\n\t\tdefaultBlock,\n\t\tdirectInsert,\n\t\t__experimentalDefaultBlock,\n\t\t__experimentalDirectInsert,\n\t\ttemplateLock,\n\t\tcaptureToolbars,\n\t\torientation,\n\t\tlayout\n\t);\n\n\tuseInnerBlockTemplateSync(\n\t\tclientId,\n\t\ttemplate,\n\t\ttemplateLock,\n\t\ttemplateInsertUpdatesSelection\n\t);\n\n\tconst defaultLayoutBlockSupport =\n\t\tgetBlockSupport( name, 'layout' ) ||\n\t\tgetBlockSupport( name, '__experimentalLayout' ) ||\n\t\tEMPTY_OBJECT;\n\n\tconst { allowSizingOnChildren = false } = defaultLayoutBlockSupport;\n\tconst usedLayout = layout || defaultLayoutBlockSupport;\n\n\tconst memoedLayout = useMemo(\n\t\t() => ( {\n\t\t\t// Default layout will know about any content/wide size defined by the theme.\n\t\t\t...defaultLayout,\n\t\t\t...usedLayout,\n\t\t\t...( allowSizingOnChildren && {\n\t\t\t\tallowSizingOnChildren: true,\n\t\t\t} ),\n\t\t} ),\n\t\t[ defaultLayout, usedLayout, allowSizingOnChildren ]\n\t);\n\n\t// For controlled inner blocks, we don't want a change in blocks to\n\t// re-render the blocks list.\n\tconst items = (\n\t\t<BlockListItemsMemo\n\t\t\trootClientId={ clientId }\n\t\t\trenderAppender={ renderAppender }\n\t\t\t__experimentalAppenderTagName={ __experimentalAppenderTagName }\n\t\t\tlayout={ memoedLayout }\n\t\t\twrapperRef={ wrapperRef }\n\t\t\tplaceholder={ placeholder }\n\t\t/>\n\t);\n\n\tif ( Object.keys( blockType.providesContext ).length === 0 ) {\n\t\treturn items;\n\t}\n\n\treturn <BlockContext clientId={ clientId }>{ items }</BlockContext>;\n}\n\n/**\n * The controlled inner blocks component wraps the uncontrolled inner blocks\n * component with the blockSync hook. This keeps the innerBlocks of the block in\n * the block-editor store in sync with the blocks of the controlling entity. An\n * example of an inner block controller is a template part block, which provides\n * its own blocks from the template part entity data source.\n *\n * @param {Object} props The component props.\n */\nfunction ControlledInnerBlocks( props ) {\n\tuseBlockSync( props );\n\treturn <UncontrolledInnerBlocks { ...props } />;\n}\n\nconst ForwardedInnerBlocks = forwardRef( ( props, ref ) => {\n\tconst innerBlocksProps = useInnerBlocksProps( { ref }, props );\n\treturn (\n\t\t<div className=\"block-editor-inner-blocks\">\n\t\t\t<div { ...innerBlocksProps } />\n\t\t</div>\n\t);\n} );\n\n/**\n * This hook is used to lightly mark an element as an inner blocks wrapper\n * element. Call this hook and pass the returned props to the element to mark as\n * an inner blocks wrapper, automatically rendering inner blocks as children. If\n * you define a ref for the element, it is important to pass the ref to this\n * hook, which the hook in turn will pass to the component through the props it\n * returns. Optionally, you can also pass any other props through this hook, and\n * they will be merged and returned.\n *\n * @param {Object} props Optional. Props to pass to the element. Must contain\n * the ref if one is defined.\n * @param {Object} options Optional. Inner blocks options.\n *\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/inner-blocks/README.md\n */\nexport function useInnerBlocksProps( props = {}, options = {} ) {\n\tconst {\n\t\t__unstableDisableLayoutClassNames,\n\t\t__unstableDisableDropZone,\n\t\tdropZoneElement,\n\t} = options;\n\tconst {\n\t\tclientId,\n\t\tlayout = null,\n\t\t__unstableLayoutClassNames: layoutClassNames = '',\n\t} = useBlockEditContext();\n\tconst selected = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetBlockName,\n\t\t\t\tisBlockSelected,\n\t\t\t\thasSelectedInnerBlock,\n\t\t\t\t__unstableGetEditorMode,\n\t\t\t\tgetTemplateLock,\n\t\t\t\tgetBlockRootClientId,\n\t\t\t\tgetBlockEditingMode,\n\t\t\t\tgetBlockSettings,\n\t\t\t\tisDragging,\n\t\t\t\tgetSettings,\n\t\t\t} = unlock( select( blockEditorStore ) );\n\t\t\tlet _isDropZoneDisabled;\n\t\t\t// In zoom out mode, we want to disable the drop zone for the sections.\n\t\t\t// The inner blocks belonging to the section drop zone is\n\t\t\t// already disabled by the blocks themselves being disabled.\n\t\t\tif ( __unstableGetEditorMode() === 'zoom-out' ) {\n\t\t\t\tconst { sectionRootClientId } = unlock( getSettings() );\n\t\t\t\t_isDropZoneDisabled = clientId !== sectionRootClientId;\n\t\t\t}\n\t\t\tif ( ! clientId ) {\n\t\t\t\treturn { isDropZoneDisabled: _isDropZoneDisabled };\n\t\t\t}\n\n\t\t\tconst { hasBlockSupport, getBlockType } = select( blocksStore );\n\t\t\tconst blockName = getBlockName( clientId );\n\t\t\tconst enableClickThrough =\n\t\t\t\t__unstableGetEditorMode() === 'navigation';\n\t\t\tconst blockEditingMode = getBlockEditingMode( clientId );\n\t\t\tconst parentClientId = getBlockRootClientId( clientId );\n\t\t\tconst [ defaultLayout ] = getBlockSettings( clientId, 'layout' );\n\n\t\t\tif ( _isDropZoneDisabled !== undefined ) {\n\t\t\t\t_isDropZoneDisabled = blockEditingMode === 'disabled';\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\t__experimentalCaptureToolbars: hasBlockSupport(\n\t\t\t\t\tblockName,\n\t\t\t\t\t'__experimentalExposeControlsToChildren',\n\t\t\t\t\tfalse\n\t\t\t\t),\n\t\t\t\thasOverlay:\n\t\t\t\t\tblockName !== 'core/template' &&\n\t\t\t\t\t! isBlockSelected( clientId ) &&\n\t\t\t\t\t! hasSelectedInnerBlock( clientId, true ) &&\n\t\t\t\t\tenableClickThrough &&\n\t\t\t\t\t! isDragging(),\n\t\t\t\tname: blockName,\n\t\t\t\tblockType: getBlockType( blockName ),\n\t\t\t\tparentLock: getTemplateLock( parentClientId ),\n\t\t\t\tparentClientId,\n\t\t\t\tisDropZoneDisabled: _isDropZoneDisabled,\n\t\t\t\tdefaultLayout,\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\tconst {\n\t\t__experimentalCaptureToolbars,\n\t\thasOverlay,\n\t\tname,\n\t\tblockType,\n\t\tparentLock,\n\t\tparentClientId,\n\t\tisDropZoneDisabled,\n\t\tdefaultLayout,\n\t} = selected;\n\n\tconst blockDropZoneRef = useBlockDropZone( {\n\t\tdropZoneElement,\n\t\trootClientId: clientId,\n\t\tparentClientId,\n\t} );\n\n\tconst ref = useMergeRefs( [\n\t\tprops.ref,\n\t\t__unstableDisableDropZone || isDropZoneDisabled\n\t\t\t? null\n\t\t\t: blockDropZoneRef,\n\t] );\n\n\tconst innerBlocksProps = {\n\t\t__experimentalCaptureToolbars,\n\t\tlayout,\n\t\tname,\n\t\tblockType,\n\t\tparentLock,\n\t\tdefaultLayout,\n\t\t...options,\n\t};\n\tconst InnerBlocks =\n\t\tinnerBlocksProps.value && innerBlocksProps.onChange\n\t\t\t? ControlledInnerBlocks\n\t\t\t: UncontrolledInnerBlocks;\n\n\treturn {\n\t\t...props,\n\t\tref,\n\t\tclassName: clsx(\n\t\t\tprops.className,\n\t\t\t'block-editor-block-list__layout',\n\t\t\t__unstableDisableLayoutClassNames ? '' : layoutClassNames,\n\t\t\t{\n\t\t\t\t'has-overlay': hasOverlay,\n\t\t\t}\n\t\t),\n\t\tchildren: clientId ? (\n\t\t\t<InnerBlocks { ...innerBlocksProps } clientId={ clientId } />\n\t\t) : (\n\t\t\t<BlockListItems { ...options } />\n\t\t),\n\t};\n}\n\nuseInnerBlocksProps.save = getInnerBlocksProps;\n\n// Expose default appender placeholders as components.\nForwardedInnerBlocks.DefaultBlockAppender = DefaultBlockAppender;\nForwardedInnerBlocks.ButtonBlockAppender = ButtonBlockAppender;\n\nForwardedInnerBlocks.Content = () => useInnerBlocksProps.save().children;\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/inner-blocks/README.md\n */\nexport default ForwardedInnerBlocks;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["clsx","useMergeRefs","forwardRef","useMemo","memo","useSelect","getBlockSupport","store","blocksStore","__unstableGetInnerBlocksProps","getInnerBlocksProps","ButtonBlockAppender","DefaultBlockAppender","useNestedSettingsUpdate","useInnerBlockTemplateSync","useBlockContext","BlockListItems","BlockContextProvider","useBlockEditContext","useBlockSync","blockEditorStore","useBlockDropZone","unlock","jsx","_jsx","EMPTY_OBJECT","BlockContext","children","clientId","context","value","BlockListItemsMemo","UncontrolledInnerBlocks","props","allowedBlocks","prioritizedInserterBlocks","defaultBlock","directInsert","__experimentalDefaultBlock","__experimentalDirectInsert","template","templateLock","wrapperRef","templateInsertUpdatesSelection","__experimentalCaptureToolbars","captureToolbars","__experimentalAppenderTagName","renderAppender","orientation","placeholder","layout","name","blockType","parentLock","defaultLayout","defaultLayoutBlockSupport","allowSizingOnChildren","usedLayout","memoedLayout","items","rootClientId","Object","keys","providesContext","length","ControlledInnerBlocks","ForwardedInnerBlocks","ref","innerBlocksProps","useInnerBlocksProps","className","options","__unstableDisableLayoutClassNames","__unstableDisableDropZone","dropZoneElement","__unstableLayoutClassNames","layoutClassNames","selected","select","getBlockName","isBlockSelected","hasSelectedInnerBlock","__unstableGetEditorMode","getTemplateLock","getBlockRootClientId","getBlockEditingMode","getBlockSettings","isDragging","getSettings","_isDropZoneDisabled","sectionRootClientId","isDropZoneDisabled","hasBlockSupport","getBlockType","blockName","enableClickThrough","blockEditingMode","parentClientId","undefined","hasOverlay","blockDropZoneRef","columnCount","window","__experimentalEnableGridInteractivity","InnerBlocks","onChange","save","Content"],"sources":["@wordpress/block-editor/src/components/inner-blocks/index.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { useMergeRefs } from '@wordpress/compose';\nimport { forwardRef, useMemo, memo } from '@wordpress/element';\nimport { useSelect } from '@wordpress/data';\nimport {\n\tgetBlockSupport,\n\tstore as blocksStore,\n\t__unstableGetInnerBlocksProps as getInnerBlocksProps,\n} from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport ButtonBlockAppender from './button-block-appender';\nimport DefaultBlockAppender from './default-block-appender';\nimport useNestedSettingsUpdate from './use-nested-settings-update';\nimport useInnerBlockTemplateSync from './use-inner-block-template-sync';\nimport useBlockContext from './use-block-context';\nimport { BlockListItems } from '../block-list';\nimport { BlockContextProvider } from '../block-context';\nimport { useBlockEditContext } from '../block-edit/context';\nimport useBlockSync from '../provider/use-block-sync';\nimport { store as blockEditorStore } from '../../store';\nimport useBlockDropZone from '../use-block-drop-zone';\nimport { unlock } from '../../lock-unlock';\n\nconst EMPTY_OBJECT = {};\n\nfunction BlockContext( { children, clientId } ) {\n\tconst context = useBlockContext( clientId );\n\treturn (\n\t\t<BlockContextProvider value={ context }>\n\t\t\t{ children }\n\t\t</BlockContextProvider>\n\t);\n}\n\nconst BlockListItemsMemo = memo( BlockListItems );\n\n/**\n * InnerBlocks is a component which allows a single block to have multiple blocks\n * as children. The UncontrolledInnerBlocks component is used whenever the inner\n * blocks are not controlled by another entity. In other words, it is normally\n * used for inner blocks in the post editor\n *\n * @param {Object} props The component props.\n */\nfunction UncontrolledInnerBlocks( props ) {\n\tconst {\n\t\tclientId,\n\t\tallowedBlocks,\n\t\tprioritizedInserterBlocks,\n\t\tdefaultBlock,\n\t\tdirectInsert,\n\t\t__experimentalDefaultBlock,\n\t\t__experimentalDirectInsert,\n\t\ttemplate,\n\t\ttemplateLock,\n\t\twrapperRef,\n\t\ttemplateInsertUpdatesSelection,\n\t\t__experimentalCaptureToolbars: captureToolbars,\n\t\t__experimentalAppenderTagName,\n\t\trenderAppender,\n\t\torientation,\n\t\tplaceholder,\n\t\tlayout,\n\t\tname,\n\t\tblockType,\n\t\tparentLock,\n\t\tdefaultLayout,\n\t} = props;\n\n\tuseNestedSettingsUpdate(\n\t\tclientId,\n\t\tparentLock,\n\t\tallowedBlocks,\n\t\tprioritizedInserterBlocks,\n\t\tdefaultBlock,\n\t\tdirectInsert,\n\t\t__experimentalDefaultBlock,\n\t\t__experimentalDirectInsert,\n\t\ttemplateLock,\n\t\tcaptureToolbars,\n\t\torientation,\n\t\tlayout\n\t);\n\n\tuseInnerBlockTemplateSync(\n\t\tclientId,\n\t\ttemplate,\n\t\ttemplateLock,\n\t\ttemplateInsertUpdatesSelection\n\t);\n\n\tconst defaultLayoutBlockSupport =\n\t\tgetBlockSupport( name, 'layout' ) ||\n\t\tgetBlockSupport( name, '__experimentalLayout' ) ||\n\t\tEMPTY_OBJECT;\n\n\tconst { allowSizingOnChildren = false } = defaultLayoutBlockSupport;\n\tconst usedLayout = layout || defaultLayoutBlockSupport;\n\n\tconst memoedLayout = useMemo(\n\t\t() => ( {\n\t\t\t// Default layout will know about any content/wide size defined by the theme.\n\t\t\t...defaultLayout,\n\t\t\t...usedLayout,\n\t\t\t...( allowSizingOnChildren && {\n\t\t\t\tallowSizingOnChildren: true,\n\t\t\t} ),\n\t\t} ),\n\t\t[ defaultLayout, usedLayout, allowSizingOnChildren ]\n\t);\n\n\t// For controlled inner blocks, we don't want a change in blocks to\n\t// re-render the blocks list.\n\tconst items = (\n\t\t<BlockListItemsMemo\n\t\t\trootClientId={ clientId }\n\t\t\trenderAppender={ renderAppender }\n\t\t\t__experimentalAppenderTagName={ __experimentalAppenderTagName }\n\t\t\tlayout={ memoedLayout }\n\t\t\twrapperRef={ wrapperRef }\n\t\t\tplaceholder={ placeholder }\n\t\t/>\n\t);\n\n\tif ( Object.keys( blockType.providesContext ).length === 0 ) {\n\t\treturn items;\n\t}\n\n\treturn <BlockContext clientId={ clientId }>{ items }</BlockContext>;\n}\n\n/**\n * The controlled inner blocks component wraps the uncontrolled inner blocks\n * component with the blockSync hook. This keeps the innerBlocks of the block in\n * the block-editor store in sync with the blocks of the controlling entity. An\n * example of an inner block controller is a template part block, which provides\n * its own blocks from the template part entity data source.\n *\n * @param {Object} props The component props.\n */\nfunction ControlledInnerBlocks( props ) {\n\tuseBlockSync( props );\n\treturn <UncontrolledInnerBlocks { ...props } />;\n}\n\nconst ForwardedInnerBlocks = forwardRef( ( props, ref ) => {\n\tconst innerBlocksProps = useInnerBlocksProps( { ref }, props );\n\treturn (\n\t\t<div className=\"block-editor-inner-blocks\">\n\t\t\t<div { ...innerBlocksProps } />\n\t\t</div>\n\t);\n} );\n\n/**\n * This hook is used to lightly mark an element as an inner blocks wrapper\n * element. Call this hook and pass the returned props to the element to mark as\n * an inner blocks wrapper, automatically rendering inner blocks as children. If\n * you define a ref for the element, it is important to pass the ref to this\n * hook, which the hook in turn will pass to the component through the props it\n * returns. Optionally, you can also pass any other props through this hook, and\n * they will be merged and returned.\n *\n * @param {Object} props Optional. Props to pass to the element. Must contain\n * the ref if one is defined.\n * @param {Object} options Optional. Inner blocks options.\n *\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/inner-blocks/README.md\n */\nexport function useInnerBlocksProps( props = {}, options = {} ) {\n\tconst {\n\t\t__unstableDisableLayoutClassNames,\n\t\t__unstableDisableDropZone,\n\t\tdropZoneElement,\n\t} = options;\n\tconst {\n\t\tclientId,\n\t\tlayout = null,\n\t\t__unstableLayoutClassNames: layoutClassNames = '',\n\t} = useBlockEditContext();\n\tconst selected = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetBlockName,\n\t\t\t\tisBlockSelected,\n\t\t\t\thasSelectedInnerBlock,\n\t\t\t\t__unstableGetEditorMode,\n\t\t\t\tgetTemplateLock,\n\t\t\t\tgetBlockRootClientId,\n\t\t\t\tgetBlockEditingMode,\n\t\t\t\tgetBlockSettings,\n\t\t\t\tisDragging,\n\t\t\t\tgetSettings,\n\t\t\t} = unlock( select( blockEditorStore ) );\n\t\t\tlet _isDropZoneDisabled;\n\t\t\t// In zoom out mode, we want to disable the drop zone for the sections.\n\t\t\t// The inner blocks belonging to the section drop zone is\n\t\t\t// already disabled by the blocks themselves being disabled.\n\t\t\tif ( __unstableGetEditorMode() === 'zoom-out' ) {\n\t\t\t\tconst { sectionRootClientId } = unlock( getSettings() );\n\t\t\t\t_isDropZoneDisabled = clientId !== sectionRootClientId;\n\t\t\t}\n\t\t\tif ( ! clientId ) {\n\t\t\t\treturn { isDropZoneDisabled: _isDropZoneDisabled };\n\t\t\t}\n\n\t\t\tconst { hasBlockSupport, getBlockType } = select( blocksStore );\n\t\t\tconst blockName = getBlockName( clientId );\n\t\t\tconst enableClickThrough =\n\t\t\t\t__unstableGetEditorMode() === 'navigation';\n\t\t\tconst blockEditingMode = getBlockEditingMode( clientId );\n\t\t\tconst parentClientId = getBlockRootClientId( clientId );\n\t\t\tconst [ defaultLayout ] = getBlockSettings( clientId, 'layout' );\n\n\t\t\tif ( _isDropZoneDisabled !== undefined ) {\n\t\t\t\t_isDropZoneDisabled = blockEditingMode === 'disabled';\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\t__experimentalCaptureToolbars: hasBlockSupport(\n\t\t\t\t\tblockName,\n\t\t\t\t\t'__experimentalExposeControlsToChildren',\n\t\t\t\t\tfalse\n\t\t\t\t),\n\t\t\t\thasOverlay:\n\t\t\t\t\tblockName !== 'core/template' &&\n\t\t\t\t\t! isBlockSelected( clientId ) &&\n\t\t\t\t\t! hasSelectedInnerBlock( clientId, true ) &&\n\t\t\t\t\tenableClickThrough &&\n\t\t\t\t\t! isDragging(),\n\t\t\t\tname: blockName,\n\t\t\t\tblockType: getBlockType( blockName ),\n\t\t\t\tparentLock: getTemplateLock( parentClientId ),\n\t\t\t\tparentClientId,\n\t\t\t\tisDropZoneDisabled: _isDropZoneDisabled,\n\t\t\t\tdefaultLayout,\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\tconst {\n\t\t__experimentalCaptureToolbars,\n\t\thasOverlay,\n\t\tname,\n\t\tblockType,\n\t\tparentLock,\n\t\tparentClientId,\n\t\tisDropZoneDisabled,\n\t\tdefaultLayout,\n\t} = selected;\n\n\tconst blockDropZoneRef = useBlockDropZone( {\n\t\tdropZoneElement,\n\t\trootClientId: clientId,\n\t\tparentClientId,\n\t} );\n\n\tconst ref = useMergeRefs( [\n\t\tprops.ref,\n\t\t__unstableDisableDropZone ||\n\t\tisDropZoneDisabled ||\n\t\t( layout?.columnCount && window.__experimentalEnableGridInteractivity )\n\t\t\t? null\n\t\t\t: blockDropZoneRef,\n\t] );\n\n\tconst innerBlocksProps = {\n\t\t__experimentalCaptureToolbars,\n\t\tlayout,\n\t\tname,\n\t\tblockType,\n\t\tparentLock,\n\t\tdefaultLayout,\n\t\t...options,\n\t};\n\tconst InnerBlocks =\n\t\tinnerBlocksProps.value && innerBlocksProps.onChange\n\t\t\t? ControlledInnerBlocks\n\t\t\t: UncontrolledInnerBlocks;\n\n\treturn {\n\t\t...props,\n\t\tref,\n\t\tclassName: clsx(\n\t\t\tprops.className,\n\t\t\t'block-editor-block-list__layout',\n\t\t\t__unstableDisableLayoutClassNames ? '' : layoutClassNames,\n\t\t\t{\n\t\t\t\t'has-overlay': hasOverlay,\n\t\t\t}\n\t\t),\n\t\tchildren: clientId ? (\n\t\t\t<InnerBlocks { ...innerBlocksProps } clientId={ clientId } />\n\t\t) : (\n\t\t\t<BlockListItems { ...options } />\n\t\t),\n\t};\n}\n\nuseInnerBlocksProps.save = getInnerBlocksProps;\n\n// Expose default appender placeholders as components.\nForwardedInnerBlocks.DefaultBlockAppender = DefaultBlockAppender;\nForwardedInnerBlocks.ButtonBlockAppender = ButtonBlockAppender;\n\nForwardedInnerBlocks.Content = () => useInnerBlocksProps.save().children;\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/inner-blocks/README.md\n */\nexport default ForwardedInnerBlocks;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -19,7 +19,7 @@ function BlockTypesTab({
|
|
|
19
19
|
rootClientId,
|
|
20
20
|
listProps
|
|
21
21
|
}) {
|
|
22
|
-
const [rawBlockTypes,, collections] = useBlockTypesState(rootClientId, onSelect);
|
|
22
|
+
const [rawBlockTypes,, collections] = useBlockTypesState(rootClientId, onSelect, true);
|
|
23
23
|
const clipboardBlock = useClipboardBlock(rootClientId);
|
|
24
24
|
const filteredBlockTypes = filterInserterItems(rawBlockTypes);
|
|
25
25
|
const blockTypes = clipboardBlock ? [clipboardBlock, ...filteredBlockTypes] : filteredBlockTypes;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useMemo","__","BlockTypesList","useClipboardBlock","useBlockTypeImpressions","createInserterSection","filterInserterItems","useBlockTypesState","jsx","_jsx","getBlockNamespace","item","name","split","BlockTypesTab","onSelect","rootClientId","listProps","rawBlockTypes","collections","clipboardBlock","filteredBlockTypes","blockTypes","items","trackBlockTypeSelected","handleSelect","args","collectionSections","result","Object","keys","forEach","namespace","data","filter","length","push","key","metadata","icon","title","sections","label"],"sources":["@wordpress/block-editor/src/components/inserter/block-types-tab.native.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useMemo } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport BlockTypesList from '../block-types-list';\nimport useClipboardBlock from './hooks/use-clipboard-block';\nimport useBlockTypeImpressions from './hooks/use-block-type-impressions';\nimport { createInserterSection, filterInserterItems } from './utils';\nimport useBlockTypesState from './hooks/use-block-types-state';\n\nconst getBlockNamespace = ( item ) => item.name.split( '/' )[ 0 ];\n\nfunction BlockTypesTab( { onSelect, rootClientId, listProps } ) {\n\tconst [ rawBlockTypes, , collections ] = useBlockTypesState(\n\t\trootClientId,\n\t\tonSelect\n\t);\n\tconst clipboardBlock = useClipboardBlock( rootClientId );\n\tconst filteredBlockTypes = filterInserterItems( rawBlockTypes );\n\tconst blockTypes = clipboardBlock\n\t\t? [ clipboardBlock, ...filteredBlockTypes ]\n\t\t: filteredBlockTypes;\n\tconst { items, trackBlockTypeSelected } =\n\t\tuseBlockTypeImpressions( blockTypes );\n\n\tconst handleSelect = ( ...args ) => {\n\t\ttrackBlockTypeSelected( ...args );\n\t\tonSelect( ...args );\n\t};\n\n\tconst collectionSections = useMemo( () => {\n\t\tconst result = [];\n\t\tObject.keys( collections ).forEach( ( namespace ) => {\n\t\t\tconst data = items.filter(\n\t\t\t\t( item ) => getBlockNamespace( item ) === namespace\n\t\t\t);\n\t\t\tif ( data.length > 0 ) {\n\t\t\t\tresult.push(\n\t\t\t\t\tcreateInserterSection( {\n\t\t\t\t\t\tkey: `collection-${ namespace }`,\n\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\ticon: collections[ namespace ].icon,\n\t\t\t\t\t\t\ttitle: collections[ namespace ].title,\n\t\t\t\t\t\t},\n\t\t\t\t\t\titems: data,\n\t\t\t\t\t} )\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t\treturn result;\n\t}, [ items, collections ] );\n\n\tconst sections = [\n\t\tcreateInserterSection( { key: 'default', items } ),\n\t\t...collectionSections,\n\t];\n\n\treturn (\n\t\t<BlockTypesList\n\t\t\tname=\"Blocks\"\n\t\t\tsections={ sections }\n\t\t\tonSelect={ handleSelect }\n\t\t\tlistProps={ listProps }\n\t\t\tlabel={ __( 'Blocks menu' ) }\n\t\t/>\n\t);\n}\n\nexport default BlockTypesTab;\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,OAAO,QAAQ,oBAAoB;AAC5C,SAASC,EAAE,QAAQ,iBAAiB;;AAEpC;AACA;AACA;AACA,OAAOC,cAAc,MAAM,qBAAqB;AAChD,OAAOC,iBAAiB,MAAM,6BAA6B;AAC3D,OAAOC,uBAAuB,MAAM,oCAAoC;AACxE,SAASC,qBAAqB,EAAEC,mBAAmB,QAAQ,SAAS;AACpE,OAAOC,kBAAkB,MAAM,+BAA+B;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAE/D,MAAMC,iBAAiB,GAAKC,IAAI,IAAMA,IAAI,CAACC,IAAI,CAACC,KAAK,CAAE,GAAI,CAAC,CAAE,CAAC,CAAE;AAEjE,SAASC,aAAaA,CAAE;EAAEC,QAAQ;EAAEC,YAAY;EAAEC;AAAU,CAAC,EAAG;EAC/D,MAAM,CAAEC,aAAa,GAAIC,WAAW,CAAE,GAAGZ,kBAAkB,CAC1DS,YAAY,EACZD,
|
|
1
|
+
{"version":3,"names":["useMemo","__","BlockTypesList","useClipboardBlock","useBlockTypeImpressions","createInserterSection","filterInserterItems","useBlockTypesState","jsx","_jsx","getBlockNamespace","item","name","split","BlockTypesTab","onSelect","rootClientId","listProps","rawBlockTypes","collections","clipboardBlock","filteredBlockTypes","blockTypes","items","trackBlockTypeSelected","handleSelect","args","collectionSections","result","Object","keys","forEach","namespace","data","filter","length","push","key","metadata","icon","title","sections","label"],"sources":["@wordpress/block-editor/src/components/inserter/block-types-tab.native.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useMemo } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport BlockTypesList from '../block-types-list';\nimport useClipboardBlock from './hooks/use-clipboard-block';\nimport useBlockTypeImpressions from './hooks/use-block-type-impressions';\nimport { createInserterSection, filterInserterItems } from './utils';\nimport useBlockTypesState from './hooks/use-block-types-state';\n\nconst getBlockNamespace = ( item ) => item.name.split( '/' )[ 0 ];\n\nfunction BlockTypesTab( { onSelect, rootClientId, listProps } ) {\n\tconst [ rawBlockTypes, , collections ] = useBlockTypesState(\n\t\trootClientId,\n\t\tonSelect,\n\t\ttrue\n\t);\n\tconst clipboardBlock = useClipboardBlock( rootClientId );\n\tconst filteredBlockTypes = filterInserterItems( rawBlockTypes );\n\tconst blockTypes = clipboardBlock\n\t\t? [ clipboardBlock, ...filteredBlockTypes ]\n\t\t: filteredBlockTypes;\n\tconst { items, trackBlockTypeSelected } =\n\t\tuseBlockTypeImpressions( blockTypes );\n\n\tconst handleSelect = ( ...args ) => {\n\t\ttrackBlockTypeSelected( ...args );\n\t\tonSelect( ...args );\n\t};\n\n\tconst collectionSections = useMemo( () => {\n\t\tconst result = [];\n\t\tObject.keys( collections ).forEach( ( namespace ) => {\n\t\t\tconst data = items.filter(\n\t\t\t\t( item ) => getBlockNamespace( item ) === namespace\n\t\t\t);\n\t\t\tif ( data.length > 0 ) {\n\t\t\t\tresult.push(\n\t\t\t\t\tcreateInserterSection( {\n\t\t\t\t\t\tkey: `collection-${ namespace }`,\n\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\ticon: collections[ namespace ].icon,\n\t\t\t\t\t\t\ttitle: collections[ namespace ].title,\n\t\t\t\t\t\t},\n\t\t\t\t\t\titems: data,\n\t\t\t\t\t} )\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t\treturn result;\n\t}, [ items, collections ] );\n\n\tconst sections = [\n\t\tcreateInserterSection( { key: 'default', items } ),\n\t\t...collectionSections,\n\t];\n\n\treturn (\n\t\t<BlockTypesList\n\t\t\tname=\"Blocks\"\n\t\t\tsections={ sections }\n\t\t\tonSelect={ handleSelect }\n\t\t\tlistProps={ listProps }\n\t\t\tlabel={ __( 'Blocks menu' ) }\n\t\t/>\n\t);\n}\n\nexport default BlockTypesTab;\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,OAAO,QAAQ,oBAAoB;AAC5C,SAASC,EAAE,QAAQ,iBAAiB;;AAEpC;AACA;AACA;AACA,OAAOC,cAAc,MAAM,qBAAqB;AAChD,OAAOC,iBAAiB,MAAM,6BAA6B;AAC3D,OAAOC,uBAAuB,MAAM,oCAAoC;AACxE,SAASC,qBAAqB,EAAEC,mBAAmB,QAAQ,SAAS;AACpE,OAAOC,kBAAkB,MAAM,+BAA+B;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAE/D,MAAMC,iBAAiB,GAAKC,IAAI,IAAMA,IAAI,CAACC,IAAI,CAACC,KAAK,CAAE,GAAI,CAAC,CAAE,CAAC,CAAE;AAEjE,SAASC,aAAaA,CAAE;EAAEC,QAAQ;EAAEC,YAAY;EAAEC;AAAU,CAAC,EAAG;EAC/D,MAAM,CAAEC,aAAa,GAAIC,WAAW,CAAE,GAAGZ,kBAAkB,CAC1DS,YAAY,EACZD,QAAQ,EACR,IACD,CAAC;EACD,MAAMK,cAAc,GAAGjB,iBAAiB,CAAEa,YAAa,CAAC;EACxD,MAAMK,kBAAkB,GAAGf,mBAAmB,CAAEY,aAAc,CAAC;EAC/D,MAAMI,UAAU,GAAGF,cAAc,GAC9B,CAAEA,cAAc,EAAE,GAAGC,kBAAkB,CAAE,GACzCA,kBAAkB;EACrB,MAAM;IAAEE,KAAK;IAAEC;EAAuB,CAAC,GACtCpB,uBAAuB,CAAEkB,UAAW,CAAC;EAEtC,MAAMG,YAAY,GAAGA,CAAE,GAAGC,IAAI,KAAM;IACnCF,sBAAsB,CAAE,GAAGE,IAAK,CAAC;IACjCX,QAAQ,CAAE,GAAGW,IAAK,CAAC;EACpB,CAAC;EAED,MAAMC,kBAAkB,GAAG3B,OAAO,CAAE,MAAM;IACzC,MAAM4B,MAAM,GAAG,EAAE;IACjBC,MAAM,CAACC,IAAI,CAAEX,WAAY,CAAC,CAACY,OAAO,CAAIC,SAAS,IAAM;MACpD,MAAMC,IAAI,GAAGV,KAAK,CAACW,MAAM,CACtBvB,IAAI,IAAMD,iBAAiB,CAAEC,IAAK,CAAC,KAAKqB,SAC3C,CAAC;MACD,IAAKC,IAAI,CAACE,MAAM,GAAG,CAAC,EAAG;QACtBP,MAAM,CAACQ,IAAI,CACV/B,qBAAqB,CAAE;UACtBgC,GAAG,EAAG,cAAcL,SAAW,EAAC;UAChCM,QAAQ,EAAE;YACTC,IAAI,EAAEpB,WAAW,CAAEa,SAAS,CAAE,CAACO,IAAI;YACnCC,KAAK,EAAErB,WAAW,CAAEa,SAAS,CAAE,CAACQ;UACjC,CAAC;UACDjB,KAAK,EAAEU;QACR,CAAE,CACH,CAAC;MACF;IACD,CAAE,CAAC;IAEH,OAAOL,MAAM;EACd,CAAC,EAAE,CAAEL,KAAK,EAAEJ,WAAW,CAAG,CAAC;EAE3B,MAAMsB,QAAQ,GAAG,CAChBpC,qBAAqB,CAAE;IAAEgC,GAAG,EAAE,SAAS;IAAEd;EAAM,CAAE,CAAC,EAClD,GAAGI,kBAAkB,CACrB;EAED,oBACClB,IAAA,CAACP,cAAc;IACdU,IAAI,EAAC,QAAQ;IACb6B,QAAQ,EAAGA,QAAU;IACrB1B,QAAQ,EAAGU,YAAc;IACzBR,SAAS,EAAGA,SAAW;IACvByB,KAAK,EAAGzC,EAAE,CAAE,aAAc;EAAG,CAC7B,CAAC;AAEJ;AAEA,eAAea,aAAa","ignoreList":[]}
|
|
@@ -21,9 +21,21 @@ import { store as preferencesStore } from '@wordpress/preferences';
|
|
|
21
21
|
*/
|
|
22
22
|
import { ViewerSlot } from './viewer-slot';
|
|
23
23
|
import useRichUrlData from './use-rich-url-data';
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Filters the title for display. Removes the protocol and www prefix.
|
|
27
|
+
*
|
|
28
|
+
* @param {string} title The title to be filtered.
|
|
29
|
+
*
|
|
30
|
+
* @return {string} The filtered title.
|
|
31
|
+
*/
|
|
24
32
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
25
33
|
import { Fragment as _Fragment } from "react/jsx-runtime";
|
|
26
34
|
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
35
|
+
function filterTitleForDisplay(title) {
|
|
36
|
+
// Derived from `filterURLForDisplay` in `@wordpress/url`.
|
|
37
|
+
return title.replace(/^[a-z\-.\+]+[0-9]*:(\/\/)?/i, '').replace(/^www\./i, '');
|
|
38
|
+
}
|
|
27
39
|
export default function LinkPreview({
|
|
28
40
|
value,
|
|
29
41
|
onEditClick,
|
|
@@ -47,6 +59,7 @@ export default function LinkPreview({
|
|
|
47
59
|
// url can be undefined if the href attribute is unset
|
|
48
60
|
const isEmptyURL = !value?.url?.length;
|
|
49
61
|
const displayTitle = !isEmptyURL && stripHTML(richData?.title || value?.title || displayURL);
|
|
62
|
+
const isUrlRedundant = !value?.url || filterTitleForDisplay(displayTitle) === displayURL;
|
|
50
63
|
let icon;
|
|
51
64
|
if (richData?.icon) {
|
|
52
65
|
icon = /*#__PURE__*/_jsx("img", {
|
|
@@ -101,7 +114,7 @@ export default function LinkPreview({
|
|
|
101
114
|
numberOfLines: 1,
|
|
102
115
|
children: displayTitle
|
|
103
116
|
})
|
|
104
|
-
}),
|
|
117
|
+
}), !isUrlRedundant && /*#__PURE__*/_jsx("span", {
|
|
105
118
|
className: "block-editor-link-control__search-item-info",
|
|
106
119
|
children: /*#__PURE__*/_jsx(Truncate, {
|
|
107
120
|
numberOfLines: 1,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["clsx","__","sprintf","Button","ExternalLink","__experimentalTruncate","Truncate","useCopyToClipboard","filterURLForDisplay","safeDecodeURI","Icon","globe","info","linkOff","edit","copySmall","__unstableStripHTML","stripHTML","useDispatch","useSelect","store","noticesStore","preferencesStore","ViewerSlot","useRichUrlData","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","LinkPreview","value","onEditClick","hasRichPreviews","hasUnlinkControl","onRemove","showIconLabels","select","get","showRichPreviews","url","richData","isFetching","hasRichData","Object","keys","length","displayURL","isEmptyURL","displayTitle","title","icon","src","alt","size","createNotice","ref","isDismissible","type","className","children","href","numberOfLines","label","onClick","__experimentalIsFocusable","disabled","fillProps"],"sources":["@wordpress/block-editor/src/components/link-control/link-preview.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { __, sprintf } from '@wordpress/i18n';\nimport {\n\tButton,\n\tExternalLink,\n\t__experimentalTruncate as Truncate,\n} from '@wordpress/components';\nimport { useCopyToClipboard } from '@wordpress/compose';\nimport { filterURLForDisplay, safeDecodeURI } from '@wordpress/url';\nimport { Icon, globe, info, linkOff, edit, copySmall } from '@wordpress/icons';\nimport { __unstableStripHTML as stripHTML } from '@wordpress/dom';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { store as preferencesStore } from '@wordpress/preferences';\n\n/**\n * Internal dependencies\n */\nimport { ViewerSlot } from './viewer-slot';\n\nimport useRichUrlData from './use-rich-url-data';\n\nexport default function LinkPreview( {\n\tvalue,\n\tonEditClick,\n\thasRichPreviews = false,\n\thasUnlinkControl = false,\n\tonRemove,\n} ) {\n\tconst showIconLabels = useSelect(\n\t\t( select ) =>\n\t\t\tselect( preferencesStore ).get( 'core', 'showIconLabels' ),\n\t\t[]\n\t);\n\n\t// Avoid fetching if rich previews are not desired.\n\tconst showRichPreviews = hasRichPreviews ? value?.url : null;\n\n\tconst { richData, isFetching } = useRichUrlData( showRichPreviews );\n\n\t// Rich data may be an empty object so test for that.\n\tconst hasRichData = richData && Object.keys( richData ).length;\n\n\tconst displayURL =\n\t\t( value && filterURLForDisplay( safeDecodeURI( value.url ), 24 ) ) ||\n\t\t'';\n\n\t// url can be undefined if the href attribute is unset\n\tconst isEmptyURL = ! value?.url?.length;\n\n\tconst displayTitle =\n\t\t! isEmptyURL &&\n\t\tstripHTML( richData?.title || value?.title || displayURL );\n\n\tlet icon;\n\n\tif ( richData?.icon ) {\n\t\ticon = <img src={ richData?.icon } alt=\"\" />;\n\t} else if ( isEmptyURL ) {\n\t\ticon = <Icon icon={ info } size={ 32 } />;\n\t} else {\n\t\ticon = <Icon icon={ globe } />;\n\t}\n\n\tconst { createNotice } = useDispatch( noticesStore );\n\tconst ref = useCopyToClipboard( value.url, () => {\n\t\tcreateNotice( 'info', __( 'Link copied to clipboard.' ), {\n\t\t\tisDismissible: true,\n\t\t\ttype: 'snackbar',\n\t\t} );\n\t} );\n\n\treturn (\n\t\t<div\n\t\t\taria-label={ __( 'Currently selected' ) }\n\t\t\tclassName={ clsx( 'block-editor-link-control__search-item', {\n\t\t\t\t'is-current': true,\n\t\t\t\t'is-rich': hasRichData,\n\t\t\t\t'is-fetching': !! isFetching,\n\t\t\t\t'is-preview': true,\n\t\t\t\t'is-error': isEmptyURL,\n\t\t\t\t'is-url-title': displayTitle === displayURL,\n\t\t\t} ) }\n\t\t>\n\t\t\t<div className=\"block-editor-link-control__search-item-top\">\n\t\t\t\t<span className=\"block-editor-link-control__search-item-header\">\n\t\t\t\t\t<span\n\t\t\t\t\t\tclassName={ clsx(\n\t\t\t\t\t\t\t'block-editor-link-control__search-item-icon',\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t'is-image': richData?.icon,\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\t\t{ icon }\n\t\t\t\t\t</span>\n\t\t\t\t\t<span className=\"block-editor-link-control__search-item-details\">\n\t\t\t\t\t\t{ ! isEmptyURL ? (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t<ExternalLink\n\t\t\t\t\t\t\t\t\tclassName=\"block-editor-link-control__search-item-title\"\n\t\t\t\t\t\t\t\t\thref={ value.url }\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<Truncate numberOfLines={ 1 }>\n\t\t\t\t\t\t\t\t\t\t{ displayTitle }\n\t\t\t\t\t\t\t\t\t</Truncate>\n\t\t\t\t\t\t\t\t</ExternalLink>\n\t\t\t\t\t\t\t\t{ value?.url && displayTitle !== displayURL && (\n\t\t\t\t\t\t\t\t\t<span className=\"block-editor-link-control__search-item-info\">\n\t\t\t\t\t\t\t\t\t\t<Truncate numberOfLines={ 1 }>\n\t\t\t\t\t\t\t\t\t\t\t{ displayURL }\n\t\t\t\t\t\t\t\t\t\t</Truncate>\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<span className=\"block-editor-link-control__search-item-error-notice\">\n\t\t\t\t\t\t\t\t{ __( 'Link is empty' ) }\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t) }\n\t\t\t\t\t</span>\n\t\t\t\t</span>\n\t\t\t\t<Button\n\t\t\t\t\ticon={ edit }\n\t\t\t\t\tlabel={ __( 'Edit link' ) }\n\t\t\t\t\tonClick={ onEditClick }\n\t\t\t\t\tsize=\"compact\"\n\t\t\t\t/>\n\t\t\t\t{ hasUnlinkControl && (\n\t\t\t\t\t<Button\n\t\t\t\t\t\ticon={ linkOff }\n\t\t\t\t\t\tlabel={ __( 'Remove link' ) }\n\t\t\t\t\t\tonClick={ onRemove }\n\t\t\t\t\t\tsize=\"compact\"\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t\t<Button\n\t\t\t\t\ticon={ copySmall }\n\t\t\t\t\tlabel={ sprintf(\n\t\t\t\t\t\t// Translators: %s is a placeholder for the link URL and an optional colon, (if a Link URL is present).\n\t\t\t\t\t\t__( 'Copy link%s' ), // Ends up looking like \"Copy link: https://example.com\".\n\t\t\t\t\t\tisEmptyURL || showIconLabels ? '' : ': ' + value.url\n\t\t\t\t\t) }\n\t\t\t\t\tref={ ref }\n\t\t\t\t\t__experimentalIsFocusable\n\t\t\t\t\tdisabled={ isEmptyURL }\n\t\t\t\t\tsize=\"compact\"\n\t\t\t\t/>\n\t\t\t\t<ViewerSlot fillProps={ value } />\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["clsx","__","sprintf","Button","ExternalLink","__experimentalTruncate","Truncate","useCopyToClipboard","filterURLForDisplay","safeDecodeURI","Icon","globe","info","linkOff","edit","copySmall","__unstableStripHTML","stripHTML","useDispatch","useSelect","store","noticesStore","preferencesStore","ViewerSlot","useRichUrlData","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","filterTitleForDisplay","title","replace","LinkPreview","value","onEditClick","hasRichPreviews","hasUnlinkControl","onRemove","showIconLabels","select","get","showRichPreviews","url","richData","isFetching","hasRichData","Object","keys","length","displayURL","isEmptyURL","displayTitle","isUrlRedundant","icon","src","alt","size","createNotice","ref","isDismissible","type","className","children","href","numberOfLines","label","onClick","__experimentalIsFocusable","disabled","fillProps"],"sources":["@wordpress/block-editor/src/components/link-control/link-preview.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { __, sprintf } from '@wordpress/i18n';\nimport {\n\tButton,\n\tExternalLink,\n\t__experimentalTruncate as Truncate,\n} from '@wordpress/components';\nimport { useCopyToClipboard } from '@wordpress/compose';\nimport { filterURLForDisplay, safeDecodeURI } from '@wordpress/url';\nimport { Icon, globe, info, linkOff, edit, copySmall } from '@wordpress/icons';\nimport { __unstableStripHTML as stripHTML } from '@wordpress/dom';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { store as preferencesStore } from '@wordpress/preferences';\n\n/**\n * Internal dependencies\n */\nimport { ViewerSlot } from './viewer-slot';\n\nimport useRichUrlData from './use-rich-url-data';\n\n/**\n * Filters the title for display. Removes the protocol and www prefix.\n *\n * @param {string} title The title to be filtered.\n *\n * @return {string} The filtered title.\n */\nfunction filterTitleForDisplay( title ) {\n\t// Derived from `filterURLForDisplay` in `@wordpress/url`.\n\treturn title\n\t\t.replace( /^[a-z\\-.\\+]+[0-9]*:(\\/\\/)?/i, '' )\n\t\t.replace( /^www\\./i, '' );\n}\n\nexport default function LinkPreview( {\n\tvalue,\n\tonEditClick,\n\thasRichPreviews = false,\n\thasUnlinkControl = false,\n\tonRemove,\n} ) {\n\tconst showIconLabels = useSelect(\n\t\t( select ) =>\n\t\t\tselect( preferencesStore ).get( 'core', 'showIconLabels' ),\n\t\t[]\n\t);\n\n\t// Avoid fetching if rich previews are not desired.\n\tconst showRichPreviews = hasRichPreviews ? value?.url : null;\n\n\tconst { richData, isFetching } = useRichUrlData( showRichPreviews );\n\n\t// Rich data may be an empty object so test for that.\n\tconst hasRichData = richData && Object.keys( richData ).length;\n\n\tconst displayURL =\n\t\t( value && filterURLForDisplay( safeDecodeURI( value.url ), 24 ) ) ||\n\t\t'';\n\n\t// url can be undefined if the href attribute is unset\n\tconst isEmptyURL = ! value?.url?.length;\n\n\tconst displayTitle =\n\t\t! isEmptyURL &&\n\t\tstripHTML( richData?.title || value?.title || displayURL );\n\n\tconst isUrlRedundant =\n\t\t! value?.url || filterTitleForDisplay( displayTitle ) === displayURL;\n\n\tlet icon;\n\n\tif ( richData?.icon ) {\n\t\ticon = <img src={ richData?.icon } alt=\"\" />;\n\t} else if ( isEmptyURL ) {\n\t\ticon = <Icon icon={ info } size={ 32 } />;\n\t} else {\n\t\ticon = <Icon icon={ globe } />;\n\t}\n\n\tconst { createNotice } = useDispatch( noticesStore );\n\tconst ref = useCopyToClipboard( value.url, () => {\n\t\tcreateNotice( 'info', __( 'Link copied to clipboard.' ), {\n\t\t\tisDismissible: true,\n\t\t\ttype: 'snackbar',\n\t\t} );\n\t} );\n\n\treturn (\n\t\t<div\n\t\t\taria-label={ __( 'Currently selected' ) }\n\t\t\tclassName={ clsx( 'block-editor-link-control__search-item', {\n\t\t\t\t'is-current': true,\n\t\t\t\t'is-rich': hasRichData,\n\t\t\t\t'is-fetching': !! isFetching,\n\t\t\t\t'is-preview': true,\n\t\t\t\t'is-error': isEmptyURL,\n\t\t\t\t'is-url-title': displayTitle === displayURL,\n\t\t\t} ) }\n\t\t>\n\t\t\t<div className=\"block-editor-link-control__search-item-top\">\n\t\t\t\t<span className=\"block-editor-link-control__search-item-header\">\n\t\t\t\t\t<span\n\t\t\t\t\t\tclassName={ clsx(\n\t\t\t\t\t\t\t'block-editor-link-control__search-item-icon',\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t'is-image': richData?.icon,\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\t\t{ icon }\n\t\t\t\t\t</span>\n\t\t\t\t\t<span className=\"block-editor-link-control__search-item-details\">\n\t\t\t\t\t\t{ ! isEmptyURL ? (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t<ExternalLink\n\t\t\t\t\t\t\t\t\tclassName=\"block-editor-link-control__search-item-title\"\n\t\t\t\t\t\t\t\t\thref={ value.url }\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<Truncate numberOfLines={ 1 }>\n\t\t\t\t\t\t\t\t\t\t{ displayTitle }\n\t\t\t\t\t\t\t\t\t</Truncate>\n\t\t\t\t\t\t\t\t</ExternalLink>\n\t\t\t\t\t\t\t\t{ ! isUrlRedundant && (\n\t\t\t\t\t\t\t\t\t<span className=\"block-editor-link-control__search-item-info\">\n\t\t\t\t\t\t\t\t\t\t<Truncate numberOfLines={ 1 }>\n\t\t\t\t\t\t\t\t\t\t\t{ displayURL }\n\t\t\t\t\t\t\t\t\t\t</Truncate>\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<span className=\"block-editor-link-control__search-item-error-notice\">\n\t\t\t\t\t\t\t\t{ __( 'Link is empty' ) }\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t) }\n\t\t\t\t\t</span>\n\t\t\t\t</span>\n\t\t\t\t<Button\n\t\t\t\t\ticon={ edit }\n\t\t\t\t\tlabel={ __( 'Edit link' ) }\n\t\t\t\t\tonClick={ onEditClick }\n\t\t\t\t\tsize=\"compact\"\n\t\t\t\t/>\n\t\t\t\t{ hasUnlinkControl && (\n\t\t\t\t\t<Button\n\t\t\t\t\t\ticon={ linkOff }\n\t\t\t\t\t\tlabel={ __( 'Remove link' ) }\n\t\t\t\t\t\tonClick={ onRemove }\n\t\t\t\t\t\tsize=\"compact\"\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t\t<Button\n\t\t\t\t\ticon={ copySmall }\n\t\t\t\t\tlabel={ sprintf(\n\t\t\t\t\t\t// Translators: %s is a placeholder for the link URL and an optional colon, (if a Link URL is present).\n\t\t\t\t\t\t__( 'Copy link%s' ), // Ends up looking like \"Copy link: https://example.com\".\n\t\t\t\t\t\tisEmptyURL || showIconLabels ? '' : ': ' + value.url\n\t\t\t\t\t) }\n\t\t\t\t\tref={ ref }\n\t\t\t\t\t__experimentalIsFocusable\n\t\t\t\t\tdisabled={ isEmptyURL }\n\t\t\t\t\tsize=\"compact\"\n\t\t\t\t/>\n\t\t\t\t<ViewerSlot fillProps={ value } />\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n"],"mappings":"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","ignoreList":[]}
|