@firecms/core 3.0.0-canary.269 → 3.0.0-canary.270

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.umd.js CHANGED
@@ -4760,6 +4760,48 @@
4760
4760
  if (typeof window === "undefined") return false;
4761
4761
  return window.matchMedia(`(min-width: ${breakpoints[breakpoint] + 1}px)`).matches;
4762
4762
  }
4763
+ function useCollapsedGroups(groupNames) {
4764
+ const [collapsedGroups, setCollapsedGroups] = React.useState(() => {
4765
+ try {
4766
+ const stored = localStorage.getItem("firecms-collapsed-groups");
4767
+ return stored ? JSON.parse(stored) : {};
4768
+ } catch {
4769
+ return {};
4770
+ }
4771
+ });
4772
+ React.useEffect(() => {
4773
+ try {
4774
+ localStorage.setItem("firecms-collapsed-groups", JSON.stringify(collapsedGroups));
4775
+ } catch {
4776
+ }
4777
+ }, [collapsedGroups]);
4778
+ React.useEffect(() => {
4779
+ if (groupNames.length === 0) return;
4780
+ const currentGroupNames = new Set(groupNames);
4781
+ setCollapsedGroups((prev) => {
4782
+ const cleaned = Object.fromEntries(Object.entries(prev).filter(([groupName]) => currentGroupNames.has(groupName)));
4783
+ const prevKeys = Object.keys(prev);
4784
+ const cleanedKeys = Object.keys(cleaned);
4785
+ if (prevKeys.length === cleanedKeys.length && prevKeys.every((key) => cleanedKeys.includes(key))) {
4786
+ return prev;
4787
+ }
4788
+ return cleaned;
4789
+ });
4790
+ }, [groupNames]);
4791
+ const isGroupCollapsed = React.useCallback((name) => {
4792
+ return !!collapsedGroups[name];
4793
+ }, [collapsedGroups]);
4794
+ const toggleGroupCollapsed = React.useCallback((name_0) => {
4795
+ setCollapsedGroups((prev_0) => ({
4796
+ ...prev_0,
4797
+ [name_0]: !prev_0[name_0]
4798
+ }));
4799
+ }, []);
4800
+ return {
4801
+ isGroupCollapsed,
4802
+ toggleGroupCollapsed
4803
+ };
4804
+ }
4763
4805
  function ErrorTooltip(props) {
4764
4806
  const $ = reactCompilerRuntime.c(2);
4765
4807
  let t0;
@@ -4780,6 +4822,7 @@
4780
4822
  tooltip
4781
4823
  } = t0;
4782
4824
  const component = error instanceof Error ? error.message : error;
4825
+ console.warn("ErrorView", JSON.stringify(error));
4783
4826
  let t1;
4784
4827
  if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
4785
4828
  t1 = /* @__PURE__ */ jsxRuntime.jsx(ui.ErrorIcon, { className: "mx-2", size: "small", color: "error" });
@@ -12922,7 +12965,7 @@
12922
12965
  };
12923
12966
  }
