@measured/puck-plugin-heading-analyzer 0.21.0-canary.a5160e5d → 0.21.0-canary.a7a65997

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -269,17 +269,17 @@ import { useEffect as useEffect5, useState } from "react";
269
269
 
270
270
  // css-module:/home/runner/work/puck/puck/packages/plugin-heading-analyzer/src/HeadingAnalyzer.module.css#css-module
271
271
  init_react_import();
272
- var HeadingAnalyzer_module_default = { "HeadingAnalyzer": "_HeadingAnalyzer_116v6_1", "HeadingAnalyzer-cssWarning": "_HeadingAnalyzer-cssWarning_116v6_5", "HeadingAnalyzerItem": "_HeadingAnalyzerItem_116v6_9", "HeadingAnalyzerItem--missing": "_HeadingAnalyzerItem--missing_116v6_13" };
272
+ var HeadingAnalyzer_module_default = { "HeadingAnalyzer": "_HeadingAnalyzer_yg0s7_1", "HeadingAnalyzer-cssWarning": "_HeadingAnalyzer-cssWarning_yg0s7_6", "HeadingAnalyzerItem": "_HeadingAnalyzerItem_yg0s7_10", "HeadingAnalyzerItem--missing": "_HeadingAnalyzerItem--missing_yg0s7_14" };
273
273
 
274
274
  // src/HeadingAnalyzer.tsx
275
275
  import { createUsePuck } from "@measured/puck";
276
276
 
277
- // ../core/components/SidebarSection/index.tsx
277
+ // ../core/components/OutlineList/index.tsx
278
278
  init_react_import();
279
279
 
280
- // css-module:/home/runner/work/puck/puck/packages/core/components/SidebarSection/styles.module.css#css-module
280
+ // css-module:/home/runner/work/puck/puck/packages/core/components/OutlineList/styles.module.css#css-module
281
281
  init_react_import();
282
- var styles_module_default = { "SidebarSection": "_SidebarSection_8boj8_1", "SidebarSection-title": "_SidebarSection-title_8boj8_12", "SidebarSection--noBorderTop": "_SidebarSection--noBorderTop_8boj8_20", "SidebarSection-content": "_SidebarSection-content_8boj8_24", "SidebarSection--noPadding": "_SidebarSection--noPadding_8boj8_28", "SidebarSection-breadcrumbLabel": "_SidebarSection-breadcrumbLabel_8boj8_41", "SidebarSection-breadcrumbs": "_SidebarSection-breadcrumbs_8boj8_70", "SidebarSection-breadcrumb": "_SidebarSection-breadcrumb_8boj8_41", "SidebarSection-heading": "_SidebarSection-heading_8boj8_82", "SidebarSection-loadingOverlay": "_SidebarSection-loadingOverlay_8boj8_86" };
282
+ var styles_module_default = { "OutlineList": "_OutlineList_w4lzv_1", "OutlineListItem": "_OutlineListItem_w4lzv_25", "OutlineListItem--clickable": "_OutlineListItem--clickable_w4lzv_45" };
283
283
 
284
284
  // ../core/lib/get-class-name-factory.ts
285
285
  init_react_import();
@@ -308,29 +308,50 @@ var getClassNameFactory = (rootClass, styles, config = { baseClass: "" }) => (op
308
308
  };
309
309
  var get_class_name_factory_default = getClassNameFactory;
310
310
 
311
- // ../core/components/Heading/index.tsx
312
- init_react_import();
313
-
314
- // css-module:/home/runner/work/puck/puck/packages/core/components/Heading/styles.module.css#css-module
315
- init_react_import();
316
- var styles_module_default2 = { "Heading": "_Heading_qxrry_1", "Heading--xxxxl": "_Heading--xxxxl_qxrry_12", "Heading--xxxl": "_Heading--xxxl_qxrry_18", "Heading--xxl": "_Heading--xxl_qxrry_22", "Heading--xl": "_Heading--xl_qxrry_26", "Heading--l": "_Heading--l_qxrry_30", "Heading--m": "_Heading--m_qxrry_34", "Heading--s": "_Heading--s_qxrry_38", "Heading--xs": "_Heading--xs_qxrry_42" };
317
-
318
- // ../core/components/Heading/index.tsx
311
+ // ../core/components/OutlineList/index.tsx
319
312
  import { jsx } from "react/jsx-runtime";
