tinacms 3.0.0 → 3.0.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.
package/dist/index.js CHANGED
@@ -45485,7 +45485,7 @@ function GridMediaItem({ item, active, onClick }) {
45485
45485
  src: thumbnail,
45486
45486
  alt: item.filename
45487
45487
  }
45488
- )) : /* @__PURE__ */ React__default.createElement("div", { className: "p-4 w-full flex flex-col gap-4 items-center justify-center" }, /* @__PURE__ */ React__default.createElement(FileIcon, { className: "w-[30%] h-auto fill-gray-300" }), /* @__PURE__ */ React__default.createElement("span", { className: "block text-base text-gray-600 w-full break-words truncate" }, item.filename)))
45488
+ )) : /* @__PURE__ */ React__default.createElement("div", { className: "p-4 w-full flex flex-col gap-4 items-center justify-center" }, /* @__PURE__ */ React__default.createElement(FileIcon, { className: "w-[40%] h-auto fill-gray-300", size: 40 })))
45489
45489
  ));
45490
45490
  }
45491
45491
  const DeleteModal$1 = ({
@@ -46296,12 +46296,12 @@ const Callout = ({
46296
46296
  className = "",
46297
46297
  ...props
46298
46298
  }) => {
46299
- const commonAlertStyles = "text-sm px-4 py-3 rounded-md border";
46299
+ const commonAlertStyles = "text-sm px-4 py-3 rounded-md border-2 font bg-white text-gray-700 font-medium";
46300
46300
  const styles = {
46301
- warning: `text-amber-700 bg-amber-100 border-amber-700/20`,
46302
- info: `text-blue-600 bg-blue-100/50 border-blue-600/20`,
46303
- success: `text-green-600 bg-green-100/50 border-green-600/20`,
46304
- error: `text-red-600 bg-red-100/50 border-red-600/20`
46301
+ warning: `border-amber-700/20`,
46302
+ info: `border-blue-600/20`,
46303
+ success: `border-green-600/20`,
46304
+ error: `border-red-600/20`
46305
46305
  };
46306
46306
  const icon = {
46307
46307
  warning: /* @__PURE__ */ React.createElement(MdWarning, { className: "w-5 h-auto inline-block mr-1 opacity-70 text-amber-600" }),
@@ -46390,7 +46390,31 @@ function FiInfo(props) {
46390
46390
  function VscNewFile(props) {
46391
46391
  return GenIcon({ "tag": "svg", "attr": { "viewBox": "0 0 16 16", "fill": "currentColor" }, "child": [{ "tag": "path", "attr": { "fillRule": "evenodd", "clipRule": "evenodd", "d": "M9.5 1.1l3.4 3.5.1.4v2h-1V6H8V2H3v11h4v1H2.5l-.5-.5v-12l.5-.5h6.7l.3.1zM9 2v3h2.9L9 2zm4 14h-1v-3H9v-1h3V9h1v3h3v1h-3v3z" }, "child": [] }] })(props);
46392
46392
  }
46393
- const version$1 = "3.0.0";
46393
+ const NavContext = createContext(void 0);
46394
+ const useNav = () => {
46395
+ const context = useContext(NavContext);
46396
+ if (!context) {
46397
+ throw new Error("useNav must be used within a NavProvider");
46398
+ }
46399
+ return context;
46400
+ };
46401
+ const NavProvider = ({
46402
+ children,
46403
+ defaultOpen = false
46404
+ }) => {
46405
+ const [menuIsOpen, setMenuIsOpen] = useState(defaultOpen);
46406
+ const toggleMenu = () => setMenuIsOpen((prev) => !prev);
46407
+ const openMenu = () => setMenuIsOpen(true);
46408
+ const closeMenu = () => setMenuIsOpen(false);
46409
+ const value = {
46410
+ menuIsOpen,
46411
+ toggleMenu,
46412
+ openMenu,
46413
+ closeMenu
46414
+ };
46415
+ return /* @__PURE__ */ React__default.createElement(NavContext.Provider, { value }, children);
46416
+ };
46417
+ const version$1 = "3.0.1";
46394
46418
  const VersionInfo = () => {
46395
46419
  var _a2, _b, _c, _d, _e, _f;
46396
46420
  const cms = useCMS();
@@ -46575,8 +46599,8 @@ const SyncStatusButton = ({
46575
46599
  const Nav = ({
46576
46600
  isLocalMode,
46577
46601
  showHamburger = true,
46578
- menuIsOpen,
46579
- toggleMenu,
46602
+ menuIsOpen: menuIsOpenProp,
46603
+ toggleMenu: toggleMenuProp,
46580
46604
  className = "",
46581
46605
  children,
46582
46606
  showCollections,
@@ -46593,6 +46617,10 @@ const Nav = ({
46593
46617
  }) => {
46594
46618
  const cms = useCMS$1();
46595
46619
  const [eventsOpen, setEventsOpen] = React.useState(false);
46620
+ const navContext = React.useContext(NavContext);
46621
+ const menuIsOpen = menuIsOpenProp ?? (navContext == null ? void 0 : navContext.menuIsOpen) ?? false;
46622
+ const toggleMenu = toggleMenuProp ?? (navContext == null ? void 0 : navContext.toggleMenu) ?? (() => {
46623
+ });
46596
46624
  const { contentCollections, authCollection } = collectionsInfo.collections.reduce(
46597
46625
  (acc, collection) => {
46598
46626
  if (collection.isAuthCollection) {
@@ -46615,7 +46643,7 @@ const Nav = ({
46615
46643
  },
46616
46644
  { Site: [] }
46617
46645
  );
46618
- return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("div", { className: "flex items-baseline" }, /* @__PURE__ */ React.createElement(
46646
+ return /* @__PURE__ */ React.createElement(React.Fragment, null, showHamburger && /* @__PURE__ */ React.createElement("div", { className: "flex items-baseline" }, /* @__PURE__ */ React.createElement(
46619
46647
  "button",
46620
46648
  {
46621
46649
  className: cn(
@@ -46637,7 +46665,7 @@ const Nav = ({
46637
46665
  style: { maxWidth: `${sidebarWidth}px` },
46638
46666
  ...props
46639
46667
  },
46640
- /* @__PURE__ */ React.createElement("div", { className: "flex w-full px-4 py-3 justify-between items-center gap-2 border-b border-gray-200" }, /* @__PURE__ */ React.createElement(
46668
+ /* @__PURE__ */ React.createElement("div", { className: "flex w-full px-4 py-3 justify-between items-center gap-2 border-b border-gray-200" }, /* @__PURE__ */ React.createElement("span", { className: "text-left inline-flex items-center text-xl tracking-wide text-gray-800/80 flex-1 gap-1" }, /* @__PURE__ */ React.createElement(TinaExtendedIcon, { className: "h-8 w-auto fill-orange-500" })), /* @__PURE__ */ React.createElement(
46641
46669
  "button",
46642
46670
  {
46643
46671
  className: cn(
@@ -46647,8 +46675,8 @@ const Nav = ({
46647
46675
  toggleMenu();
46648
46676
  }
46649
46677
  },
46650
- /* @__PURE__ */ React.createElement(BiMenu, { className: "h-8 w-auto text-gray-600" })
46651
- ), /* @__PURE__ */ React.createElement("span", { className: "text-left inline-flex items-center text-xl tracking-wide text-gray-800/80 flex-1 gap-1" }, /* @__PURE__ */ React.createElement(TinaExtendedIcon, { className: "h-8 w-auto fill-orange-500" }))),
46678
+ /* @__PURE__ */ React.createElement(BiX, { className: "h-8 w-auto text-gray-600" })
46679
+ )),
46652
46680
  children,
46653
46681
  /* @__PURE__ */ React.createElement("div", { className: "flex flex-col px-6 flex-1 overflow-auto" }, showCollections && /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("h4", { className: "flex space-x-1 justify-items-start uppercase font-sans font-bold text-sm mb-3 mt-8 text-gray-700" }, /* @__PURE__ */ React.createElement("span", null, "Collections"), isLocalMode && /* @__PURE__ */ React.createElement("span", { className: "flex items-center" }, /* @__PURE__ */ React.createElement(
46654
46682
  "a",
@@ -46758,6 +46786,20 @@ const Logout = ({
46758
46786
  };
46759
46787
  return /* @__PURE__ */ React.createElement("button", { onClick: handleLogout, ...buttonProps }, /* @__PURE__ */ React.createElement(BiExit, { className: "w-6 h-auto mr-2" }), " Log Out");
46760
46788
  };
46789
+ const NavCloudLink = ({ config }) => {
46790
+ if (config.text) {
46791
+ return /* @__PURE__ */ React__default.createElement("span", { className: "text-base tracking-wide text-gray-500 flex items-center opacity-90" }, config.text, " ", /* @__PURE__ */ React__default.createElement(
46792
+ "a",
46793
+ {
46794
+ target: "_blank",
46795
+ className: "ml-1 text-blue-600 hover:opacity-60",
46796
+ href: config.link.href
46797
+ },
46798
+ config.link.text
46799
+ ));
46800
+ }
46801
+ return /* @__PURE__ */ React__default.createElement("span", { className: "text-base tracking-wide text-gray-500 hover:text-blue-600 flex items-center opacity-90 hover:opacity-100" }, /* @__PURE__ */ React__default.createElement(config.Icon, { className: "mr-2 h-6 opacity-80 w-auto" }), /* @__PURE__ */ React__default.createElement("a", { target: "_blank", href: config.link.href }, config.link.text));
46802
+ };
46761
46803
  const ResizeHandle = () => {
46762
46804
  const {
46763
46805
  resizingSidebar,
@@ -47422,7 +47464,7 @@ const Sidebar$1 = ({
47422
47464
  }
47423
47465
  }
47424
47466
  ),
47425
- RenderNavCloud: ({ config }) => /* @__PURE__ */ React.createElement(SidebarCloudLink$1, { config }),
47467
+ RenderNavCloud: ({ config }) => /* @__PURE__ */ React.createElement(NavCloudLink, { config }),
47426
47468
  RenderNavCollection: ({ collection }) => /* @__PURE__ */ React.createElement(
47427
47469
  SidebarCollectionLink,
47428
47470
  {
@@ -47530,20 +47572,6 @@ const SidebarSiteLink = ({
47530
47572
  view.name
47531
47573
  );
47532
47574
  };
47533
- const SidebarCloudLink$1 = ({ config }) => {
47534
- if (config.text) {
47535
- return /* @__PURE__ */ React.createElement("span", { className: "text-base tracking-wide text-gray-500 flex items-center opacity-90" }, config.text, " ", /* @__PURE__ */ React.createElement(
47536
- "a",
47537
- {
47538
- target: "_blank",
47539
- className: "ml-1 text-blue-600 hover:opacity-60",
47540
- href: config.link.href
47541
- },
47542
- config.link.text
47543
- ));
47544
- }
47545
- return /* @__PURE__ */ React.createElement("span", { className: "text-base tracking-wide text-gray-500 hover:text-blue-600 flex items-center opacity-90 hover:opacity-100" }, /* @__PURE__ */ React.createElement(config.Icon, { className: "mr-2 h-6 opacity-80 w-auto" }), /* @__PURE__ */ React.createElement("a", { target: "_blank", href: config.link.href }, config.link.text));
47546
- };
47547
47575
  const SidebarCollectionLink = ({
47548
47576
  Icon = ImFilesEmpty,
47549
47577
  collection,
@@ -47609,6 +47637,25 @@ const SidebarBody = ({ children }) => {
47609
47637
  children
47610
47638
  );
47611
47639
  };
47640
+ const NavMenuTrigger = ({
47641
+ className = "",
47642
+ label = "Toggle navigation menu"
47643
+ }) => {
47644
+ const { toggleMenu, menuIsOpen } = useNav();
47645
+ if (menuIsOpen) {
47646
+ return null;
47647
+ }
47648
+ return /* @__PURE__ */ React__default.createElement(
47649
+ "button",
47650
+ {
47651
+ className: `pointer-events-auto p-2 hover:bg-gray-100 transition-colors duration-150 ease-in-out rounded ${className}`,
47652
+ onClick: toggleMenu,
47653
+ "aria-label": label,
47654
+ title: label
47655
+ },
47656
+ /* @__PURE__ */ React__default.createElement(BiMenu, { className: "h-8 w-auto text-gray-600" })
47657
+ );
47658
+ };
47612
47659
  const DEFAULT_FIELDS = [
47613
47660
  TextFieldPlugin,
47614
47661
  TextareaFieldPlugin,
@@ -48038,7 +48085,7 @@ function Alerts2({ alerts }) {
48038
48085
  return /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, /* @__PURE__ */ React__default.createElement("div", { className: "fixed top-0 left-0 p-6 flex flex-col items-center z-[999999]" }, alerts.all.filter((alert) => {
48039
48086
  return alert.level !== "error";
48040
48087
  }).map((alert) => {
48041
- return /* @__PURE__ */ React__default.createElement(Alert, { key: alert.id, level: alert.level }, alert.level === "info" && /* @__PURE__ */ React__default.createElement(MdInfo, { className: "w-5 h-auto opacity-70" }), alert.level === "success" && /* @__PURE__ */ React__default.createElement(MdCheckCircle, { className: "w-5 h-auto opacity-70" }), alert.level === "warn" && /* @__PURE__ */ React__default.createElement(MdWarning, { className: "w-5 h-auto opacity-70" }), /* @__PURE__ */ React__default.createElement("p", { className: "m-0 flex-1 max-w-[680px] text-left" }, parseUrlsInText(alert.message.toString())), /* @__PURE__ */ React__default.createElement(
48088
+ return /* @__PURE__ */ React__default.createElement(Alert, { key: alert.id, level: alert.level }, alert.level === "info" && /* @__PURE__ */ React__default.createElement(MdInfo, { className: "w-5 h-auto text-blue-500" }), alert.level === "success" && /* @__PURE__ */ React__default.createElement(MdCheckCircle, { className: "w-5 h-auto text-green-500" }), alert.level === "warn" && /* @__PURE__ */ React__default.createElement(MdWarning, { className: "w-5 h-auto text-yellow-500" }), /* @__PURE__ */ React__default.createElement("p", { className: "m-0 flex-1 max-w-[680px] text-left" }, parseUrlsInText(alert.message.toString())), /* @__PURE__ */ React__default.createElement(
48042
48089
  CloseAlert,
48043
48090
  {
48044
48091
  onClick: () => {
@@ -48079,21 +48126,21 @@ const Alert = ({
48079
48126
  ...props
48080
48127
  }) => {
48081
48128
  const colorClasses = {
48082
- info: "bg-white border-blue-500 text-blue-600 fill-blue-500",
48083
- success: "bg-white border-green-500 text-green-600 fill-green-500",
48084
- warn: "bg-white border-yellow-500 text-yellow-600 fill-yellow-500",
48085
- error: "bg-white border-red-500 text-red-600 fill-red-500"
48129
+ info: "bg-white",
48130
+ success: "bg-white",
48131
+ warn: "bg-white",
48132
+ error: "bg-white"
48086
48133
  };
48087
48134
  const borderClasses = {
48088
- info: "border-blue-200",
48089
- success: "border-green-200",
48090
- warn: "border-yellow-200",
48091
- error: "border-red-200"
48135
+ info: "border-blue-500",
48136
+ success: "border-green-500",
48137
+ warn: "border-amber-500",
48138
+ error: "border-red-500"
48092
48139
  };
48093
48140
  return /* @__PURE__ */ React__default.createElement(
48094
48141
  "div",
48095
48142
  {
48096
- className: `rounded shadow-lg font-normal cursor-pointer pointer-events-all text-sm transition-all duration-100 ease-out mb-4 max-w-full ${colorClasses[level]}}`,
48143
+ className: `rounded-md shadow-lg font-medium cursor-pointer pointer-events-all text-sm transition-all duration-100 ease-out mb-4 max-w-full text-gray-700 ${colorClasses[level]}`,
48097
48144
  style: {
48098
48145
  animationName: "fly-in-up, fade-in",
48099
48146
  animationTimingFunction: "ease-out",
@@ -48105,7 +48152,7 @@ const Alert = ({
48105
48152
  /* @__PURE__ */ React__default.createElement(
48106
48153
  "div",
48107
48154
  {
48108
- className: `flex items-center gap-1.5 w-[350px] rounded-md border p-2 ${borderClasses[level]}`,
48155
+ className: `flex items-center gap-2 w-[350px] rounded-md border px-4 py-3 ${borderClasses[level]}`,
48109
48156
  ...props
48110
48157
  }
48111
48158
  )
@@ -63987,6 +64034,10 @@ const CreateBranchModal = ({
63987
64034
  cms.alerts.success(
63988
64035
  `Branch created successfully - Pull Request at ${result.pullRequestUrl}`
63989
64036
  );
64037
+ if (crudType === "create") {
64038
+ const folderPath = relativePath2.includes("/") ? relativePath2.substring(0, relativePath2.lastIndexOf("/")) : "";
64039
+ window.location.hash = `#/collections/${collection.name}${folderPath ? `/${folderPath}` : ""}`;
64040
+ }
63990
64041
  close2();
63991
64042
  } catch (e3) {
63992
64043
  console.error(e3);
@@ -120507,8 +120558,7 @@ const Sidebar = ({ cms }) => {
120507
120558
  const collectionsInfo = useGetCollections(cms);
120508
120559
  const screens = cms.plugins.getType("screen").all();
120509
120560
  const cloudConfigs = cms.plugins.getType("cloud-config").all();
120510
- const isOnDashboard = location.pathname === "/";
120511
- const [menuIsOpen, setMenuIsOpen] = React__default.useState(isOnDashboard);
120561
+ location.pathname === "/";
120512
120562
  const isLocalMode = (_b = (_a2 = cms.api) == null ? void 0 : _a2.tina) == null ? void 0 : _b.isLocalMode;
120513
120563
  const activeScreens = screens.filter(
120514
120564
  (screen) => {
@@ -120521,8 +120571,6 @@ const Sidebar = ({ cms }) => {
120521
120571
  {
120522
120572
  isLocalMode,
120523
120573
  showHamburger: false,
120524
- menuIsOpen,
120525
- toggleMenu: () => setMenuIsOpen((menu) => !menu),
120526
120574
  sidebarWidth: 360,
120527
120575
  showCollections: true,
120528
120576
  collectionsInfo,
@@ -120537,7 +120585,7 @@ const Sidebar = ({ cms }) => {
120537
120585
  Icon: view.Icon ? view.Icon : ImFilesEmpty
120538
120586
  }
120539
120587
  ),
120540
- RenderNavCloud: ({ config }) => /* @__PURE__ */ React__default.createElement(SidebarCloudLink, { config }),
120588
+ RenderNavCloud: ({ config }) => /* @__PURE__ */ React__default.createElement(NavCloudLink, { config }),
120541
120589
  RenderNavCollection: ({ collection }) => /* @__PURE__ */ React__default.createElement(
120542
120590
  SidebarLink,
120543
120591
  {
@@ -120574,20 +120622,6 @@ const SidebarLink = (props) => {
120574
120622
  label
120575
120623
  );
120576
120624
  };
120577
- const SidebarCloudLink = ({ config }) => {
120578
- if (config.text) {
120579
- return /* @__PURE__ */ React__default.createElement("span", { className: "text-base tracking-wide text-gray-500 flex items-center opacity-90" }, config.text, " ", /* @__PURE__ */ React__default.createElement(
120580
- "a",
120581
- {
120582
- target: "_blank",
120583
- className: "ml-1 text-blue-600 hover:opacity-60",
120584
- href: config.link.href
120585
- },
120586
- config.link.text
120587
- ));
120588
- }
120589
- return /* @__PURE__ */ React__default.createElement("span", { className: "text-base tracking-wide text-gray-500 hover:text-blue-600 flex items-center opacity-90 hover:opacity-100" }, /* @__PURE__ */ React__default.createElement(config.Icon, { className: "mr-2 h-6 opacity-80 w-auto" }), /* @__PURE__ */ React__default.createElement("a", { target: "_blank", href: config.link.href }, config.link.text));
120590
- };
120591
120625
  const ErrorDialog = (props) => {
120592
120626
  return /* @__PURE__ */ React__default.createElement(
120593
120627
  "div",
@@ -120752,7 +120786,7 @@ const PageWrapper = ({
120752
120786
  headerClassName,
120753
120787
  children
120754
120788
  }) => {
120755
- return /* @__PURE__ */ React__default.createElement("div", { className: "relative left-0 w-full h-full bg-gradient-to-b from-gray-50/50 to-gray-50 overflow-y-auto transition-opacity duration-300 ease-out flex flex-col opacity-100" }, /* @__PURE__ */ React__default.createElement("div", { className: `py-2 pr-4 w-full ${headerClassName}` }, /* @__PURE__ */ React__default.createElement(BillingWarning, null), /* @__PURE__ */ React__default.createElement("div", { className: "flex items-center gap-4" }, /* @__PURE__ */ React__default.createElement(TinaIcon, { className: "self-center h-10 min-w-10 w-auto text-orange-500" }), /* @__PURE__ */ React__default.createElement(LocalWarning, null), /* @__PURE__ */ React__default.createElement(BranchButton, null), /* @__PURE__ */ React__default.createElement(BranchPreviewButton, null))), children);
120789
+ return /* @__PURE__ */ React__default.createElement("div", { className: "relative left-0 w-full h-full bg-gradient-to-b from-gray-50/50 to-gray-50 overflow-y-auto transition-opacity duration-300 ease-out flex flex-col opacity-100" }, /* @__PURE__ */ React__default.createElement("div", { className: `py-2 w-full ${headerClassName}` }, /* @__PURE__ */ React__default.createElement(BillingWarning, null), /* @__PURE__ */ React__default.createElement("div", { className: "flex items-center gap-4" }, /* @__PURE__ */ React__default.createElement(NavMenuTrigger, { className: "ml-2" }), /* @__PURE__ */ React__default.createElement(TinaIcon, { className: "self-center h-10 min-w-10 w-auto text-orange-500" }), /* @__PURE__ */ React__default.createElement(LocalWarning, null), /* @__PURE__ */ React__default.createElement(BranchButton, null), /* @__PURE__ */ React__default.createElement(BranchPreviewButton, null))), children);
120756
120790
  };
120757
120791
  const PageHeader = ({
120758
120792
  children
@@ -122485,7 +122519,7 @@ const ScreenPage = () => {
122485
122519
  const selectedScreen = screens.find(
122486
122520
  ({ name }) => slugify(name) === screenName
122487
122521
  );
122488
- return /* @__PURE__ */ React__default.createElement("div", { className: "relative w-full h-full flex flex-col items-stretch justify-between" }, /* @__PURE__ */ React__default.createElement("div", { className: "py-2 px-6 w-fit " }, /* @__PURE__ */ React__default.createElement(LocalWarning, null), /* @__PURE__ */ React__default.createElement(BillingWarning, null)), /* @__PURE__ */ React__default.createElement(
122522
+ return /* @__PURE__ */ React__default.createElement("div", { className: "relative w-full h-full flex flex-col items-stretch justify-between" }, /* @__PURE__ */ React__default.createElement("div", { className: "py-2 w-full" }, /* @__PURE__ */ React__default.createElement(BillingWarning, null), /* @__PURE__ */ React__default.createElement("div", { className: "flex items-center gap-4" }, /* @__PURE__ */ React__default.createElement(NavMenuTrigger, { className: "ml-2" }), /* @__PURE__ */ React__default.createElement(TinaIcon, { className: "self-center h-10 min-w-10 w-auto text-orange-500" }), /* @__PURE__ */ React__default.createElement(LocalWarning, null))), /* @__PURE__ */ React__default.createElement(
122489
122523
  "div",
122490
122524
  {
122491
122525
  className: `xl:hidden pl-6 py-5 border-b border-gray-200 bg-white`
@@ -122712,7 +122746,7 @@ const DefaultWrapper = ({
122712
122746
  cms,
122713
122747
  children
122714
122748
  }) => {
122715
- return /* @__PURE__ */ React__default.createElement(Layout, null, /* @__PURE__ */ React__default.createElement("div", { className: "flex items-stretch h-dvh overflow-hidden" }, /* @__PURE__ */ React__default.createElement(Sidebar, { cms }), /* @__PURE__ */ React__default.createElement("div", { className: "w-full relative" }, children)));
122749
+ return /* @__PURE__ */ React__default.createElement(Layout, null, /* @__PURE__ */ React__default.createElement(NavProvider, { defaultOpen: false }, /* @__PURE__ */ React__default.createElement("div", { className: "flex items-stretch h-dvh overflow-hidden" }, /* @__PURE__ */ React__default.createElement(Sidebar, { cms }), /* @__PURE__ */ React__default.createElement("div", { className: "w-full relative" }, children))));
122716
122750
  };
122717
122751
  const PlainLayout = ({ children }) => {
122718
122752
  return /* @__PURE__ */ React__default.createElement(
@@ -123001,6 +123035,9 @@ export {
123001
123035
  ModalProvider,
123002
123036
  NAMER,
123003
123037
  Nav,
123038
+ NavCloudLink,
123039
+ NavMenuTrigger,
123040
+ NavProvider,
123004
123041
  NumberField,
123005
123042
  NumberFieldPlugin,
123006
123043
  NumberInput,
@@ -123094,6 +123131,7 @@ export {
123094
123131
  useFormPortal,
123095
123132
  useLocalStorage,
123096
123133
  useModalContainer,
123134
+ useNav,
123097
123135
  useScreenPlugin,
123098
123136
  useTinaAuthRedirect,
123099
123137
  wrapFieldWithError,
@@ -19,7 +19,7 @@ export type { TinaState } from './tina-state';
19
19
  export * from './forms';
20
20
  export * from './icons';
21
21
  export * from './react-dismissible';
22
- export { Nav, LocalWarning, BillingWarning, SyncStatusButton, } from './react-sidebar';
22
+ export { Nav, NavCloudLink, NavProvider, NavMenuTrigger, useNav, LocalWarning, BillingWarning, SyncStatusButton, } from './react-sidebar';
23
23
  export { useCMS } from './react-core';
24
24
  /**
25
25
  * Custom `tinacms` things
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ interface NavMenuTriggerProps {
3
+ className?: string;
4
+ label?: string;
5
+ }
6
+ /**
7
+ * A button component that triggers the navigation menu
8
+ * Can be used anywhere within the NavProvider hierarchy
9
+ */
10
+ export declare const NavMenuTrigger: React.FC<NavMenuTriggerProps>;
11
+ export {};
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ import type { CloudConfigPlugin } from '../../react-cloud-config';
3
+ interface NavCloudLinkProps {
4
+ config: CloudConfigPlugin;
5
+ }
6
+ /**
7
+ * Shared component for rendering cloud configuration links
8
+ * Used across both admin and sidebar navigation
9
+ */
10
+ export declare const NavCloudLink: React.FC<NavCloudLinkProps>;
11
+ export {};
@@ -0,0 +1,15 @@
1
+ import React, { ReactNode } from 'react';
2
+ export interface NavContextValue {
3
+ menuIsOpen: boolean;
4
+ toggleMenu: () => void;
5
+ openMenu: () => void;
6
+ closeMenu: () => void;
7
+ }
8
+ export declare const NavContext: React.Context<NavContextValue>;
9
+ export declare const useNav: () => NavContextValue;
10
+ interface NavProviderProps {
11
+ children: ReactNode;
12
+ defaultOpen?: boolean;
13
+ }
14
+ export declare const NavProvider: React.FC<NavProviderProps>;
15
+ export {};
@@ -9,8 +9,8 @@ interface NavCollection {
9
9
  interface NavProps {
10
10
  isLocalMode: boolean;
11
11
  showHamburger?: boolean;
12
- menuIsOpen: boolean;
13
- toggleMenu: () => void;
12
+ menuIsOpen?: boolean;
13
+ toggleMenu?: () => void;
14
14
  children?: any;
15
15
  className?: string;
16
16
  userName?: string;
@@ -41,5 +41,5 @@ interface NavProps {
41
41
  };
42
42
  }>;
43
43
  }
44
- export declare const Nav: ({ isLocalMode, showHamburger, menuIsOpen, toggleMenu, className, children, showCollections, collectionsInfo, screens, cloudConfigs, contentCreators, sidebarWidth, RenderNavSite, RenderNavCloud, RenderNavCollection, AuthRenderNavCollection, ...props }: NavProps) => React.JSX.Element;
44
+ export declare const Nav: ({ isLocalMode, showHamburger, menuIsOpen: menuIsOpenProp, toggleMenu: toggleMenuProp, className, children, showCollections, collectionsInfo, screens, cloudConfigs, contentCreators, sidebarWidth, RenderNavSite, RenderNavCloud, RenderNavCollection, AuthRenderNavCollection, ...props }: NavProps) => React.JSX.Element;
45
45
  export {};
@@ -3,3 +3,6 @@ export { SidebarProvider } from './components/sidebar';
3
3
  export { Nav } from './components/nav';
4
4
  export { LocalWarning, BillingWarning } from './components/local-warning';
5
5
  export { SyncStatusButton } from './components/sync-status';
6
+ export { NavCloudLink } from './components/nav-components';
7
+ export { NavProvider, useNav } from './components/nav-context';
8
+ export { NavMenuTrigger } from './components/NavMenuTrigger';
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "tinacms",
3
3
  "type": "module",
4
4
  "typings": "dist/index.d.ts",
5
- "version": "3.0.0",
5
+ "version": "3.0.1",
6
6
  "main": "dist/index.js",
7
7
  "module": "./dist/index.js",
8
8
  "exports": {