12924
12967
  function NavigationGroup(t0) {
12925
- const $ = reactCompilerRuntime.c(26);
12968
+ const $ = reactCompilerRuntime.c(42);
12926
12969
  const {
12927
12970
  children,
12928
12971
  group,
@@ -12930,97 +12973,144 @@
12930
12973
  isPreview,
12931
12974
  isPotentialCardDropTarget,
12932
12975
  onEditGroup,
12933
- dndDisabled
12976
+ dndDisabled,
12977
+ collapsed,
12978
+ onToggleCollapsed
12934
12979
  } = t0;
12935
12980
  const [isHovered, setIsHovered] = React.useState(false);
12936
12981
  const currentGroupName = group ?? "Views";
12937
- const t1 = !isPotentialCardDropTarget ? "my-10" : "my-6";
12982
+ const showCaret = !isPreview && !!onToggleCollapsed;
12983
+ const t1 = isPreview ? "px-1 py-0.5" : "";
12938
12984
  let t2;
12939
12985
  if ($[0] !== t1) {
12940
- t2 = ui.cls(t1, "transition-all duration-200 ease-in-out");
12986
+ t2 = ui.cls("flex items-center", t1);
12941
12987
  $[0] = t1;
12942
12988
  $[1] = t2;
12943
12989
  } else {
12944
12990
  t2 = $[1];
12945
12991
  }
12946
- const t3 = `flex items-center ${isPreview ? "px-1 py-0.5 m-0" : "ml-3.5 mt-6"} `;
12992
+ const t3 = isPreview ? "body2" : "caption";
12947
12993
  let t4;
12948
- let t5;
12949
12994
  if ($[2] === Symbol.for("react.memo_cache_sentinel")) {
12950
- t4 = () => setIsHovered(true);
12951
- t5 = () => setIsHovered(false);
12995
+ t4 = ui.cls("p-4 py-2 rounded", "font-medium uppercase text-sm text-surface-600 dark:text-surface-400");
12952
12996
  $[2] = t4;
12953
- $[3] = t5;
12954
12997
  } else {
12955
12998
  t4 = $[2];
12956
- t5 = $[3];
12957
12999
  }
12958
- const t6 = isPreview ? "body2" : "caption";
12959
- const t7 = `${isPreview ? "px-1 py-0.5" : "ml-3.5"} font-medium uppercase text-sm text-surface-600 dark:text-surface-400`;
12960
- let t8;
12961
- if ($[4] !== currentGroupName || $[5] !== t6 || $[6] !== t7) {
12962
- t8 = /* @__PURE__ */ jsxRuntime.jsx(ui.Typography, { variant: t6, component: "h2", color: "secondary", className: t7, children: currentGroupName });
12963
- $[4] = currentGroupName;
12964
- $[5] = t6;
12965
- $[6] = t7;
12966
- $[7] = t8;
13000
+ let t5;
13001
+ if ($[3] !== currentGroupName || $[4] !== t3) {
13002
+ t5 = /* @__PURE__ */ jsxRuntime.jsx(ui.Typography, { variant: t3, component: "h2", color: "secondary", className: t4, children: currentGroupName });
13003
+ $[3] = currentGroupName;
13004
+ $[4] = t3;
13005
+ $[5] = t5;
12967
13006
  } else {
12968
- t8 = $[7];
13007
+ t5 = $[5];
12969
13008
  }
12970
- let t9;
12971
- if ($[8] !== currentGroupName || $[9] !== dndDisabled || $[10] !== isHovered || $[11] !== isPreview || $[12] !== onEditGroup) {
12972
- t9 = !isPreview && onEditGroup && !dndDisabled && /* @__PURE__ */ jsxRuntime.jsx(ui.IconButton, { size: "smallest", onClick: (e) => {
13009
+ let t6;
13010
+ if ($[6] !== currentGroupName || $[7] !== dndDisabled || $[8] !== isHovered || $[9] !== isPreview || $[10] !== onEditGroup) {
13011
+ t6 = !isPreview && onEditGroup && !dndDisabled && /* @__PURE__ */ jsxRuntime.jsx(ui.IconButton, { size: "smallest", onClick: (e) => {
12973
13012
  e.stopPropagation();
12974
13013
  onEditGroup(currentGroupName);
12975
13014
  }, className: ui.cls("ml-2 ", isHovered ? "opacity-100" : "opacity-0", "transition-opacity duration-100"), children: /* @__PURE__ */ jsxRuntime.jsx(ui.EditIcon, { size: "smallest" }) });
12976
- $[8] = currentGroupName;
12977
- $[9] = dndDisabled;
12978
- $[10] = isHovered;
12979
- $[11] = isPreview;
12980
- $[12] = onEditGroup;
12981
- $[13] = t9;
13015
+ $[6] = currentGroupName;
13016
+ $[7] = dndDisabled;
13017
+ $[8] = isHovered;
13018
+ $[9] = isPreview;
13019
+ $[10] = onEditGroup;
13020
+ $[11] = t6;
13021
+ } else {
13022
+ t6 = $[11];
13023
+ }
13024
+ let t7;
13025
+ if ($[12] !== t2 || $[13] !== t5 || $[14] !== t6) {
13026
+ t7 = /* @__PURE__ */ jsxRuntime.jsxs("div", { className: t2, children: [
13027
+ t5,
13028
+ t6
13029
+ ] });
13030
+ $[12] = t2;
13031
+ $[13] = t5;
13032
+ $[14] = t6;
13033
+ $[15] = t7;
13034
+ } else {
13035
+ t7 = $[15];
13036
+ }
13037
+ const TitleContent = t7;
13038
+ const t8 = !isPotentialCardDropTarget ? "my-10" : "my-6";
13039
+ let t9;
13040
+ if ($[16] !== t8) {
13041
+ t9 = ui.cls(t8, "transition-all duration-200 ease-in-out");
13042
+ $[16] = t8;
13043
+ $[17] = t9;
12982
13044
  } else {
12983
- t9 = $[13];
13045
+ t9 = $[17];
12984
13046
  }
12985
13047
  let t10;
12986
- if ($[14] !== t3 || $[15] !== t8 || $[16] !== t9) {
12987
- t10 = /* @__PURE__ */ jsxRuntime.jsxs("div", { className: t3, onMouseEnter: t4, onMouseLeave: t5, children: [
12988
- t8,
12989
- t9
13048
+ if ($[18] !== TitleContent || $[19] !== children || $[20] !== isPreview) {
13049
+ t10 = isPreview && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
13050
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: ui.cls("flex items-center justify-between w-full", "p-4 py-2"), onMouseEnter: () => setIsHovered(true), onMouseLeave: () => setIsHovered(false), children: TitleContent }),
13051
+ children
12990
13052
  ] });
12991
- $[14] = t3;
12992
- $[15] = t8;
12993
- $[16] = t9;
12994
- $[17] = t10;
13053
+ $[18] = TitleContent;
13054
+ $[19] = children;
13055
+ $[20] = isPreview;
13056
+ $[21] = t10;
12995
13057
  } else {
12996
- t10 = $[17];
13058
+ t10 = $[21];
12997
13059
  }
12998
13060
  let t11;
12999
- if ($[18] !== children || $[19] !== isPreview || $[20] !== minimised) {
13000
- t11 = isPreview ? children : minimised ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: ui.cls("mt-4 p-8 bg-surface-accent-200 dark:bg-surface-accent-800 rounded-lg"), style: {
13061
+ if ($[22] !== TitleContent || $[23] !== children || $[24] !== collapsed || $[25] !== isPreview || $[26] !== minimised || $[27] !== onToggleCollapsed || $[28] !== showCaret) {
13062
+ t11 = !isPreview && showCaret && /* @__PURE__ */ jsxRuntime.jsx(ui.ExpandablePanel, { invisible: true, expanded: !collapsed, onExpandedChange: (open) => {
13063
+ if (open !== !collapsed) {
13064
+ onToggleCollapsed?.();
13065
+ }
13066
+ }, className: ui.cls("mt-6"), titleClassName: ui.cls("min-h-0 p-0 border-none", "rounded-t flex items-center justify-between w-full", "hover:bg-transparent", "cursor-pointer select-none"), innerClassName: ui.cls("mt-4", !minimised ? "pt-0" : ""), title: /* @__PURE__ */ jsxRuntime.jsx("div", { onMouseEnter: () => setIsHovered(true), onMouseLeave: () => setIsHovered(false), className: "flex items-center", children: TitleContent }), children: minimised ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: ui.cls("mt-4 p-8 bg-surface-accent-200 dark:bg-surface-accent-800 rounded-lg"), style: {
13001
13067
  minHeight: "50px"
13002
- } }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: ui.cls("mt-4", !minimised ? "pt-0" : ""), children });
13003
- $[18] = children;
13004
- $[19] = isPreview;
13005
- $[20] = minimised;
13006
- $[21] = t11;
13068
+ } }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: ui.cls("mt-4", !minimised ? "pt-0" : ""), children }) });
13069
+ $[22] = TitleContent;
13070
+ $[23] = children;
13071
+ $[24] = collapsed;
13072
+ $[25] = isPreview;
13073
+ $[26] = minimised;
13074
+ $[27] = onToggleCollapsed;
13075
+ $[28] = showCaret;
13076
+ $[29] = t11;
13007
13077
  } else {
13008
- t11 = $[21];
13078
+ t11 = $[29];
13009
13079
  }
