tinacms 2.7.4 → 2.7.5

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
@@ -54,12 +54,12 @@ import { ELEMENT_PARAGRAPH as ELEMENT_PARAGRAPH$1 } from "@udecode/plate-paragra
54
54
  import { ELEMENT_BLOCKQUOTE as ELEMENT_BLOCKQUOTE$1 } from "@udecode/plate-block-quote";
55
55
  import { useFloatingToolbarState, offset, flip, useFloatingToolbar } from "@udecode/plate-floating";
56
56
  import { getIntrospectionQuery, buildClientSchema, print, parse as parse$3, buildSchema } from "graphql";
57
- import gql from "graphql-tag";
58
57
  import { TinaSchema, addNamespaceToSchema, parseURL, resolveForm, normalizePath, validateSchema } from "@tinacms/schema-tools";
59
58
  import { NAMER, resolveField } from "@tinacms/schema-tools";
59
+ import gql from "graphql-tag";
60
60
  import { diff } from "@graphql-inspector/core";
61
61
  import * as yup from "yup";
62
- import { NavLink, useNavigate, useLocation, useParams, Link, useSearchParams, HashRouter, Routes, Route } from "react-router-dom";
62
+ import { NavLink, useLocation, useNavigate, useParams, Link, useSearchParams, HashRouter, Routes, Route } from "react-router-dom";
63
63
  import { stringifyMDX } from "@tinacms/mdx";
