@wordpress/grid 0.1.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 (158) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/LICENSE.md +788 -0
  3. package/README.md +534 -0
  4. package/build/dashboard-grid/grid-item.cjs +308 -0
  5. package/build/dashboard-grid/grid-item.cjs.map +7 -0
  6. package/build/dashboard-grid/index.cjs +591 -0
  7. package/build/dashboard-grid/index.cjs.map +7 -0
  8. package/build/dashboard-grid/resolve-fill-widths.cjs +189 -0
  9. package/build/dashboard-grid/resolve-fill-widths.cjs.map +7 -0
  10. package/build/dashboard-grid/types.cjs +19 -0
  11. package/build/dashboard-grid/types.cjs.map +7 -0
  12. package/build/dashboard-lanes/index.cjs +558 -0
  13. package/build/dashboard-lanes/index.cjs.map +7 -0
  14. package/build/dashboard-lanes/lane-placement.cjs +110 -0
  15. package/build/dashboard-lanes/lane-placement.cjs.map +7 -0
  16. package/build/dashboard-lanes/lanes-item.cjs +295 -0
  17. package/build/dashboard-lanes/lanes-item.cjs.map +7 -0
  18. package/build/dashboard-lanes/types.cjs +19 -0
  19. package/build/dashboard-lanes/types.cjs.map +7 -0
  20. package/build/dashboard-lanes/use-lane-placement.cjs +206 -0
  21. package/build/dashboard-lanes/use-lane-placement.cjs.map +7 -0
  22. package/build/index.cjs +34 -0
  23. package/build/index.cjs.map +7 -0
  24. package/build/shared/drag-overlay-drop-animation.cjs +70 -0
  25. package/build/shared/drag-overlay-drop-animation.cjs.map +7 -0
  26. package/build/shared/grid-item-key.cjs +31 -0
  27. package/build/shared/grid-item-key.cjs.map +7 -0
  28. package/build/shared/grid-overlay.cjs +187 -0
  29. package/build/shared/grid-overlay.cjs.map +7 -0
  30. package/build/shared/item-exit-overlay.cjs +150 -0
  31. package/build/shared/item-exit-overlay.cjs.map +7 -0
  32. package/build/shared/resize-handle.cjs +224 -0
  33. package/build/shared/resize-handle.cjs.map +7 -0
  34. package/build/shared/resize-snap.cjs +47 -0
  35. package/build/shared/resize-snap.cjs.map +7 -0
  36. package/build/shared/types.cjs +19 -0
  37. package/build/shared/types.cjs.map +7 -0
  38. package/build/shared/use-item-exit-animation.cjs +148 -0
  39. package/build/shared/use-item-exit-animation.cjs.map +7 -0
  40. package/build/shared/use-layout-shift-animation.cjs +167 -0
  41. package/build/shared/use-layout-shift-animation.cjs.map +7 -0
  42. package/build-module/dashboard-grid/grid-item.mjs +273 -0
  43. package/build-module/dashboard-grid/grid-item.mjs.map +7 -0
  44. package/build-module/dashboard-grid/index.mjs +579 -0
  45. package/build-module/dashboard-grid/index.mjs.map +7 -0
  46. package/build-module/dashboard-grid/resolve-fill-widths.mjs +164 -0
  47. package/build-module/dashboard-grid/resolve-fill-widths.mjs.map +7 -0
  48. package/build-module/dashboard-grid/types.mjs +1 -0
  49. package/build-module/dashboard-grid/types.mjs.map +7 -0
  50. package/build-module/dashboard-lanes/index.mjs +547 -0
  51. package/build-module/dashboard-lanes/index.mjs.map +7 -0
  52. package/build-module/dashboard-lanes/lane-placement.mjs +85 -0
  53. package/build-module/dashboard-lanes/lane-placement.mjs.map +7 -0
  54. package/build-module/dashboard-lanes/lanes-item.mjs +260 -0
  55. package/build-module/dashboard-lanes/lanes-item.mjs.map +7 -0
  56. package/build-module/dashboard-lanes/types.mjs +1 -0
  57. package/build-module/dashboard-lanes/types.mjs.map +7 -0
  58. package/build-module/dashboard-lanes/use-lane-placement.mjs +181 -0
  59. package/build-module/dashboard-lanes/use-lane-placement.mjs.map +7 -0
  60. package/build-module/index.mjs +8 -0
  61. package/build-module/index.mjs.map +7 -0
  62. package/build-module/shared/drag-overlay-drop-animation.mjs +47 -0
  63. package/build-module/shared/drag-overlay-drop-animation.mjs.map +7 -0
  64. package/build-module/shared/grid-item-key.mjs +6 -0
  65. package/build-module/shared/grid-item-key.mjs.map +7 -0
  66. package/build-module/shared/grid-overlay.mjs +152 -0
  67. package/build-module/shared/grid-overlay.mjs.map +7 -0
  68. package/build-module/shared/item-exit-overlay.mjs +125 -0
  69. package/build-module/shared/item-exit-overlay.mjs.map +7 -0
  70. package/build-module/shared/resize-handle.mjs +193 -0
  71. package/build-module/shared/resize-handle.mjs.map +7 -0
  72. package/build-module/shared/resize-snap.mjs +21 -0
  73. package/build-module/shared/resize-snap.mjs.map +7 -0
  74. package/build-module/shared/types.mjs +1 -0
  75. package/build-module/shared/types.mjs.map +7 -0
  76. package/build-module/shared/use-item-exit-animation.mjs +128 -0
  77. package/build-module/shared/use-item-exit-animation.mjs.map +7 -0
  78. package/build-module/shared/use-layout-shift-animation.mjs +140 -0
  79. package/build-module/shared/use-layout-shift-animation.mjs.map +7 -0
  80. package/build-types/dashboard-grid/grid-item.d.ts +3 -0
  81. package/build-types/dashboard-grid/grid-item.d.ts.map +1 -0
  82. package/build-types/dashboard-grid/index.d.ts +35 -0
  83. package/build-types/dashboard-grid/index.d.ts.map +1 -0
  84. package/build-types/dashboard-grid/resolve-fill-widths.d.ts +26 -0
  85. package/build-types/dashboard-grid/resolve-fill-widths.d.ts.map +1 -0
  86. package/build-types/dashboard-grid/stories/index.story.d.ts +98 -0
  87. package/build-types/dashboard-grid/stories/index.story.d.ts.map +1 -0
  88. package/build-types/dashboard-grid/types.d.ts +232 -0
  89. package/build-types/dashboard-grid/types.d.ts.map +1 -0
  90. package/build-types/dashboard-lanes/index.d.ts +40 -0
  91. package/build-types/dashboard-lanes/index.d.ts.map +1 -0
  92. package/build-types/dashboard-lanes/lane-placement.d.ts +126 -0
  93. package/build-types/dashboard-lanes/lane-placement.d.ts.map +1 -0
  94. package/build-types/dashboard-lanes/lanes-item.d.ts +52 -0
  95. package/build-types/dashboard-lanes/lanes-item.d.ts.map +1 -0
  96. package/build-types/dashboard-lanes/stories/index.story.d.ts +64 -0
  97. package/build-types/dashboard-lanes/stories/index.story.d.ts.map +1 -0
  98. package/build-types/dashboard-lanes/types.d.ts +151 -0
  99. package/build-types/dashboard-lanes/types.d.ts.map +1 -0
  100. package/build-types/dashboard-lanes/use-lane-placement.d.ts +74 -0
  101. package/build-types/dashboard-lanes/use-lane-placement.d.ts.map +1 -0
  102. package/build-types/index.d.ts +6 -0
  103. package/build-types/index.d.ts.map +1 -0
  104. package/build-types/shared/drag-overlay-drop-animation.d.ts +13 -0
  105. package/build-types/shared/drag-overlay-drop-animation.d.ts.map +1 -0
  106. package/build-types/shared/grid-item-key.d.ts +6 -0
  107. package/build-types/shared/grid-item-key.d.ts.map +1 -0
  108. package/build-types/shared/grid-overlay.d.ts +19 -0
  109. package/build-types/shared/grid-overlay.d.ts.map +1 -0
  110. package/build-types/shared/item-exit-overlay.d.ts +20 -0
  111. package/build-types/shared/item-exit-overlay.d.ts.map +1 -0
  112. package/build-types/shared/resize-handle.d.ts +23 -0
  113. package/build-types/shared/resize-handle.d.ts.map +1 -0
  114. package/build-types/shared/resize-snap.d.ts +41 -0
  115. package/build-types/shared/resize-snap.d.ts.map +1 -0
  116. package/build-types/shared/types.d.ts +144 -0
  117. package/build-types/shared/types.d.ts.map +1 -0
  118. package/build-types/shared/use-item-exit-animation.d.ts +37 -0
  119. package/build-types/shared/use-item-exit-animation.d.ts.map +1 -0
  120. package/build-types/shared/use-layout-shift-animation.d.ts +77 -0
  121. package/build-types/shared/use-layout-shift-animation.d.ts.map +1 -0
  122. package/package.json +80 -0
  123. package/src/dashboard-grid/grid-item.module.css +94 -0
  124. package/src/dashboard-grid/grid-item.tsx +205 -0
  125. package/src/dashboard-grid/grid.module.css +134 -0
  126. package/src/dashboard-grid/index.tsx +713 -0
  127. package/src/dashboard-grid/resolve-fill-widths.ts +224 -0
  128. package/src/dashboard-grid/stories/index.story.tsx +930 -0
  129. package/src/dashboard-grid/test/keyboard-activation.test.tsx +76 -0
  130. package/src/dashboard-grid/test/resolve-fill-widths.test.ts +250 -0
  131. package/src/dashboard-grid/types.ts +271 -0
  132. package/src/dashboard-lanes/index.tsx +629 -0
  133. package/src/dashboard-lanes/lane-placement.ts +245 -0
  134. package/src/dashboard-lanes/lanes-item.module.css +93 -0
  135. package/src/dashboard-lanes/lanes-item.tsx +236 -0
  136. package/src/dashboard-lanes/lanes.module.css +152 -0
  137. package/src/dashboard-lanes/stories/index.story.tsx +518 -0
  138. package/src/dashboard-lanes/test/keyboard-activation.test.tsx +71 -0
  139. package/src/dashboard-lanes/test/lane-placement.test.ts +442 -0
  140. package/src/dashboard-lanes/test/use-lane-placement.test.tsx +358 -0
  141. package/src/dashboard-lanes/types.ts +176 -0
  142. package/src/dashboard-lanes/use-lane-placement.ts +313 -0
  143. package/src/index.ts +17 -0
  144. package/src/shared/actionable-area-slot.module.css +16 -0
  145. package/src/shared/drag-overlay-drop-animation.ts +66 -0
  146. package/src/shared/grid-item-key.ts +5 -0
  147. package/src/shared/grid-overlay.module.css +82 -0
  148. package/src/shared/grid-overlay.tsx +93 -0
  149. package/src/shared/item-exit-animation.module.css +49 -0
  150. package/src/shared/item-exit-overlay.tsx +57 -0
  151. package/src/shared/layout-shift-animation.module.css +16 -0
  152. package/src/shared/resize-handle.module.css +88 -0
  153. package/src/shared/resize-handle.tsx +163 -0
  154. package/src/shared/resize-snap.ts +63 -0
  155. package/src/shared/test/resize-snap.test.ts +35 -0
  156. package/src/shared/types.ts +164 -0
  157. package/src/shared/use-item-exit-animation.ts +199 -0
  158. package/src/shared/use-layout-shift-animation.ts +284 -0