13010
13080
  let t12;
13011
- if ($[22] !== t10 || $[23] !== t11 || $[24] !== t2) {
13012
- t12 = /* @__PURE__ */ jsxRuntime.jsxs("div", { className: t2, children: [
13081
+ if ($[30] !== TitleContent || $[31] !== children || $[32] !== collapsed || $[33] !== isPreview || $[34] !== minimised || $[35] !== showCaret) {
13082
+ t12 = !isPreview && !showCaret && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
13083
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: ui.cls("flex items-center justify-between w-full", "mt-6"), onMouseEnter: () => setIsHovered(true), onMouseLeave: () => setIsHovered(false), children: TitleContent }),
13084
+ !collapsed && (minimised ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: ui.cls("mt-4 p-8 bg-surface-accent-200 dark:bg-surface-accent-800 rounded-lg"), style: {
13085
+ minHeight: "50px"
13086
+ } }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: ui.cls("mt-4", !minimised ? "pt-0" : ""), children }))
13087
+ ] });
13088
+ $[30] = TitleContent;
13089
+ $[31] = children;
13090
+ $[32] = collapsed;
13091
+ $[33] = isPreview;
13092
+ $[34] = minimised;
13093
+ $[35] = showCaret;
13094
+ $[36] = t12;
13095
+ } else {
13096
+ t12 = $[36];
13097
+ }
13098
+ let t13;
13099
+ if ($[37] !== t10 || $[38] !== t11 || $[39] !== t12 || $[40] !== t9) {
13100
+ t13 = /* @__PURE__ */ jsxRuntime.jsxs("div", { className: t9, children: [
13013
13101
  t10,
13014
- t11
13102
+ t11,
13103
+ t12
13015
13104
  ] });
13016
- $[22] = t10;
13017
- $[23] = t11;
13018
- $[24] = t2;
13019
- $[25] = t12;
13105
+ $[37] = t10;
13106
+ $[38] = t11;
13107
+ $[39] = t12;
13108
+ $[40] = t9;
13109
+ $[41] = t13;
13020
13110
  } else {
13021
- t12 = $[25];
13111
+ t13 = $[41];
13022
13112
  }