64
64
  const ModalProvider = ({ children }) => {
65
65
  const [modalRootContainerRef, setModalRootContainerRef] = useState(
@@ -4430,36 +4430,6 @@ function MdOutlineArrowBackIos(props) {
4430
4430
  function MdOutlinePerson(props) {
4431
4431
  return GenIcon({ "tag": "svg", "attr": { "viewBox": "0 0 24 24" }, "child": [{ "tag": "path", "attr": { "fill": "none", "d": "M0 0h24v24H0V0z" }, "child": [] }, { "tag": "path", "attr": { "d": "M12 6c1.1 0 2 .9 2 2s-.9 2-2 2-2-.9-2-2 .9-2 2-2m0 10c2.7 0 5.8 1.29 6 2H6c.23-.72 3.31-2 6-2m0-12C9.79 4 8 5.79 8 8s1.79 4 4 4 4-1.79 4-4-1.79-4-4-4zm0 10c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z" }, "child": [] }] })(props);
4432
4432
  }
4433
- const BranchContext = React.createContext({
4434
- currentBranch: null,
4435
- setCurrentBranch: (branch) => {
4436
- console.warn("BranchContext not initialized");
4437
- }
4438
- });
4439
- const BranchDataProvider = ({
4440
- currentBranch,
4441
- setCurrentBranch,
4442
- children
4443
- }) => {
4444
- return /* @__PURE__ */ React.createElement(
4445
- BranchContext.Provider,
4446
- {
4447
- value: {
4448
- currentBranch,
4449
- setCurrentBranch
4450
- }
4451
- },
4452
- children
4453
- );
4454
- };
4455
- const useBranchData = () => {
4456
- const branchData = React.useContext(BranchContext);
4457
- const { dispatch } = useEvent("branch:change");
4458
- React.useEffect(() => {
4459
- dispatch({ branchName: branchData.currentBranch });
4460
- }, [branchData.currentBranch]);
4461
- return branchData;
4462
- };
4463
4433
  const textFieldClasses = "shadow-inner focus:shadow-outline focus:border-blue-500 focus:outline-none block text-base placeholder:text-gray-300 px-3 py-2 text-gray-600 w-full bg-white border border-gray-200 transition-all ease-out duration-150 focus:text-gray-900 rounded-md";
4464
4434
  const disabledClasses$1 = "opacity-50 pointer-events-none cursor-not-allowed";
4465
4435
  const BaseTextField = React.forwardRef(({ className, disabled, ...rest }, ref) => {
@@ -8063,9 +8033,6 @@ const PasswordFieldPlugin = {
8063
8033
  },
8064
8034
  parse: parse$2
8065
8035
  };
8066
- function GrCircleQuestion(props) {
8067
- return GenIcon({ "tag": "svg", "attr": { "viewBox": "0 0 24 24" }, "child": [{ "tag": "path", "attr": { "fill": "none", "strokeWidth": "2", "d": "M12,22 C17.5228475,22 22,17.5228475 22,12 C22,6.4771525 17.5228475,2 12,2 C6.4771525,2 2,6.4771525 2,12 C2,17.5228475 6.4771525,22 12,22 Z M12,15 L12,14 C12,13 12,12.5 13,12 C14,11.5 15,11 15,9.5 C15,8.5 14,7 12,7 C10,7 9,8.26413718 9,10 M12,16 L12,18" }, "child": [] }] })(props);
8068
- }
8069
8036
  function AiFillWarning(props) {
8070
8037
  return GenIcon({ "tag": "svg", "attr": { "viewBox": "0 0 1024 1024" }, "child": [{ "tag": "path", "attr": { "d": "M955.7 856l-416-720c-6.2-10.7-16.9-16-27.7-16s-21.6 5.3-27.7 16l-416 720C56 877.4 71.4 904 96 904h832c24.6 0 40-26.6 27.7-48zM480 416c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v184c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8V416zm32 352a48.01 48.01 0 0 1 0-96 48.01 48.01 0 0 1 0 96z" }, "child": [] }] })(props);
8071
8038
  }
@@ -8084,6 +8051,39 @@ function FaSpinner(props) {
8084
8051
  function FaUnlock(props) {
8085
8052
  return GenIcon({ "tag": "svg", "attr": { "viewBox": "0 0 448 512" }, "child": [{ "tag": "path", "attr": { "d": "M400 256H152V152.9c0-39.6 31.7-72.5 71.3-72.9 40-.4 72.7 32.1 72.7 72v16c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24v-16C376 68 307.5-.3 223.5 0 139.5.3 72 69.5 72 153.5V256H48c-26.5 0-48 21.5-48 48v160c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V304c0-26.5-21.5-48-48-48z" }, "child": [] }] })(props);
8086
8053
  }
8054
+ function GrCircleQuestion(props) {
8055
+ return GenIcon({ "tag": "svg", "attr": { "viewBox": "0 0 24 24" }, "child": [{ "tag": "path", "attr": { "fill": "none", "strokeWidth": "2", "d": "M12,22 C17.5228475,22 22,17.5228475 22,12 C22,6.4771525 17.5228475,2 12,2 C6.4771525,2 2,6.4771525 2,12 C2,17.5228475 6.4771525,22 12,22 Z M12,15 L12,14 C12,13 12,12.5 13,12 C14,11.5 15,11 15,9.5 C15,8.5 14,7 12,7 C10,7 9,8.26413718 9,10 M12,16 L12,18" }, "child": [] }] })(props);
8056
+ }
8057
+ const BranchContext = React.createContext({
8058
+ currentBranch: null,
8059
+ setCurrentBranch: (branch) => {
8060
+ console.warn("BranchContext not initialized");
8061
+ }
8062
+ });
8063
+ const BranchDataProvider = ({
8064
+ currentBranch,
8065
+ setCurrentBranch,
8066
+ children
8067
+ }) => {
8068
+ return /* @__PURE__ */ React.createElement(
8069
+ BranchContext.Provider,
8070
+ {
8071
+ value: {
8072
+ currentBranch,
8073
+ setCurrentBranch
8074
+ }
8075
+ },
8076
+ children
8077
+ );
8078
+ };
8079
+ const useBranchData = () => {
8080
+ const branchData = React.useContext(BranchContext);
8081
+ const { dispatch } = useEvent("branch:change");
8082
+ React.useEffect(() => {
8083
+ dispatch({ branchName: branchData.currentBranch });
8084
+ }, [branchData.currentBranch]);
8085
+ return branchData;
8086
+ };
8087
8087
  function formatBranchName$1(str) {
8088
8088
  const pattern = /[^/\w-]+/g;
8089
8089
  const formattedStr = str.replace(pattern, "");
@@ -8182,7 +8182,7 @@ const BranchSwitcherLegacy = ({
8182
8182
  className: "transition-all duration-150 ease-out text-blue-600 hover:text-blue-400 hover:underline no-underline",
8183
8183
  href: "https://tina.io/docs/tina-cloud/"
8184
8184
  },
8185
- "Learn more about moving to production with Tina Cloud."
8185
+ "Learn more about moving to production with TinaCloud."
8186
8186
  )), /* @__PURE__ */ React.createElement("p", null, /* @__PURE__ */ React.createElement(
8187
8187
  Button$1,
8188
8188
  {
@@ -8418,7 +8418,7 @@ const EditoralBranchSwitcher = ({
8418
8418
  className: "transition-all duration-150 ease-out text-blue-600 hover:text-blue-400 hover:underline no-underline",
8419
8419
  href: "https://tina.io/docs/tina-cloud/"
8420
8420
  },
8421
- "Learn more about moving to production with Tina Cloud."
8421
+ "Learn more about moving to production with TinaCloud."
8422
8422
  )), /* @__PURE__ */ React.createElement("p", null, /* @__PURE__ */ React.createElement(
8423
8423
  Button$1,
8424
8424
  {
@@ -9450,7 +9450,7 @@ const E_BAD_ROUTE = new MediaListError({
9450
9450
  });
9451
9451
  new MediaListError({
9452
9452
  title: "An Error Occurred",
9453
- message: "Something went wrong accessing your media from Tina Cloud.",
9453
+ message: "Something went wrong accessing your media from TinaCloud.",
9454
9454
  docsLink: ""
9455
9455
  // TODO
9456
9456
  });
@@ -9980,7 +9980,7 @@ const SyncStatus = ({ cms, setEventsOpen }) => {
9980
9980
  "Event Log"
9981
9981
  ));
9982
9982
  };
9983
- const version = "2.7.4";
9983
+ const version = "2.7.5";
9984
9984
  const Nav = ({
9985
9985
  isLocalMode,
9986
9986
  className = "",
@@ -11043,6 +11043,93 @@ function createPlaceholder(name, _pr) {
11043
11043
  );
11044
11044
  };
11045
11045
  }
11046
+ function dirname(path) {
11047
+ var _a, _b;
11048
+ const pattern = new RegExp("(?<prevDir>.*)/");
11049
+ return (_b = (_a = path.match(pattern)) == null ? void 0 : _a.groups) == null ? void 0 : _b.prevDir;
11050
+ }
11051
+ const BreadcrumbButton = ({ className = "", ...props }) => /* @__PURE__ */ React__default.createElement(
11052
+ "button",
11053
+ {
11054
+ className: "capitalize transition-colors duration-150 border-0 bg-transparent hover:text-blue-500 " + className,
11055
+ ...props
11056
+ }
11057
+ );
11058
+ function Breadcrumb$1({ directory = "", setDirectory }) {
11059
+ directory = directory.replace(/^\/|\/$/g, "");
11060
+ let prevDir = dirname(directory) || "";
11061
+ if (prevDir === ".") {
11062
+ prevDir = "";
11063
+ }
11064
+ return /* @__PURE__ */ React__default.createElement("div", { className: "w-full flex items-center text-[16px] text-gray-300" }, directory !== "" && /* @__PURE__ */ React__default.createElement(
11065
+ IconButton,
11066
+ {
11067
+ variant: "ghost",
11068
+ className: "mr-2",
11069
+ onClick: () => setDirectory(prevDir)
11070
+ },
11071
+ /* @__PURE__ */ React__default.createElement(
11072
+ LeftArrowIcon,
11073
+ {
11074
+ className: `w-7 h-auto fill-gray-300 hover:fill-gray-900 transition duration-150 ease-out`
11075
+ }
11076
+ )
11077
+ ), /* @__PURE__ */ React__default.createElement(
11078
+ BreadcrumbButton,
11079
+ {
11080
+ onClick: () => setDirectory(""),
11081
+ className: directory === "" ? "text-gray-500 font-bold" : "text-gray-300 font-medium after:pl-1.5 after:content-['/']"
11082
+ },
11083
+ "Media"
11084
+ ), directory && directory.split("/").map((part, index, parts) => {
11085
+ const currentDir = parts.slice(0, index + 1).join("/");
11086
+ return /* @__PURE__ */ React__default.createElement(
11087
+ BreadcrumbButton,
11088
+ {
11089
+ className: "pl-1.5 " + (index + 1 === parts.length ? "text-gray-500 font-bold" : "text-gray-300 font-medium after:pl-1.5 after:content-['/']"),
11090
+ key: currentDir,
11091
+ onClick: () => {
11092
+ setDirectory(currentDir);
11093
+ }
11094
+ },
11095
+ part
11096
+ );
11097
+ }));
11098
+ }
11099
+ const CopyField = ({ label, description, value }) => {
11100
+ const [copied, setCopied] = React__default.useState(false);
11101
+ const [fadeOut, setFadeOut] = React__default.useState(false);
11102
+ return /* @__PURE__ */ React__default.createElement("div", { className: "w-full" }, label && /* @__PURE__ */ React__default.createElement("label", { className: "w-full mb-1 block flex-1 text-sm font-bold leading-5 text-gray-700" }, label), /* @__PURE__ */ React__default.createElement(
11103
+ "span",
11104
+ {
11105
+ onClick: () => {
11106
+ if (copied === true)
11107
+ return;
11108
+ setCopied(true);
11109
+ setTimeout(() => {
11110
+ setFadeOut(true);
11111
+ }, 2500);
11112
+ setTimeout(() => {
11113
+ setCopied(false);
11114
+ setFadeOut(false);
11115
+ }, 3e3);
11116
+ navigator.clipboard.writeText(value);
11117
+ },
11118
+ className: `shadow-inner text-base leading-5 whitespace-normal break-all px-3 py-2 text-gray-600 w-full bg-gray-50 border border-gray-200 transition-all ease-out duration-150 rounded-md relative overflow-hidden appearance-none flex items-center w-full cursor-pointer hover:bg-white hover:text-blue-500 ${copied ? `pointer-events-none` : ``}`
11119
+ },
11120
+ /* @__PURE__ */ React__default.createElement(BiCopyAlt, { className: "relative text-blue-500 shrink-0 w-5 h-auto mr-1.5 -ml-0.5 z-20" }),
11121
+ " ",
11122
+ value,
11123
+ " ",
11124
+ copied && /* @__PURE__ */ React__default.createElement(
11125
+ "span",
11126
+ {
11127
+ className: `${fadeOut ? `opacity-0` : `opacity-100`} text-blue-500 transition-opacity duration-500 absolute right-0 w-full h-full px-3 py-2 bg-white bg-opacity-90 flex items-center justify-center text-center tracking-wide font-medium z-10`
11128
+ },
11129
+ /* @__PURE__ */ React__default.createElement("span", null, "Copied to clipboard!")
11130
+ )
11131
+ ), description && /* @__PURE__ */ React__default.createElement("p", { className: "mt-2 text-sm text-gray-500" }, description));
11132
+ };
11046
11133
  function ListMediaItem({ item, onClick, active }) {
11047
11134
  let FileIcon = BiFile;
11048
11135
  if (item.type === "dir") {
@@ -11118,59 +11205,6 @@ function GridMediaItem({ item, active, onClick }) {
11118
11205
  )
11119
11206
  );
11120
11207
  }
11121
- function dirname(path) {
11122
- var _a, _b;
11123
- const pattern = new RegExp("(?<prevDir>.*)/");
11124
- return (_b = (_a = path.match(pattern)) == null ? void 0 : _a.groups) == null ? void 0 : _b.prevDir;
11125
- }
11126
- const BreadcrumbButton = ({ className = "", ...props }) => /* @__PURE__ */ React__default.createElement(
11127
- "button",
11128
- {
11129
- className: "capitalize transition-colors duration-150 border-0 bg-transparent hover:text-blue-500 " + className,
11130
- ...props
11131
- }
11132
- );
11133
- function Breadcrumb$1({ directory = "", setDirectory }) {
11134
- directory = directory.replace(/^\/|\/$/g, "");
11135
- let prevDir = dirname(directory) || "";
11136
- if (prevDir === ".") {
11137
- prevDir = "";
11138
- }
11139
- return /* @__PURE__ */ React__default.createElement("div", { className: "w-full flex items-center text-[16px] text-gray-300" }, directory !== "" && /* @__PURE__ */ React__default.createElement(
11140
- IconButton,
11141
- {
11142
- variant: "ghost",
11143
- className: "mr-2",
11144
- onClick: () => setDirectory(prevDir)
11145
- },
11146
- /* @__PURE__ */ React__default.createElement(
11147
- LeftArrowIcon,
11148
- {
11149
- className: `w-7 h-auto fill-gray-300 hover:fill-gray-900 transition duration-150 ease-out`
11150
- }
11151
- )
11152
- ), /* @__PURE__ */ React__default.createElement(
11153
- BreadcrumbButton,
11154
- {
11155
- onClick: () => setDirectory(""),
11156
- className: directory === "" ? "text-gray-500 font-bold" : "text-gray-300 font-medium after:pl-1.5 after:content-['/']"
11157
- },
11158
- "Media"
11159
- ), directory && directory.split("/").map((part, index, parts) => {
11160
- const currentDir = parts.slice(0, index + 1).join("/");
11161
- return /* @__PURE__ */ React__default.createElement(
11162
- BreadcrumbButton,
11163
- {
11164
- className: "pl-1.5 " + (index + 1 === parts.length ? "text-gray-500 font-bold" : "text-gray-300 font-medium after:pl-1.5 after:content-['/']"),
11165
- key: currentDir,
11166
- onClick: () => {
11167
- setDirectory(currentDir);
11168
- }
11169
- },
11170
- part
11171
- );
11172
- }));
11173
- }
11174
11208
  const DeleteModal$1 = ({
11175
11209
  close: close2,
11176
11210
  deleteFunc,
@@ -11224,40 +11258,6 @@ const NewFolderModal = ({ onSubmit, close: close2 }) => {
11224
11258
  "Create New Folder"
11225
11259
  ))));
11226
11260
  };
11227
- const CopyField = ({ label, description, value }) => {
11228
- const [copied, setCopied] = React__default.useState(false);
11229
- const [fadeOut, setFadeOut] = React__default.useState(false);
11230
- return /* @__PURE__ */ React__default.createElement("div", { className: "w-full" }, label && /* @__PURE__ */ React__default.createElement("label", { className: "w-full mb-1 block flex-1 text-sm font-bold leading-5 text-gray-700" }, label), /* @__PURE__ */ React__default.createElement(
11231
- "span",
11232
- {
11233
- onClick: () => {
11234
- if (copied === true)
11235
- return;
11236
- setCopied(true);
11237
- setTimeout(() => {
11238
- setFadeOut(true);
11239
- }, 2500);
11240
- setTimeout(() => {
11241
- setCopied(false);
11242
- setFadeOut(false);
11243
- }, 3e3);
11244
- navigator.clipboard.writeText(value);
11245
- },
11246
- className: `shadow-inner text-base leading-5 whitespace-normal break-all px-3 py-2 text-gray-600 w-full bg-gray-50 border border-gray-200 transition-all ease-out duration-150 rounded-md relative overflow-hidden appearance-none flex items-center w-full cursor-pointer hover:bg-white hover:text-blue-500 ${copied ? `pointer-events-none` : ``}`
11247
- },
11248
- /* @__PURE__ */ React__default.createElement(BiCopyAlt, { className: "relative text-blue-500 shrink-0 w-5 h-auto mr-1.5 -ml-0.5 z-20" }),
11249
- " ",
11250
- value,
11251
- " ",
11252
- copied && /* @__PURE__ */ React__default.createElement(
11253
- "span",
11254
- {
11255
- className: `${fadeOut ? `opacity-0` : `opacity-100`} text-blue-500 transition-opacity duration-500 absolute right-0 w-full h-full px-3 py-2 bg-white bg-opacity-90 flex items-center justify-center text-center tracking-wide font-medium z-10`
11256
- },
11257
- /* @__PURE__ */ React__default.createElement("span", null, "Copied to clipboard!")
11258
- )
11259
- ), description && /* @__PURE__ */ React__default.createElement("p", { className: "mt-2 text-sm text-gray-500" }, description));
11260
- };
11261
11261
  const { useDropzone } = dropzone;
11262
11262
  const join = function(...parts) {
11263
11263
  const [first, last, slash] = [0, parts.length - 1, "/"];
@@ -11759,7 +11759,7 @@ const SyncStatusContainer = ({ children }) => {
11759
11759
  target: "_blank",
11760
11760
  href: `${cms.api.tina.appDashboardLink}/media`
11761
11761
  },
11762
- "Sync Your Media In Tina Cloud.",
11762
+ "Sync Your Media In TinaCloud.",
11763
11763
  /* @__PURE__ */ React__default.createElement(BiLinkExternal, { className: `w-5 h-auto flex-shrink-0` })
11764
11764
  )
11765
11765
  )))) : /* @__PURE__ */ React__default.createElement(SyncStatusContext.Provider, { value: { syncStatus } }, children);
@@ -30696,6 +30696,7 @@ mutation addPendingDocumentMutation(
30696
30696
  setBranch(branchName) {
30697
30697
  var _a, _b, _c, _d;
30698
30698
  const encodedBranch = encodeURIComponent(branchName);
30699
+ document.cookie = `x-branch=${encodedBranch}; path=/; max-age=3600`;
30699
30700
  this.branch = encodedBranch;
30700
30701
  this.assetsApiUrl = ((_a = this.options.tinaioConfig) == null ? void 0 : _a.assetsApiUrlOverride) || "https://assets.tinajs.io";
30701
30702
  this.frontendUrl = ((_b = this.options.tinaioConfig) == null ? void 0 : _b.frontendUrlOverride) || "https://app.tina.io";
@@ -30738,7 +30739,7 @@ mutation addPendingDocumentMutation(
30738
30739
  branch: ${this.branch}.`;
30739
30740
  if (this.branch !== "main") {
30740
30741
  errorMessage = `${errorMessage}
30741
- Note: This error can occur if the branch does not exist on GitHub or on Tina Cloud`;
30742
+ Note: This error can occur if the branch does not exist on GitHub or on TinaCloud`;
30742
30743
  }
30743
30744
  }
30744
30745
  throw new Error(errorMessage);
@@ -30874,7 +30875,7 @@ mutation addPendingDocumentMutation(
30874
30875
  unknownCount++;
30875
30876
  if (unknownCount > 5) {
30876
30877
  throw new Error(
30877
- "AsyncPoller: status unknown for too long, please check indexing progress the Tina Cloud dashboard"
30878
+ "AsyncPoller: status unknown for too long, please check indexing progress the TinaCloud dashboard"
30878
30879
  );
30879
30880
  }
30880
30881
  }
@@ -31585,7 +31586,7 @@ const AuthWallInner = ({
31585
31586
  });
31586
31587
  }
31587
31588
  };
31588
- let modalTitle = "Tina Cloud";
31589
+ let modalTitle = "TinaCloud";
31589
31590
  if (activeModal === "authenticate" && loginStrategy === "Redirect" && !isTinaCloud) {
31590
31591
  modalTitle = "Enter into edit mode";
31591
31592
  } else if (activeModal === "authenticate" && loginStrategy === "UsernamePassword") {
@@ -31601,7 +31602,7 @@ const AuthWallInner = ({
31601
31602
  ModalBuilder,
31602
31603
  {
31603
31604
  title: modalTitle,
31604
- message: isTinaCloud ? "Your site uses Tina Cloud to track changes. To make edits, you must log in." : "To save edits, enter into edit mode. On save, changes will saved to the local filesystem.",
31605
+ message: isTinaCloud ? "Your site uses TinaCloud to track changes. To make edits, you must log in." : "To save edits, enter into edit mode. On save, changes will saved to the local filesystem.",
31605
31606
  close,
31606
31607
  actions: [
31607
31608
  ...otherModalActions,
@@ -32324,6 +32325,14 @@ This will work when developing locally but NOT when deployed to production.
32324
32325
  }
32325
32326
  return client.request(query, { variables });
32326
32327
  };
32328
+ const GetCMS = ({ children }) => {
32329
+ try {
32330
+ const cms = useCMS$1();
32331
+ return /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, children(cms));
32332
+ } catch (e) {
32333
+ return null;
32334
+ }
32335
+ };
32327
32336
  const Layout = ({ children }) => {
32328
32337
  return /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, /* @__PURE__ */ React__default.createElement(
32329
32338
  "div",
@@ -32535,47 +32544,6 @@ const SidebarCloudLink = ({ config }) => {
32535
32544
  }
32536
32545
  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));
32537
32546
  };
32538
- const GetCMS = ({ children }) => {
32539
- try {
32540
- const cms = useCMS$1();
32541
- return /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, children(cms));
32542
- } catch (e) {
32543
- return null;
32544
- }
32545
- };
32546
- const PageWrapper = ({ children }) => {
32547
- var _a, _b;
32548
- const cms = useCMS$1();
32549
- const isLocalMode = (_b = (_a = cms.api) == null ? void 0 : _a.tina) == null ? void 0 : _b.isLocalMode;
32550
- const [branchingEnabled, setBranchingEnabled] = React__default.useState(
32551
- () => cms.flags.get("branch-switcher")
32552
- );
32553
- React__default.useEffect(() => {
32554
- cms.events.subscribe("flag:set", ({ key, value }) => {
32555
- if (key === "branch-switcher") {
32556
- setBranchingEnabled(value);
32557
- }
32558
- });
32559
- }, [cms.events]);
32560
- 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 shadow-2xl overflow-y-auto transition-opacity duration-300 ease-out flex flex-col opacity-100" }, branchingEnabled && !isLocalMode && /* @__PURE__ */ React__default.createElement(BranchBanner, null), children);
32561
- };
32562
- const PageHeader = ({
32563
- isLocalMode,
32564
- children
32565
- }) => {
32566
- return /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, isLocalMode && /* @__PURE__ */ React__default.createElement(LocalWarning, null), !isLocalMode && /* @__PURE__ */ React__default.createElement(BillingWarning, null), /* @__PURE__ */ React__default.createElement("div", { className: "pt-16 xl:pt-12 px-6 xl:px-12" }, /* @__PURE__ */ React__default.createElement("div", { className: "w-full mx-auto max-w-screen-xl" }, /* @__PURE__ */ React__default.createElement("div", { className: "w-full flex justify-between items-end" }, children))));
32567
- };
32568
- const PageBody = ({ children }) => /* @__PURE__ */ React__default.createElement("div", { className: "py-8 px-6 xl:px-12" }, children);
32569
- const PageBodyNarrow = ({ children }) => /* @__PURE__ */ React__default.createElement("div", { className: "py-10 px-6 xl:px-12" }, /* @__PURE__ */ React__default.createElement("div", { className: "w-full mx-auto max-w-screen-xl" }, children));
32570
- const DashboardPage = () => {
32571
- return /* @__PURE__ */ React__default.createElement(GetCMS, null, (cms) => {
32572
- var _a, _b;
32573
- return /* @__PURE__ */ React__default.createElement(PageWrapper, null, /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, /* @__PURE__ */ React__default.createElement(PageHeader, { isLocalMode: (_b = (_a = cms.api) == null ? void 0 : _a.tina) == null ? void 0 : _b.isLocalMode }, /* @__PURE__ */ React__default.createElement("h3", { className: "text-2xl font-sans text-gray-700" }, "Welcome to Tina!")), /* @__PURE__ */ React__default.createElement(PageBodyNarrow, null, "This is your dashboard for editing or creating content. Select a collection on the left to begin.")));
32574
- });
32575
- };
32576
- function RiHome2Line(props) {
32577
- return GenIcon({ "tag": "svg", "attr": { "viewBox": "0 0 24 24", "fill": "currentColor" }, "child": [{ "tag": "path", "attr": { "d": "M19 21H5C4.44772 21 4 20.5523 4 20V11L1 11L11.3273 1.6115C11.7087 1.26475 12.2913 1.26475 12.6727 1.6115L23 11L20 11V20C20 20.5523 19.5523 21 19 21ZM6 19H18V9.15745L12 3.7029L6 9.15745V19Z" }, "child": [] }] })(props);
32578
- }
32579
32547
  const LoadingPage = () => /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, /* @__PURE__ */ React__default.createElement(
32580
32548
  "div",
32581
32549
  {
@@ -32685,231 +32653,33 @@ const LoadingPage = () => /* @__PURE__ */ React__default.createElement(React__de
32685
32653
  )
32686
32654
  )
32687
32655
  ));
