@netlisian/softconfig 0.1.0 → 0.1.1

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.
@@ -358,13 +358,27 @@ var updateVersion = (version, increment) => {
358
358
  };
359
359
  var builderRootConfig = (config, overrides, editingComponent, showVersionFields = true) => ({
360
360
  fields: {
361
- // _editor: {
362
- // type: "slot",
363
- // },
364
- _name: {
361
+ _name: overrides.name || {
365
362
  type: "text",
366
363
  label: "Soft Component Name"
367
364
  },
365
+ _category: overrides.categories || {
366
+ type: "select",
367
+ label: "Category",
368
+ options: [
369
+ ...Object.keys(config.categories || {}).map((cat) => {
370
+ var _a;
371
+ return {
372
+ label: ((_a = config.categories) == null ? void 0 : _a[cat].title) || cat,
373
+ value: cat
374
+ };
375
+ }) || [],
376
+ {
377
+ label: Object.keys(config.categories || {}).length ? "Other" : "Uncategorized",
378
+ value: void 0
379
+ }
380
+ ]
381
+ },
368
382
  _fields: {
369
383
  type: "array",
370
384
  label: "Fields",
@@ -434,7 +448,9 @@ var builderRootConfig = (config, overrides, editingComponent, showVersionFields
434
448
  }
435
449
  return fields;
436
450
  },
437
- resolveData: (props) => {
451
+ resolveData: (props, params) => {
452
+ if (overrides.onRootsDataChange)
453
+ overrides.onRootsDataChange(props, params);
438
454
  return {
439
455
  props,
440
456
  readOnly: Boolean(editingComponent) ? {
@@ -605,7 +621,7 @@ var getClassNameFactory = (rootClass, styles, config = { baseClass: "" }) => (op
605
621
  };
606
622
  var get_class_name_factory_default = getClassNameFactory;
607
623
 
608
- // css-module:/media/osamu/3628738E28734BBD/osamuProjects/netlisian/packages/soft-config/src/puck/components/error-boundary/styles.module.css#css-module
624
+ // css-module:/media/manual_mount/osamuProjects/netlisian/packages/soft-config/src/puck/components/error-boundary/styles.module.css#css-module
609
625
  var styles_module_default = { "ErrorBoundary": "_ErrorBoundary_1xl05_5", "ErrorBoundary-title": "_ErrorBoundary-title_1xl05_21", "ErrorBoundary-details": "_ErrorBoundary-details_1xl05_31", "ErrorBoundary-button": "_ErrorBoundary-button_1xl05_39" };
610
626
 
611
627
  // src/puck/components/error-boundary/index.tsx
@@ -814,7 +830,8 @@ var builderConfig = (config, overrides, editingComponent, showVersionFields = tr
814
830
  return acc;
815
831
  },
816
832
  {}
817
- )
833
+ ),
834
+ categories: config.categories || {}
818
835
  });
819
836
 
820
837
  // src/puck/lib/strip-id.ts
@@ -940,7 +957,7 @@ var softFieldsToPuckFields = (fields, fieldSettings) => {
940
957
  {}
941
958
  )) || {};
942
959
  };
943
- var softComponentFromAppState = (appState, configComponents, editedItem) => {
960
+ var softComponentFromAppState = (appState, configComponents, editedItem, metadata) => {
944
961
  var _a;
945
962
  const rootProps = ((_a = appState.data.root) == null ? void 0 : _a.props) || {};
946
963
  const fields = rootProps._fields || [];
@@ -961,6 +978,8 @@ var softComponentFromAppState = (appState, configComponents, editedItem) => {
961
978
  )), slots);
962
979
  return [
963
980
  {
981
+ name: metadata.name,
982
+ category: metadata.category,
964
983
  fields: __spreadValues(__spreadValues({}, softFieldsToPuckFields(fields, field_settings)), Object.keys(slots).reduce((acc, slot) => {
965
984
  acc[slot] = { type: "slot", label: slot };
966
985
  return acc;
@@ -1096,7 +1115,7 @@ var reconstructComponents = (subComponents, componentConfigs, softComponentProps
1096
1115
  return componentData;
1097
1116
  });
1098
1117
  };
1099
- var softComponentToAppState = (softComponent, componentName, version, versions, componentProps, componentConfigs) => {
1118
+ var softComponentToAppState = (softComponent, componentName, version, versions, componentProps, componentConfigs, displayName, category) => {
1100
1119
  const slots = new Set(Object.keys(softComponent.slots));
1101
1120
  const { fields, fieldSettings } = puckFieldsToSoftFields(
1102
1121
  softComponent.fields,
@@ -1108,7 +1127,8 @@ var softComponentToAppState = (softComponent, componentName, version, versions,
1108
1127
  }
1109
1128
  });
1110
1129
  const rootProps = {
1111
- _name: componentName,
1130
+ _name: displayName || componentName,
1131
+ _category: category,
1112
1132
  _version: version,
1113
1133
  _versions: versions,
1114
1134
  _fields: fields,
@@ -1257,10 +1277,11 @@ function SoftRender({
1257
1277
 
1258
1278
  // src/puck/lib/create-versioned-component-config.tsx
1259
1279
  var import_jsx_runtime6 = require("react/jsx-runtime");
1260
- var createVersionedComponentConfig = (componentName, version, allVersions, config, softComponents, defaultProps, showVersioning = true) => {
1280
+ var createVersionedComponentConfig = (componentName, displayName, version, allVersions, config, softComponents, defaultProps, showVersioning = true) => {
1261
1281
  var _a, _b;
1262
1282
  const softConfig = config;
1263
1283
  return {
1284
+ label: displayName,
1264
1285
  fields: Object.fromEntries(
1265
1286
  (Object.entries(
1266
1287
  (_b = (_a = softComponents[componentName].versions) == null ? void 0 : _a[version]) == null ? void 0 : _b.fields
@@ -1406,9 +1427,21 @@ function demolishSoftComponent(componentName, data, config, softComponents) {
1406
1427
  };
1407
1428
  }
1408
1429
 
1430
+ // src/puck/lib/component-key.ts
1431
+ var defaultToCamelCase = (value) => {
1432
+ const tokens = value.trim().replace(/[^a-zA-Z0-9\s_-]/g, " ").split(/[\s_-]+/).filter(Boolean);
1433
+ if (tokens.length === 0) return "";
1434
+ const [first, ...rest] = tokens;
1435
+ return `${first.toLowerCase()}${rest.map((token) => token.charAt(0).toUpperCase() + token.slice(1).toLowerCase()).join("")}`;
1436
+ };
1437
+ var createComponentKeyFromName = (displayName, overrides, context) => {
1438
+ const key = overrides.componentNameToKey ? overrides.componentNameToKey(displayName, context) : defaultToCamelCase(displayName);
1439
+ return key.trim();
1440
+ };
1441
+
1409
1442
  // src/puck/store/slices/builder.tsx
1410
1443
  var createBuildersSlice = (set, get, initialConfig) => ({
1411
- build: (history, selectedItem, itemSelector, puckDispatch) => {
1444
+ build: (history, selectedItem, itemSelector, puckDispatch, name) => {
1412
1445
  if (!selectedItem || !itemSelector) {
1413
1446
  throw new Error("No item selected to build from.");
1414
1447
  }
@@ -1421,7 +1454,7 @@ var createBuildersSlice = (set, get, initialConfig) => ({
1421
1454
  data: __spreadProps(__spreadValues({}, previous.data), {
1422
1455
  root: {
1423
1456
  props: {
1424
- _name: "New Soft Component"
1457
+ _name: name || "New Soft Component"
1425
1458
  }
1426
1459
  }
1427
1460
  // content: [{ ...selectedItem }],
@@ -1430,7 +1463,7 @@ var createBuildersSlice = (set, get, initialConfig) => ({
1430
1463
  });
1431
1464
  const config = __spreadValues({}, get().softConfig);
1432
1465
  const overrides = get().overrides;
1433
- const buildConfig = builderConfig(config, overrides, selectedItem.type, get().showVersionFields);
1466
+ const buildConfig = builderConfig(config, overrides, void 0, get().showVersionFields);
1434
1467
  const editableIds = /* @__PURE__ */ new Set([selectedItem.props.id]);
1435
1468
  const initialContent = [__spreadValues({}, selectedItem)];
1436
1469
  (0, import_puck4.walkTree)(
@@ -1463,7 +1496,7 @@ var createBuildersSlice = (set, get, initialConfig) => ({
1463
1496
  type: "replaceRoot",
1464
1497
  root: {
1465
1498
  title: "Soft Component Builder",
1466
- _name: "New Soft Component"
1499
+ _name: name || "New Soft Component"
1467
1500
  }
1468
1501
  }),
1469
1502
  100
@@ -1480,6 +1513,7 @@ var createBuildersSlice = (set, get, initialConfig) => ({
1480
1513
  }
1481
1514
  const softComponentVersion = ((_a = selectedItem.props) == null ? void 0 : _a.version) || "1.0.0";
1482
1515
  const softComponent = (_b = get().softComponents[softComponentName]) == null ? void 0 : _b.versions[softComponentVersion];
1516
+ const softComponentMeta = get().softComponents[softComponentName];
1483
1517
  const versions = Object.keys(
1484
1518
  get().softComponents[softComponentName].versions || {}
1485
1519
  );
@@ -1500,12 +1534,12 @@ var createBuildersSlice = (set, get, initialConfig) => ({
1500
1534
  softComponentVersion,
1501
1535
  versions,
1502
1536
  selectedItem.props,
1503
- get().softConfig.components
1537
+ get().softConfig.components,
1538
+ (softComponentMeta == null ? void 0 : softComponentMeta.name) || softComponentName,
1539
+ softComponentMeta == null ? void 0 : softComponentMeta.category
1504
1540
  );
1505
1541
  const config = __spreadValues({}, get().softConfig);
1506
1542
  const overrides = get().overrides;
1507
- const getStore = () => get();
1508
- const getEditableIds = () => getStore().editableComponentIds;
1509
1543
  const dependents = get().dependencyGraph.get(softComponentName) || /* @__PURE__ */ new Set();
1510
1544
  const buildConfig = builderConfig(config, overrides, softComponentName, get().showVersionFields, dependents);
1511
1545
  const editableIds = /* @__PURE__ */ new Set([]);
@@ -1561,19 +1595,20 @@ var createBuildersSlice = (set, get, initialConfig) => ({
1561
1595
  type: "replaceRoot",
1562
1596
  root: {
1563
1597
  title: root.props.title,
1564
- _name: root.props.name
1598
+ _name: root.props._name,
1599
+ _category: root.props._category
1565
1600
  }
1566
1601
  }),
1567
1602
  100
1568
1603
  );
1569
1604
  },
1570
1605
  complete: (appState, setHistories, getItemBySelector) => {
1571
- var _a, _b;
1606
+ var _a, _b, _c, _d, _e;
1572
1607
  if (get().state === "ready") {
1573
1608
  throw new Error("Not building or remodeling a component.");
1574
1609
  }
1575
- const componentName = (_b = (_a = appState.data.root) == null ? void 0 : _a.props) == null ? void 0 : _b._name;
1576
- if (!componentName) {
1610
+ const displayName = (_c = (_b = (_a = appState.data.root) == null ? void 0 : _a.props) == null ? void 0 : _b._name) == null ? void 0 : _c.trim();
1611
+ if (!displayName) {
1577
1612
  throw new Error("Root component must have a name to compose.");
1578
1613
  }
1579
1614
  const itemSelector = get().itemSelector;
@@ -1586,42 +1621,73 @@ var createBuildersSlice = (set, get, initialConfig) => ({
1586
1621
  if (!selectedItem) {
1587
1622
  throw new Error("Cannot find item being edited");
1588
1623
  }
1589
- const [newSoftComponentConfig, version] = get().builder.compose(appState, componentName, selectedItem) || [];
1624
+ const rootCategory = (_e = (_d = appState.data.root) == null ? void 0 : _d.props) == null ? void 0 : _e._category;
1625
+ const componentName = createComponentKeyFromName(displayName, get().overrides, {
1626
+ existingKeys: Object.keys(get().softComponents),
1627
+ state: get().state
1628
+ });
1629
+ if (!componentName) {
1630
+ throw new Error("Failed to generate component key from name.");
1631
+ }
1632
+ const [newSoftComponentConfig, version] = get().builder.compose(
1633
+ appState,
1634
+ componentName,
1635
+ selectedItem,
1636
+ displayName,
1637
+ rootCategory
1638
+ ) || [];
1590
1639
  if (!newSoftComponentConfig) {
1591
1640
  throw new Error("Failed to compose new soft component config.");
1592
1641
  }
1593
1642
  const storedHistories = get().originalHistory;
1594
1643
  setHistories([...storedHistories]);
1595
1644
  const config = __spreadValues({}, get().softConfig || initialConfig);
1596
- set((s) => __spreadProps(__spreadValues({}, s), {
1597
- softConfig: __spreadProps(__spreadValues({}, config), {
1598
- root: __spreadValues({}, initialConfig.root),
1599
- components: __spreadProps(__spreadValues({}, Object.entries(config.components).reduce(
1600
- (acc, [name, component]) => {
1601
- var _a2;
1602
- let tempComponent = (_a2 = config.components) == null ? void 0 : _a2[name];
1603
- if (tempComponent) {
1604
- acc[name] = tempComponent;
1605
- acc[name].render = tempComponent.render;
1606
- } else {
1607
- tempComponent = __spreadValues({}, component);
1608
- tempComponent == null ? true : delete tempComponent.resolvePermissions;
1609
- tempComponent == null ? true : delete tempComponent.resolveData;
1610
- acc[name] = tempComponent;
1611
- }
1612
- return acc;
1613
- },
1614
- {}
1615
- )), {
1616
- [componentName]: __spreadValues({}, newSoftComponentConfig)
1645
+ set((s) => {
1646
+ var _a2, _b2;
1647
+ const nextComponents = __spreadProps(__spreadValues({}, Object.entries(config.components).reduce(
1648
+ (acc, [name, component]) => {
1649
+ var _a3;
1650
+ let tempComponent = (_a3 = config.components) == null ? void 0 : _a3[name];
1651
+ if (tempComponent) {
1652
+ acc[name] = tempComponent;
1653
+ acc[name].render = tempComponent.render;
1654
+ } else {
1655
+ tempComponent = __spreadValues({}, component);
1656
+ tempComponent == null ? true : delete tempComponent.resolvePermissions;
1657
+ tempComponent == null ? true : delete tempComponent.resolveData;
1658
+ acc[name] = tempComponent;
1659
+ }
1660
+ return acc;
1661
+ },
1662
+ {}
1663
+ )), {
1664
+ [componentName]: __spreadValues({}, newSoftComponentConfig)
1665
+ });
1666
+ const categories = get().softConfig.categories || {};
1667
+ const nextCategories = rootCategory ? __spreadProps(__spreadValues({}, categories), {
1668
+ [rootCategory]: __spreadProps(__spreadValues({}, categories[rootCategory] || {}), {
1669
+ title: ((_a2 = categories[rootCategory]) == null ? void 0 : _a2.title) || rootCategory,
1670
+ components: Array.from(
1671
+ /* @__PURE__ */ new Set([
1672
+ ...((_b2 = categories[rootCategory]) == null ? void 0 : _b2.components) || [],
1673
+ componentName
1674
+ ])
1675
+ )
1617
1676
  })
1618
- }),
1619
- storedConfig: void 0,
1620
- state: "inspecting",
1621
- originalHistory: [],
1622
- editingComponentId: null,
1623
- editableComponentIds: /* @__PURE__ */ new Set()
1624
- }));
1677
+ }) : categories;
1678
+ return __spreadProps(__spreadValues({}, s), {
1679
+ softConfig: __spreadProps(__spreadValues({}, config), {
1680
+ root: __spreadValues({}, initialConfig.root),
1681
+ components: nextComponents,
1682
+ categories: nextCategories
1683
+ }),
1684
+ storedConfig: void 0,
1685
+ state: "inspecting",
1686
+ originalHistory: [],
1687
+ editingComponentId: null,
1688
+ editableComponentIds: /* @__PURE__ */ new Set()
1689
+ });
1690
+ });
1625
1691
  get().rebuildDependents(componentName, version);
1626
1692
  return componentName;
1627
1693
  },
@@ -1668,7 +1734,7 @@ var createBuildersSlice = (set, get, initialConfig) => ({
1668
1734
  editableComponentIds: /* @__PURE__ */ new Set()
1669
1735
  }));
1670
1736
  },
1671
- compose: (appState, componentName, editedItem) => {
1737
+ compose: (appState, componentName, editedItem, displayName, category) => {
1672
1738
  if (!componentName) {
1673
1739
  throw new Error("Root component must have a name to compose.");
1674
1740
  }
@@ -1678,12 +1744,21 @@ var createBuildersSlice = (set, get, initialConfig) => ({
1678
1744
  `Component name "${componentName}" already exists in the configuration.`
1679
1745
  );
1680
1746
  }
1681
- const [softComponent, version] = softComponentFromAppState(appState, componentConfigs, editedItem);
1747
+ const [softComponent, version] = softComponentFromAppState(
1748
+ appState,
1749
+ componentConfigs,
1750
+ editedItem,
1751
+ {
1752
+ name: displayName,
1753
+ category
1754
+ }
1755
+ );
1682
1756
  const existingComponent = get().softComponents[componentName];
1683
1757
  const allVersions = Object.keys((existingComponent == null ? void 0 : existingComponent.versions) || {});
1684
1758
  const isNewVersion = !allVersions.includes(version);
1685
1759
  const newSoftComponentConfig = createVersionedComponentConfig(
1686
1760
  componentName,
1761
+ displayName,
1687
1762
  version,
1688
1763
  isNewVersion ? [...allVersions, version] : allVersions,
1689
1764
  get().softConfig,
@@ -1731,6 +1806,7 @@ var createBuildersSlice = (set, get, initialConfig) => ({
1731
1806
  throw new Error("Can only switch versions during remodeling.");
1732
1807
  }
1733
1808
  const softComponent = (_a = get().softComponents[componentName]) == null ? void 0 : _a.versions[newVersion];
1809
+ const softComponentMeta = get().softComponents[componentName];
1734
1810
  if (!softComponent) {
1735
1811
  throw new Error(
1736
1812
  `Soft component "${componentName}" with version "${newVersion}" not found.`
@@ -1745,7 +1821,9 @@ var createBuildersSlice = (set, get, initialConfig) => ({
1745
1821
  newVersion,
1746
1822
  versions,
1747
1823
  currentProps,
1748
- get().softConfig.components
1824
+ get().softConfig.components,
1825
+ (softComponentMeta == null ? void 0 : softComponentMeta.name) || componentName,
1826
+ softComponentMeta == null ? void 0 : softComponentMeta.category
1749
1827
  );
1750
1828
  puckDispatch({
1751
1829
  type: "setData",
@@ -1797,10 +1875,11 @@ function hydrateSoftComponentsTransforms(softComponents, hydrator) {
1797
1875
  })
1798
1876
  });
1799
1877
  });
1800
- hydrated[name] = {
1878
+ hydrated[name] = __spreadProps(__spreadValues({}, comp), {
1879
+ name: comp.name || name,
1801
1880
  defaultVersion: comp.defaultVersion,
1802
1881
  versions
1803
- };
1882
+ });
1804
1883
  });
1805
1884
  return hydrated;
1806
1885
  }
@@ -1920,6 +1999,7 @@ function buildInitialSoftComponents(hardConfig, softComponents, overrides, showV
1920
1999
  }
1921
2000
  const newSoftComponentConfig = createVersionedComponentConfig(
1922
2001
  name,
2002
+ comp.name || name,
1923
2003
  defaultVersion || "1.0.0",
1924
2004
  allVersions,
1925
2005
  buildingConfig,
@@ -1948,6 +2028,7 @@ function buildInitialSoftComponents(hardConfig, softComponents, overrides, showV
1948
2028
  }
1949
2029
  const newSoftComponentConfig = createVersionedComponentConfig(
1950
2030
  name,
2031
+ comp.name || name,
1951
2032
  defaultVersion || "1.0.0",
1952
2033
  allVersions,
1953
2034
  hardConfig,
@@ -2020,11 +2101,19 @@ var clearEditVisibility = (doc) => {
2020
2101
  var createSoftConfigStore = (hardConfig = {
2021
2102
  components: {}
2022
2103
  }, softComponents = {}, overrides = {}, onActions, showVersionFields = true) => {
2104
+ const normalizedSoftComponents = Object.fromEntries(
2105
+ Object.entries(softComponents || {}).map(([key, value]) => [
2106
+ key,
2107
+ __spreadProps(__spreadValues({}, value), {
2108
+ name: value.name || key
2109
+ })
2110
+ ])
2111
+ );
2023
2112
  const iframeDocRef = { current: null };
2024
2113
  const hydratedSoftComponents = (overrides == null ? void 0 : overrides.hydrateMapTransform) ? hydrateSoftComponentsTransforms(
2025
- softComponents,
2114
+ normalizedSoftComponents,
2026
2115
  overrides.hydrateMapTransform
2027
- ) : softComponents;
2116
+ ) : normalizedSoftComponents;
2028
2117
  const initialDependencyGraph = buildReverseDependencyGraph(
2029
2118
  hydratedSoftComponents
2030
2119
  );
@@ -2075,19 +2164,23 @@ var createSoftConfigStore = (hardConfig = {
2075
2164
  hardConfig,
2076
2165
  hydratedSoftComponents,
2077
2166
  overrides
2078
- ))
2167
+ )),
2168
+ categories: __spreadValues({}, hardConfig.categories || {})
2079
2169
  }),
2080
2170
  setSoftComponent: (name, version, component) => {
2171
+ const existing = get().softComponents[name];
2081
2172
  set((state) => {
2082
- var _a;
2173
+ var _a, _b;
2083
2174
  return {
2084
2175
  softComponents: __spreadProps(__spreadValues({}, state.softComponents), {
2085
- [name]: {
2176
+ [name]: __spreadProps(__spreadValues({}, existing), {
2177
+ name: component.name || (existing == null ? void 0 : existing.name) || name,
2178
+ category: (_a = component.category) != null ? _a : existing == null ? void 0 : existing.category,
2086
2179
  defaultVersion: version,
2087
- versions: __spreadProps(__spreadValues({}, ((_a = state.softComponents[name]) == null ? void 0 : _a.versions) || {}), {
2180
+ versions: __spreadProps(__spreadValues({}, ((_b = state.softComponents[name]) == null ? void 0 : _b.versions) || {}), {
2088
2181
  [version]: component
2089
2182
  })
2090
- }
2183
+ })
2091
2184
  })
2092
2185
  };
2093
2186
  });
@@ -2099,14 +2192,17 @@ var createSoftConfigStore = (hardConfig = {
2099
2192
  Object.entries(incomingComponents).forEach(([name, data]) => {
2100
2193
  const existing = nextSoftComponents[name];
2101
2194
  const finalComponentData = existing ? __spreadProps(__spreadValues(__spreadValues({}, existing), data), {
2195
+ name: data.name || existing.name || name,
2102
2196
  versions: __spreadValues(__spreadValues({}, existing.versions), data.versions)
2103
2197
  }) : data;
2198
+ finalComponentData.name = finalComponentData.name || name;
2104
2199
  nextSoftComponents[name] = finalComponentData;
2105
2200
  const activeVersion = finalComponentData.defaultVersion;
2106
2201
  const activeVersionData = finalComponentData.versions[activeVersion];
2107
2202
  if (activeVersionData) {
2108
2203
  nextConfigComponents[name] = createVersionedComponentConfig(
2109
2204
  name,
2205
+ finalComponentData.name || name,
2110
2206
  activeVersion,
2111
2207
  Object.keys(finalComponentData.versions),
2112
2208
  state.softConfig,
@@ -2137,6 +2233,7 @@ var createSoftConfigStore = (hardConfig = {
2137
2233
  if (activeVersionData) {
2138
2234
  nextConfigComponents[name] = createVersionedComponentConfig(
2139
2235
  name,
2236
+ componentData.name || name,
2140
2237
  activeVersion,
2141
2238
  Object.keys(componentData.versions),
2142
2239
  softConfig,
@@ -2154,11 +2251,12 @@ var createSoftConfigStore = (hardConfig = {
2154
2251
  });
2155
2252
  },
2156
2253
  setSoftComponentDefaultVersion: (name, version) => {
2157
- var _a, _b, _c;
2254
+ var _a, _b, _c, _d;
2158
2255
  const softComponent = (_b = (_a = get().softComponents[name]) == null ? void 0 : _a.versions) == null ? void 0 : _b[version];
2159
2256
  const allVersions = Object.keys(
2160
2257
  ((_c = get().softComponents[name]) == null ? void 0 : _c.versions) || {}
2161
2258
  );
2259
+ const displayName = ((_d = get().softComponents[name]) == null ? void 0 : _d.name) || name;
2162
2260
  if (!softComponent) {
2163
2261
  throw new Error(
2164
2262
  `Soft component "${name}" version "${version}" does not exist.`
@@ -2166,6 +2264,7 @@ var createSoftConfigStore = (hardConfig = {
2166
2264
  }
2167
2265
  const newSoftComponentConfig = createVersionedComponentConfig(
2168
2266
  name,
2267
+ displayName,
2169
2268
  version,
2170
2269
  allVersions,
2171
2270
  get().softConfig,
@@ -2219,20 +2318,20 @@ var createSoftConfigStore = (hardConfig = {
2219
2318
  },
2220
2319
  setSoftComponentConfig: (key, config, category) => {
2221
2320
  set((state) => {
2222
- var _a;
2321
+ var _a, _b, _c;
2223
2322
  return {
2224
2323
  softConfig: __spreadProps(__spreadValues({}, state.softConfig), {
2225
2324
  components: __spreadProps(__spreadValues({}, state.softConfig.components), {
2226
2325
  [key]: __spreadValues({}, config)
2227
2326
  }),
2228
- categories: category && state.softConfig.categories ? __spreadProps(__spreadValues({}, state.softConfig.categories), {
2229
- [category]: __spreadProps(__spreadValues({}, state.softConfig.categories[category]), {
2327
+ categories: category ? __spreadProps(__spreadValues({}, state.softConfig.categories || {}), {
2328
+ [category]: __spreadProps(__spreadValues({}, ((_a = state.softConfig.categories) == null ? void 0 : _a[category]) || {}), {
2230
2329
  components: [
2231
- ...((_a = state.softConfig.categories[category]) == null ? void 0 : _a.components) || [],
2330
+ ...((_c = (_b = state.softConfig.categories) == null ? void 0 : _b[category]) == null ? void 0 : _c.components) || [],
2232
2331
  key
2233
2332
  ]
2234
2333
  })
2235
- }) : state.softConfig.categories
2334
+ }) : state.softConfig.categories || {}
2236
2335
  })
2237
2336
  };
2238
2337
  });
@@ -2302,6 +2401,7 @@ var createSoftConfigStore = (hardConfig = {
2302
2401
  if (!versionedComponent) continue;
2303
2402
  const newConfig = createVersionedComponentConfig(
2304
2403
  dependentName,
2404
+ dependent.name || dependentName,
2305
2405
  defaultVersion,
2306
2406
  allVersions,
2307
2407
  config,
@@ -2411,7 +2511,12 @@ var SoftConfigProvider = ({
2411
2511
  setEditVisibility(doc, { mode: "remodel", editableIds: state.editableComponentIds });
2412
2512
  return;
2413
2513
  }
2414
- clearEditVisibility(doc);
2514
+ requestAnimationFrame(() => {
2515
+ const freshDoc = store.getState().getIframeDoc();
2516
+ if (freshDoc) {
2517
+ clearEditVisibility(freshDoc);
2518
+ }
2519
+ });
2415
2520
  });
2416
2521
  return () => {
2417
2522
  unsubscribe();
@@ -2809,7 +2914,7 @@ var useSetDefaultVersion = () => {
2809
2914
  // src/puck/overrides/Header.tsx
2810
2915
  var import_puck13 = require("@measured/puck");
2811
2916
 
2812
- // css-module:/media/osamu/3628738E28734BBD/osamuProjects/netlisian/packages/soft-config/src/puck/overrides/Header.module.css#css-module
2917
+ // css-module:/media/manual_mount/osamuProjects/netlisian/packages/soft-config/src/puck/overrides/Header.module.css#css-module
2813
2918
  var Header_module_default = { "Header": "_Header_19oj9_1" };
2814
2919
 
2815
2920
  // src/puck/actions/usePublish.tsx
@@ -2855,9 +2960,10 @@ var Header = ({
2855
2960
  onPublish,
2856
2961
  children
2857
2962
  }) => {
2858
- const { handleComplete, canComplete, newComponent, setNewComponent } = useComplete();
2963
+ const { handleComplete, newComponent, setNewComponent } = useComplete();
2859
2964
  const { handleCancel, canCancel } = useCancel();
2860
2965
  const { handlePublish } = usePublish();
2966
+ const puck = usePuck((s) => s.config);
2861
2967
  useInspect(newComponent);
2862
2968
  return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { className: getClassName2(), children: canCancel ? /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(import_jsx_runtime8.Fragment, { children: [
2863
2969
  /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_puck13.Button, { onClick: handleCancel, children: "Cancel" }),
@@ -2889,10 +2995,11 @@ var Header = ({
2889
2995
  };
2890
2996
 
2891
2997
  // src/puck/overrides/ActionBar.tsx
2998
+ var import_react9 = require("react");
2892
2999
  var import_puck14 = require("@measured/puck");
2893
3000
  var import_lucide_react = require("lucide-react");
2894
3001
 
2895
- // css-module:/media/osamu/3628738E28734BBD/osamuProjects/netlisian/packages/soft-config/src/puck/overrides/ActionBar.module.css#css-module
3002
+ // css-module:/media/manual_mount/osamuProjects/netlisian/packages/soft-config/src/puck/overrides/ActionBar.module.css#css-module
2896
3003
  var ActionBar_module_default = { "ActionBar": "_ActionBar_pvuie_5", "ActionBar-label": "_ActionBar-label_pvuie_39", "ActionBar-action": "_ActionBar-action_pvuie_63", "ActionBar-group": "_ActionBar-group_pvuie_79" };
2897
3004
 
2898
3005
  // src/puck/overrides/ActionBar.tsx
@@ -2905,11 +3012,22 @@ var ActionBarOverride = (props) => {
2905
3012
  const { handleBuild } = useBuild();
2906
3013
  const { handleRemodel } = useRemodel();
2907
3014
  const { handleDecompose } = useDecompose();
3015
+ const overrides = useSoftConfig((s) => s.overrides);
2908
3016
  const softComponents = useSoftConfig((s) => s.softComponents, import_shallow.shallow);
2909
3017
  const editableIds = useSoftConfig((s) => s.editableComponentIds);
2910
3018
  const selectedItem = usePuck2((s) => s.selectedItem);
2911
3019
  const status = useSoftConfig((s) => s.state);
2912
- const isSoftComponent2 = Object.keys(softComponents || {}).includes(props.label);
3020
+ const softKeys = Object.keys(softComponents);
3021
+ const key = (0, import_react9.useMemo)(() => createComponentKeyFromName(props.label || "", overrides, {
3022
+ existingKeys: softKeys,
3023
+ state: status
3024
+ }), [
3025
+ props.label,
3026
+ overrides,
3027
+ softKeys,
3028
+ status
3029
+ ]);
3030
+ const isSoftComponent2 = softKeys.includes(key);
2913
3031
  const selectedId = (_a = selectedItem == null ? void 0 : selectedItem.props) == null ? void 0 : _a.id;
2914
3032
  const isEditable = Boolean(selectedId && editableIds.has(selectedId));
2915
3033
  return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: getClassName3(), children: /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(import_puck14.ActionBar, { children: [
@@ -2922,7 +3040,7 @@ var ActionBarOverride = (props) => {
2922
3040
  /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
2923
3041
  import_puck14.ActionBar.Action,
2924
3042
  {
2925
- onClick: () => handleRemodel(props.label),
3043
+ onClick: () => handleRemodel(key),
2926
3044
  label: "Remodel Soft Component",
2927
3045
  children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_lucide_react.EditIcon, { size: 16 })
2928
3046
  }
@@ -2949,7 +3067,7 @@ var ActionBarOverride = (props) => {
2949
3067
  };
2950
3068
 
2951
3069
  // src/puck/overrides/ComponentItem.tsx
2952
- var import_react10 = require("react");
3070
+ var import_react11 = require("react");
2953
3071
  var import_puck15 = require("@measured/puck");
2954
3072
  var import_lucide_react2 = require("lucide-react");
2955
3073
 
@@ -2970,14 +3088,14 @@ var confirm = (message) => __async(null, null, function* () {
2970
3088
  }
2971
3089
  });
2972
3090
 
2973
- // css-module:/media/osamu/3628738E28734BBD/osamuProjects/netlisian/packages/soft-config/src/puck/overrides/ComponentItem.module.css#css-module
3091
+ // css-module:/media/manual_mount/osamuProjects/netlisian/packages/soft-config/src/puck/overrides/ComponentItem.module.css#css-module
2974
3092
  var ComponentItem_module_default = { "ComponentItem": "_ComponentItem_1kbi2_1", "ComponentItem--insertDisabled": "_ComponentItem--insertDisabled_1kbi2_14", "ComponentItem-content": "_ComponentItem-content_1kbi2_21", "ComponentItem-name": "_ComponentItem-name_1kbi2_31", "ComponentItem-version": "_ComponentItem-version_1kbi2_35", "ComponentItem-actions": "_ComponentItem-actions_1kbi2_40", "ComponentItem-settingsButton": "_ComponentItem-settingsButton_1kbi2_46", "ComponentItem-grip": "_ComponentItem-grip_1kbi2_56", "ComponentItem-modal": "_ComponentItem-modal_1kbi2_63", "ComponentItem-modalHeader": "_ComponentItem-modalHeader_1kbi2_70", "ComponentItem-modalTitle": "_ComponentItem-modalTitle_1kbi2_75", "ComponentItem-modalSubtitle": "_ComponentItem-modalSubtitle_1kbi2_82", "ComponentItem-modalBody": "_ComponentItem-modalBody_1kbi2_88", "ComponentItem-section": "_ComponentItem-section_1kbi2_97", "ComponentItem-sectionTitle": "_ComponentItem-sectionTitle_1kbi2_103", "ComponentItem-sectionDescription": "_ComponentItem-sectionDescription_1kbi2_110", "ComponentItem-versionList": "_ComponentItem-versionList_1kbi2_116", "ComponentItem-versionRow": "_ComponentItem-versionRow_1kbi2_122", "ComponentItem-versionRow--isDefault": "_ComponentItem-versionRow--isDefault_1kbi2_133", "ComponentItem-versionRow--isMarkedForDeletion": "_ComponentItem-versionRow--isMarkedForDeletion_1kbi2_138", "ComponentItem-versionInfo": "_ComponentItem-versionInfo_1kbi2_143", "ComponentItem-versionNumber": "_ComponentItem-versionNumber_1kbi2_150", "ComponentItem-defaultBadge": "_ComponentItem-defaultBadge_1kbi2_156", "ComponentItem-deleteBadge": "_ComponentItem-deleteBadge_1kbi2_167", "ComponentItem-versionActions": "_ComponentItem-versionActions_1kbi2_178", "ComponentItem-migrationOptions": "_ComponentItem-migrationOptions_1kbi2_184", "ComponentItem-select": "_ComponentItem-select_1kbi2_188", "ComponentItem-modalFooter": "_ComponentItem-modalFooter_1kbi2_209", "ComponentItem-footerLeft": "_ComponentItem-footerLeft_1kbi2_218", "ComponentItem-footerRight": "_ComponentItem-footerRight_1kbi2_223" };
2975
3093
 
2976
3094
  // src/puck/components/modal/index.tsx
2977
- var import_react9 = require("react");
3095
+ var import_react10 = require("react");
2978
3096
  var import_react_dom = require("react-dom");
2979
3097
 
2980
- // css-module:/media/osamu/3628738E28734BBD/osamuProjects/netlisian/packages/soft-config/src/puck/components/modal/styles.module.css#css-module
3098
+ // css-module:/media/manual_mount/osamuProjects/netlisian/packages/soft-config/src/puck/components/modal/styles.module.css#css-module
2981
3099
  var styles_module_default2 = { "Modal": "_Modal_pvj02_1", "Modal--isOpen": "_Modal--isOpen_pvj02_29", "Modal-inner": "_Modal-inner_pvj02_37" };
2982
3100
 
2983
3101
  // src/puck/components/modal/index.tsx
@@ -2988,8 +3106,8 @@ var Modal = ({
2988
3106
  onClose,
2989
3107
  isOpen
2990
3108
  }) => {
2991
- const [rootEl, setRootEl] = (0, import_react9.useState)(null);
2992
- (0, import_react9.useEffect)(() => {
3109
+ const [rootEl, setRootEl] = (0, import_react10.useState)(null);
3110
+ (0, import_react10.useEffect)(() => {
2993
3111
  setRootEl(document.getElementById("puck-portal-root"));
2994
3112
  }, []);
2995
3113
  if (!rootEl) {
@@ -3014,6 +3132,8 @@ var import_jsx_runtime11 = require("react/jsx-runtime");
3014
3132
  var getClassName5 = get_class_name_factory_default("ComponentItem", ComponentItem_module_default);
3015
3133
  var usePuck3 = (0, import_puck15.createUsePuck)();
3016
3134
  var ComponentItem = (props) => {
3135
+ const componentMeta = useSoftConfig((s) => s.softComponents[props.name]);
3136
+ const displayName = (componentMeta == null ? void 0 : componentMeta.name) || props.name;
3017
3137
  const softComponents = new Set(
3018
3138
  Object.keys(useSoftConfig((s) => s.softComponents, import_shallow2.shallow))
3019
3139
  );
@@ -3024,13 +3144,13 @@ var ComponentItem = (props) => {
3024
3144
  );
3025
3145
  const { handleDemolish } = useDemolish();
3026
3146
  const { handleSetDefaultVersion, getVersions, getDefaultVersion } = useSetDefaultVersion();
3027
- const [isEditing, setIsEditing] = (0, import_react10.useState)(false);
3028
- const [isHovering, setIsHovering] = (0, import_react10.useState)(false);
3029
- const [selectedVersion, setSelectedVersion] = (0, import_react10.useState)("");
3030
- const [versionsToDelete, setVersionsToDelete] = (0, import_react10.useState)(
3147
+ const [isEditing, setIsEditing] = (0, import_react11.useState)(false);
3148
+ const [isHovering, setIsHovering] = (0, import_react11.useState)(false);
3149
+ const [selectedVersion, setSelectedVersion] = (0, import_react11.useState)("");
3150
+ const [versionsToDelete, setVersionsToDelete] = (0, import_react11.useState)(
3031
3151
  /* @__PURE__ */ new Set()
3032
3152
  );
3033
- const [migrateVersionMap, setMigrateVersionMap] = (0, import_react10.useState)({});
3153
+ const [migrateVersionMap, setMigrateVersionMap] = (0, import_react11.useState)({});
3034
3154
  const useVersioning = useSoftConfig((s) => s.showVersionFields);
3035
3155
  const versions = getVersions(props.name);
3036
3156
  const defaultVersion = getDefaultVersion(props.name);
@@ -3076,7 +3196,7 @@ var ComponentItem = (props) => {
3076
3196
  };
3077
3197
  const handleDemolishClick = () => __async(null, null, function* () {
3078
3198
  const confirmed = yield confirm(
3079
- `Demolish "${props.name}" entirely? This will remove all versions.`
3199
+ `Demolish "${displayName}" entirely? This will remove all versions.`
3080
3200
  );
3081
3201
  if (confirmed) {
3082
3202
  handleDemolish(props.name);
@@ -3094,7 +3214,7 @@ var ComponentItem = (props) => {
3094
3214
  onMouseLeave: () => setIsHovering(false),
3095
3215
  children: [
3096
3216
  /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: getClassName5("content"), children: [
3097
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: getClassName5("name"), children: props.name }),
3217
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: getClassName5("name"), children: displayName }),
3098
3218
  useVersioning && /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: getClassName5("version"), children: [
3099
3219
  "v",
3100
3220
  defaultVersion
@@ -3121,7 +3241,7 @@ var ComponentItem = (props) => {
3121
3241
  ),
3122
3242
  /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Modal, { isOpen: isEditing, onClose: handleCancel, children: /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: getClassName5("modal"), children: [
3123
3243
  /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: getClassName5("modalHeader"), children: [
3124
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("h2", { className: getClassName5("modalTitle"), children: props.name }),
3244
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("h2", { className: getClassName5("modalTitle"), children: displayName }),
3125
3245
  /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("p", { className: getClassName5("modalSubtitle"), children: "Component Settings" })
3126
3246
  ] }),
3127
3247
  /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: getClassName5("modalBody"), children: useVersioning ? /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(import_jsx_runtime11.Fragment, { children: [
@@ -3181,7 +3301,7 @@ var ComponentItem = (props) => {
3181
3301
  ] })
3182
3302
  ] }) : /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: getClassName5("section"), children: /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("p", { children: [
3183
3303
  "Manage high-level settings for the ",
3184
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("strong", { children: props.name }),
3304
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("strong", { children: displayName }),
3185
3305
  " component."
3186
3306
  ] }) }) }),
3187
3307
  /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: getClassName5("modalFooter"), children: [