@wordpress/block-editor 13.1.0 → 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.
Files changed (142) hide show
  1. package/CHANGELOG.md +19 -17
  2. package/README.md +1 -1
  3. package/build/components/block-lock/modal.js +67 -67
  4. package/build/components/block-lock/modal.js.map +1 -1
  5. package/build/components/block-mover/index.js +12 -6
  6. package/build/components/block-mover/index.js.map +1 -1
  7. package/build/components/block-toolbar/shuffle.js +3 -1
  8. package/build/components/block-toolbar/shuffle.js.map +1 -1
  9. package/build/components/child-layout-control/index.js +185 -127
  10. package/build/components/child-layout-control/index.js.map +1 -1
  11. package/build/components/global-styles/use-global-styles-output.js +4 -3
  12. package/build/components/global-styles/use-global-styles-output.js.map +1 -1
  13. package/build/components/grid/grid-item-movers.js +97 -0
  14. package/build/components/grid/grid-item-movers.js.map +1 -0
  15. package/build/components/{grid-visualizer → grid}/grid-item-resizer.js +18 -56
  16. package/build/components/grid/grid-item-resizer.js.map +1 -0
  17. package/build/components/grid/grid-visualizer.js +225 -0
  18. package/build/components/grid/grid-visualizer.js.map +1 -0
  19. package/build/components/{grid-visualizer → grid}/index.js +14 -0
  20. package/build/components/grid/index.js.map +1 -0
  21. package/build/components/grid/use-get-number-of-blocks-before-cell.js +40 -0
  22. package/build/components/grid/use-get-number-of-blocks-before-cell.js.map +1 -0
  23. package/build/components/grid/use-grid-layout-sync.js +162 -0
  24. package/build/components/grid/use-grid-layout-sync.js.map +1 -0
  25. package/build/components/grid/utils.js +145 -0
  26. package/build/components/grid/utils.js.map +1 -0
  27. package/build/components/image-editor/aspect-ratio-dropdown.js +0 -1
  28. package/build/components/image-editor/aspect-ratio-dropdown.js.map +1 -1
  29. package/build/components/inner-blocks/index.js +1 -1
  30. package/build/components/inner-blocks/index.js.map +1 -1
  31. package/build/components/rich-text/event-listeners/input-rules.js +1 -0
  32. package/build/components/rich-text/event-listeners/input-rules.js.map +1 -1
  33. package/build/components/rich-text/index.native.js +10 -4
  34. package/build/components/rich-text/index.native.js.map +1 -1
  35. package/build/components/rich-text/native/index.native.js +14 -0
  36. package/build/components/rich-text/native/index.native.js.map +1 -1
  37. package/build/hooks/block-style-variation.js +26 -7
  38. package/build/hooks/block-style-variation.js.map +1 -1
  39. package/build/hooks/layout-child.js +29 -21
  40. package/build/hooks/layout-child.js.map +1 -1
  41. package/build/hooks/utils.js +3 -2
  42. package/build/hooks/utils.js.map +1 -1
  43. package/build/layouts/grid.js +24 -47
  44. package/build/layouts/grid.js.map +1 -1
  45. package/build/lock-unlock.js +1 -1
  46. package/build/lock-unlock.js.map +1 -1
  47. package/build/store/actions.js +17 -1
  48. package/build/store/actions.js.map +1 -1
  49. package/build-module/components/block-lock/modal.js +67 -67
  50. package/build-module/components/block-lock/modal.js.map +1 -1
  51. package/build-module/components/block-mover/index.js +12 -6
  52. package/build-module/components/block-mover/index.js.map +1 -1
  53. package/build-module/components/block-toolbar/shuffle.js +3 -1
  54. package/build-module/components/block-toolbar/shuffle.js.map +1 -1
  55. package/build-module/components/child-layout-control/index.js +185 -127
  56. package/build-module/components/child-layout-control/index.js.map +1 -1
  57. package/build-module/components/global-styles/use-global-styles-output.js +4 -3
  58. package/build-module/components/global-styles/use-global-styles-output.js.map +1 -1
  59. package/build-module/components/grid/grid-item-movers.js +90 -0
  60. package/build-module/components/grid/grid-item-movers.js.map +1 -0
  61. package/build-module/components/{grid-visualizer → grid}/grid-item-resizer.js +13 -51
  62. package/build-module/components/grid/grid-item-resizer.js.map +1 -0
  63. package/build-module/components/grid/grid-visualizer.js +217 -0
  64. package/build-module/components/grid/grid-visualizer.js.map +1 -0
  65. package/build-module/components/grid/index.js +5 -0
  66. package/build-module/components/grid/index.js.map +1 -0
  67. package/build-module/components/grid/use-get-number-of-blocks-before-cell.js +33 -0
  68. package/build-module/components/grid/use-get-number-of-blocks-before-cell.js.map +1 -0
  69. package/build-module/components/grid/use-grid-layout-sync.js +155 -0
  70. package/build-module/components/grid/use-grid-layout-sync.js.map +1 -0
  71. package/build-module/components/grid/utils.js +131 -0
  72. package/build-module/components/grid/utils.js.map +1 -0
  73. package/build-module/components/image-editor/aspect-ratio-dropdown.js +0 -1
  74. package/build-module/components/image-editor/aspect-ratio-dropdown.js.map +1 -1
  75. package/build-module/components/inner-blocks/index.js +1 -1
  76. package/build-module/components/inner-blocks/index.js.map +1 -1
  77. package/build-module/components/rich-text/event-listeners/input-rules.js +1 -1
  78. package/build-module/components/rich-text/event-listeners/input-rules.js.map +1 -1
  79. package/build-module/components/rich-text/index.native.js +11 -5
  80. package/build-module/components/rich-text/index.native.js.map +1 -1
  81. package/build-module/components/rich-text/native/index.native.js +14 -0
  82. package/build-module/components/rich-text/native/index.native.js.map +1 -1
  83. package/build-module/hooks/block-style-variation.js +25 -7
  84. package/build-module/hooks/block-style-variation.js.map +1 -1
  85. package/build-module/hooks/layout-child.js +27 -19
  86. package/build-module/hooks/layout-child.js.map +1 -1
  87. package/build-module/hooks/utils.js +3 -2
  88. package/build-module/hooks/utils.js.map +1 -1
  89. package/build-module/layouts/grid.js +24 -47
  90. package/build-module/layouts/grid.js.map +1 -1
  91. package/build-module/lock-unlock.js +1 -1
  92. package/build-module/lock-unlock.js.map +1 -1
  93. package/build-module/store/actions.js +17 -1
  94. package/build-module/store/actions.js.map +1 -1
  95. package/build-style/style-rtl.css +39 -18
  96. package/build-style/style.css +39 -18
  97. package/package.json +31 -31
  98. package/src/components/block-lock/modal.js +95 -82
  99. package/src/components/block-lock/style.scss +11 -1
  100. package/src/components/block-mover/index.js +37 -24
  101. package/src/components/block-toolbar/shuffle.js +3 -1
  102. package/src/components/child-layout-control/index.js +224 -159
  103. package/src/components/global-styles/test/use-global-styles-output.js +38 -3
  104. package/src/components/global-styles/use-global-styles-output.js +4 -3
  105. package/src/components/grid/grid-item-movers.js +128 -0
  106. package/src/components/{grid-visualizer → grid}/grid-item-resizer.js +14 -52
  107. package/src/components/grid/grid-visualizer.js +267 -0
  108. package/src/components/grid/index.js +4 -0
  109. package/src/components/grid/style.scss +63 -0
  110. package/src/components/grid/use-get-number-of-blocks-before-cell.js +30 -0
  111. package/src/components/grid/use-grid-layout-sync.js +167 -0
  112. package/src/components/grid/utils.js +178 -0
  113. package/src/components/image-editor/aspect-ratio-dropdown.js +0 -1
  114. package/src/components/inner-blocks/index.js +3 -1
  115. package/src/components/rich-text/event-listeners/input-rules.js +1 -1
  116. package/src/components/rich-text/index.native.js +10 -8
  117. package/src/components/rich-text/native/index.native.js +17 -0
  118. package/src/hooks/block-style-variation.js +24 -6
  119. package/src/hooks/layout-child.js +34 -14
  120. package/src/hooks/utils.js +3 -1
  121. package/src/layouts/grid.js +54 -62
  122. package/src/lock-unlock.js +1 -1
  123. package/src/store/actions.js +21 -1
  124. package/src/style.scss +1 -1
  125. package/build/components/grid-visualizer/grid-item-resizer.js.map +0 -1
  126. package/build/components/grid-visualizer/grid-visualizer.js +0 -92
  127. package/build/components/grid-visualizer/grid-visualizer.js.map +0 -1
  128. package/build/components/grid-visualizer/index.js.map +0 -1
  129. package/build/components/grid-visualizer/utils.js +0 -10
  130. package/build/components/grid-visualizer/utils.js.map +0 -1
  131. package/build-module/components/grid-visualizer/grid-item-resizer.js.map +0 -1
  132. package/build-module/components/grid-visualizer/grid-visualizer.js +0 -84
  133. package/build-module/components/grid-visualizer/grid-visualizer.js.map +0 -1
  134. package/build-module/components/grid-visualizer/index.js +0 -3
  135. package/build-module/components/grid-visualizer/index.js.map +0 -1
  136. package/build-module/components/grid-visualizer/utils.js +0 -4
  137. package/build-module/components/grid-visualizer/utils.js.map +0 -1
  138. package/src/components/grid-visualizer/grid-visualizer.js +0 -101
  139. package/src/components/grid-visualizer/index.js +0 -2
  140. package/src/components/grid-visualizer/style.scss +0 -34
  141. package/src/components/grid-visualizer/utils.js +0 -5
  142. /package/src/components/font-sizes/{README.MD → README.md} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"names":["ResizableBox","useState","useEffect","__unstableUseBlockElement","useBlockElement","BlockPopoverCover","getComputedCSS","getGridTracks","getClosestTrack","jsx","_jsx","GridItemResizer","clientId","bounds","onChange","parentLayout","blockElement","rootBlockElement","parentElement","columnCount","GridItemResizerInner","isManualGrid","window","__experimentalEnableGridInteractivity","resizeDirection","setResizeDirection","enableSide","setEnableSide","top","bottom","left","right","observer","ResizeObserver","blockClientRect","getBoundingClientRect","rootBlockClientRect","observe","disconnect","justification","alignment","styles","display","justifyContent","alignItems","className","__unstablePopoverSlot","additionalStyles","children","size","width","height","enable","bottomLeft","bottomRight","topLeft","topRight","boundsByDirection","onResizeStart","event","direction","ownerDocument","addEventListener","target","dispatchEvent","Event","bubbles","once","onResizeStop","boxElement","columnGap","parseFloat","rowGap","gridColumnTracks","gridRowTracks","rect","DOMRect","offsetLeft","offsetTop","offsetWidth","offsetHeight","columnStart","rowStart","columnEnd","rowEnd","columnSpan","rowSpan","undefined"],"sources":["@wordpress/block-editor/src/components/grid/grid-item-resizer.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { ResizableBox } from '@wordpress/components';\nimport { useState, useEffect } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { __unstableUseBlockElement as useBlockElement } from '../block-list/use-block-props/use-block-refs';\nimport BlockPopoverCover from '../block-popover/cover';\nimport { getComputedCSS, getGridTracks, getClosestTrack } from './utils';\n\nexport function GridItemResizer( {\n\tclientId,\n\tbounds,\n\tonChange,\n\tparentLayout,\n} ) {\n\tconst blockElement = useBlockElement( clientId );\n\tconst rootBlockElement = blockElement?.parentElement;\n\tconst { columnCount } = parentLayout;\n\n\tif ( ! blockElement || ! rootBlockElement ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<GridItemResizerInner\n\t\t\tclientId={ clientId }\n\t\t\tbounds={ bounds }\n\t\t\tblockElement={ blockElement }\n\t\t\trootBlockElement={ rootBlockElement }\n\t\t\tonChange={ onChange }\n\t\t\tisManualGrid={\n\t\t\t\t!! columnCount && window.__experimentalEnableGridInteractivity\n\t\t\t}\n\t\t/>\n\t);\n}\n\nfunction GridItemResizerInner( {\n\tclientId,\n\tbounds,\n\tblockElement,\n\trootBlockElement,\n\tonChange,\n\tisManualGrid,\n} ) {\n\tconst [ resizeDirection, setResizeDirection ] = useState( null );\n\tconst [ enableSide, setEnableSide ] = useState( {\n\t\ttop: false,\n\t\tbottom: false,\n\t\tleft: false,\n\t\tright: false,\n\t} );\n\n\tuseEffect( () => {\n\t\tconst observer = new window.ResizeObserver( () => {\n\t\t\tconst blockClientRect = blockElement.getBoundingClientRect();\n\t\t\tconst rootBlockClientRect =\n\t\t\t\trootBlockElement.getBoundingClientRect();\n\t\t\tsetEnableSide( {\n\t\t\t\ttop: blockClientRect.top > rootBlockClientRect.top,\n\t\t\t\tbottom: blockClientRect.bottom < rootBlockClientRect.bottom,\n\t\t\t\tleft: blockClientRect.left > rootBlockClientRect.left,\n\t\t\t\tright: blockClientRect.right < rootBlockClientRect.right,\n\t\t\t} );\n\t\t} );\n\t\tobserver.observe( blockElement );\n\t\treturn () => observer.disconnect();\n\t}, [ blockElement, rootBlockElement ] );\n\n\tconst justification = {\n\t\tright: 'flex-start',\n\t\tleft: 'flex-end',\n\t};\n\n\tconst alignment = {\n\t\ttop: 'flex-end',\n\t\tbottom: 'flex-start',\n\t};\n\n\tconst styles = {\n\t\tdisplay: 'flex',\n\t\tjustifyContent: 'center',\n\t\talignItems: 'center',\n\t\t...( justification[ resizeDirection ] && {\n\t\t\tjustifyContent: justification[ resizeDirection ],\n\t\t} ),\n\t\t...( alignment[ resizeDirection ] && {\n\t\t\talignItems: alignment[ resizeDirection ],\n\t\t} ),\n\t};\n\n\treturn (\n\t\t<BlockPopoverCover\n\t\t\tclassName=\"block-editor-grid-item-resizer\"\n\t\t\tclientId={ clientId }\n\t\t\t__unstablePopoverSlot=\"block-toolbar\"\n\t\t\tadditionalStyles={ styles }\n\t\t>\n\t\t\t<ResizableBox\n\t\t\t\tclassName=\"block-editor-grid-item-resizer__box\"\n\t\t\t\tsize={ {\n\t\t\t\t\twidth: '100%',\n\t\t\t\t\theight: '100%',\n\t\t\t\t} }\n\t\t\t\tenable={ {\n\t\t\t\t\tbottom: enableSide.bottom,\n\t\t\t\t\tbottomLeft: false,\n\t\t\t\t\tbottomRight: false,\n\t\t\t\t\tleft: enableSide.left,\n\t\t\t\t\tright: enableSide.right,\n\t\t\t\t\ttop: enableSide.top,\n\t\t\t\t\ttopLeft: false,\n\t\t\t\t\ttopRight: false,\n\t\t\t\t} }\n\t\t\t\tbounds={ bounds }\n\t\t\t\tboundsByDirection\n\t\t\t\tonResizeStart={ ( event, direction ) => {\n\t\t\t\t\t/*\n\t\t\t\t\t * The container justification and alignment need to be set\n\t\t\t\t\t * according to the direction the resizer is being dragged in,\n\t\t\t\t\t * so that it resizes in the right direction.\n\t\t\t\t\t */\n\t\t\t\t\tsetResizeDirection( direction );\n\n\t\t\t\t\t/*\n\t\t\t\t\t * The mouseup event on the resize handle doesn't trigger if the mouse\n\t\t\t\t\t * isn't directly above the handle, so we try to detect if it happens\n\t\t\t\t\t * outside the grid and dispatch a mouseup event on the handle.\n\t\t\t\t\t */\n\t\t\t\t\tblockElement.ownerDocument.addEventListener(\n\t\t\t\t\t\t'mouseup',\n\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\tevent.target.dispatchEvent(\n\t\t\t\t\t\t\t\tnew Event( 'mouseup', { bubbles: true } )\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{ once: true }\n\t\t\t\t\t);\n\t\t\t\t} }\n\t\t\t\tonResizeStop={ ( event, direction, boxElement ) => {\n\t\t\t\t\tconst columnGap = parseFloat(\n\t\t\t\t\t\tgetComputedCSS( rootBlockElement, 'column-gap' )\n\t\t\t\t\t);\n\t\t\t\t\tconst rowGap = parseFloat(\n\t\t\t\t\t\tgetComputedCSS( rootBlockElement, 'row-gap' )\n\t\t\t\t\t);\n\t\t\t\t\tconst gridColumnTracks = getGridTracks(\n\t\t\t\t\t\tgetComputedCSS(\n\t\t\t\t\t\t\trootBlockElement,\n\t\t\t\t\t\t\t'grid-template-columns'\n\t\t\t\t\t\t),\n\t\t\t\t\t\tcolumnGap\n\t\t\t\t\t);\n\t\t\t\t\tconst gridRowTracks = getGridTracks(\n\t\t\t\t\t\tgetComputedCSS(\n\t\t\t\t\t\t\trootBlockElement,\n\t\t\t\t\t\t\t'grid-template-rows'\n\t\t\t\t\t\t),\n\t\t\t\t\t\trowGap\n\t\t\t\t\t);\n\t\t\t\t\tconst rect = new window.DOMRect(\n\t\t\t\t\t\tblockElement.offsetLeft + boxElement.offsetLeft,\n\t\t\t\t\t\tblockElement.offsetTop + boxElement.offsetTop,\n\t\t\t\t\t\tboxElement.offsetWidth,\n\t\t\t\t\t\tboxElement.offsetHeight\n\t\t\t\t\t);\n\t\t\t\t\tconst columnStart =\n\t\t\t\t\t\tgetClosestTrack( gridColumnTracks, rect.left ) + 1;\n\t\t\t\t\tconst rowStart =\n\t\t\t\t\t\tgetClosestTrack( gridRowTracks, rect.top ) + 1;\n\t\t\t\t\tconst columnEnd =\n\t\t\t\t\t\tgetClosestTrack( gridColumnTracks, rect.right, 'end' ) +\n\t\t\t\t\t\t1;\n\t\t\t\t\tconst rowEnd =\n\t\t\t\t\t\tgetClosestTrack( gridRowTracks, rect.bottom, 'end' ) +\n\t\t\t\t\t\t1;\n\t\t\t\t\tonChange( {\n\t\t\t\t\t\tcolumnSpan: columnEnd - columnStart + 1,\n\t\t\t\t\t\trowSpan: rowEnd - rowStart + 1,\n\t\t\t\t\t\tcolumnStart: isManualGrid ? columnStart : undefined,\n\t\t\t\t\t\trowStart: isManualGrid ? rowStart : undefined,\n\t\t\t\t\t} );\n\t\t\t\t} }\n\t\t\t/>\n\t\t</BlockPopoverCover>\n\t);\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,217 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import clsx from 'clsx';
5
+
6
+ /**
7
+ * WordPress dependencies
8
+ */
9
+ import { useState, useEffect, forwardRef } from '@wordpress/element';
10
+ import { useSelect, useDispatch } from '@wordpress/data';
11
+ import { __experimentalUseDropZone as useDropZone } from '@wordpress/compose';
12
+
13
+ /**
14
+ * Internal dependencies
15
+ */
16
+ import { __unstableUseBlockElement as useBlockElement } from '../block-list/use-block-props/use-block-refs';
17
+ import BlockPopoverCover from '../block-popover/cover';
18
+ import { range, GridRect, getGridInfo } from './utils';
19
+ import { store as blockEditorStore } from '../../store';
20
+ import { useGetNumberOfBlocksBeforeCell } from './use-get-number-of-blocks-before-cell';
21
+ import { jsx as _jsx } from "react/jsx-runtime";
22
+ export function GridVisualizer({
23
+ clientId,
24
+ contentRef,
25
+ parentLayout
26
+ }) {
27
+ const isDistractionFree = useSelect(select => select(blockEditorStore).getSettings().isDistractionFree, []);
28
+ const gridElement = useBlockElement(clientId);
29
+ if (isDistractionFree || !gridElement) {
30
+ return null;
31
+ }
32
+ const isManualGrid = parentLayout?.columnCount && window.__experimentalEnableGridInteractivity;
33
+ return /*#__PURE__*/_jsx(GridVisualizerGrid, {
34
+ clientId: clientId,
35
+ gridElement: gridElement,
36
+ isManualGrid: isManualGrid,
37
+ ref: contentRef
38
+ });
39
+ }
40
+ const GridVisualizerGrid = forwardRef(({
41
+ clientId,
42
+ gridElement,
43
+ isManualGrid
44
+ }, ref) => {
45
+ const [gridInfo, setGridInfo] = useState(() => getGridInfo(gridElement));
46
+ const [isDroppingAllowed, setIsDroppingAllowed] = useState(false);
47
+ const [highlightedRect, setHighlightedRect] = useState(null);
48
+ useEffect(() => {
49
+ const observers = [];
50
+ for (const element of [gridElement, ...gridElement.children]) {
51
+ const observer = new window.ResizeObserver(() => {
52
+ setGridInfo(getGridInfo(gridElement));
53
+ });
54
+ observer.observe(element);
55
+ observers.push(observer);
56
+ }
57
+ return () => {
58
+ for (const observer of observers) {
59
+ observer.disconnect();
60
+ }
61
+ };
62
+ }, [gridElement]);
63
+ useEffect(() => {
64
+ function onGlobalDrag() {
65
+ setIsDroppingAllowed(true);
66
+ }
67
+ function onGlobalDragEnd() {
68
+ setIsDroppingAllowed(false);
69
+ }
70
+ document.addEventListener('drag', onGlobalDrag);
71
+ document.addEventListener('dragend', onGlobalDragEnd);
72
+ return () => {
73
+ document.removeEventListener('drag', onGlobalDrag);
74
+ document.removeEventListener('dragend', onGlobalDragEnd);
75
+ };
76
+ }, []);
77
+ return /*#__PURE__*/_jsx(BlockPopoverCover, {
78
+ className: clsx('block-editor-grid-visualizer', {
79
+ 'is-dropping-allowed': isDroppingAllowed
80
+ }),
81
+ clientId: clientId,
82
+ __unstablePopoverSlot: "block-toolbar",
83
+ children: /*#__PURE__*/_jsx("div", {
84
+ ref: ref,
85
+ className: "block-editor-grid-visualizer__grid",
86
+ style: gridInfo.style,
87
+ children: isManualGrid ? range(1, gridInfo.numRows).map(row => range(1, gridInfo.numColumns).map(column => /*#__PURE__*/_jsx(GridVisualizerCell, {
88
+ color: gridInfo.currentColor,
89
+ children: /*#__PURE__*/_jsx(GridVisualizerDropZone, {
90
+ column: column,
91
+ row: row,
92
+ gridClientId: clientId,
93
+ gridInfo: gridInfo,
94
+ highlightedRect: highlightedRect,
95
+ setHighlightedRect: setHighlightedRect
96
+ })
97
+ }, `${row}-${column}`))) : Array.from({
98
+ length: gridInfo.numItems
99
+ }, (_, i) => /*#__PURE__*/_jsx(GridVisualizerCell, {
100
+ color: gridInfo.currentColor
101
+ }, i))
102
+ })
103
+ });
104
+ });
105
+ function GridVisualizerCell({
106
+ color,
107
+ children
108
+ }) {
109
+ return /*#__PURE__*/_jsx("div", {
110
+ className: "block-editor-grid-visualizer__cell",
111
+ style: {
112
+ boxShadow: `inset 0 0 0 1px color-mix(in srgb, ${color} 20%, #0000)`
113
+ },
114
+ children: children
115
+ });
116
+ }
117
+ function GridVisualizerDropZone({
118
+ column,
119
+ row,
120
+ gridClientId,
121
+ gridInfo,
122
+ highlightedRect,
123
+ setHighlightedRect
124
+ }) {
125
+ var _highlightedRect$cont;
126
+ const {
127
+ getBlockAttributes
128
+ } = useSelect(blockEditorStore);
129
+ const {
130
+ updateBlockAttributes,
131
+ moveBlocksToPosition,
132
+ __unstableMarkNextChangeAsNotPersistent
133
+ } = useDispatch(blockEditorStore);
134
+ const getNumberOfBlocksBeforeCell = useGetNumberOfBlocksBeforeCell(gridClientId, gridInfo.numColumns);
135
+ const ref = useDropZoneWithValidation({
136
+ validateDrag(srcClientId) {
137
+ const attributes = getBlockAttributes(srcClientId);
138
+ const rect = new GridRect({
139
+ columnStart: column,
140
+ rowStart: row,
141
+ columnSpan: attributes.style?.layout?.columnSpan,
142
+ rowSpan: attributes.style?.layout?.rowSpan
143
+ });
144
+ const isInBounds = new GridRect({
145
+ columnSpan: gridInfo.numColumns,
146
+ rowSpan: gridInfo.numRows
147
+ }).containsRect(rect);
148
+ return isInBounds;
149
+ },
150
+ onDragEnter(srcClientId) {
151
+ const attributes = getBlockAttributes(srcClientId);
152
+ setHighlightedRect(new GridRect({
153
+ columnStart: column,
154
+ rowStart: row,
155
+ columnSpan: attributes.style?.layout?.columnSpan,
156
+ rowSpan: attributes.style?.layout?.rowSpan
157
+ }));
158
+ },
159
+ onDragLeave() {
160
+ // onDragEnter can be called before onDragLeave if the user moves
161
+ // their mouse quickly, so only clear the highlight if it was set
162
+ // by this cell.
163
+ setHighlightedRect(prevHighlightedRect => prevHighlightedRect?.columnStart === column && prevHighlightedRect?.rowStart === row ? null : prevHighlightedRect);
164
+ },
165
+ onDrop(srcClientId) {
166
+ setHighlightedRect(null);
167
+ const attributes = getBlockAttributes(srcClientId);
168
+ updateBlockAttributes(srcClientId, {
169
+ style: {
170
+ ...attributes.style,
171
+ layout: {
172
+ ...attributes.style?.layout,
173
+ columnStart: column,
174
+ rowStart: row
175
+ }
176
+ }
177
+ });
178
+ __unstableMarkNextChangeAsNotPersistent();
179
+ moveBlocksToPosition([srcClientId], gridClientId, gridClientId, getNumberOfBlocksBeforeCell(column, row));
180
+ }
181
+ });
182
+ const isHighlighted = (_highlightedRect$cont = highlightedRect?.contains(column, row)) !== null && _highlightedRect$cont !== void 0 ? _highlightedRect$cont : false;
183
+ return /*#__PURE__*/_jsx("div", {
184
+ ref: ref,
185
+ className: clsx('block-editor-grid-visualizer__drop-zone', {
186
+ 'is-highlighted': isHighlighted
187
+ })
188
+ });
189
+ }
190
+ function useDropZoneWithValidation({
191
+ validateDrag,
192
+ onDragEnter,
193
+ onDragLeave,
194
+ onDrop
195
+ }) {
196
+ const {
197
+ getDraggedBlockClientIds
198
+ } = useSelect(blockEditorStore);
199
+ return useDropZone({
200
+ onDragEnter() {
201
+ const [srcClientId] = getDraggedBlockClientIds();
202
+ if (srcClientId && validateDrag(srcClientId)) {
203
+ onDragEnter(srcClientId);
204
+ }
205
+ },
206
+ onDragLeave() {
207
+ onDragLeave();
208
+ },
209
+ onDrop() {
210
+ const [srcClientId] = getDraggedBlockClientIds();
211
+ if (srcClientId && validateDrag(srcClientId)) {
212
+ onDrop(srcClientId);
213
+ }
214
+ }
215
+ });
216
+ }
217
+ //# sourceMappingURL=grid-visualizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["clsx","useState","useEffect","forwardRef","useSelect","useDispatch","__experimentalUseDropZone","useDropZone","__unstableUseBlockElement","useBlockElement","BlockPopoverCover","range","GridRect","getGridInfo","store","blockEditorStore","useGetNumberOfBlocksBeforeCell","jsx","_jsx","GridVisualizer","clientId","contentRef","parentLayout","isDistractionFree","select","getSettings","gridElement","isManualGrid","columnCount","window","__experimentalEnableGridInteractivity","GridVisualizerGrid","ref","gridInfo","setGridInfo","isDroppingAllowed","setIsDroppingAllowed","highlightedRect","setHighlightedRect","observers","element","children","observer","ResizeObserver","observe","push","disconnect","onGlobalDrag","onGlobalDragEnd","document","addEventListener","removeEventListener","className","__unstablePopoverSlot","style","numRows","map","row","numColumns","column","GridVisualizerCell","color","currentColor","GridVisualizerDropZone","gridClientId","Array","from","length","numItems","_","i","boxShadow","_highlightedRect$cont","getBlockAttributes","updateBlockAttributes","moveBlocksToPosition","__unstableMarkNextChangeAsNotPersistent","getNumberOfBlocksBeforeCell","useDropZoneWithValidation","validateDrag","srcClientId","attributes","rect","columnStart","rowStart","columnSpan","layout","rowSpan","isInBounds","containsRect","onDragEnter","onDragLeave","prevHighlightedRect","onDrop","isHighlighted","contains","getDraggedBlockClientIds"],"sources":["@wordpress/block-editor/src/components/grid/grid-visualizer.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { useState, useEffect, forwardRef } from '@wordpress/element';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { __experimentalUseDropZone as useDropZone } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport { __unstableUseBlockElement as useBlockElement } from '../block-list/use-block-props/use-block-refs';\nimport BlockPopoverCover from '../block-popover/cover';\nimport { range, GridRect, getGridInfo } from './utils';\nimport { store as blockEditorStore } from '../../store';\nimport { useGetNumberOfBlocksBeforeCell } from './use-get-number-of-blocks-before-cell';\n\nexport function GridVisualizer( { clientId, contentRef, parentLayout } ) {\n\tconst isDistractionFree = useSelect(\n\t\t( select ) =>\n\t\t\tselect( blockEditorStore ).getSettings().isDistractionFree,\n\t\t[]\n\t);\n\tconst gridElement = useBlockElement( clientId );\n\n\tif ( isDistractionFree || ! gridElement ) {\n\t\treturn null;\n\t}\n\n\tconst isManualGrid =\n\t\tparentLayout?.columnCount &&\n\t\twindow.__experimentalEnableGridInteractivity;\n\treturn (\n\t\t<GridVisualizerGrid\n\t\t\tclientId={ clientId }\n\t\t\tgridElement={ gridElement }\n\t\t\tisManualGrid={ isManualGrid }\n\t\t\tref={ contentRef }\n\t\t/>\n\t);\n}\n\nconst GridVisualizerGrid = forwardRef(\n\t( { clientId, gridElement, isManualGrid }, ref ) => {\n\t\tconst [ gridInfo, setGridInfo ] = useState( () =>\n\t\t\tgetGridInfo( gridElement )\n\t\t);\n\t\tconst [ isDroppingAllowed, setIsDroppingAllowed ] = useState( false );\n\t\tconst [ highlightedRect, setHighlightedRect ] = useState( null );\n\n\t\tuseEffect( () => {\n\t\t\tconst observers = [];\n\t\t\tfor ( const element of [ gridElement, ...gridElement.children ] ) {\n\t\t\t\tconst observer = new window.ResizeObserver( () => {\n\t\t\t\t\tsetGridInfo( getGridInfo( gridElement ) );\n\t\t\t\t} );\n\t\t\t\tobserver.observe( element );\n\t\t\t\tobservers.push( observer );\n\t\t\t}\n\t\t\treturn () => {\n\t\t\t\tfor ( const observer of observers ) {\n\t\t\t\t\tobserver.disconnect();\n\t\t\t\t}\n\t\t\t};\n\t\t}, [ gridElement ] );\n\n\t\tuseEffect( () => {\n\t\t\tfunction onGlobalDrag() {\n\t\t\t\tsetIsDroppingAllowed( true );\n\t\t\t}\n\t\t\tfunction onGlobalDragEnd() {\n\t\t\t\tsetIsDroppingAllowed( false );\n\t\t\t}\n\t\t\tdocument.addEventListener( 'drag', onGlobalDrag );\n\t\t\tdocument.addEventListener( 'dragend', onGlobalDragEnd );\n\t\t\treturn () => {\n\t\t\t\tdocument.removeEventListener( 'drag', onGlobalDrag );\n\t\t\t\tdocument.removeEventListener( 'dragend', onGlobalDragEnd );\n\t\t\t};\n\t\t}, [] );\n\n\t\treturn (\n\t\t\t<BlockPopoverCover\n\t\t\t\tclassName={ clsx( 'block-editor-grid-visualizer', {\n\t\t\t\t\t'is-dropping-allowed': isDroppingAllowed,\n\t\t\t\t} ) }\n\t\t\t\tclientId={ clientId }\n\t\t\t\t__unstablePopoverSlot=\"block-toolbar\"\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tref={ ref }\n\t\t\t\t\tclassName=\"block-editor-grid-visualizer__grid\"\n\t\t\t\t\tstyle={ gridInfo.style }\n\t\t\t\t>\n\t\t\t\t\t{ isManualGrid\n\t\t\t\t\t\t? range( 1, gridInfo.numRows ).map( ( row ) =>\n\t\t\t\t\t\t\t\trange( 1, gridInfo.numColumns ).map(\n\t\t\t\t\t\t\t\t\t( column ) => (\n\t\t\t\t\t\t\t\t\t\t<GridVisualizerCell\n\t\t\t\t\t\t\t\t\t\t\tkey={ `${ row }-${ column }` }\n\t\t\t\t\t\t\t\t\t\t\tcolor={ gridInfo.currentColor }\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<GridVisualizerDropZone\n\t\t\t\t\t\t\t\t\t\t\t\tcolumn={ column }\n\t\t\t\t\t\t\t\t\t\t\t\trow={ row }\n\t\t\t\t\t\t\t\t\t\t\t\tgridClientId={ clientId }\n\t\t\t\t\t\t\t\t\t\t\t\tgridInfo={ gridInfo }\n\t\t\t\t\t\t\t\t\t\t\t\thighlightedRect={\n\t\t\t\t\t\t\t\t\t\t\t\t\thighlightedRect\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tsetHighlightedRect={\n\t\t\t\t\t\t\t\t\t\t\t\t\tsetHighlightedRect\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t</GridVisualizerCell>\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t )\n\t\t\t\t\t\t: Array.from(\n\t\t\t\t\t\t\t\t{ length: gridInfo.numItems },\n\t\t\t\t\t\t\t\t( _, i ) => (\n\t\t\t\t\t\t\t\t\t<GridVisualizerCell\n\t\t\t\t\t\t\t\t\t\tkey={ i }\n\t\t\t\t\t\t\t\t\t\tcolor={ gridInfo.currentColor }\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t ) }\n\t\t\t\t</div>\n\t\t\t</BlockPopoverCover>\n\t\t);\n\t}\n);\n\nfunction GridVisualizerCell( { color, children } ) {\n\treturn (\n\t\t<div\n\t\t\tclassName=\"block-editor-grid-visualizer__cell\"\n\t\t\tstyle={ {\n\t\t\t\tboxShadow: `inset 0 0 0 1px color-mix(in srgb, ${ color } 20%, #0000)`,\n\t\t\t} }\n\t\t>\n\t\t\t{ children }\n\t\t</div>\n\t);\n}\n\nfunction GridVisualizerDropZone( {\n\tcolumn,\n\trow,\n\tgridClientId,\n\tgridInfo,\n\thighlightedRect,\n\tsetHighlightedRect,\n} ) {\n\tconst { getBlockAttributes } = useSelect( blockEditorStore );\n\tconst {\n\t\tupdateBlockAttributes,\n\t\tmoveBlocksToPosition,\n\t\t__unstableMarkNextChangeAsNotPersistent,\n\t} = useDispatch( blockEditorStore );\n\n\tconst getNumberOfBlocksBeforeCell = useGetNumberOfBlocksBeforeCell(\n\t\tgridClientId,\n\t\tgridInfo.numColumns\n\t);\n\n\tconst ref = useDropZoneWithValidation( {\n\t\tvalidateDrag( srcClientId ) {\n\t\t\tconst attributes = getBlockAttributes( srcClientId );\n\t\t\tconst rect = new GridRect( {\n\t\t\t\tcolumnStart: column,\n\t\t\t\trowStart: row,\n\t\t\t\tcolumnSpan: attributes.style?.layout?.columnSpan,\n\t\t\t\trowSpan: attributes.style?.layout?.rowSpan,\n\t\t\t} );\n\t\t\tconst isInBounds = new GridRect( {\n\t\t\t\tcolumnSpan: gridInfo.numColumns,\n\t\t\t\trowSpan: gridInfo.numRows,\n\t\t\t} ).containsRect( rect );\n\t\t\treturn isInBounds;\n\t\t},\n\t\tonDragEnter( srcClientId ) {\n\t\t\tconst attributes = getBlockAttributes( srcClientId );\n\t\t\tsetHighlightedRect(\n\t\t\t\tnew GridRect( {\n\t\t\t\t\tcolumnStart: column,\n\t\t\t\t\trowStart: row,\n\t\t\t\t\tcolumnSpan: attributes.style?.layout?.columnSpan,\n\t\t\t\t\trowSpan: attributes.style?.layout?.rowSpan,\n\t\t\t\t} )\n\t\t\t);\n\t\t},\n\t\tonDragLeave() {\n\t\t\t// onDragEnter can be called before onDragLeave if the user moves\n\t\t\t// their mouse quickly, so only clear the highlight if it was set\n\t\t\t// by this cell.\n\t\t\tsetHighlightedRect( ( prevHighlightedRect ) =>\n\t\t\t\tprevHighlightedRect?.columnStart === column &&\n\t\t\t\tprevHighlightedRect?.rowStart === row\n\t\t\t\t\t? null\n\t\t\t\t\t: prevHighlightedRect\n\t\t\t);\n\t\t},\n\t\tonDrop( srcClientId ) {\n\t\t\tsetHighlightedRect( null );\n\t\t\tconst attributes = getBlockAttributes( srcClientId );\n\t\t\tupdateBlockAttributes( srcClientId, {\n\t\t\t\tstyle: {\n\t\t\t\t\t...attributes.style,\n\t\t\t\t\tlayout: {\n\t\t\t\t\t\t...attributes.style?.layout,\n\t\t\t\t\t\tcolumnStart: column,\n\t\t\t\t\t\trowStart: row,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t} );\n\t\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\t\tmoveBlocksToPosition(\n\t\t\t\t[ srcClientId ],\n\t\t\t\tgridClientId,\n\t\t\t\tgridClientId,\n\t\t\t\tgetNumberOfBlocksBeforeCell( column, row )\n\t\t\t);\n\t\t},\n\t} );\n\n\tconst isHighlighted = highlightedRect?.contains( column, row ) ?? false;\n\n\treturn (\n\t\t<div\n\t\t\tref={ ref }\n\t\t\tclassName={ clsx( 'block-editor-grid-visualizer__drop-zone', {\n\t\t\t\t'is-highlighted': isHighlighted,\n\t\t\t} ) }\n\t\t/>\n\t);\n}\n\nfunction useDropZoneWithValidation( {\n\tvalidateDrag,\n\tonDragEnter,\n\tonDragLeave,\n\tonDrop,\n} ) {\n\tconst { getDraggedBlockClientIds } = useSelect( blockEditorStore );\n\treturn useDropZone( {\n\t\tonDragEnter() {\n\t\t\tconst [ srcClientId ] = getDraggedBlockClientIds();\n\t\t\tif ( srcClientId && validateDrag( srcClientId ) ) {\n\t\t\t\tonDragEnter( srcClientId );\n\t\t\t}\n\t\t},\n\t\tonDragLeave() {\n\t\t\tonDragLeave();\n\t\t},\n\t\tonDrop() {\n\t\t\tconst [ srcClientId ] = getDraggedBlockClientIds();\n\t\t\tif ( srcClientId && validateDrag( srcClientId ) ) {\n\t\t\t\tonDrop( srcClientId );\n\t\t\t}\n\t\t},\n\t} );\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,5 @@
1
+ export { GridVisualizer } from './grid-visualizer';
2
+ export { GridItemResizer } from './grid-item-resizer';
3
+ export { GridItemMovers } from './grid-item-movers';
4
+ export { useGridLayoutSync } from './use-grid-layout-sync';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["GridVisualizer","GridItemResizer","GridItemMovers","useGridLayoutSync"],"sources":["@wordpress/block-editor/src/components/grid/index.js"],"sourcesContent":["export { GridVisualizer } from './grid-visualizer';\nexport { GridItemResizer } from './grid-item-resizer';\nexport { GridItemMovers } from './grid-item-movers';\nexport { useGridLayoutSync } from './use-grid-layout-sync';\n"],"mappings":"AAAA,SAASA,cAAc,QAAQ,mBAAmB;AAClD,SAASC,eAAe,QAAQ,qBAAqB;AACrD,SAASC,cAAc,QAAQ,oBAAoB;AACnD,SAASC,iBAAiB,QAAQ,wBAAwB","ignoreList":[]}
@@ -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