32688
- const FullscreenError = ({
32689
- title = "Error",
32690
- errorMessage = "It looks like something went wrong."
32691
- }) => {
32692
- return /* @__PURE__ */ React__default.createElement("div", { className: "flex flex-col justify-center items-center h-screen bg-gray-100" }, /* @__PURE__ */ React__default.createElement("div", { className: "text-red-500 text-4xl mb-6 flex items-center" }, /* @__PURE__ */ React__default.createElement(BiError, { className: "w-12 h-auto fill-current text-red-400 opacity-70 mr-1" }), " ", title), /* @__PURE__ */ React__default.createElement("p", { className: "text-gray-700 text-xl mb-8" }, errorMessage), /* @__PURE__ */ React__default.createElement(Button$1, { variant: "danger", onClick: () => window.location.reload() }, /* @__PURE__ */ React__default.createElement(BiSync, { className: "w-7 h-auto fill-current opacity-70 mr-1" }), " Reload"));
32693
- };
32694
- const isValidSortKey = (sortKey, collection) => {
32695
- if (collection.fields) {
32696
- const sortKeys = collection.fields.map((x) => x.name);
32697
- return sortKeys.includes(sortKey);
32698
- } else if (collection.templates) {
32699
- const collectionMap = {};
32700
- const conflictedFields = /* @__PURE__ */ new Set();
32701
- for (const template of collection.templates) {
32702
- for (const field of template.fields) {
32703
- if (collectionMap[field.name]) {
32704
- if (collectionMap[field.name].type !== field.type) {
32705
- conflictedFields.add(field.name);
32706
- }
32707
- } else {
32708
- collectionMap[field.name] = field;
32709
- }
32710
- }
32711
- }
32712
- for (const key in conflictedFields) {
32713
- delete collectionMap[key];
32714
- }
32715
- for (const key in collectionMap) {
32716
- if (key === sortKey) {
32717
- return true;
32718
- }
32719
- }
32720
- return false;
32721
- }
32722
- };
32723
- const useGetCollection = (cms, collectionName, includeDocuments = true, folder, after = "", sortKey, filterArgs) => {
32724
- const api = new TinaAdminApi(cms);
32725
- const schema = cms.api.tina.schema;
32726
- const collectionExtra = schema.getCollection(collectionName);
32727
- const [collection, setCollection] = useState(void 0);
32728
- const [loading, setLoading] = useState(true);
32729
- const [error, setError] = useState(void 0);
32730
- const [resetState, setResetSate] = useState(0);
32731
- useEffect(() => {
32732
- let cancelled = false;
32733
- const fetchCollection = async () => {
32734
- if (await api.isAuthenticated() && !folder.loading && !cancelled) {
32735
- const { name, order } = JSON.parse(sortKey || "{}");
32736
- const validSortKey = isValidSortKey(name, collectionExtra) ? name : void 0;
32737
- try {
32738
- const collection2 = await api.fetchCollection(
32739
- collectionName,
32740
- includeDocuments,
32741
- (filterArgs == null ? void 0 : filterArgs.filterField) ? "" : folder.fullyQualifiedName,
32742
- after,
32743
- validSortKey,
32744
- order,
32745
- filterArgs
32746
- );
32747
- setCollection(collection2);
32748
- } catch (error2) {
32749
- cms.alerts.error(
32750
- `[${error2.name}] GetCollection failed: ${error2.message}`
32751
- );
32752
- console.error(error2);
32753
- setCollection(void 0);
32754
- setError(error2);
32755
- }
32756
- setLoading(false);
32757
- }
32758
- };
32759
- if (cancelled)
32760
- return;
32761
- setLoading(true);
32762
- fetchCollection();
32763
- return () => {
32764
- cancelled = true;
32765
- };
32766
- }, [
32767
- cms,
32768
- collectionName,
32769
- folder.loading,
32770
- folder.fullyQualifiedName,
32771
- resetState,
32772
- after,
32773
- sortKey
32774
- ]);
32775
- const reFetchCollection = () => setResetSate((x) => x + 1);
32776
- return { collection, loading, error, reFetchCollection, collectionExtra };
32777
- };
32778
- const useSearchCollection = (cms, collectionName, includeDocuments = true, folder, after = "", search) => {
32779
- const api = new TinaAdminApi(cms);
32780
- const schema = cms.api.tina.schema;
32781
- const collectionExtra = schema.getCollection(collectionName);
32782
- const [collection, setCollection] = useState(void 0);
32783
- const [loading, setLoading] = useState(true);
32784
- const [error, setError] = useState(void 0);
32785
- const [resetState, setResetSate] = useState(0);
32786
- useEffect(() => {
32787
- let cancelled = false;
32788
- const searchCollection = async () => {
32789
- if (await api.isAuthenticated() && !folder.loading && !cancelled) {
32790
- try {
32791
- const response = await cms.api.search.query(
32792
- `${search} AND _collection:${collectionName}`,
32793
- {
32794
- limit: 15,
32795
- cursor: after
32796
- }
32797
- );
32798
- const docs = await Promise.allSettled(
32799
- response.results.map((result) => {
32800
- const [collection2, relativePath2] = result._id.split(":");
32801
- return api.fetchDocument(collection2, relativePath2, false);
32802
- })
32803
- );
32804
- const edges = docs.filter((p) => {
32805
- var _a;
32806
- return p.status === "fulfilled" && !!((_a = p.value) == null ? void 0 : _a.document);
32807
- }).map((result) => ({ node: result.value.document }));
32808
- const c = await api.fetchCollection(collectionName, false, "");
32809
- setCollection({
32810
- format: collection.format,
32811
- label: collection.label,
32812
- name: collectionName,
32813
- templates: collection.templates,
32814
- documents: {
32815
- pageInfo: {
32816
- hasNextPage: !!response.nextCursor,
32817
- hasPreviousPage: !!response.prevCursor,
32818
- startCursor: "",
32819
- endCursor: response.nextCursor || ""
32820
- },
32821
- edges
32822
- }
32823
- });
32824
- } catch (error2) {
32825
- cms.alerts.error(
32826
- `[${error2.name}] GetCollection failed: ${error2.message}`
32827
- );
32828
- console.error(error2);
32829
- setCollection(void 0);
32830
- setError(error2);
32831
- }
32832
- setLoading(false);
32656
+ function RiHome2Line(props) {
32657
+ return GenIcon({ "tag": "svg", "attr": { "viewBox": "0 0 24 24", "fill": "currentColor" }, "child": [{ "tag": "path", "attr": { "d": "M19 21H5C4.44772 21 4 20.5523 4 20V11L1 11L11.3273 1.6115C11.7087 1.26475 12.2913 1.26475 12.6727 1.6115L23 11L20 11V20C20 20.5523 19.5523 21 19 21ZM6 19H18V9.15745L12 3.7029L6 9.15745V19Z" }, "child": [] }] })(props);
32658
+ }
32659
+ const PageWrapper = ({ children }) => {
32660
+ var _a, _b;
32661
+ const cms = useCMS$1();
32662
+ const isLocalMode = (_b = (_a = cms.api) == null ? void 0 : _a.tina) == null ? void 0 : _b.isLocalMode;
32663
+ const [branchingEnabled, setBranchingEnabled] = React__default.useState(
32664
+ () => cms.flags.get("branch-switcher")
32665
+ );
32666
+ React__default.useEffect(() => {
32667
+ cms.events.subscribe("flag:set", ({ key, value }) => {
32668
+ if (key === "branch-switcher") {
32669
+ setBranchingEnabled(value);
32833
32670
  }
32834
- };
32835
- if (cancelled)
32836
- return;
32837
- setLoading(true);
32838
- searchCollection();
32839
- return () => {
32840
- cancelled = true;
32841
- };
32842
- }, [
32843
- cms,
32844
- collectionName,
32845
- folder.loading,
32846
- folder.fullyQualifiedName,
32847
- resetState,
32848
- after,
32849
- search
32850
- ]);
32851
- const reFetchCollection = () => setResetSate((x) => x + 1);
32852
- return { collection, loading, error, reFetchCollection, collectionExtra };
32671
+ });
32672
+ }, [cms.events]);
32673
+ 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 shadow-2xl overflow-y-auto transition-opacity duration-300 ease-out flex flex-col opacity-100" }, branchingEnabled && !isLocalMode && /* @__PURE__ */ React__default.createElement(BranchBanner, null), children);
32853
32674
  };
32854
- const GetCollection = ({
32855
- cms,
32856
- collectionName,
32857
- folder,
32858
- includeDocuments = true,
32859
- startCursor,
32860
- sortKey,
32861
- children,
32862
- filterArgs,
32863
- search
32675
+ const PageHeader = ({
32676
+ isLocalMode,
32677
+ children
32864
32678
  }) => {
32865
- const navigate = useNavigate();
32866
- const { collection, loading, error, reFetchCollection, collectionExtra } = search ? useSearchCollection(
32867
- cms,
32868
- collectionName,
32869
- includeDocuments,
32870
- folder,
32871
- startCursor || "",
32872
- search
32873
- ) : useGetCollection(
32874
- cms,
32875
- collectionName,
32876
- includeDocuments,
32877
- folder,
32878
- startCursor || "",
32879
- sortKey,
32880
- filterArgs
32881
- ) || {};
32882
- useEffect(() => {
32883
- var _a, _b, _c, _d, _e, _f, _g, _h, _i;
32884
- if (loading)
32885
- return;
32886
- const collectionDefinition = cms.api.tina.schema.getCollection(
32887
- collection.name
32888
- );
32889
- const allowCreate = ((_b = (_a = collectionDefinition == null ? void 0 : collectionDefinition.ui) == null ? void 0 : _a.allowedActions) == null ? void 0 : _b.create) ?? true;
32890
- const allowDelete = ((_d = (_c = collectionDefinition == null ? void 0 : collectionDefinition.ui) == null ? void 0 : _c.allowedActions) == null ? void 0 : _d.delete) ?? true;
32891
- const collectionResponse = collection;
32892
- if (!allowCreate && !allowDelete && // Check there is only one document
32893
- ((_f = (_e = collectionResponse.documents) == null ? void 0 : _e.edges) == null ? void 0 : _f.length) === 1 && // Check to make sure the file is not a folder
32894
- ((_i = (_h = (_g = collectionResponse.documents) == null ? void 0 : _g.edges[0]) == null ? void 0 : _h.node) == null ? void 0 : _i.__typename) !== "Folder") {
32895
- const doc = collectionResponse.documents.edges[0].node;
32896
- handleNavigate(
32897
- navigate,
32898
- cms,
32899
- collectionResponse,
32900
- collectionDefinition,
32901
- doc
32902
- );
32903
- }
32904
- }, [(collection == null ? void 0 : collection.name) || "", loading]);
32905
- if (error) {
32906
- return /* @__PURE__ */ React__default.createElement(FullscreenError, null);
32907
- }
32908
- if (loading) {
32909
- return /* @__PURE__ */ React__default.createElement(LoadingPage, null);
32910
- }
32911
- return /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, children(collection, loading, reFetchCollection, collectionExtra));
32679
+ return /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, isLocalMode && /* @__PURE__ */ React__default.createElement(LocalWarning, null), !isLocalMode && /* @__PURE__ */ React__default.createElement(BillingWarning, null), /* @__PURE__ */ React__default.createElement("div", { className: "pt-16 xl:pt-12 px-6 xl:px-12" }, /* @__PURE__ */ React__default.createElement("div", { className: "w-full mx-auto max-w-screen-xl" }, /* @__PURE__ */ React__default.createElement("div", { className: "w-full flex justify-between items-end" }, children))));
32912
32680
  };
32681
+ const PageBody = ({ children }) => /* @__PURE__ */ React__default.createElement("div", { className: "py-8 px-6 xl:px-12" }, children);
32682
+ const PageBodyNarrow = ({ children }) => /* @__PURE__ */ React__default.createElement("div", { className: "py-10 px-6 xl:px-12" }, /* @__PURE__ */ React__default.createElement("div", { className: "w-full mx-auto max-w-screen-xl" }, children));
32913
32683
  const folderRegex = /^.*\/~\/*(.*)$/;
32914
32684
  const parentFolder = (folder) => {
32915
32685
  return {
@@ -33787,6 +33557,231 @@ const RenameModal = ({
33787
33557
  "Rename"
33788
33558
  ))));
33789
33559
  };
33560
+ const FullscreenError = ({
33561
+ title = "Error",
33562
+ errorMessage = "It looks like something went wrong."
33563
+ }) => {
33564
+ return /* @__PURE__ */ React__default.createElement("div", { className: "flex flex-col justify-center items-center h-screen bg-gray-100" }, /* @__PURE__ */ React__default.createElement("div", { className: "text-red-500 text-4xl mb-6 flex items-center" }, /* @__PURE__ */ React__default.createElement(BiError, { className: "w-12 h-auto fill-current text-red-400 opacity-70 mr-1" }), " ", title), /* @__PURE__ */ React__default.createElement("p", { className: "text-gray-700 text-xl mb-8" }, errorMessage), /* @__PURE__ */ React__default.createElement(Button$1, { variant: "danger", onClick: () => window.location.reload() }, /* @__PURE__ */ React__default.createElement(BiSync, { className: "w-7 h-auto fill-current opacity-70 mr-1" }), " Reload"));
33565
+ };
33566
+ const isValidSortKey = (sortKey, collection) => {
33567
+ if (collection.fields) {
33568
+ const sortKeys = collection.fields.map((x) => x.name);
33569
+ return sortKeys.includes(sortKey);
33570
+ } else if (collection.templates) {
33571
+ const collectionMap = {};
33572
+ const conflictedFields = /* @__PURE__ */ new Set();
33573
+ for (const template of collection.templates) {
33574
+ for (const field of template.fields) {
33575
+ if (collectionMap[field.name]) {
33576
+ if (collectionMap[field.name].type !== field.type) {
33577
+ conflictedFields.add(field.name);
33578
+ }
33579
+ } else {
33580
+ collectionMap[field.name] = field;
33581
+ }
33582
+ }
33583
+ }
33584
+ for (const key in conflictedFields) {
33585
+ delete collectionMap[key];
33586
+ }
33587
+ for (const key in collectionMap) {
33588
+ if (key === sortKey) {
33589
+ return true;
33590
+ }
33591
+ }
33592
+ return false;
33593
+ }
33594
+ };
33595
+ const useGetCollection = (cms, collectionName, includeDocuments = true, folder, after = "", sortKey, filterArgs) => {
33596
+ const api = new TinaAdminApi(cms);
33597
+ const schema = cms.api.tina.schema;
33598
+ const collectionExtra = schema.getCollection(collectionName);
33599
+ const [collection, setCollection] = useState(void 0);
33600
+ const [loading, setLoading] = useState(true);
33601
+ const [error, setError] = useState(void 0);
33602
+ const [resetState, setResetSate] = useState(0);
33603
+ useEffect(() => {
33604
+ let cancelled = false;
33605
+ const fetchCollection = async () => {
33606
+ if (await api.isAuthenticated() && !folder.loading && !cancelled) {
33607
+ const { name, order } = JSON.parse(sortKey || "{}");
33608
+ const validSortKey = isValidSortKey(name, collectionExtra) ? name : void 0;
33609
+ try {
33610
+ const collection2 = await api.fetchCollection(
33611
+ collectionName,
33612
+ includeDocuments,
33613
+ (filterArgs == null ? void 0 : filterArgs.filterField) ? "" : folder.fullyQualifiedName,
33614
+ after,
33615
+ validSortKey,
33616
+ order,
33617
+ filterArgs
33618
+ );
33619
+ setCollection(collection2);
33620
+ } catch (error2) {
33621
+ cms.alerts.error(
33622
+ `[${error2.name}] GetCollection failed: ${error2.message}`
33623
+ );
33624
+ console.error(error2);
33625
+ setCollection(void 0);
33626
+ setError(error2);
33627
+ }
33628
+ setLoading(false);
33629
+ }
33630
+ };
33631
+ if (cancelled)
33632
+ return;
33633
+ setLoading(true);
33634
+ fetchCollection();
33635
+ return () => {
33636
+ cancelled = true;
33637
+ };
33638
+ }, [
33639
+ cms,
33640
+ collectionName,
33641
+ folder.loading,
33642
+ folder.fullyQualifiedName,
33643
+ resetState,
33644
+ after,
33645
+ sortKey
33646
+ ]);
33647
+ const reFetchCollection = () => setResetSate((x) => x + 1);
33648
+ return { collection, loading, error, reFetchCollection, collectionExtra };
33649
+ };
33650
+ const useSearchCollection = (cms, collectionName, includeDocuments = true, folder, after = "", search) => {
33651
+ const api = new TinaAdminApi(cms);
33652
+ const schema = cms.api.tina.schema;
33653
+ const collectionExtra = schema.getCollection(collectionName);
33654
+ const [collection, setCollection] = useState(void 0);
33655
+ const [loading, setLoading] = useState(true);
33656
+ const [error, setError] = useState(void 0);
33657
+ const [resetState, setResetSate] = useState(0);
33658
+ useEffect(() => {
33659
+ let cancelled = false;
33660
+ const searchCollection = async () => {
33661
+ if (await api.isAuthenticated() && !folder.loading && !cancelled) {
33662
+ try {
33663
+ const response = await cms.api.search.query(
33664
+ `${search} AND _collection:${collectionName}`,
33665
+ {
33666
+ limit: 15,
33667
+ cursor: after
33668
+ }
33669
+ );
33670
+ const docs = await Promise.allSettled(
33671
+ response.results.map((result) => {
33672
+ const [collection2, relativePath2] = result._id.split(":");
33673
+ return api.fetchDocument(collection2, relativePath2, false);
33674
+ })
33675
+ );
33676
+ const edges = docs.filter((p) => {
33677
+ var _a;
33678
+ return p.status === "fulfilled" && !!((_a = p.value) == null ? void 0 : _a.document);
33679
+ }).map((result) => ({ node: result.value.document }));
33680
+ const c = await api.fetchCollection(collectionName, false, "");
33681
+ setCollection({
33682
+ format: collection.format,
33683
+ label: collection.label,
33684
+ name: collectionName,
33685
+ templates: collection.templates,
33686
+ documents: {
33687
+ pageInfo: {
33688
+ hasNextPage: !!response.nextCursor,
33689
+ hasPreviousPage: !!response.prevCursor,
33690
+ startCursor: "",
33691
+ endCursor: response.nextCursor || ""
33692
+ },
33693
+ edges
33694
+ }
33695
+ });
33696
+ } catch (error2) {
33697
+ cms.alerts.error(
33698
+ `[${error2.name}] GetCollection failed: ${error2.message}`
33699
+ );
33700
+ console.error(error2);
33701
+ setCollection(void 0);
33702
+ setError(error2);
33703
+ }
33704
+ setLoading(false);
33705
+ }
33706
+ };
33707
+ if (cancelled)
33708
+ return;
33709
+ setLoading(true);
33710
+ searchCollection();
33711
+ return () => {
33712
+ cancelled = true;
33713
+ };
33714
+ }, [
33715
+ cms,
33716
+ collectionName,
33717
+ folder.loading,
33718
+ folder.fullyQualifiedName,
33719
+ resetState,
33720
+ after,
33721
+ search
33722
+ ]);
33723
+ const reFetchCollection = () => setResetSate((x) => x + 1);
33724
+ return { collection, loading, error, reFetchCollection, collectionExtra };
33725
+ };
33726
+ const GetCollection = ({
33727
+ cms,
33728
+ collectionName,
33729
+ folder,
33730
+ includeDocuments = true,
33731
+ startCursor,
33732
+ sortKey,
33733
+ children,
33734
+ filterArgs,
33735
+ search
33736
+ }) => {
33737
+ const navigate = useNavigate();
33738
+ const { collection, loading, error, reFetchCollection, collectionExtra } = search ? useSearchCollection(
33739
+ cms,
33740
+ collectionName,
33741
+ includeDocuments,
33742
+ folder,
33743
+ startCursor || "",
33744
+ search
33745
+ ) : useGetCollection(
33746
+ cms,
33747
+ collectionName,
33748
+ includeDocuments,
33749
+ folder,
33750
+ startCursor || "",
33751
+ sortKey,
33752
+ filterArgs
33753
+ ) || {};
33754
+ useEffect(() => {
33755
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i;
33756
+ if (loading)
33757
+ return;
33758
+ const collectionDefinition = cms.api.tina.schema.getCollection(
33759
+ collection.name
33760
+ );
33761
+ const allowCreate = ((_b = (_a = collectionDefinition == null ? void 0 : collectionDefinition.ui) == null ? void 0 : _a.allowedActions) == null ? void 0 : _b.create) ?? true;
33762
+ const allowDelete = ((_d = (_c = collectionDefinition == null ? void 0 : collectionDefinition.ui) == null ? void 0 : _c.allowedActions) == null ? void 0 : _d.delete) ?? true;
33763
+ const collectionResponse = collection;
33764
+ if (!allowCreate && !allowDelete && // Check there is only one document
33765
+ ((_f = (_e = collectionResponse.documents) == null ? void 0 : _e.edges) == null ? void 0 : _f.length) === 1 && // Check to make sure the file is not a folder
33766
+ ((_i = (_h = (_g = collectionResponse.documents) == null ? void 0 : _g.edges[0]) == null ? void 0 : _h.node) == null ? void 0 : _i.__typename) !== "Folder") {
33767
+ const doc = collectionResponse.documents.edges[0].node;
33768
+ handleNavigate(
33769
+ navigate,
33770
+ cms,
33771
+ collectionResponse,
33772
+ collectionDefinition,
33773
+ doc
33774
+ );
33775
+ }
33776
+ }, [(collection == null ? void 0 : collection.name) || "", loading]);
33777
+ if (error) {
33778
+ return /* @__PURE__ */ React__default.createElement(FullscreenError, null);
33779
+ }
33780
+ if (loading) {
33781
+ return /* @__PURE__ */ React__default.createElement(LoadingPage, null);
33782
+ }
33783
+ return /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, children(collection, loading, reFetchCollection, collectionExtra));
33784
+ };
33790
33785
  const ErrorDialog = (props) => {
33791
33786
  return /* @__PURE__ */ React__default.createElement(
33792
33787
  "div",
@@ -34330,6 +34325,12 @@ const RenderForm = ({
34330
34325
  ), /* @__PURE__ */ React__default.createElement("span", { className: "opacity-30 text-sm leading-tight whitespace-nowrap flex-0" }, "/"), /* @__PURE__ */ React__default.createElement("span", { className: "flex-1 w-full text-sm leading-tight whitespace-nowrap truncate" }, `${filename}.${collection.format}`), /* @__PURE__ */ React__default.createElement(FormStatus, { pristine: formIsPristine }))
34331
34326
  ), activeForm && /* @__PURE__ */ React__default.createElement(FormBuilder, { form: activeForm, onPristineChange: setFormIsPristine }));