13023
- return t12;
13113
+ return t13;
13024
13114
  }
13025
13115
  const NavigationCard = React.memo(function NavigationCard2(t0) {
13026
13116
  const $ = reactCompilerRuntime.c(25);
@@ -14219,6 +14309,11 @@
14219
14309
  }] : draggable;
14220
14310
  onNavigationEntriesUpdate(all);
14221
14311
  };
14312
+ const groupNames = React.useMemo(() => [...items.map((item) => item.name), ...adminGroupData ? [adminGroupData.name] : []], [items, adminGroupData]);
14313
+ const {
14314
+ isGroupCollapsed,
14315
+ toggleGroupCollapsed
14316
+ } = useCollapsedGroups(groupNames);
14222
14317
  const {
14223
14318
  sensors,
14224
14319
  collisionDetection,
@@ -14304,7 +14399,7 @@
14304
14399
  return /* @__PURE__ */ jsxRuntime.jsx(SortableNavigationGroup, { groupName: groupKey, disabled: dndDisabled, children: /* @__PURE__ */ jsxRuntime.jsx(NavigationGroup, { group: groupKey === DEFAULT_GROUP_NAME ? void 0 : groupKey, minimised: draggingGroupId === groupKey && !isDraggingCardOnly, isPotentialCardDropTarget: isDraggingCardOnly, dndDisabled, onEditGroup: () => {
14305
14400
  if (dndDisabled) return;
14306
14401
  setDialogOpenForGroup(groupKey);
14307
- }, children: /* @__PURE__ */ jsxRuntime.jsx(NavigationGroupDroppable, { id: groupKey, itemIds: entriesInGroup.map((e_4) => e_4.url), isPotentialCardDropTarget: isDraggingCardOnly, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4 ", children: [
14402
+ }, collapsed: isGroupCollapsed(groupKey), onToggleCollapsed: () => toggleGroupCollapsed(groupKey), children: /* @__PURE__ */ jsxRuntime.jsx(NavigationGroupDroppable, { id: groupKey, itemIds: entriesInGroup.map((e_4) => e_4.url), isPotentialCardDropTarget: isDraggingCardOnly, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4 ", children: [
14308
14403
  entriesInGroup.map((entry) => /* @__PURE__ */ jsxRuntime.jsx(SortableNavigationCard, { entry, onClick: () => {
14309
14404
  let event = "unmapped_event";
14310
14405
  if (entry.type === "collection") event = "home_navigate_to_collection";
@@ -14323,7 +14418,7 @@
14323
14418
  margin: 0
14324
14419
  }, children: /* @__PURE__ */ jsxRuntime.jsx(NavigationGroup, { group: activeGroupData.name === DEFAULT_GROUP_NAME ? void 0 : activeGroupData.name, isPreview: false, minimised: true }) }) : activeItemForOverlay ? /* @__PURE__ */ jsxRuntime.jsx(NavigationCardBinding, { ...activeItemForOverlay, shrink: isHoveringNewGroupDropZone }) : null })
14325
14420
  ] }),
14326
- !performingSearch && adminGroupData && /* @__PURE__ */ jsxRuntime.jsx(NavigationGroup, { group: adminGroupData.name, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4 ", children: adminGroupData.entries.map((entry_0) => /* @__PURE__ */ jsxRuntime.jsx(NavigationCardBinding, { ...entry_0, onClick: () => {
14421
+ !performingSearch && adminGroupData && /* @__PURE__ */ jsxRuntime.jsx(NavigationGroup, { group: adminGroupData.name, collapsed: isGroupCollapsed(adminGroupData.name), onToggleCollapsed: () => toggleGroupCollapsed(adminGroupData.name), children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4 ", children: adminGroupData.entries.map((entry_0) => /* @__PURE__ */ jsxRuntime.jsx(NavigationCardBinding, { ...entry_0, onClick: () => {
14327
14422
  let event_0 = "unmapped_event";
14328
14423
  if (entry_0.type === "collection") event_0 = "home_navigate_to_collection";
14329
14424
  else if (entry_0.type === "view") event_0 = "home_navigate_to_view";
@@ -21367,7 +21462,7 @@
21367
21462
  }
21368
21463
  return t2;
21369
21464
  }
21370
- const fireCMSLogo = "data:image/png;base64,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\n";
21465
+ const fireCMSLogo = "data:image/png;base64,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";
21371
21466
  function useBrowserTitleAndIcon(name, logo) {
21372
21467
  const $ = reactCompilerRuntime.c(4);
21373
21468
  let t0;
@@ -25791,6 +25886,7 @@
25791
25886
  exports2.useBuildNavigationController = useBuildNavigationController;
25792
25887
  exports2.useClearRestoreValue = useClearRestoreValue;
25793
25888
  exports2.useClipboard = useClipboard;
25889
+ exports2.useCollapsedGroups = useCollapsedGroups;
25794
25890
  exports2.useCollectionFetch = useCollectionFetch;
25795
25891
  exports2.useColumnIds = useColumnIds;
25796
25892
  exports2.useCustomizationController = useCustomizationController;