@@ -0,0 +1,558 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+
30
+ // packages/grid/src/dashboard-lanes/index.tsx
31
+ var dashboard_lanes_exports = {};
32
+ __export(dashboard_lanes_exports, {
33
+ DashboardLanes: () => DashboardLanes
34
+ });
35
+ module.exports = __toCommonJS(dashboard_lanes_exports);
36
+ var import_core = require("@dnd-kit/core");
37
+ var import_sortable = require("@dnd-kit/sortable");
38
+ var import_clsx = __toESM(require("clsx"));
39
+ var import_compose = require("@wordpress/compose");
40
+ var import_element = require("@wordpress/element");
41
+ var import_lanes_item = require("./lanes-item.cjs");
42
+ var import_use_lane_placement = require("./use-lane-placement.cjs");
43
+ var import_grid_overlay = require("../shared/grid-overlay.cjs");
44
+ var import_resize_snap = require("../shared/resize-snap.cjs");
45
+
46
+ // packages/style-runtime/src/index.ts
47
+ var STYLE_HASH_ATTRIBUTE = "data-wp-hash";
48
+ function getRuntime() {
49
+ const globalScope = globalThis;
50
+ if (globalScope.__wpStyleRuntime) {
51
+ return globalScope.__wpStyleRuntime;
52
+ }
53
+ globalScope.__wpStyleRuntime = {
54
+ documents: /* @__PURE__ */ new Map(),
55
+ styles: /* @__PURE__ */ new Map(),
56
+ injectedStyles: /* @__PURE__ */ new WeakMap()
57
+ };
58
+ if (typeof document !== "undefined") {
59
+ registerDocument(document);
60
+ }
61
+ return globalScope.__wpStyleRuntime;
62
+ }
63
+ function documentContainsStyleHash(targetDocument, hash) {
64
+ if (!targetDocument.head) {
65
+ return false;
66
+ }
67
+ for (const style of targetDocument.head.querySelectorAll(
68
+ `style[${STYLE_HASH_ATTRIBUTE}]`
69
+ )) {
70
+ if (style.getAttribute(STYLE_HASH_ATTRIBUTE) === hash) {
71
+ return true;
72
+ }
73
+ }
74
+ return false;
75
+ }
76
+ function injectStyle(targetDocument, hash, css) {
77
+ if (!targetDocument.head) {
78
+ return;
79
+ }
80
+ const runtime = getRuntime();
81
+ let injectedStyles = runtime.injectedStyles.get(targetDocument);
82
+ if (!injectedStyles) {
83
+ injectedStyles = /* @__PURE__ */ new Set();
84
+ runtime.injectedStyles.set(targetDocument, injectedStyles);
85
+ }
86
+ if (injectedStyles.has(hash)) {
87
+ return;
88
+ }
89
+ if (documentContainsStyleHash(targetDocument, hash)) {
90
+ injectedStyles.add(hash);
91
+ return;
92
+ }
93
+ const style = targetDocument.createElement("style");
94
+ style.setAttribute(STYLE_HASH_ATTRIBUTE, hash);
95
+ style.appendChild(targetDocument.createTextNode(css));
96
+ targetDocument.head.appendChild(style);
97
+ injectedStyles.add(hash);
98
+ }
99
+ function registerDocument(targetDocument) {
100
+ const runtime = getRuntime();
101
+ runtime.documents.set(
102
+ targetDocument,
103
+ (runtime.documents.get(targetDocument) ?? 0) + 1
104
+ );
105
+ for (const [hash, css] of runtime.styles) {
106
+ injectStyle(targetDocument, hash, css);
107
+ }
108
+ return () => {
109
+ const count = runtime.documents.get(targetDocument);
110
+ if (count === void 0) {
111
+ return;
112
+ }
113
+ if (count <= 1) {
114
+ runtime.documents.delete(targetDocument);
115
+ return;
116
+ }
117
+ runtime.documents.set(targetDocument, count - 1);
118
+ };
119
+ }
120
+ function registerStyle(hash, css) {
121
+ const runtime = getRuntime();
122
+ runtime.styles.set(hash, css);
123
+ for (const targetDocument of runtime.documents.keys()) {
124
+ injectStyle(targetDocument, hash, css);
125
+ }
126
+ }
127
+
128
+ // packages/grid/src/shared/layout-shift-animation.module.css
129
+ if (typeof process === "undefined" || process.env.NODE_ENV !== "test") {
130
+ registerStyle("9e5573e51f", "._2db63116caa90ae9__layout-animating [data-wp-grid-item-key]{transition:transform var(--wpds-motion-duration-md,.2s) var(--wpds-motion-easing-balanced,cubic-bezier(.4,0,.2,1))}@media (prefers-reduced-motion:reduce){._2db63116caa90ae9__layout-animating [data-wp-grid-item-key]{transition:none}}");
131
+ }
132
+ var layout_shift_animation_default = { "layout-animating": "_2db63116caa90ae9__layout-animating" };
133
+
134
+ // packages/grid/src/dashboard-lanes/index.tsx
135
+ var import_item_exit_overlay = require("../shared/item-exit-overlay.cjs");
136
+ var import_use_layout_shift_animation = require("../shared/use-layout-shift-animation.cjs");
137
+ var import_use_item_exit_animation = require("../shared/use-item-exit-animation.cjs");
138
+ var import_drag_overlay_drop_animation = require("../shared/drag-overlay-drop-animation.cjs");
139
+
140
+ // packages/grid/src/dashboard-lanes/lanes.module.css
141
+ if (typeof process === "undefined" || process.env.NODE_ENV !== "test") {
142
+ registerStyle("44ea80456a", "._8cc368bc6c2d79c6__lanes{column-gap:var(--wp-grid-gap,var(--wpds-dimension-gap-xl,24px));display:grid-lanes;position:relative;row-gap:var(--wp-grid-gap,var(--wpds-dimension-gap-xl,24px))}@supports not (display:grid-lanes){._8cc368bc6c2d79c6__lanes{display:grid;grid-auto-flow:dense;grid-auto-rows:var(--wp-grid-lane-row-unit,4px);row-gap:0}}._1bfa908a532e32a4__drag-preview-frame{border-radius:var(--wp-grid-drag-preview-radius,0);box-shadow:var(--wpds-elevation-md,0 2px 3px 0 #0000000d,0 4px 5px 0 #0000000a,0 12px 12px 0 #00000008,0 16px 16px 0 #00000005);cursor:grabbing;height:100%;pointer-events:none}.bd684ee9f92388ed__drag-preview-frame__lift{height:100%;transform:scale(var(--wp-grid-drag-preview-scale,1.05));transform-origin:center}@media not (prefers-reduced-motion:reduce){._1bfa908a532e32a4__drag-preview-frame{animation:_5f4a1718cb7927ee__wp-grid-drag-preview-shadow-enter var(--wpds-motion-duration-sm,.1s) var(--wpds-motion-easing-balanced,cubic-bezier(.4,0,.2,1)) both}.bd684ee9f92388ed__drag-preview-frame__lift{animation:_29f7f02d4f227b1e__wp-grid-drag-preview-scale-enter var(--wpds-motion-duration-sm,.1s) var(--wpds-motion-easing-balanced,cubic-bezier(.4,0,.2,1)) both}}@media not (prefers-reduced-motion:reduce){@keyframes _5f4a1718cb7927ee__wp-grid-drag-preview-shadow-enter{0%{box-shadow:var(--wpds-elevation-xs,0 1px 1px 0 #00000008,0 1px 2px 0 #00000005,0 3px 3px 0 #00000005,0 4px 4px 0 #00000003)}to{box-shadow:var(--wpds-elevation-md,0 2px 3px 0 #0000000d,0 4px 5px 0 #0000000a,0 12px 12px 0 #00000008,0 16px 16px 0 #00000005)}}@keyframes _29f7f02d4f227b1e__wp-grid-drag-preview-scale-enter{0%{transform:scale(1)}to{transform:scale(var(--wp-grid-drag-preview-scale,1.05))}}}@media not (prefers-reduced-motion:reduce){._1bfa908a532e32a4__drag-preview-frame._13e2d868ade475b5__dragPreviewFrameExiting{animation:_6883de14c5fb8559__wp-grid-drag-preview-shadow-exit var(--wpds-motion-duration-md,.2s) var(--wpds-motion-easing-balanced,cubic-bezier(.4,0,.2,1)) forwards}._1bfa908a532e32a4__drag-preview-frame._13e2d868ade475b5__dragPreviewFrameExiting .bd684ee9f92388ed__drag-preview-frame__lift{animation:_0de4da1cd817e536__wp-grid-drag-preview-scale-exit var(--wpds-motion-duration-md,.2s) var(--wpds-motion-easing-balanced,cubic-bezier(.4,0,.2,1)) forwards}@keyframes _6883de14c5fb8559__wp-grid-drag-preview-shadow-exit{0%{box-shadow:var(--wpds-elevation-md,0 2px 3px 0 #0000000d,0 4px 5px 0 #0000000a,0 12px 12px 0 #00000008,0 16px 16px 0 #00000005)}to{box-shadow:var(--wpds-elevation-xs,0 1px 1px 0 #00000008,0 1px 2px 0 #00000005,0 3px 3px 0 #00000005,0 4px 4px 0 #00000003)}}@keyframes _0de4da1cd817e536__wp-grid-drag-preview-scale-exit{0%{transform:scale(var(--wp-grid-drag-preview-scale,1.05))}to{transform:scale(1)}}}._1bfa908a532e32a4__drag-preview-frame._13e2d868ade475b5__dragPreviewFrameExiting{box-shadow:var(--wpds-elevation-xs,0 1px 1px 0 #00000008,0 1px 2px 0 #00000005,0 3px 3px 0 #00000005,0 4px 4px 0 #00000003)}._1bfa908a532e32a4__drag-preview-frame._13e2d868ade475b5__dragPreviewFrameExiting .bd684ee9f92388ed__drag-preview-frame__lift{transform:scale(1)}@media (prefers-reduced-motion:reduce){._1bfa908a532e32a4__drag-preview-frame{box-shadow:var(--wpds-elevation-md,0 2px 3px 0 #0000000d,0 4px 5px 0 #0000000a,0 12px 12px 0 #00000008,0 16px 16px 0 #00000005)}.bd684ee9f92388ed__drag-preview-frame__lift{transform:none}._1bfa908a532e32a4__drag-preview-frame._13e2d868ade475b5__dragPreviewFrameExiting{box-shadow:var(--wpds-elevation-xs,0 1px 1px 0 #00000008,0 1px 2px 0 #00000005,0 3px 3px 0 #00000005,0 4px 4px 0 #00000003);transition:none}._1bfa908a532e32a4__drag-preview-frame._13e2d868ade475b5__dragPreviewFrameExiting .bd684ee9f92388ed__drag-preview-frame__lift{transition:none}}");
143
+ }
144
+ var lanes_default = { "lanes": "_8cc368bc6c2d79c6__lanes", "drag-preview-frame": "_1bfa908a532e32a4__drag-preview-frame", "drag-preview-frame__lift": "bd684ee9f92388ed__drag-preview-frame__lift", "wp-grid-drag-preview-shadow-enter": "_5f4a1718cb7927ee__wp-grid-drag-preview-shadow-enter", "wp-grid-drag-preview-scale-enter": "_29f7f02d4f227b1e__wp-grid-drag-preview-scale-enter", "dragPreviewFrameExiting": "_13e2d868ade475b5__dragPreviewFrameExiting", "wp-grid-drag-preview-shadow-exit": "_6883de14c5fb8559__wp-grid-drag-preview-shadow-exit", "wp-grid-drag-preview-scale-exit": "_0de4da1cd817e536__wp-grid-drag-preview-scale-exit" };
145
+
146
+ // packages/grid/src/dashboard-lanes/index.tsx
147
+ var import_jsx_runtime = require("react/jsx-runtime");
148
+ var dashboardDragDropAnimation = (0, import_drag_overlay_drop_animation.createDashboardDragDropAnimation)(
149
+ lanes_default["drag-preview-frame"],
150
+ lanes_default.dragPreviewFrameExiting
151
+ );
152
+ var FALLBACK_GAP_PX = 24;
153
+ var DEFAULT_COLUMNS = 6;
154
+ var NO_SORT_STRATEGY = () => null;
155
+ var DashboardLanes = (0, import_element.forwardRef)(
156
+ function DashboardLanes2(props, ref) {
157
+ const {
158
+ layout,
159
+ columns,
160
+ children,
161
+ className,
162
+ style,
163
+ flowTolerance = 16,
164
+ rowUnit = 4,
165
+ minColumnWidth,
166
+ editMode = false,
167
+ onChangeLayout,
168
+ onPreviewLayout,
169
+ renderResizeHandle,
170
+ renderDragPreview,
171
+ renderGridOverlay,
172
+ ...divProps
173
+ } = props;
174
+ const [temporaryLayout, setTemporaryLayout] = (0, import_element.useState)();
175
+ const [activeId, setActiveId] = (0, import_element.useState)(null);
176
+ const [isResizing, setIsResizing] = (0, import_element.useState)(false);
177
+ const [resizeSnapPreview, setResizeSnapPreview] = (0, import_element.useState)(null);
178
+ const latestLayoutRef = (0, import_element.useRef)();
179
+ const lastReorderCursorRef = (0, import_element.useRef)(null);
180
+ const resizeBaselineRef = (0, import_element.useRef)(null);
181
+ const captureLayoutSnapshotRef = (0, import_element.useRef)(() => {
182
+ });
183
+ const childrenCacheRef = (0, import_element.useRef)(
184
+ /* @__PURE__ */ new Map()
185
+ );
186
+ const activeLayout = temporaryLayout ?? layout;
187
+ const [container, setContainer] = (0, import_element.useState)(
188
+ null
189
+ );
190
+ const [containerWidth, setContainerWidth] = (0, import_element.useState)(0);
191
+ const [gapPx, setGapPx] = (0, import_element.useState)(FALLBACK_GAP_PX);
192
+ const resizeObserverRef = (0, import_compose.useResizeObserver)(
193
+ ([{ contentRect }]) => {
194
+ setContainerWidth(contentRect.width);
195
+ }
196
+ );
197
+ const mergedRootRef = (0, import_compose.useMergeRefs)([
198
+ setContainer,
199
+ resizeObserverRef,
200
+ ref
201
+ ]);
202
+ (0, import_element.useLayoutEffect)(() => {
203
+ if (!container) {
204
+ return;
205
+ }
206
+ const { width } = container.getBoundingClientRect();
207
+ if (width > 0) {
208
+ setContainerWidth(width);
209
+ }
210
+ const parsed = Number.parseFloat(
211
+ window.getComputedStyle(container).columnGap
212
+ );
213
+ if (Number.isFinite(parsed) && parsed > 0) {
214
+ setGapPx(parsed);
215
+ }
216
+ }, [container]);
217
+ const effectiveColumns = (0, import_element.useMemo)(() => {
218
+ if (!minColumnWidth) {
219
+ return columns ?? DEFAULT_COLUMNS;
220
+ }
221
+ const totalWidthPerColumn = minColumnWidth + gapPx;
222
+ const maxFit = Math.max(
223
+ 1,
224
+ Math.floor((containerWidth + gapPx) / totalWidthPerColumn)
225
+ );
226
+ return columns !== void 0 ? Math.min(columns, maxFit) : maxFit;
227
+ }, [minColumnWidth, gapPx, containerWidth, columns]);
228
+ const columnWidth = (containerWidth - (effectiveColumns - 1) * gapPx) / effectiveColumns;
229
+ const minResizeWidthPx = (0, import_resize_snap.gridSpanToPixelSize)(
230
+ 1,
231
+ 1,
232
+ columnWidth,
233
+ gapPx,
234
+ null
235
+ ).widthPx;
236
+ const layoutMap = (0, import_element.useMemo)(() => {
237
+ const map = /* @__PURE__ */ new Map();
238
+ activeLayout.forEach((item) => map.set(item.key, item));
239
+ return map;
240
+ }, [activeLayout]);
241
+ const layoutKeys = (0, import_element.useMemo)(
242
+ () => new Set(layout.map((item) => item.key)),
243
+ [layout]
244
+ );
245
+ const sortedItems = (0, import_element.useMemo)(
246
+ () => activeLayout.map((item, index) => ({ item, index })).sort(
247
+ (a, b) => (a.item.order ?? a.index) - (b.item.order ?? b.index)
248
+ ).map(({ item }) => item.key),
249
+ [activeLayout]
250
+ );
251
+ const items = sortedItems;
252
+ const placementItems = (0, import_element.useMemo)(() => {
253
+ return items.map((key) => {
254
+ const item = layoutMap.get(key);
255
+ const width = item?.width;
256
+ const span = typeof width === "number" ? Math.max(1, Math.min(width, effectiveColumns)) : 1;
257
+ return { key, span, lane: item?.lane };
258
+ });
259
+ }, [items, layoutMap, effectiveColumns]);
260
+ const { itemStyles } = (0, import_use_lane_placement.useLanePlacement)(container, {
261
+ items: placementItems,
262
+ lanes: effectiveColumns,
263
+ gap: gapPx,
264
+ flowTolerance,
265
+ rowUnit
266
+ });
267
+ const [childrenMap, actionableAreaMap, remaining, renderedByKey] = (0, import_element.useMemo)(() => {
268
+ const childMap = /* @__PURE__ */ new Map();
269
+ const actionableMap = /* @__PURE__ */ new Map();
270
+ const rest = [];
271
+ const byKey = /* @__PURE__ */ new Map();
272
+ import_element.Children.forEach(children, (child) => {
273
+ if (!(0, import_element.isValidElement)(child)) {
274
+ rest.push(child);
275
+ return;
276
+ }
277
+ const key = child.key?.toString();
278
+ if (!key) {
279
+ rest.push(child);
280
+ return;
281
+ }
282
+ const { actionableArea } = child.props;
283
+ const stripped = actionableArea !== void 0 ? (0, import_element.cloneElement)(
284
+ child,
285
+ { actionableArea: void 0 }
286
+ ) : child;
287
+ byKey.set(key, stripped);
288
+ if (layoutKeys.has(key)) {
289
+ if (actionableArea !== void 0) {
290
+ actionableMap.set(key, actionableArea);
291
+ }
292
+ childMap.set(key, stripped);
293
+ } else {
294
+ rest.push(child);
295
+ }
296
+ });
297
+ return [childMap, actionableMap, rest, byKey];
298
+ }, [children, layoutKeys]);
299
+ (0, import_element.useLayoutEffect)(() => {
300
+ for (const [key, child] of renderedByKey) {
301
+ childrenCacheRef.current.set(key, child);
302
+ }
303
+ }, [renderedByKey]);
304
+ const sensors = (0, import_core.useSensors)(
305
+ (0, import_core.useSensor)(import_core.PointerSensor),
306
+ (0, import_core.useSensor)(import_core.KeyboardSensor, {
307
+ coordinateGetter: import_sortable.sortableKeyboardCoordinates
308
+ })
309
+ );
310
+ const handleDragStart = (0, import_compose.useEvent)((event) => {
311
+ setActiveId(String(event.active.id));
312
+ lastReorderCursorRef.current = null;
313
+ });
314
+ const handleDragCancel = (0, import_compose.useEvent)(() => {
315
+ setActiveId(null);
316
+ latestLayoutRef.current = void 0;
317
+ lastReorderCursorRef.current = null;
318
+ resizeBaselineRef.current = null;
319
+ setIsResizing(false);
320
+ setResizeSnapPreview(null);
321
+ setTemporaryLayout(void 0);
322
+ });
323
+ const handleDragMove = (0, import_compose.useEvent)((event) => {
324
+ const { active, over } = event;
325
+ if (!over || active.id === over.id) {
326
+ return;
327
+ }
328
+ const activeRect = active.rect.current.translated;
329
+ if (!activeRect) {
330
+ return;
331
+ }
332
+ const activeCenterX = activeRect.left + activeRect.width / 2;
333
+ const activeCenterY = activeRect.top + activeRect.height / 2;
334
+ const lastCursor = lastReorderCursorRef.current;
335
+ if (lastCursor) {
336
+ const dx = activeCenterX - lastCursor.x;
337
+ const dy = activeCenterY - lastCursor.y;
338
+ if (dx * dx + dy * dy < 100) {
339
+ return;
340
+ }
341
+ }
342
+ const overCenterX = over.rect.left + over.rect.width / 2;
343
+ const insertAfter = activeCenterX > overCenterX;
344
+ const currentIndex = items.indexOf(String(active.id));
345
+ const overIndex = items.indexOf(String(over.id));
346
+ let newIndex;
347
+ if (insertAfter) {
348
+ newIndex = currentIndex > overIndex ? overIndex + 1 : overIndex;
349
+ } else {
350
+ newIndex = currentIndex > overIndex ? overIndex : overIndex - 1;
351
+ }
352
+ newIndex = Math.max(0, Math.min(newIndex, items.length - 1));
353
+ if (newIndex === currentIndex) {
354
+ return;
355
+ }
356
+ const updatedItems = (0, import_sortable.arrayMove)(items, currentIndex, newIndex);
357
+ const orderByKey = /* @__PURE__ */ new Map();
358
+ updatedItems.forEach((key, index) => {
359
+ orderByKey.set(key, index);
360
+ });
361
+ const updatedLayout = activeLayout.map((item) => ({
362
+ ...item,
363
+ order: orderByKey.get(item.key) ?? 0
364
+ }));
365
+ lastReorderCursorRef.current = {
366
+ x: activeCenterX,
367
+ y: activeCenterY
368
+ };
369
+ latestLayoutRef.current = updatedLayout;
370
+ captureLayoutSnapshotRef.current();
371
+ setTemporaryLayout(updatedLayout);
372
+ onPreviewLayout?.(updatedLayout);
373
+ });
374
+ const persistTemporaryLayout = (0, import_compose.useEvent)(() => {
375
+ const latest = latestLayoutRef.current;
376
+ latestLayoutRef.current = void 0;
377
+ resizeBaselineRef.current = null;
378
+ setIsResizing(false);
379
+ setResizeSnapPreview(null);
380
+ if (!onChangeLayout || !latest) {
381
+ setTemporaryLayout(void 0);
382
+ return;
383
+ }
384
+ onChangeLayout(latest);
385
+ setTemporaryLayout(void 0);
386
+ });
387
+ const handleResize = (0, import_compose.useEvent)((id, delta) => {
388
+ if (!editMode) {
389
+ return;
390
+ }
391
+ if (!isResizing) {
392
+ setIsResizing(true);
393
+ }
394
+ const relativeDelta = Math.round(
395
+ delta.width / (columnWidth + gapPx)
396
+ );
397
+ if (resizeBaselineRef.current === null) {
398
+ const baseItem = layoutMap.get(id);
399
+ const baseWidth = typeof baseItem?.width === "number" ? baseItem.width : 1;
400
+ resizeBaselineRef.current = baseWidth;
401
+ }
402
+ const baseline = resizeBaselineRef.current;
403
+ const newWidth = Math.max(
404
+ 1,
405
+ Math.min(baseline + relativeDelta, effectiveColumns)
406
+ );
407
+ setResizeSnapPreview({
408
+ id,
409
+ snap: (0, import_resize_snap.gridSpanToPixelSize)(
410
+ newWidth,
411
+ 1,
412
+ columnWidth,
413
+ gapPx,
414
+ null
415
+ )
416
+ });
417
+ const pendingItem = latestLayoutRef.current?.find(
418
+ (item) => item.key === id
419
+ );
420
+ const currentItem = pendingItem ?? layoutMap.get(id);
421
+ if (currentItem && currentItem.width === newWidth) {
422
+ return;
423
+ }
424
+ const updatedLayout = activeLayout.map(
425
+ (item) => item.key === id ? { ...item, width: newWidth } : item
426
+ );
427
+ latestLayoutRef.current = updatedLayout;
428
+ captureLayoutSnapshotRef.current();
429
+ setTemporaryLayout(updatedLayout);
430
+ onPreviewLayout?.(updatedLayout);
431
+ });
432
+ const interacting = activeId !== null || isResizing;
433
+ const activeClone = activeId ? childrenMap.get(activeId) : null;
434
+ const DragPreview = renderDragPreview;
435
+ const dragOverlayContent = activeId && activeClone ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: lanes_default["drag-preview-frame"], children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: lanes_default["drag-preview-frame__lift"], children: DragPreview ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(DragPreview, { itemId: activeId, children: activeClone }) : activeClone }) }) : null;
436
+ const Overlay = renderGridOverlay ?? import_grid_overlay.GridOverlay;
437
+ const gridOverlay = (0, import_element.useMemo)(
438
+ () => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Overlay, { columns: effectiveColumns, isActive: editMode }),
439
+ [Overlay, editMode, effectiveColumns]
440
+ );
441
+ const layoutFingerprint = (0, import_element.useMemo)(() => {
442
+ const layoutSig = (0, import_use_layout_shift_animation.getLayoutFingerprint)(activeLayout);
443
+ const placementSig = (0, import_use_layout_shift_animation.getPlacementFingerprint)(itemStyles);
444
+ return `${layoutSig}\0${placementSig}`;
445
+ }, [activeLayout, itemStyles]);
446
+ const excludeLayoutAnimationKey = activeId ?? (isResizing ? resizeSnapPreview?.id : null);
447
+ const { captureLayoutSnapshot, getPositionsBeforeLastChange } = (0, import_use_layout_shift_animation.useLayoutShiftAnimation)({
448
+ container,
449
+ enabled: editMode,
450
+ layoutFingerprint,
451
+ excludeItemKey: excludeLayoutAnimationKey
452
+ });
453
+ const { exitingItems, clearExitingItem } = (0, import_use_item_exit_animation.useItemExitAnimation)({
454
+ container,
455
+ enabled: editMode,
456
+ layoutKeys,
457
+ getPositionsBeforeLastChange,
458
+ childrenCacheRef
459
+ });
460
+ const layoutAnimating = editMode;
461
+ (0, import_element.useLayoutEffect)(() => {
462
+ captureLayoutSnapshotRef.current = captureLayoutSnapshot;
463
+ }, [captureLayoutSnapshot]);
464
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
465
+ import_core.DndContext,
466
+ {
467
+ sensors,
468
+ onDragStart: handleDragStart,
469
+ onDragCancel: handleDragCancel,
470
+ onDragMove: handleDragMove,
471
+ onDragEnd: () => {
472
+ persistTemporaryLayout();
473
+ lastReorderCursorRef.current = null;
474
+ setActiveId(null);
475
+ },
476
+ children: [
477
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_sortable.SortableContext, { items, strategy: NO_SORT_STRATEGY, children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
478
+ "div",
479
+ {
480
+ ...divProps,
481
+ ref: mergedRootRef,
482
+ className: (0, import_clsx.default)(
483
+ lanes_default.lanes,
484
+ layoutAnimating && layout_shift_animation_default["layout-animating"],
485
+ className
486
+ ),
487
+ "data-wp-grid-dragging": activeId || void 0,
488
+ "data-wp-grid-resizing": isResizing || void 0,
489
+ style: {
490
+ ...style,
491
+ gridTemplateColumns: `repeat(${effectiveColumns}, minmax(0, 1fr))`,
492
+ // `column-gap` and `row-gap` are set in
493
+ // `lanes.module.css` from the
494
+ // design-system gap token, with an
495
+ // `@supports` block that zeroes `row-gap`
496
+ // in polyfill mode (the skyline already
497
+ // encodes vertical spacing in each tile's
498
+ // `top`). Driving the toggle from CSS
499
+ // keeps SSR and client output identical
500
+ // regardless of native support.
501
+ "--wp-grid-lane-row-unit": `${Math.max(
502
+ 1,
503
+ rowUnit
504
+ )}px`
505
+ },
506
+ children: [
507
+ gridOverlay,
508
+ items.map((id) => {
509
+ const child = childrenMap.get(id);
510
+ if (!child) {
511
+ return null;
512
+ }
513
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
514
+ import_lanes_item.LanesItem,
515
+ {
516
+ itemKey: id,
517
+ placementStyle: itemStyles.get(id) ?? {},
518
+ disabled: !editMode,
519
+ interacting,
520
+ dragging: activeId !== null,
521
+ onResize: handleResize,
522
+ onResizeEnd: persistTemporaryLayout,
523
+ resizeSnapPreview: resizeSnapPreview?.id === id ? resizeSnapPreview.snap : null,
524
+ minResizeWidthPx,
525
+ actionableArea: actionableAreaMap.get(
526
+ id
527
+ ),
528
+ renderResizeHandle,
529
+ children: child
530
+ },
531
+ id
532
+ );
533
+ }),
534
+ remaining,
535
+ exitingItems.map(({ key, rect, child }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
536
+ import_item_exit_overlay.ItemExitOverlay,
537
+ {
538
+ itemKey: key,
539
+ rect,
540
+ onAnimationEnd: () => clearExitingItem(key),
541
+ children: child
542
+ },
543
+ `exiting-${key}`
544
+ ))
545
+ ]
546
+ }
547
+ ) }),
548
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_core.DragOverlay, { dropAnimation: dashboardDragDropAnimation, children: dragOverlayContent })
549
+ ]
550
+ }
551
+ );
552
+ }
553
+ );
554
+ // Annotate the CommonJS export names for ESM import in node:
555
+ 0 && (module.exports = {
556
+ DashboardLanes
557
+ });
558
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/dashboard-lanes/index.tsx", "../../../style-runtime/src/index.ts", "../../src/shared/layout-shift-animation.module.css", "../../src/dashboard-lanes/lanes.module.css"],
4
+ "sourcesContent": ["/**\n * External dependencies\n */\nimport {\n\tDndContext,\n\tDragOverlay,\n\tKeyboardSensor,\n\tPointerSensor,\n\tuseSensor,\n\tuseSensors,\n} from '@dnd-kit/core';\nimport {\n\tarrayMove,\n\tSortableContext,\n\tsortableKeyboardCoordinates,\n} from '@dnd-kit/sortable';\nimport type { DragMoveEvent, DragStartEvent } from '@dnd-kit/core';\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { useResizeObserver, useEvent, useMergeRefs } from '@wordpress/compose';\nimport {\n\tforwardRef,\n\tuseMemo,\n\tChildren,\n\tcloneElement,\n\tisValidElement,\n\tuseLayoutEffect,\n\tuseRef,\n\tuseState,\n} from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { LanesItem } from './lanes-item';\nimport { useLanePlacement } from './use-lane-placement';\nimport { GridOverlay } from '../shared/grid-overlay';\nimport { gridSpanToPixelSize } from '../shared/resize-snap';\nimport layoutAnimationStyles from '../shared/layout-shift-animation.module.css';\nimport { ItemExitOverlay } from '../shared/item-exit-overlay';\nimport {\n\tgetLayoutFingerprint,\n\tgetPlacementFingerprint,\n\tuseLayoutShiftAnimation,\n} from '../shared/use-layout-shift-animation';\nimport { useItemExitAnimation } from '../shared/use-item-exit-animation';\nimport type { DashboardLanesLayoutItem, DashboardLanesProps } from './types';\nimport type { ResizeSnapSize } from '../shared/resize-snap';\nimport type { ResizeDelta } from '../shared/types';\nimport { createDashboardDragDropAnimation } from '../shared/drag-overlay-drop-animation';\nimport styles from './lanes.module.css';\n\nconst dashboardDragDropAnimation = createDashboardDragDropAnimation(\n\tstyles[ 'drag-preview-frame' ],\n\tstyles.dragPreviewFrameExiting\n);\n\n// Fallback gap in pixels for math that runs before the computed gap\n// can be read from the DOM. Matches the `'xl'` step the surface\n// resolves to in CSS (`--wpds-dimension-gap-xl`); the next layout\n// effect overwrites this with the actual computed value.\nconst FALLBACK_GAP_PX = 24;\n\n// Default lane cap when no explicit `columns` or `minColumnWidth` is\n// supplied. Layered semantics: `columns` acts as a cap and\n// `minColumnWidth` as a per-tile floor; if neither is set we still\n// need a finite count to render against.\nconst DEFAULT_COLUMNS = 6;\n\nconst NO_SORT_STRATEGY = () => null;\n\n/**\n * Masonry-style surface aligned with `display: grid-lanes`. Items\n * declare a column span; heights are driven by content; placement\n * follows the source-ordered, shortest-lane algorithm with\n * `flow-tolerance` tiebreaking.\n *\n * On browsers that support `display: grid-lanes` natively, the\n * component emits the spec's CSS and lets the engine handle layout.\n * Otherwise, `useLanePlacement` measures item heights and assigns\n * explicit `grid-column-start` / `grid-row-start` values that\n * approximate the same result inside CSS Grid.\n *\n * Each child's `key` must match an entry in the `layout` array;\n * children without a match render at the end of the surface without\n * explicit placement and fall through the lanes auto-flow.\n *\n * @example\n * ```jsx\n * <DashboardLanes\n * layout={ [\n * { key: 'a' },\n * { key: 'b', width: 2 },\n * { key: 'c' },\n * ] }\n * columns={ 3 }\n * editMode\n * onChangeLayout={ setLayout }\n * >\n * <Tile key=\"a\">A</Tile>\n * <Tile key=\"b\">B</Tile>\n * <Tile key=\"c\">C</Tile>\n * </DashboardLanes>\n * ```\n *\n * @param props Component props.\n * @param ref Forwarded to the surface's root `<div>`.\n */\nexport const DashboardLanes = forwardRef< HTMLDivElement, DashboardLanesProps >(\n\tfunction DashboardLanes( props, ref ) {\n\t\tconst {\n\t\t\tlayout,\n\t\t\tcolumns,\n\t\t\tchildren,\n\t\t\tclassName,\n\t\t\tstyle,\n\t\t\tflowTolerance = 16,\n\t\t\trowUnit = 4,\n\t\t\tminColumnWidth,\n\t\t\teditMode = false,\n\t\t\tonChangeLayout,\n\t\t\tonPreviewLayout,\n\t\t\trenderResizeHandle,\n\t\t\trenderDragPreview,\n\t\t\trenderGridOverlay,\n\t\t\t...divProps\n\t\t} = props;\n\n\t\tconst [ temporaryLayout, setTemporaryLayout ] = useState<\n\t\t\tDashboardLanesLayoutItem[] | undefined\n\t\t>();\n\t\tconst [ activeId, setActiveId ] = useState< string | null >( null );\n\t\tconst [ isResizing, setIsResizing ] = useState( false );\n\t\tconst [ resizeSnapPreview, setResizeSnapPreview ] = useState< {\n\t\t\tid: string;\n\t\t\tsnap: ResizeSnapSize;\n\t\t} | null >( null );\n\t\tconst latestLayoutRef = useRef<\n\t\t\tDashboardLanesLayoutItem[] | undefined\n\t\t>();\n\t\tconst lastReorderCursorRef = useRef< {\n\t\t\tx: number;\n\t\t\ty: number;\n\t\t} | null >( null );\n\t\tconst resizeBaselineRef = useRef< number | null >( null );\n\t\tconst captureLayoutSnapshotRef = useRef< () => void >( () => {} );\n\t\tconst childrenCacheRef = useRef< Map< string, React.ReactElement > >(\n\t\t\tnew Map()\n\t\t);\n\t\tconst activeLayout = temporaryLayout ?? layout;\n\n\t\tconst [ container, setContainer ] = useState< HTMLDivElement | null >(\n\t\t\tnull\n\t\t);\n\t\tconst [ containerWidth, setContainerWidth ] = useState( 0 );\n\t\tconst [ gapPx, setGapPx ] = useState( FALLBACK_GAP_PX );\n\t\tconst resizeObserverRef = useResizeObserver(\n\t\t\t( [ { contentRect } ] ) => {\n\t\t\t\tsetContainerWidth( contentRect.width );\n\t\t\t}\n\t\t);\n\t\tconst mergedRootRef = useMergeRefs( [\n\t\t\tsetContainer,\n\t\t\tresizeObserverRef,\n\t\t\tref,\n\t\t] );\n\n\t\t// Measure synchronously before paint and snapshot the computed\n\t\t// `column-gap` so the placement math tracks the design-system\n\t\t// token under any density.\n\t\tuseLayoutEffect( () => {\n\t\t\tif ( ! container ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst { width } = container.getBoundingClientRect();\n\t\t\tif ( width > 0 ) {\n\t\t\t\tsetContainerWidth( width );\n\t\t\t}\n\t\t\tconst parsed = Number.parseFloat(\n\t\t\t\twindow.getComputedStyle( container ).columnGap\n\t\t\t);\n\t\t\tif ( Number.isFinite( parsed ) && parsed > 0 ) {\n\t\t\t\tsetGapPx( parsed );\n\t\t\t}\n\t\t}, [ container ] );\n\t\tconst effectiveColumns = useMemo( () => {\n\t\t\tif ( ! minColumnWidth ) {\n\t\t\t\treturn columns ?? DEFAULT_COLUMNS;\n\t\t\t}\n\t\t\tconst totalWidthPerColumn = minColumnWidth + gapPx;\n\t\t\tconst maxFit = Math.max(\n\t\t\t\t1,\n\t\t\t\tMath.floor( ( containerWidth + gapPx ) / totalWidthPerColumn )\n\t\t\t);\n\t\t\treturn columns !== undefined ? Math.min( columns, maxFit ) : maxFit;\n\t\t}, [ minColumnWidth, gapPx, containerWidth, columns ] );\n\t\tconst columnWidth =\n\t\t\t( containerWidth - ( effectiveColumns - 1 ) * gapPx ) /\n\t\t\teffectiveColumns;\n\t\tconst minResizeWidthPx = gridSpanToPixelSize(\n\t\t\t1,\n\t\t\t1,\n\t\t\tcolumnWidth,\n\t\t\tgapPx,\n\t\t\tnull\n\t\t).widthPx;\n\n\t\tconst layoutMap = useMemo( () => {\n\t\t\tconst map = new Map< string, DashboardLanesLayoutItem >();\n\t\t\tactiveLayout.forEach( ( item ) => map.set( item.key, item ) );\n\t\t\treturn map;\n\t\t}, [ activeLayout ] );\n\n\t\t// Stable-identity key set for the children walk (see grid.tsx).\n\t\tconst layoutKeys = useMemo(\n\t\t\t() => new Set( layout.map( ( item ) => item.key ) ),\n\t\t\t[ layout ]\n\t\t);\n\n\t\t// Sorted item keys, identity-stable when the resulting sequence\n\t\t// is unchanged (avoids invalidating SortableContext).\n\t\tconst sortedItems = useMemo(\n\t\t\t() =>\n\t\t\t\tactiveLayout\n\t\t\t\t\t.map( ( item, index ) => ( { item, index } ) )\n\t\t\t\t\t.sort(\n\t\t\t\t\t\t( a, b ) =>\n\t\t\t\t\t\t\t( a.item.order ?? a.index ) -\n\t\t\t\t\t\t\t( b.item.order ?? b.index )\n\t\t\t\t\t)\n\t\t\t\t\t.map( ( { item } ) => item.key ),\n\t\t\t[ activeLayout ]\n\t\t);\n\t\tconst items = sortedItems;\n\n\t\t// Placement input for the hook: each item with its clamped span\n\t\t// in source (sorted) order. `lane` forwards the optional explicit\n\t\t// pin from the layout item; the algorithm clamps out-of-range\n\t\t// values, so no surface-level guard is needed.\n\t\tconst placementItems = useMemo( () => {\n\t\t\treturn items.map( ( key ) => {\n\t\t\t\tconst item = layoutMap.get( key );\n\t\t\t\tconst width = item?.width;\n\t\t\t\tconst span =\n\t\t\t\t\ttypeof width === 'number'\n\t\t\t\t\t\t? Math.max( 1, Math.min( width, effectiveColumns ) )\n\t\t\t\t\t\t: 1;\n\t\t\t\treturn { key, span, lane: item?.lane };\n\t\t\t} );\n\t\t}, [ items, layoutMap, effectiveColumns ] );\n\n\t\tconst { itemStyles } = useLanePlacement( container, {\n\t\t\titems: placementItems,\n\t\t\tlanes: effectiveColumns,\n\t\t\tgap: gapPx,\n\t\t\tflowTolerance,\n\t\t\trowUnit,\n\t\t} );\n\n\t\tconst [ childrenMap, actionableAreaMap, remaining, renderedByKey ] =\n\t\t\tuseMemo( () => {\n\t\t\t\tconst childMap = new Map< string, React.ReactElement >();\n\t\t\t\tconst actionableMap = new Map< string, React.ReactNode >();\n\t\t\t\tconst rest: React.ReactNode[] = [];\n\t\t\t\tconst byKey = new Map< string, React.ReactElement >();\n\n\t\t\t\tChildren.forEach( children, ( child ) => {\n\t\t\t\t\tif ( ! isValidElement( child ) ) {\n\t\t\t\t\t\trest.push( child );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tconst key = child.key?.toString();\n\t\t\t\t\tif ( ! key ) {\n\t\t\t\t\t\trest.push( child );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Strip `actionableArea` so it does not leak to the DOM;\n\t\t\t\t\t// the grid lifts it to a slot separately.\n\t\t\t\t\tconst { actionableArea } = child.props as {\n\t\t\t\t\t\tactionableArea?: React.ReactNode;\n\t\t\t\t\t};\n\t\t\t\t\tconst stripped =\n\t\t\t\t\t\tactionableArea !== undefined\n\t\t\t\t\t\t\t? cloneElement(\n\t\t\t\t\t\t\t\t\tchild as React.ReactElement< {\n\t\t\t\t\t\t\t\t\t\tactionableArea?: React.ReactNode;\n\t\t\t\t\t\t\t\t\t} >,\n\t\t\t\t\t\t\t\t\t{ actionableArea: undefined }\n\t\t\t\t\t\t\t )\n\t\t\t\t\t\t\t: ( child as React.ReactElement );\n\n\t\t\t\t\tbyKey.set( key, stripped );\n\n\t\t\t\t\tif ( layoutKeys.has( key ) ) {\n\t\t\t\t\t\tif ( actionableArea !== undefined ) {\n\t\t\t\t\t\t\tactionableMap.set( key, actionableArea );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tchildMap.set( key, stripped );\n\t\t\t\t\t} else {\n\t\t\t\t\t\trest.push( child );\n\t\t\t\t\t}\n\t\t\t\t} );\n\n\t\t\t\treturn [ childMap, actionableMap, rest, byKey ];\n\t\t\t}, [ children, layoutKeys ] );\n\n\t\t// Persist the latest rendered children so a removed tile's content\n\t\t// is still available for its exit overlay. Filled from an effect so a\n\t\t// discarded render never writes to the cache.\n\t\tuseLayoutEffect( () => {\n\t\t\tfor ( const [ key, child ] of renderedByKey ) {\n\t\t\t\tchildrenCacheRef.current.set( key, child );\n\t\t\t}\n\t\t}, [ renderedByKey ] );\n\n\t\tconst sensors = useSensors(\n\t\t\tuseSensor( PointerSensor ),\n\t\t\tuseSensor( KeyboardSensor, {\n\t\t\t\tcoordinateGetter: sortableKeyboardCoordinates,\n\t\t\t} )\n\t\t);\n\n\t\tconst handleDragStart = useEvent( ( event: DragStartEvent ) => {\n\t\t\tsetActiveId( String( event.active.id ) );\n\t\t\tlastReorderCursorRef.current = null;\n\t\t} );\n\n\t\tconst handleDragCancel = useEvent( () => {\n\t\t\tsetActiveId( null );\n\t\t\tlatestLayoutRef.current = undefined;\n\t\t\tlastReorderCursorRef.current = null;\n\t\t\tresizeBaselineRef.current = null;\n\t\t\tsetIsResizing( false );\n\t\t\tsetResizeSnapPreview( null );\n\t\t\tsetTemporaryLayout( undefined );\n\t\t} );\n\n\t\tconst handleDragMove = useEvent( ( event: DragMoveEvent ) => {\n\t\t\tconst { active, over } = event;\n\t\t\tif ( ! over || active.id === over.id ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst activeRect = active.rect.current.translated;\n\t\t\tif ( ! activeRect ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst activeCenterX = activeRect.left + activeRect.width / 2;\n\t\t\tconst activeCenterY = activeRect.top + activeRect.height / 2;\n\n\t\t\tconst lastCursor = lastReorderCursorRef.current;\n\t\t\tif ( lastCursor ) {\n\t\t\t\tconst dx = activeCenterX - lastCursor.x;\n\t\t\t\tconst dy = activeCenterY - lastCursor.y;\n\t\t\t\tif ( dx * dx + dy * dy < 100 ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst overCenterX = over.rect.left + over.rect.width / 2;\n\t\t\tconst insertAfter = activeCenterX > overCenterX;\n\n\t\t\tconst currentIndex = items.indexOf( String( active.id ) );\n\t\t\tconst overIndex = items.indexOf( String( over.id ) );\n\t\t\tlet newIndex: number;\n\t\t\tif ( insertAfter ) {\n\t\t\t\tnewIndex = currentIndex > overIndex ? overIndex + 1 : overIndex;\n\t\t\t} else {\n\t\t\t\tnewIndex = currentIndex > overIndex ? overIndex : overIndex - 1;\n\t\t\t}\n\t\t\tnewIndex = Math.max( 0, Math.min( newIndex, items.length - 1 ) );\n\n\t\t\tif ( newIndex === currentIndex ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst updatedItems = arrayMove( items, currentIndex, newIndex );\n\t\t\t// Build a key→index lookup so the .map below is O(n)\n\t\t\t// instead of O(n²) from per-item `indexOf` calls.\n\t\t\tconst orderByKey = new Map< string, number >();\n\t\t\tupdatedItems.forEach( ( key, index ) => {\n\t\t\t\torderByKey.set( key, index );\n\t\t\t} );\n\t\t\tconst updatedLayout = activeLayout.map( ( item ) => ( {\n\t\t\t\t...item,\n\t\t\t\torder: orderByKey.get( item.key ) ?? 0,\n\t\t\t} ) );\n\n\t\t\tlastReorderCursorRef.current = {\n\t\t\t\tx: activeCenterX,\n\t\t\t\ty: activeCenterY,\n\t\t\t};\n\t\t\tlatestLayoutRef.current = updatedLayout;\n\t\t\tcaptureLayoutSnapshotRef.current();\n\t\t\tsetTemporaryLayout( updatedLayout );\n\t\t\tonPreviewLayout?.( updatedLayout );\n\t\t} );\n\n\t\tconst persistTemporaryLayout = useEvent( () => {\n\t\t\tconst latest = latestLayoutRef.current;\n\t\t\tlatestLayoutRef.current = undefined;\n\t\t\tresizeBaselineRef.current = null;\n\t\t\tsetIsResizing( false );\n\t\t\tsetResizeSnapPreview( null );\n\t\t\tif ( ! onChangeLayout || ! latest ) {\n\t\t\t\tsetTemporaryLayout( undefined );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tonChangeLayout( latest );\n\t\t\tsetTemporaryLayout( undefined );\n\t\t} );\n\n\t\tconst handleResize = useEvent( ( id: string, delta: ResizeDelta ) => {\n\t\t\tif ( ! editMode ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( ! isResizing ) {\n\t\t\t\tsetIsResizing( true );\n\t\t\t}\n\n\t\t\tconst relativeDelta = Math.round(\n\t\t\t\tdelta.width / ( columnWidth + gapPx )\n\t\t\t);\n\n\t\t\tif ( resizeBaselineRef.current === null ) {\n\t\t\t\tconst baseItem = layoutMap.get( id );\n\t\t\t\tconst baseWidth =\n\t\t\t\t\ttypeof baseItem?.width === 'number' ? baseItem.width : 1;\n\t\t\t\tresizeBaselineRef.current = baseWidth;\n\t\t\t}\n\t\t\tconst baseline = resizeBaselineRef.current;\n\t\t\tconst newWidth = Math.max(\n\t\t\t\t1,\n\t\t\t\tMath.min( baseline + relativeDelta, effectiveColumns )\n\t\t\t);\n\n\t\t\tsetResizeSnapPreview( {\n\t\t\t\tid,\n\t\t\t\tsnap: gridSpanToPixelSize(\n\t\t\t\t\tnewWidth,\n\t\t\t\t\t1,\n\t\t\t\t\tcolumnWidth,\n\t\t\t\t\tgapPx,\n\t\t\t\t\tnull\n\t\t\t\t),\n\t\t\t} );\n\n\t\t\tconst pendingItem = latestLayoutRef.current?.find(\n\t\t\t\t( item ) => item.key === id\n\t\t\t);\n\t\t\tconst currentItem = pendingItem ?? layoutMap.get( id );\n\t\t\tif ( currentItem && currentItem.width === newWidth ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst updatedLayout = activeLayout.map( ( item ) =>\n\t\t\t\titem.key === id ? { ...item, width: newWidth } : item\n\t\t\t);\n\n\t\t\tlatestLayoutRef.current = updatedLayout;\n\t\t\tcaptureLayoutSnapshotRef.current();\n\t\t\tsetTemporaryLayout( updatedLayout );\n\t\t\tonPreviewLayout?.( updatedLayout );\n\t\t} );\n\n\t\tconst interacting = activeId !== null || isResizing;\n\n\t\t// Drag-overlay clone composition: the surface always wraps with a\n\t\t// thin functional frame (lift, cursor, pointer pass-through). When\n\t\t// `renderDragPreview` is supplied, the consumer's wrapper sits\n\t\t// inside the frame around the cloned children; otherwise the\n\t\t// cloned children render directly so any persistent chrome on\n\t\t// them carries through unchanged.\n\t\tconst activeClone = activeId ? childrenMap.get( activeId ) : null;\n\t\tconst DragPreview = renderDragPreview;\n\t\tconst dragOverlayContent =\n\t\t\tactiveId && activeClone ? (\n\t\t\t\t<div className={ styles[ 'drag-preview-frame' ] }>\n\t\t\t\t\t<div className={ styles[ 'drag-preview-frame__lift' ] }>\n\t\t\t\t\t\t{ DragPreview ? (\n\t\t\t\t\t\t\t<DragPreview itemId={ activeId }>\n\t\t\t\t\t\t\t\t{ activeClone }\n\t\t\t\t\t\t\t</DragPreview>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\tactiveClone\n\t\t\t\t\t\t) }\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t) : null;\n\n\t\t// Edit-mode background. Lanes are content-driven vertically, so\n\t\t// the overlay mirrors columns only. Rendered unconditionally so\n\t\t// it can cross-fade on edit-mode toggles (`isActive` drives the\n\t\t// transition); memoized so drag/resize re-renders skip it.\n\t\tconst Overlay = renderGridOverlay ?? GridOverlay;\n\t\tconst gridOverlay = useMemo(\n\t\t\t() => (\n\t\t\t\t<Overlay columns={ effectiveColumns } isActive={ editMode } />\n\t\t\t),\n\t\t\t[ Overlay, editMode, effectiveColumns ]\n\t\t);\n\n\t\tconst layoutFingerprint = useMemo( () => {\n\t\t\tconst layoutSig = getLayoutFingerprint( activeLayout );\n\t\t\tconst placementSig = getPlacementFingerprint( itemStyles );\n\t\t\treturn `${ layoutSig }\\0${ placementSig }`;\n\t\t}, [ activeLayout, itemStyles ] );\n\t\tconst excludeLayoutAnimationKey =\n\t\t\tactiveId ?? ( isResizing ? resizeSnapPreview?.id : null );\n\t\tconst { captureLayoutSnapshot, getPositionsBeforeLastChange } =\n\t\t\tuseLayoutShiftAnimation( {\n\t\t\t\tcontainer,\n\t\t\t\tenabled: editMode,\n\t\t\t\tlayoutFingerprint,\n\t\t\t\texcludeItemKey: excludeLayoutAnimationKey,\n\t\t\t} );\n\t\tconst { exitingItems, clearExitingItem } = useItemExitAnimation( {\n\t\t\tcontainer,\n\t\t\tenabled: editMode,\n\t\t\tlayoutKeys,\n\t\t\tgetPositionsBeforeLastChange,\n\t\t\tchildrenCacheRef,\n\t\t} );\n\t\tconst layoutAnimating = editMode;\n\t\tuseLayoutEffect( () => {\n\t\t\tcaptureLayoutSnapshotRef.current = captureLayoutSnapshot;\n\t\t}, [ captureLayoutSnapshot ] );\n\n\t\treturn (\n\t\t\t<DndContext\n\t\t\t\tsensors={ sensors }\n\t\t\t\tonDragStart={ handleDragStart }\n\t\t\t\tonDragCancel={ handleDragCancel }\n\t\t\t\tonDragMove={ handleDragMove }\n\t\t\t\tonDragEnd={ () => {\n\t\t\t\t\tpersistTemporaryLayout();\n\t\t\t\t\tlastReorderCursorRef.current = null;\n\t\t\t\t\tsetActiveId( null );\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t<SortableContext items={ items } strategy={ NO_SORT_STRATEGY }>\n\t\t\t\t\t<div\n\t\t\t\t\t\t{ ...divProps }\n\t\t\t\t\t\tref={ mergedRootRef }\n\t\t\t\t\t\tclassName={ clsx(\n\t\t\t\t\t\t\tstyles.lanes,\n\t\t\t\t\t\t\tlayoutAnimating &&\n\t\t\t\t\t\t\t\tlayoutAnimationStyles[ 'layout-animating' ],\n\t\t\t\t\t\t\tclassName\n\t\t\t\t\t\t) }\n\t\t\t\t\t\tdata-wp-grid-dragging={ activeId || undefined }\n\t\t\t\t\t\tdata-wp-grid-resizing={ isResizing || undefined }\n\t\t\t\t\t\tstyle={\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t...style,\n\t\t\t\t\t\t\t\tgridTemplateColumns: `repeat(${ effectiveColumns }, minmax(0, 1fr))`,\n\t\t\t\t\t\t\t\t// `column-gap` and `row-gap` are set in\n\t\t\t\t\t\t\t\t// `lanes.module.css` from the\n\t\t\t\t\t\t\t\t// design-system gap token, with an\n\t\t\t\t\t\t\t\t// `@supports` block that zeroes `row-gap`\n\t\t\t\t\t\t\t\t// in polyfill mode (the skyline already\n\t\t\t\t\t\t\t\t// encodes vertical spacing in each tile's\n\t\t\t\t\t\t\t\t// `top`). Driving the toggle from CSS\n\t\t\t\t\t\t\t\t// keeps SSR and client output identical\n\t\t\t\t\t\t\t\t// regardless of native support.\n\t\t\t\t\t\t\t\t'--wp-grid-lane-row-unit': `${ Math.max(\n\t\t\t\t\t\t\t\t\t1,\n\t\t\t\t\t\t\t\t\trowUnit\n\t\t\t\t\t\t\t\t) }px`,\n\t\t\t\t\t\t\t} as React.CSSProperties\n\t\t\t\t\t\t}\n\t\t\t\t\t>\n\t\t\t\t\t\t{ gridOverlay }\n\t\t\t\t\t\t{ items.map( ( id ) => {\n\t\t\t\t\t\t\tconst child = childrenMap.get( id );\n\t\t\t\t\t\t\tif ( ! child ) {\n\t\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<LanesItem\n\t\t\t\t\t\t\t\t\tkey={ id }\n\t\t\t\t\t\t\t\t\titemKey={ id }\n\t\t\t\t\t\t\t\t\tplacementStyle={\n\t\t\t\t\t\t\t\t\t\titemStyles.get( id ) ?? {}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdisabled={ ! editMode }\n\t\t\t\t\t\t\t\t\tinteracting={ interacting }\n\t\t\t\t\t\t\t\t\tdragging={ activeId !== null }\n\t\t\t\t\t\t\t\t\tonResize={ handleResize }\n\t\t\t\t\t\t\t\t\tonResizeEnd={ persistTemporaryLayout }\n\t\t\t\t\t\t\t\t\tresizeSnapPreview={\n\t\t\t\t\t\t\t\t\t\tresizeSnapPreview?.id === id\n\t\t\t\t\t\t\t\t\t\t\t? resizeSnapPreview.snap\n\t\t\t\t\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tminResizeWidthPx={ minResizeWidthPx }\n\t\t\t\t\t\t\t\t\tactionableArea={ actionableAreaMap.get(\n\t\t\t\t\t\t\t\t\t\tid\n\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\trenderResizeHandle={ renderResizeHandle }\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{ child }\n\t\t\t\t\t\t\t\t</LanesItem>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} ) }\n\t\t\t\t\t\t{ remaining }\n\t\t\t\t\t\t{ exitingItems.map( ( { key, rect, child } ) => (\n\t\t\t\t\t\t\t<ItemExitOverlay\n\t\t\t\t\t\t\t\tkey={ `exiting-${ key }` }\n\t\t\t\t\t\t\t\titemKey={ key }\n\t\t\t\t\t\t\t\trect={ rect }\n\t\t\t\t\t\t\t\tonAnimationEnd={ () => clearExitingItem( key ) }\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{ child }\n\t\t\t\t\t\t\t</ItemExitOverlay>\n\t\t\t\t\t\t) ) }\n\t\t\t\t\t</div>\n\t\t\t\t</SortableContext>\n\t\t\t\t<DragOverlay dropAnimation={ dashboardDragDropAnimation }>\n\t\t\t\t\t{ dragOverlayContent }\n\t\t\t\t</DragOverlay>\n\t\t\t</DndContext>\n\t\t);\n\t}\n);\n", "type GlobalScopeWithStyleRuntime = typeof globalThis & {\n\t// This global is shared by separately bundled copies of this package.\n\t// Keep its shape backward compatible after release.\n\t__wpStyleRuntime?: {\n\t\tdocuments: Map< Document, number >;\n\t\tstyles: Map< string, string >;\n\t\tinjectedStyles: WeakMap< Document, Set< string > >;\n\t};\n};\n\nconst STYLE_HASH_ATTRIBUTE = 'data-wp-hash';\n\n/**\n * Returns the shared style runtime registry.\n *\n * The registry is stored on `globalThis` so separately bundled copies of this\n * package can coordinate through the same document and style maps.\n *\n * @return The shared runtime registry.\n */\nfunction getRuntime() {\n\tconst globalScope = globalThis as GlobalScopeWithStyleRuntime;\n\n\tif ( globalScope.__wpStyleRuntime ) {\n\t\treturn globalScope.__wpStyleRuntime;\n\t}\n\n\tglobalScope.__wpStyleRuntime = {\n\t\tdocuments: new Map(),\n\t\tstyles: new Map(),\n\t\tinjectedStyles: new WeakMap(),\n\t};\n\n\tif ( typeof document !== 'undefined' ) {\n\t\tregisterDocument( document );\n\t}\n\n\treturn globalScope.__wpStyleRuntime;\n}\n\n/**\n * Checks whether a document already contains a style tag for a hash.\n *\n * @param targetDocument Document to inspect.\n * @param hash Stable hash for the transformed CSS.\n *\n * @return Whether the style hash already exists in the document.\n */\nfunction documentContainsStyleHash(\n\ttargetDocument: Document,\n\thash: string\n): boolean {\n\tif ( ! targetDocument.head ) {\n\t\treturn false;\n\t}\n\n\tfor ( const style of targetDocument.head.querySelectorAll(\n\t\t`style[${ STYLE_HASH_ATTRIBUTE }]`\n\t) ) {\n\t\tif ( style.getAttribute( STYLE_HASH_ATTRIBUTE ) === hash ) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n}\n\n/**\n * Injects a registered style into a document, unless that document already\n * contains a style tag for the same hash.\n *\n * @param targetDocument Document to inject the style into.\n * @param hash Stable hash for the transformed CSS.\n * @param css CSS text to inject.\n */\nfunction injectStyle( targetDocument: Document, hash: string, css: string ) {\n\tif ( ! targetDocument.head ) {\n\t\treturn;\n\t}\n\n\tconst runtime = getRuntime();\n\tlet injectedStyles = runtime.injectedStyles.get( targetDocument );\n\n\tif ( ! injectedStyles ) {\n\t\tinjectedStyles = new Set();\n\t\truntime.injectedStyles.set( targetDocument, injectedStyles );\n\t}\n\n\tif ( injectedStyles.has( hash ) ) {\n\t\treturn;\n\t}\n\n\t// Older generated CSS module output can still inject matching style tags\n\t// after this document's cache is created, so keep the DOM as the fallback\n\t// source of truth on cache misses.\n\tif ( documentContainsStyleHash( targetDocument, hash ) ) {\n\t\tinjectedStyles.add( hash );\n\t\treturn;\n\t}\n\n\tconst style = targetDocument.createElement( 'style' );\n\tstyle.setAttribute( STYLE_HASH_ATTRIBUTE, hash );\n\tstyle.appendChild( targetDocument.createTextNode( css ) );\n\ttargetDocument.head.appendChild( style );\n\tinjectedStyles.add( hash );\n}\n\n/**\n * Registers a document as a style injection target.\n *\n * Existing registered styles are replayed into the document immediately.\n * Documents are reference-counted so multiple providers can safely register the\n * same document without one cleanup removing it while another registration is\n * still active.\n *\n * @param targetDocument Document to receive registered styles.\n * @return Cleanup function that unregisters this document registration.\n */\nexport function registerDocument( targetDocument: Document ) {\n\tconst runtime = getRuntime();\n\n\truntime.documents.set(\n\t\ttargetDocument,\n\t\t( runtime.documents.get( targetDocument ) ?? 0 ) + 1\n\t);\n\n\tfor ( const [ hash, css ] of runtime.styles ) {\n\t\tinjectStyle( targetDocument, hash, css );\n\t}\n\n\treturn () => {\n\t\tconst count = runtime.documents.get( targetDocument );\n\n\t\tif ( count === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( count <= 1 ) {\n\t\t\truntime.documents.delete( targetDocument );\n\t\t\treturn;\n\t\t}\n\n\t\truntime.documents.set( targetDocument, count - 1 );\n\t};\n}\n\n/**\n * Registers a style and injects it into all registered documents.\n *\n * The hash is used as the deduplication key, so calling this repeatedly with\n * the same hash will not add duplicate style tags to a document.\n * Registered styles are retained for the lifetime of the page so they can be\n * replayed into documents that are registered later.\n *\n * @param hash Stable hash for the transformed CSS.\n * @param css CSS text to inject.\n */\nexport function registerStyle( hash: string, css: string ) {\n\tconst runtime = getRuntime();\n\n\truntime.styles.set( hash, css );\n\n\tfor ( const targetDocument of runtime.documents.keys() ) {\n\t\tinjectStyle( targetDocument, hash, css );\n\t}\n}\n", "import { registerStyle } from '@wordpress/style-runtime';\nif (typeof process === 'undefined' || process.env.NODE_ENV !== 'test') {\n\tregisterStyle(\"9e5573e51f\", \"._2db63116caa90ae9__layout-animating [data-wp-grid-item-key]{transition:transform var(--wpds-motion-duration-md,.2s) var(--wpds-motion-easing-balanced,cubic-bezier(.4,0,.2,1))}@media (prefers-reduced-motion:reduce){._2db63116caa90ae9__layout-animating [data-wp-grid-item-key]{transition:none}}\");\n}\nexport default {\"layout-animating\":\"_2db63116caa90ae9__layout-animating\"};\n", "import { registerStyle } from '@wordpress/style-runtime';\nif (typeof process === 'undefined' || process.env.NODE_ENV !== 'test') {\n\tregisterStyle(\"44ea80456a\", \"._8cc368bc6c2d79c6__lanes{column-gap:var(--wp-grid-gap,var(--wpds-dimension-gap-xl,24px));display:grid-lanes;position:relative;row-gap:var(--wp-grid-gap,var(--wpds-dimension-gap-xl,24px))}@supports not (display:grid-lanes){._8cc368bc6c2d79c6__lanes{display:grid;grid-auto-flow:dense;grid-auto-rows:var(--wp-grid-lane-row-unit,4px);row-gap:0}}._1bfa908a532e32a4__drag-preview-frame{border-radius:var(--wp-grid-drag-preview-radius,0);box-shadow:var(--wpds-elevation-md,0 2px 3px 0 #0000000d,0 4px 5px 0 #0000000a,0 12px 12px 0 #00000008,0 16px 16px 0 #00000005);cursor:grabbing;height:100%;pointer-events:none}.bd684ee9f92388ed__drag-preview-frame__lift{height:100%;transform:scale(var(--wp-grid-drag-preview-scale,1.05));transform-origin:center}@media not (prefers-reduced-motion:reduce){._1bfa908a532e32a4__drag-preview-frame{animation:_5f4a1718cb7927ee__wp-grid-drag-preview-shadow-enter var(--wpds-motion-duration-sm,.1s) var(--wpds-motion-easing-balanced,cubic-bezier(.4,0,.2,1)) both}.bd684ee9f92388ed__drag-preview-frame__lift{animation:_29f7f02d4f227b1e__wp-grid-drag-preview-scale-enter var(--wpds-motion-duration-sm,.1s) var(--wpds-motion-easing-balanced,cubic-bezier(.4,0,.2,1)) both}}@media not (prefers-reduced-motion:reduce){@keyframes _5f4a1718cb7927ee__wp-grid-drag-preview-shadow-enter{0%{box-shadow:var(--wpds-elevation-xs,0 1px 1px 0 #00000008,0 1px 2px 0 #00000005,0 3px 3px 0 #00000005,0 4px 4px 0 #00000003)}to{box-shadow:var(--wpds-elevation-md,0 2px 3px 0 #0000000d,0 4px 5px 0 #0000000a,0 12px 12px 0 #00000008,0 16px 16px 0 #00000005)}}@keyframes _29f7f02d4f227b1e__wp-grid-drag-preview-scale-enter{0%{transform:scale(1)}to{transform:scale(var(--wp-grid-drag-preview-scale,1.05))}}}@media not (prefers-reduced-motion:reduce){._1bfa908a532e32a4__drag-preview-frame._13e2d868ade475b5__dragPreviewFrameExiting{animation:_6883de14c5fb8559__wp-grid-drag-preview-shadow-exit var(--wpds-motion-duration-md,.2s) var(--wpds-motion-easing-balanced,cubic-bezier(.4,0,.2,1)) forwards}._1bfa908a532e32a4__drag-preview-frame._13e2d868ade475b5__dragPreviewFrameExiting .bd684ee9f92388ed__drag-preview-frame__lift{animation:_0de4da1cd817e536__wp-grid-drag-preview-scale-exit var(--wpds-motion-duration-md,.2s) var(--wpds-motion-easing-balanced,cubic-bezier(.4,0,.2,1)) forwards}@keyframes _6883de14c5fb8559__wp-grid-drag-preview-shadow-exit{0%{box-shadow:var(--wpds-elevation-md,0 2px 3px 0 #0000000d,0 4px 5px 0 #0000000a,0 12px 12px 0 #00000008,0 16px 16px 0 #00000005)}to{box-shadow:var(--wpds-elevation-xs,0 1px 1px 0 #00000008,0 1px 2px 0 #00000005,0 3px 3px 0 #00000005,0 4px 4px 0 #00000003)}}@keyframes _0de4da1cd817e536__wp-grid-drag-preview-scale-exit{0%{transform:scale(var(--wp-grid-drag-preview-scale,1.05))}to{transform:scale(1)}}}._1bfa908a532e32a4__drag-preview-frame._13e2d868ade475b5__dragPreviewFrameExiting{box-shadow:var(--wpds-elevation-xs,0 1px 1px 0 #00000008,0 1px 2px 0 #00000005,0 3px 3px 0 #00000005,0 4px 4px 0 #00000003)}._1bfa908a532e32a4__drag-preview-frame._13e2d868ade475b5__dragPreviewFrameExiting .bd684ee9f92388ed__drag-preview-frame__lift{transform:scale(1)}@media (prefers-reduced-motion:reduce){._1bfa908a532e32a4__drag-preview-frame{box-shadow:var(--wpds-elevation-md,0 2px 3px 0 #0000000d,0 4px 5px 0 #0000000a,0 12px 12px 0 #00000008,0 16px 16px 0 #00000005)}.bd684ee9f92388ed__drag-preview-frame__lift{transform:none}._1bfa908a532e32a4__drag-preview-frame._13e2d868ade475b5__dragPreviewFrameExiting{box-shadow:var(--wpds-elevation-xs,0 1px 1px 0 #00000008,0 1px 2px 0 #00000005,0 3px 3px 0 #00000005,0 4px 4px 0 #00000003);transition:none}._1bfa908a532e32a4__drag-preview-frame._13e2d868ade475b5__dragPreviewFrameExiting .bd684ee9f92388ed__drag-preview-frame__lift{transition:none}}\");\n}\nexport default {\"lanes\":\"_8cc368bc6c2d79c6__lanes\",\"drag-preview-frame\":\"_1bfa908a532e32a4__drag-preview-frame\",\"drag-preview-frame__lift\":\"bd684ee9f92388ed__drag-preview-frame__lift\",\"wp-grid-drag-preview-shadow-enter\":\"_5f4a1718cb7927ee__wp-grid-drag-preview-shadow-enter\",\"wp-grid-drag-preview-scale-enter\":\"_29f7f02d4f227b1e__wp-grid-drag-preview-scale-enter\",\"dragPreviewFrameExiting\":\"_13e2d868ade475b5__dragPreviewFrameExiting\",\"wp-grid-drag-preview-shadow-exit\":\"_6883de14c5fb8559__wp-grid-drag-preview-shadow-exit\",\"wp-grid-drag-preview-scale-exit\":\"_0de4da1cd817e536__wp-grid-drag-preview-scale-exit\"};\n"],
5
+ "mappings": "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",
6
+ "names": ["DashboardLanes", "clsx"]
7
+ }