34332
34327
  };
34328
+ const DashboardPage = () => {
34329
+ return /* @__PURE__ */ React__default.createElement(GetCMS, null, (cms) => {
34330
+ var _a, _b;
34331
+ return /* @__PURE__ */ React__default.createElement(PageWrapper, null, /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, /* @__PURE__ */ React__default.createElement(PageHeader, { isLocalMode: (_b = (_a = cms.api) == null ? void 0 : _a.tina) == null ? void 0 : _b.isLocalMode }, /* @__PURE__ */ React__default.createElement("h3", { className: "text-2xl font-sans text-gray-700" }, "Welcome to Tina!")), /* @__PURE__ */ React__default.createElement(PageBodyNarrow, null, "This is your dashboard for editing or creating content. Select a collection on the left to begin.")));
34332
+ });
34333
+ };
34333
34334
  const ScreenPage = () => {
34334
34335
  const { screenName } = useParams();
34335
34336
  return /* @__PURE__ */ React__default.createElement(GetCMS, null, (cms) => {
@@ -34412,7 +34413,7 @@ const IndexingPage = () => {
34412
34413
  } catch {
34413
34414
  cms.alerts.error("Branch indexing failed.");
34414
34415
  setErrorMessage(
34415
- 'Branch indexing failed, please check the Tina Cloud dashboard for more information. To try again chick "re-index" on the branch in the dashboard.'
34416
+ 'Branch indexing failed, please check the TinaCloud dashboard for more information. To try again chick "re-index" on the branch in the dashboard.'
34416
34417
  );
34417
34418
  setState("error");
34418
34419
  }
@@ -34580,7 +34581,7 @@ const CheckSchema = ({
34580
34581
  );
34581
34582
  }
34582
34583
  }).catch((e) => {
34583
- if (e.message.includes("has not been indexed by Tina Cloud")) {
34584
+ if (e.message.includes("has not been indexed by TinaCloud")) {
34584
34585
  setSchemaMissingError(true);
34585
34586
  } else {
34586
34587
  cms.alerts.error(`Unexpected error checking schema: ${e}`);