320
- var getClassName = get_class_name_factory_default("Heading", styles_module_default2);
321
- var Heading = ({ children, rank, size = "m" }) => {
322
- const Tag = rank ? `h${rank}` : "span";
313
+ var getClassName = get_class_name_factory_default("OutlineList", styles_module_default);
314
+ var getClassNameItem = get_class_name_factory_default("OutlineListItem", styles_module_default);
315
+ var OutlineList = ({ children }) => {
316
+ return /* @__PURE__ */ jsx("ul", { className: getClassName(), children });
317
+ };
318
+ OutlineList.Clickable = ({ children }) => /* @__PURE__ */ jsx("div", { className: getClassNameItem({ clickable: true }), children });
319
+ OutlineList.Item = ({
320
+ children,
321
+ onClick
322
+ }) => {
323
323
  return /* @__PURE__ */ jsx(
324
- Tag,
324
+ "li",
325
325
  {
326
- className: getClassName({
327
- [size]: true
328
- }),
326
+ className: getClassNameItem({ clickable: !!onClick }),
327
+ onClick,
329
328
  children
330
329
  }
331
330
  );
332
331
  };
333
332
 
333
+ // ../core/lib/scroll-into-view.ts
334
+ init_react_import();
335
+ var scrollIntoView = (el) => {
336
+ const oldStyle = __spreadValues({}, el.style);
337
+ el.style.scrollMargin = "256px";
338
+ if (el) {
339
+ el == null ? void 0 : el.scrollIntoView({ behavior: "smooth" });
340
+ el.style.scrollMargin = oldStyle.scrollMargin || "";
341
+ }
342
+ };
343
+
344
+ // ../core/lib/get-frame.ts
345
+ init_react_import();
346
+ var getFrame = () => {
347
+ if (typeof window === "undefined") return;
348
+ let frameEl = document.querySelector("#preview-frame");
349
+ if ((frameEl == null ? void 0 : frameEl.tagName) === "IFRAME") {
350
+ return frameEl.contentDocument || document;
351
+ }
352
+ return (frameEl == null ? void 0 : frameEl.ownerDocument) || document;
353
+ };
354
+
334
355
  // ../../node_modules/lucide-react/dist/esm/lucide-react.js
335
356
  init_react_import();
336
357
 
@@ -418,15 +439,29 @@ var createLucideIcon = (iconName, iconNode) => {
418
439
  return Component;
419
440
  };
420
441
 
421
- // ../../node_modules/lucide-react/dist/esm/icons/chevron-right.js
442
+ // ../../node_modules/lucide-react/dist/esm/icons/heading-1.js
422
443
  init_react_import();
423
- var ChevronRight = createLucideIcon("ChevronRight", [
424
- ["path", { d: "m9 18 6-6-6-6", key: "mthhwq" }]
444
+ var Heading1 = createLucideIcon("Heading1", [
445
+ ["path", { d: "M4 12h8", key: "17cfdx" }],
446
+ ["path", { d: "M4 18V6", key: "1rz3zl" }],
447
+ ["path", { d: "M12 18V6", key: "zqpxq5" }],
448
+ ["path", { d: "m17 12 3-2v8", key: "1hhhft" }]
425
449
  ]);
426
450
 
427
- // ../core/lib/use-breadcrumbs.ts
451
+ // ../core/lib/index.ts
452
+ init_react_import();
453
+
454
+ // ../core/lib/filter.ts
455
+ init_react_import();
456
+
457
+ // ../core/lib/data/reorder.ts
458
+ init_react_import();
459
+
460
+ // ../core/lib/data/replace.ts
461
+ init_react_import();
462
+
463
+ // ../core/lib/use-reset-auto-zoom.ts
428
464
  init_react_import();
429
- import { useMemo } from "react";
430
465
 
431
466
  // ../core/store/index.ts
432
467
  init_react_import();
@@ -609,12 +644,12 @@ var walkObject = ({
609
644
  }
610
645
  return flatten(newProps);
611
646
  };
612
- function mapFields(item, mappers, config, recurseSlots = false) {
647
+ function mapFields(item, mappers, config, recurseSlots = false, shouldDefaultSlots = true) {
613
648
  var _a, _b, _c, _d, _e;
614
649
  const itemType = "type" in item ? item.type : "root";
615
650
  const componentConfig = itemType === "root" ? config.root : (_a = config.components) == null ? void 0 : _a[itemType];
616
651
  const newProps = walkObject({
617
- value: defaultSlots((_b = item.props) != null ? _b : {}, (_c = componentConfig == null ? void 0 : componentConfig.fields) != null ? _c : {}),
652
+ value: shouldDefaultSlots ? defaultSlots((_b = item.props) != null ? _b : {}, (_c = componentConfig == null ? void 0 : componentConfig.fields) != null ? _c : {}) : item.props,
618
653
  fields: (_d = componentConfig == null ? void 0 : componentConfig.fields) != null ? _d : {},
619
654
  mappers,
620
655
  id: item.props ? (_e = item.props.id) != null ? _e : "root" : "root",
@@ -644,9 +679,28 @@ var stripSlots = (data, config) => {
644
679
 
645
680
  // ../core/lib/data/flatten-node.ts
646
681
  var { flatten: flatten2, unflatten } = import_flat.default;
682
+ function isEmptyArrayOrObject(val) {
683
+ if (Array.isArray(val)) {
684
+ return val.length === 0;
685
+ }
686
+ if (val != null && Object.prototype.toString.call(val) === "[object Object]") {
687
+ return Object.keys(val).length === 0;
688
+ }
689
+ return false;
690
+ }
691
+ function stripEmptyObjects(props) {
692
+ const result = {};
693
+ for (const key in props) {
694
+ if (!Object.prototype.hasOwnProperty.call(props, key)) continue;
695
+ const val = props[key];
696
+ if (isEmptyArrayOrObject(val)) continue;
697
+ result[key] = val;
698
+ }
699
+ return result;
700
+ }
647
701
  var flattenNode = (node, config) => {
648
702
  return __spreadProps(__spreadValues({}, node), {
649
- props: flatten2(stripSlots(node, config).props)
703
+ props: stripEmptyObjects(flatten2(stripSlots(node, config).props))
650
704
  });
651
705
  };
652
706
 
@@ -806,10 +860,10 @@ var insert = (list, index, item) => {
806
860
  // ../core/lib/generate-id.ts
807
861
  init_react_import();
808
862
 
809
- // ../../node_modules/uuid/dist/esm-node/index.js
863
+ // ../core/node_modules/uuid/dist/esm-node/index.js
810
864
  init_react_import();
811
865
 
812
- // ../../node_modules/uuid/dist/esm-node/rng.js
866
+ // ../core/node_modules/uuid/dist/esm-node/rng.js
813
867
  init_react_import();
814
868
  import crypto from "crypto";
815
869
  var rnds8Pool = new Uint8Array(256);
@@ -822,7 +876,7 @@ function rng() {
822
876
  return rnds8Pool.slice(poolPtr, poolPtr += 16);
823
877
  }
824
878
 
825
- // ../../node_modules/uuid/dist/esm-node/stringify.js
879
+ // ../core/node_modules/uuid/dist/esm-node/stringify.js
826
880
  init_react_import();
827
881
  var byteToHex = [];
828
882
  for (let i = 0; i < 256; ++i) {
@@ -832,17 +886,17 @@ function unsafeStringify(arr, offset = 0) {
832
886
  return byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + "-" + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + "-" + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + "-" + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + "-" + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]];
833
887
  }
834
888
 
835
- // ../../node_modules/uuid/dist/esm-node/v4.js
889
+ // ../core/node_modules/uuid/dist/esm-node/v4.js
836
890
  init_react_import();
837
891
 
838
- // ../../node_modules/uuid/dist/esm-node/native.js
892
+ // ../core/node_modules/uuid/dist/esm-node/native.js
839
893
  init_react_import();
840
894
  import crypto2 from "crypto";
841
895
  var native_default = {
842
896
  randomUUID: crypto2.randomUUID
843
897
  };
844
898
 
845
- // ../../node_modules/uuid/dist/esm-node/v4.js
899
+ // ../core/node_modules/uuid/dist/esm-node/v4.js
846
900
  function v4(options, buf, offset) {
847
901
  if (native_default.randomUUID && !buf && !options) {
848
902
  return native_default.randomUUID();
@@ -994,7 +1048,9 @@ var replaceAction = (state, action, appStore) => {
994
1048
  });
995
1049
  });
996
1050
  });
997
- const stateWithDeepSlotsRemoved = __spreadValues({}, state);
1051
+ const stateWithDeepSlotsRemoved = __spreadProps(__spreadValues({}, state), {
1052
+ ui: __spreadValues(__spreadValues({}, state.ui), action.ui)
1053
+ });
998
1054
  Object.keys(state.indexes.zones).forEach((zoneCompound) => {
999
1055
  const id = zoneCompound.split(":")[0];
1000
1056
  if (id === originalId) {
@@ -1396,7 +1452,8 @@ init_react_import();
1396
1452
  var defaultViewports = [
1397
1453
  { width: 360, height: "auto", icon: "Smartphone", label: "Small" },
1398
1454
  { width: 768, height: "auto", icon: "Tablet", label: "Medium" },
1399
- { width: 1280, height: "auto", icon: "Monitor", label: "Large" }
1455
+ { width: 1280, height: "auto", icon: "Monitor", label: "Large" },
1456
+ { width: "100%", height: "auto", icon: "FullWidth", label: "Full-width" }
1400
1457
  ];
1401
1458
 
1402
1459
  // ../../node_modules/zustand/esm/vanilla.mjs
@@ -1422,7 +1479,7 @@ var createStoreImpl = (createState) => {
1422
1479
  const initialState = state = createState(setState, getState, api);
1423
1480
  return api;
1424
1481
  };
1425
- var createStore = (createState) => createState ? createStoreImpl(createState) : createStoreImpl;
1482
+ var createStore = ((createState) => createState ? createStoreImpl(createState) : createStoreImpl);
1426
1483
 
1427
1484
  // ../../node_modules/zustand/esm/react.mjs
1428
1485
  init_react_import();
@@ -1431,8 +1488,8 @@ var identity = (arg) => arg;
1431
1488
  function useStore(api, selector = identity) {
1432
1489
  const slice = React2.useSyncExternalStore(
1433
1490
  api.subscribe,
1434
- () => selector(api.getState()),
1435
- () => selector(api.getInitialState())
1491
+ React2.useCallback(() => selector(api.getState()), [api, selector]),
1492
+ React2.useCallback(() => selector(api.getInitialState()), [api, selector])
1436
1493
  );
1437
1494
  React2.useDebugValue(slice);
1438
1495
  return slice;
@@ -1443,13 +1500,13 @@ var createImpl = (createState) => {
1443
1500
  Object.assign(useBoundStore, api);
1444
1501
  return useBoundStore;
1445
1502
  };
1446
- var create = (createState) => createState ? createImpl(createState) : createImpl;
1503
+ var create = ((createState) => createState ? createImpl(createState) : createImpl);
1447
1504
 
1448
1505
  // ../../node_modules/zustand/esm/middleware.mjs
1449
1506
  init_react_import();
1450
1507
  var subscribeWithSelectorImpl = (fn) => (set, get, api) => {
1451
1508
  const origSubscribe = api.subscribe;
1452
- api.subscribe = (selector, optListener, options) => {
1509
+ api.subscribe = ((selector, optListener, options) => {
1453
1510
  let listener = selector;
1454
1511
  if (optListener) {
1455
1512
  const equalityFn = (options == null ? void 0 : options.equalityFn) || Object.is;
@@ -1466,7 +1523,7 @@ var subscribeWithSelectorImpl = (fn) => (set, get, api) => {
1466
1523
  }
1467
1524
  }
1468
1525
  return origSubscribe(listener);
1469
- };
1526
+ });
1470
1527
  const initialState = fn(set, get, api);
1471
1528
  return initialState;
1472
1529
  };
@@ -1506,9 +1563,9 @@ function debounce(func, timeout = 300) {
1506
1563
  var tidyState = (state) => {
1507
1564
  return __spreadProps(__spreadValues({}, state), {
1508
1565
  ui: __spreadProps(__spreadValues({}, state.ui), {
1509
- field: {
1566
+ field: __spreadProps(__spreadValues({}, state.ui.field), {
1510
1567
  focus: null
1511
- }
1568
+ })
1512
1569
  })
1513
1570
  });
1514
1571
  };
@@ -1683,9 +1740,9 @@ function createIsCircular(areItemsEqual) {
1683
1740
  function getStrictProperties(object) {
1684
1741
  return getOwnPropertyNames(object).concat(getOwnPropertySymbols(object));
1685
1742
  }
1686
- var hasOwn = Object.hasOwn || function(object, property) {
1743
+ var hasOwn = Object.hasOwn || (function(object, property) {
1687
1744
  return hasOwnProperty.call(object, property);
1688
- };
1745
+ });
1689
1746
  function sameValueZeroEqual(a, b) {
1690
1747
  return a === b || !a && !b && a !== a && b !== b;
1691
1748
  }
@@ -2075,29 +2132,37 @@ var getChanged = (newItem, oldItem) => {
2075
2132
 
2076
2133
  // ../core/store/slices/permissions.ts
2077
2134
  var createPermissionsSlice = (set, get) => {
2078
- const resolvePermissions = (..._0) => __async(void 0, [..._0], function* (params = {}, force) {
2135
+ const resolvePermissions = (..._0) => __async(null, [..._0], function* (params = {}, force) {
2079
2136
  const { state, permissions, config } = get();
2080
2137
  const { cache: cache2, globalPermissions } = permissions;
2081
- const resolveDataForItem = (item2, force2 = false) => __async(void 0, null, function* () {
2082
- var _a, _b, _c;
2138
+ const resolvePermissionsForItem = (item2, force2 = false) => __async(null, null, function* () {
2139
+ var _a, _b;
2083
2140
  const { config: config2, state: appState, setComponentLoading } = get();
2141
+ const itemCache = cache2[item2.props.id];
2142
+ const nodes = appState.indexes.nodes;
2143
+ const parentId = (_a = nodes[item2.props.id]) == null ? void 0 : _a.parentId;
2144
+ const parentNode = parentId ? nodes[parentId] : null;
2145
+ const parentData = (_b = parentNode == null ? void 0 : parentNode.data) != null ? _b : null;
2084
2146
  const componentConfig = item2.type === "root" ? config2.root : config2.components[item2.type];
2085
2147
  if (!componentConfig) {
2086
2148
  return;
2087
2149
  }
2088
2150
  const initialPermissions = __spreadValues(__spreadValues({}, globalPermissions), componentConfig.permissions);
2089
2151
  if (componentConfig.resolvePermissions) {
2090
- const changed = getChanged(item2, (_a = cache2[item2.props.id]) == null ? void 0 : _a.lastData);
2091
- if (Object.values(changed).some((el) => el === true) || force2) {
2152
+ const changed = getChanged(item2, itemCache == null ? void 0 : itemCache.lastData);
2153
+ const propsChanged = Object.values(changed).some((el) => el === true);
2154
+ const parentChanged = (itemCache == null ? void 0 : itemCache.lastParentId) !== parentId;
2155
+ if (propsChanged || parentChanged || force2) {
2092
2156
  const clearTimeout2 = setComponentLoading(item2.props.id, true, 50);
2093
2157
  const resolvedPermissions = yield componentConfig.resolvePermissions(
2094
2158
  item2,
2095
2159
  {
2096
2160
  changed,
2097
- lastPermissions: ((_b = cache2[item2.props.id]) == null ? void 0 : _b.lastPermissions) || null,
2161
+ lastPermissions: (itemCache == null ? void 0 : itemCache.lastPermissions) || null,
2098
2162
  permissions: initialPermissions,
2099
2163
  appState: makeStatePublic(appState),
2100
- lastData: ((_c = cache2[item2.props.id]) == null ? void 0 : _c.lastData) || null
2164
+ lastData: (itemCache == null ? void 0 : itemCache.lastData) || null,
2165
+ parent: parentData
2101
2166
  }
2102
2167
  );
2103
2168
  const latest = get().permissions;
@@ -2105,6 +2170,7 @@ var createPermissionsSlice = (set, get) => {
2105
2170
  permissions: __spreadProps(__spreadValues({}, latest), {
2106
2171
  cache: __spreadProps(__spreadValues({}, latest.cache), {
2107
2172
  [item2.props.id]: {
2173
+ lastParentId: parentId,
2108
2174
  lastData: item2,
2109
2175
  lastPermissions: resolvedPermissions
2110
2176
  }
@@ -2118,9 +2184,9 @@ var createPermissionsSlice = (set, get) => {
2118
2184
  }
2119
2185
  }
2120
2186
  });
2121
- const resolveDataForRoot = (force2 = false) => {
2187
+ const resolvePermissionsForRoot = (force2 = false) => {
2122
2188
  const { state: appState } = get();
2123
- resolveDataForItem(
2189
+ resolvePermissionsForItem(
2124
2190
  // Shim the root data in by conforming to component data shape
2125
2191
  {
2126
2192
  type: "root",
@@ -2131,16 +2197,16 @@ var createPermissionsSlice = (set, get) => {
2131
2197
  };
2132
2198
  const { item, type, root } = params;
2133
2199
  if (item) {
2134
- yield resolveDataForItem(item, force);
2200
+ yield resolvePermissionsForItem(item, force);
2135
2201
  } else if (type) {
2136
- flattenData(state, config).filter((item2) => item2.type === type).map((item2) => __async(void 0, null, function* () {
2137
- yield resolveDataForItem(item2, force);
2202
+ flattenData(state, config).filter((item2) => item2.type === type).map((item2) => __async(null, null, function* () {
2203
+ yield resolvePermissionsForItem(item2, force);
2138
2204
  }));
2139
2205
  } else if (root) {
2140
- resolveDataForRoot(force);
2206
+ resolvePermissionsForRoot(force);
2141
2207
  } else {
2142
- flattenData(state, config).map((item2) => __async(void 0, null, function* () {
2143
- yield resolveDataForItem(item2, force);
2208
+ flattenData(state, config).map((item2) => __async(null, null, function* () {
2209
+ yield resolvePermissionsForItem(item2, force);
2144
2210
  }));
2145
2211
  }
2146
2212
  });
@@ -2194,7 +2260,7 @@ var createFieldsSlice = (_set, _get) => {
2194
2260
  // ../core/lib/resolve-component-data.ts
2195
2261
  init_react_import();
2196
2262
  var cache = { lastChange: {} };
2197
- var resolveComponentData = (_0, _1, ..._2) => __async(void 0, [_0, _1, ..._2], function* (item, config, metadata = {}, onResolveStart, onResolveEnd, trigger = "replace") {
2263
+ var resolveComponentData = (_0, _1, ..._2) => __async(null, [_0, _1, ..._2], function* (item, config, metadata = {}, onResolveStart, onResolveEnd, trigger = "replace") {
2198
2264
  const configForItem = "type" in item && item.type !== "root" ? config.components[item.type] : config.root;
2199
2265
  const resolvedItem = __spreadValues({}, item);
2200
2266
  const shouldRunResolver = (configForItem == null ? void 0 : configForItem.resolveData) && item.props;
@@ -2222,11 +2288,11 @@ var resolveComponentData = (_0, _1, ..._2) => __async(void 0, [_0, _1, ..._2], f
2222
2288
  let itemWithResolvedChildren = yield mapFields(
2223
2289
  resolvedItem,
2224
2290
  {
2225
- slot: (_02) => __async(void 0, [_02], function* ({ value }) {
2291
+ slot: (_02) => __async(null, [_02], function* ({ value }) {
2226
2292
  const content = value;
2227
2293
  return yield Promise.all(
2228
2294
  content.map(
2229
- (childItem) => __async(void 0, null, function* () {
2295
+ (childItem) => __async(null, null, function* () {
2230
2296
  return (yield resolveComponentData(
2231
2297
  childItem,
2232
2298
  config,
@@ -2292,7 +2358,8 @@ var defaultAppState = {
2292
2358
  options: [],
2293
2359
  controlsVisible: true
2294
2360
  },
2295
- field: { focus: null }
2361
+ field: { focus: null },
2362
+ plugin: { current: null }
2296
2363
  },
2297
2364
  indexes: {
2298
2365
  nodes: {},
@@ -2308,6 +2375,7 @@ var createAppStore = (initialAppStore) => create()(
2308
2375
  subscribeWithSelector((set, get) => {
2309
2376
  var _a, _b;
2310
2377
  return __spreadProps(__spreadValues({
2378
+ instanceId: generateId(),
2311
2379
  state: defaultAppState,
2312
2380
  config: { components: {} },
2313
2381
  componentState: {},
@@ -2328,6 +2396,11 @@ var createAppStore = (initialAppStore) => create()(
2328
2396
  history: createHistorySlice(set, get),
2329
2397
  nodes: createNodesSlice(set, get),
2330
2398
  permissions: createPermissionsSlice(set, get),
2399
+ getCurrentData: () => {
2400
+ var _a2;
2401
+ const s = get();
2402
+ return (_a2 = s.selectedItem) != null ? _a2 : s.state.data.root;
2403
+ },
2331
2404
  getComponentConfig: (type) => {
2332
2405
  var _a2;
2333
2406
  const { config, selectedItem } = get();
@@ -2416,7 +2489,7 @@ var createAppStore = (initialAppStore) => create()(
2416
2489
  const selectedItem = state.ui.itemSelector ? getItem(state.ui.itemSelector, state) : null;
2417
2490
  return __spreadProps(__spreadValues({}, s), { state, selectedItem });
2418
2491
  }),
2419
- resolveComponentData: (componentData, trigger) => __async(void 0, null, function* () {
2492
+ resolveComponentData: (componentData, trigger) => __async(null, null, function* () {
2420
2493
  const { config, metadata, setComponentLoading, permissions } = get();
2421
2494
  const timeouts = {};
2422
2495
  return yield resolveComponentData(
@@ -2427,7 +2500,7 @@ var createAppStore = (initialAppStore) => create()(
2427
2500
  const id = "id" in item.props ? item.props.id : "root";
2428
2501
  timeouts[id] = setComponentLoading(id, true, 50);
2429
2502
  },
2430
- (item) => __async(void 0, null, function* () {
2503
+ (item) => __async(null, null, function* () {
2431
2504
  const id = "id" in item.props ? item.props.id : "root";
2432
2505
  if ("type" in item) {
2433
2506
  yield permissions.refreshPermissions({ item });
@@ -2439,7 +2512,7 @@ var createAppStore = (initialAppStore) => create()(
2439
2512
  trigger
2440
2513
  );
2441
2514
  }),
2442
- resolveAndCommitData: () => __async(void 0, null, function* () {
2515
+ resolveAndCommitData: () => __async(null, null, function* () {
2443
2516
  const { config, state, dispatch, resolveComponentData: resolveComponentData2 } = get();
2444
2517
  walkAppState(
2445
2518
  state,
@@ -2478,203 +2551,14 @@ var createAppStore = (initialAppStore) => create()(
2478
2551
  })
2479
2552
  );
2480
2553
  var appStoreContext = createContext(createAppStore());
2481
- function useAppStore(selector) {
2482
- const context = useContext(appStoreContext);
2483
- return useStore(context, selector);
2484
- }
2485
- function useAppStoreApi() {
2486
- return useContext(appStoreContext);
2487
- }
2488
-
2489
- // ../core/lib/use-breadcrumbs.ts
2490
- var useBreadcrumbs = (renderCount) => {
2491
- const selectedId = useAppStore((s) => {
2492
- var _a;
2493
- return (_a = s.selectedItem) == null ? void 0 : _a.props.id;
2494
- });
2495
- const config = useAppStore((s) => s.config);
2496
- const path = useAppStore((s) => {
2497
- var _a;
2498
- return (_a = s.state.indexes.nodes[selectedId]) == null ? void 0 : _a.path;
2499
- });
2500
- const appStore = useAppStoreApi();
2501
- return useMemo(() => {
2502
- const breadcrumbs = (path == null ? void 0 : path.map((zoneCompound) => {
2503
- var _a, _b, _c;
2504
- const [componentId] = zoneCompound.split(":");
2505
- if (componentId === "root") {
2506
- return {
2507
- label: "Page",
2508
- selector: null
2509
- };
2510
- }
2511
- const node = appStore.getState().state.indexes.nodes[componentId];
2512
- const parentId = node.path[node.path.length - 1];
2513
- const contentIds = ((_a = appStore.getState().state.indexes.zones[parentId]) == null ? void 0 : _a.contentIds) || [];
2514
- const index = contentIds.indexOf(componentId);
2515
- const label = node ? (_c = (_b = config.components[node.data.type]) == null ? void 0 : _b.label) != null ? _c : node.data.type : "Component";
2516
- return {
2517
- label,
2518
- selector: node ? {
2519
- index,
2520
- zone: node.path[node.path.length - 1]
2521
- } : null
2522
- };
2523
- })) || [];
2524
- if (renderCount) {
2525
- return breadcrumbs.slice(breadcrumbs.length - renderCount);
2526
- }
2527
- return breadcrumbs;
2528
- }, [path, renderCount]);
2529
- };
2530
-
2531
- // ../core/components/Loader/index.tsx
2532
- init_react_import();
2533
-
2534
- // ../core/lib/index.ts
2535
- init_react_import();
2536
-
2537
- // ../core/lib/filter.ts
2538
- init_react_import();
2539
-
2540
- // ../core/lib/data/reorder.ts
2541
- init_react_import();
2542
-
2543
- // ../core/lib/data/replace.ts
2544
- init_react_import();
2545
-
2546
- // ../core/lib/use-reset-auto-zoom.ts
2547
- init_react_import();
2548
2554
 
2549
2555
  // ../core/lib/get-zoom-config.ts
2550
2556
  init_react_import();
2551
2557
 
2552
- // css-module:/home/runner/work/puck/puck/packages/core/components/Loader/styles.module.css#css-module
2553
- init_react_import();
2554
- var styles_module_default3 = { "Loader": "_Loader_nacdm_13", "loader-animation": "_loader-animation_nacdm_1" };
2555
-
2556
- // ../core/components/Loader/index.tsx
2557
- import { jsx as jsx2 } from "react/jsx-runtime";
2558
- var getClassName2 = get_class_name_factory_default("Loader", styles_module_default3);
2559
- var Loader = (_a) => {
2560
- var _b = _a, {
2561
- color,
2562
- size = 16
2563
- } = _b, props = __objRest(_b, [
2564
- "color",
2565
- "size"
2566
- ]);
2567
- return /* @__PURE__ */ jsx2(
2568
- "span",
2569
- __spreadValues({
2570
- className: getClassName2(),
2571
- style: {
2572
- width: size,
2573
- height: size,
2574
- color
2575
- },
2576
- "aria-label": "loading"
2577
- }, props)
2578
- );
2579
- };
2580
-
2581
- // ../core/components/SidebarSection/index.tsx
2582
- import { jsx as jsx3, jsxs } from "react/jsx-runtime";
2583
- var getClassName3 = get_class_name_factory_default("SidebarSection", styles_module_default);
2584
- var SidebarSection = ({
2585
- children,
2586
- title,
2587
- background,
2588
- showBreadcrumbs,
2589
- noBorderTop,
2590
- noPadding,
2591
- isLoading
2592
- }) => {
2593
- const setUi = useAppStore((s) => s.setUi);
2594
- const breadcrumbs = useBreadcrumbs(1);
2595
- return /* @__PURE__ */ jsxs(
2596
- "div",
2597
- {
2598
- className: getClassName3({ noBorderTop, noPadding }),
2599
- style: { background },
2600
- children: [
2601
- /* @__PURE__ */ jsx3("div", { className: getClassName3("title"), children: /* @__PURE__ */ jsxs("div", { className: getClassName3("breadcrumbs"), children: [
2602
- showBreadcrumbs ? breadcrumbs.map((breadcrumb, i) => /* @__PURE__ */ jsxs("div", { className: getClassName3("breadcrumb"), children: [
2603
- /* @__PURE__ */ jsx3(
2604
- "button",
2605
- {
2606
- type: "button",
2607
- className: getClassName3("breadcrumbLabel"),
2608
- onClick: () => setUi({ itemSelector: breadcrumb.selector }),
2609
- children: breadcrumb.label
2610
- }
2611
- ),
2612
- /* @__PURE__ */ jsx3(ChevronRight, { size: 16 })
2613
- ] }, i)) : null,
2614
- /* @__PURE__ */ jsx3("div", { className: getClassName3("heading"), children: /* @__PURE__ */ jsx3(Heading, { rank: "2", size: "xs", children: title }) })
2615
- ] }) }),
2616
- /* @__PURE__ */ jsx3("div", { className: getClassName3("content"), children }),
2617
- isLoading && /* @__PURE__ */ jsx3("div", { className: getClassName3("loadingOverlay"), children: /* @__PURE__ */ jsx3(Loader, { size: 32 }) })
2618
- ]
2619
- }
2620
- );
2621
- };
2622
-
2623
- // ../core/components/OutlineList/index.tsx
2624
- init_react_import();
2625
-
2626
- // css-module:/home/runner/work/puck/puck/packages/core/components/OutlineList/styles.module.css#css-module
2627
- init_react_import();
2628
- var styles_module_default4 = { "OutlineList": "_OutlineList_w4lzv_1", "OutlineListItem": "_OutlineListItem_w4lzv_25", "OutlineListItem--clickable": "_OutlineListItem--clickable_w4lzv_45" };
2629
-
2630
- // ../core/components/OutlineList/index.tsx
2631
- import { jsx as jsx4 } from "react/jsx-runtime";
2632
- var getClassName4 = get_class_name_factory_default("OutlineList", styles_module_default4);
2633
- var getClassNameItem = get_class_name_factory_default("OutlineListItem", styles_module_default4);
2634
- var OutlineList = ({ children }) => {
2635
- return /* @__PURE__ */ jsx4("ul", { className: getClassName4(), children });
2636
- };
2637
- OutlineList.Clickable = ({ children }) => /* @__PURE__ */ jsx4("div", { className: getClassNameItem({ clickable: true }), children });
2638
- OutlineList.Item = ({
2639
- children,
2640
- onClick
2641
- }) => {
2642
- return /* @__PURE__ */ jsx4(
2643
- "li",
2644
- {
2645
- className: getClassNameItem({ clickable: !!onClick }),
2646
- onClick,
2647
- children
2648
- }
2649
- );
2650
- };
2651
-
2652
- // ../core/lib/scroll-into-view.ts
2653
- init_react_import();
2654
- var scrollIntoView = (el) => {
2655
- const oldStyle = __spreadValues({}, el.style);
2656
- el.style.scrollMargin = "256px";
2657
- if (el) {
2658
- el == null ? void 0 : el.scrollIntoView({ behavior: "smooth" });
2659
- el.style.scrollMargin = oldStyle.scrollMargin || "";
2660
- }
2661
- };
2662
-
2663
- // ../core/lib/get-frame.ts
2664
- init_react_import();
2665
- var getFrame = () => {
2666
- if (typeof window === "undefined") return;
2667
- let frameEl = document.querySelector("#preview-frame");
2668
- if ((frameEl == null ? void 0 : frameEl.tagName) === "IFRAME") {
2669
- return frameEl.contentDocument || document;
2670
- }
2671
- return (frameEl == null ? void 0 : frameEl.ownerDocument) || document;
2672
- };
2673
-
2674
2558
  // src/HeadingAnalyzer.tsx
2675
2559
  import ReactFromJSONModule from "react-from-json";
2676
- import { Fragment, jsx as jsx5, jsxs as jsxs2 } from "react/jsx-runtime";
2677
- var getClassName5 = get_class_name_factory_default("HeadingAnalyzer", HeadingAnalyzer_module_default);
2560
+ import { Fragment, jsx as jsx2, jsxs } from "react/jsx-runtime";
2561
+ var getClassName2 = get_class_name_factory_default("HeadingAnalyzer", HeadingAnalyzer_module_default);
2678
2562
  var getClassNameItem2 = get_class_name_factory_default("HeadingAnalyzerItem", HeadingAnalyzer_module_default);
2679
2563
  var ReactFromJSON = ReactFromJSONModule.default || ReactFromJSONModule;
2680
2564
  var getOutline = ({ frame } = {}) => {
@@ -2765,11 +2649,11 @@ var HeadingAnalyzer = () => {
2765
2649
  frameObserver.disconnect();
2766
2650
  };
2767
2651
  }, [data]);
2768
- return /* @__PURE__ */ jsxs2("div", { className: getClassName5(), children: [
2769
- /* @__PURE__ */ jsxs2(
2652
+ return /* @__PURE__ */ jsxs("div", { className: getClassName2(), children: [
2653
+ /* @__PURE__ */ jsxs(
2770
2654
  "small",
2771
2655
  {
2772
- className: getClassName5("cssWarning"),
2656
+ className: getClassName2("cssWarning"),
2773
2657
  style: {
2774
2658
  color: "var(--puck-color-red-04)",
2775
2659
  display: "block",
@@ -2778,19 +2662,19 @@ var HeadingAnalyzer = () => {
2778
2662
  children: [
2779
2663
  "Heading analyzer styles not loaded. Please review the",
2780
2664
  " ",
2781
- /* @__PURE__ */ jsx5("a", { href: "https://github.com/measuredco/puck/blob/main/packages/plugin-heading-analyzer/README.md", children: "README" }),
2665
+ /* @__PURE__ */ jsx2("a", { href: "https://github.com/measuredco/puck/blob/main/packages/plugin-heading-analyzer/README.md", children: "README" }),
2782
2666
  "."
2783
2667
  ]
2784
2668
  }
2785
2669
  ),
2786
- hierarchy.length === 0 && /* @__PURE__ */ jsx5("div", { children: "No headings." }),
2787
- /* @__PURE__ */ jsx5(OutlineList, { children: /* @__PURE__ */ jsx5(
2670
+ hierarchy.length === 0 && /* @__PURE__ */ jsx2("div", { children: "No headings." }),
2671
+ /* @__PURE__ */ jsx2(OutlineList, { children: /* @__PURE__ */ jsx2(
2788
2672
  ReactFromJSON,
2789
2673
  {
2790
2674
  mapping: {
2791
- Root: (props) => /* @__PURE__ */ jsx5(Fragment, { children: props.children }),
2792
- OutlineListItem: (props) => /* @__PURE__ */ jsxs2(OutlineList.Item, { children: [
2793
- /* @__PURE__ */ jsx5(OutlineList.Clickable, { children: /* @__PURE__ */ jsx5(
2675
+ Root: (props) => /* @__PURE__ */ jsx2(Fragment, { children: props.children }),
2676
+ OutlineListItem: (props) => /* @__PURE__ */ jsxs(OutlineList.Item, { children: [
2677
+ /* @__PURE__ */ jsx2(OutlineList.Clickable, { children: /* @__PURE__ */ jsx2(
2794
2678
  "small",
2795
2679
  {
2796
2680
  className: getClassNameItem2({ missing: props.missing }),
@@ -2808,14 +2692,14 @@ var HeadingAnalyzer = () => {
2808
2692
  }, 2e3);
2809
2693
  }
2810
2694
  },
2811
- children: props.missing ? /* @__PURE__ */ jsxs2(Fragment, { children: [
2812
- /* @__PURE__ */ jsxs2("b", { children: [
2695
+ children: props.missing ? /* @__PURE__ */ jsxs(Fragment, { children: [
2696
+ /* @__PURE__ */ jsxs("b", { children: [
2813
2697
  "H",
2814
2698
  props.rank
2815
2699
  ] }),
2816
2700
  ": Missing"
2817
- ] }) : /* @__PURE__ */ jsxs2(Fragment, { children: [
2818
- /* @__PURE__ */ jsxs2("b", { children: [
2701
+ ] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
2702
+ /* @__PURE__ */ jsxs("b", { children: [
2819
2703
  "H",
2820
2704
  props.rank
2821
2705
  ] }),
@@ -2824,7 +2708,7 @@ var HeadingAnalyzer = () => {
2824
2708
  ] })
2825
2709
  }
2826
2710
  ) }),
2827
- /* @__PURE__ */ jsx5(OutlineList, { children: props.children })
2711
+ /* @__PURE__ */ jsx2(OutlineList, { children: props.children })
2828
2712
  ] })
2829
2713
  },
2830
2714
  entry: {
@@ -2845,12 +2729,10 @@ var HeadingAnalyzer = () => {
2845
2729
  ] });
2846
2730
  };
2847
2731
  var headingAnalyzer = {
2848
- overrides: {
2849
- fields: ({ children, itemSelector }) => /* @__PURE__ */ jsxs2(Fragment, { children: [
2850
- children,
2851
- /* @__PURE__ */ jsx5("div", { style: { display: itemSelector ? "none" : "block" }, children: /* @__PURE__ */ jsx5(SidebarSection, { title: "Heading Outline", children: /* @__PURE__ */ jsx5(HeadingAnalyzer, {}) }) })
2852
- ] })
2853
- }
2732
+ name: "heading-analyzer",
2733
+ label: "Audit",
2734
+ render: HeadingAnalyzer,
2735
+ icon: /* @__PURE__ */ jsx2(Heading1, {})
2854
2736
  };
2855
2737
  var HeadingAnalyzer_default = headingAnalyzer;
2856
2738
  export {
@@ -2866,45 +2748,10 @@ classnames/index.js:
2866
2748
  *)
2867
2749
 
2868
2750
  lucide-react/dist/esm/shared/src/utils.js:
2869
- (**
2870
- * @license lucide-react v0.468.0 - ISC
2871
- *
2872
- * This source code is licensed under the ISC license.
2873
- * See the LICENSE file in the root directory of this source tree.
2874
- *)
2875
-
2876
2751
  lucide-react/dist/esm/defaultAttributes.js:
2877
- (**
2878
- * @license lucide-react v0.468.0 - ISC
2879
- *
2880
- * This source code is licensed under the ISC license.
2881
- * See the LICENSE file in the root directory of this source tree.
2882
- *)
2883
-
2884
2752
  lucide-react/dist/esm/Icon.js:
2885
- (**
2886
- * @license lucide-react v0.468.0 - ISC
2887
- *
2888
- * This source code is licensed under the ISC license.
2889
- * See the LICENSE file in the root directory of this source tree.
2890
- *)
2891
-
2892
2753
  lucide-react/dist/esm/createLucideIcon.js:
2893
- (**
2894
- * @license lucide-react v0.468.0 - ISC
2895
- *
2896
- * This source code is licensed under the ISC license.
2897
- * See the LICENSE file in the root directory of this source tree.
2898
- *)
2899
-
2900
- lucide-react/dist/esm/icons/chevron-right.js:
2901
- (**
2902
- * @license lucide-react v0.468.0 - ISC
2903
- *
2904
- * This source code is licensed under the ISC license.
2905
- * See the LICENSE file in the root directory of this source tree.
2906
- *)
2907
-
2754
+ lucide-react/dist/esm/icons/heading-1.js:
2908
2755
  lucide-react/dist/esm/lucide-react.js:
2909
2756
  (**
2910
2757
  * @license lucide-react v0.468.0 - ISC