tinacms 0.61.1 → 0.64.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/CHANGELOG.md +73 -0
- package/dist/client/index.d.ts +1 -0
- package/dist/index.es.js +104 -97
- package/dist/index.js +105 -98
- package/dist/style.css +1344 -0
- package/dist/tina-cms.d.ts +27 -4
- package/package.json +11 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,78 @@
|
|
|
1
1
|
# tinacms
|
|
2
2
|
|
|
3
|
+
## 0.64.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 28010a026: Adds tailwind styles to Admin Layout
|
|
8
|
+
- Updated dependencies [e8ca82899]
|
|
9
|
+
- @tinacms/toolkit@0.56.7
|
|
10
|
+
|
|
11
|
+
## 0.64.0
|
|
12
|
+
|
|
13
|
+
### Minor Changes
|
|
14
|
+
|
|
15
|
+
- 4a3990c7e: Cloudinary media store now serves images over `https` by default. This can now be configured though the handler provided.
|
|
16
|
+
|
|
17
|
+
To revert to the old behavior:
|
|
18
|
+
|
|
19
|
+
```ts
|
|
20
|
+
export default createMediaHandler(
|
|
21
|
+
{
|
|
22
|
+
// ...
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
useHttps: false,
|
|
26
|
+
}
|
|
27
|
+
)
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
The default for `useHttps` is `true`
|
|
31
|
+
|
|
32
|
+
## 0.63.0
|
|
33
|
+
|
|
34
|
+
### Minor Changes
|
|
35
|
+
|
|
36
|
+
- 3897ec5d9: Replace `branch`, `clientId`, `isLocalClient` props with single `apiURL`. When working locally, this should be `http://localhost:4001/graphql`. For Tina Cloud, use `https://content.tinajs.io/content/<my-client-id>/github/<my-branch>`
|
|
37
|
+
|
|
38
|
+
```tsx
|
|
39
|
+
// _app.tsx
|
|
40
|
+
// ...
|
|
41
|
+
<TinaCMS apiURL={process.env.NEXT_PUBLIC_TINA_API_URL} {...pageProps}>
|
|
42
|
+
{livePageProps => <Component {...livePageProps} />}
|
|
43
|
+
</TinaCMS>
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
DEPRECATION NOTICE: `branch`, `clientId`, `isLocalClient` props will be deprecated in the future
|
|
47
|
+
|
|
48
|
+
### Patch Changes
|
|
49
|
+
|
|
50
|
+
- 96e4a77e2: Fixed types
|
|
51
|
+
- b5c22503a: Changes messaging on login page for TinaAdmin when in local-mode
|
|
52
|
+
- Updated dependencies [60f939f34]
|
|
53
|
+
- @tinacms/toolkit@0.56.6
|
|
54
|
+
|
|
55
|
+
## 0.62.0
|
|
56
|
+
|
|
57
|
+
### Minor Changes
|
|
58
|
+
|
|
59
|
+
- 70da62fe8: deprecated the use of `getStaticPropsForTina`
|
|
60
|
+
|
|
61
|
+
### Patch Changes
|
|
62
|
+
|
|
63
|
+
- 0afa75df1: 2342 - [TinaAdmin] Truncates the `filename` column for the Document List View
|
|
64
|
+
- 7dafce89d: Fixed issue where content creator was invalid
|
|
65
|
+
- 3de8c6165: Enabled branch creation in branch switcher
|
|
66
|
+
- fee183f8f: add "switch to default branch" recover option to error boundary
|
|
67
|
+
- 5c070a83f: feat: Add UI banner for when in localMode
|
|
68
|
+
- Updated dependencies [ddf81a4fd]
|
|
69
|
+
- Updated dependencies [20260a82d]
|
|
70
|
+
- Updated dependencies [0370147fb]
|
|
71
|
+
- Updated dependencies [3de8c6165]
|
|
72
|
+
- Updated dependencies [2eaad97bf]
|
|
73
|
+
- Updated dependencies [5c070a83f]
|
|
74
|
+
- @tinacms/toolkit@0.56.5
|
|
75
|
+
|
|
3
76
|
## 0.61.1
|
|
4
77
|
|
|
5
78
|
### Patch Changes
|
package/dist/client/index.d.ts
CHANGED
|
@@ -42,6 +42,7 @@ export declare class Client {
|
|
|
42
42
|
private options;
|
|
43
43
|
events: EventBus;
|
|
44
44
|
constructor({ tokenStorage, ...options }: ServerOptions);
|
|
45
|
+
get isLocalMode(): boolean;
|
|
45
46
|
setBranch(branchName: string): void;
|
|
46
47
|
addPendingContent: (props: any) => Promise<unknown>;
|
|
47
48
|
getSchema: () => Promise<GraphQLSchema>;
|
package/dist/index.es.js
CHANGED
|
@@ -29,7 +29,7 @@ var __objRest = (source, exclude) => {
|
|
|
29
29
|
}
|
|
30
30
|
return target;
|
|
31
31
|
};
|
|
32
|
-
import { EventBus,
|
|
32
|
+
import { EventBus, Modal, ModalPopup, ModalHeader, ModalBody, ModalActions, Button, LoadingDots, useLocalStorage, TinaCMS, BranchSwitcherPlugin, BranchDataProvider, TinaProvider, useCMS, useBranchData, FormMetaPlugin, Form, GlobalFormPlugin, FullscreenFormBuilder } from "@tinacms/toolkit";
|
|
33
33
|
export * from "@tinacms/toolkit";
|
|
34
34
|
import { TypeInfo, visit, visitWithTypeInfo, getNamedType, GraphQLObjectType, isLeafType, GraphQLUnionType, isScalarType, getIntrospectionQuery, buildClientSchema, print } from "graphql";
|
|
35
35
|
import set from "lodash.set";
|
|
@@ -39,6 +39,7 @@ import styled from "styled-components";
|
|
|
39
39
|
import * as yup from "yup";
|
|
40
40
|
import { setEditing, useEditState } from "@tinacms/sharedctx";
|
|
41
41
|
import { getIn, setIn } from "final-form";
|
|
42
|
+
import UrlPattern from "url-pattern";
|
|
42
43
|
import { NavLink, useLocation, useParams, Link, useNavigate, BrowserRouter, Routes, Route } from "react-router-dom";
|
|
43
44
|
import { Menu, Transition } from "@headlessui/react";
|
|
44
45
|
function popupWindow(url, title, window2, w, h) {
|
|
@@ -374,6 +375,11 @@ function assertIsUnionType(type) {
|
|
|
374
375
|
throw new Error(`Expected an instance of GraphQLUnionType for type ${type.name}`);
|
|
375
376
|
}
|
|
376
377
|
}
|
|
378
|
+
const captureBranchName = /^refs\/heads\/(.*)/;
|
|
379
|
+
const parseRefForBranchName = (ref) => {
|
|
380
|
+
const matches = ref.match(captureBranchName);
|
|
381
|
+
return matches[1];
|
|
382
|
+
};
|
|
377
383
|
class Client {
|
|
378
384
|
constructor(_a) {
|
|
379
385
|
var _b = _a, { tokenStorage = "MEMORY" } = _b, options = __objRest(_b, ["tokenStorage"]);
|
|
@@ -464,6 +470,9 @@ mutation addPendingDocumentMutation(
|
|
|
464
470
|
break;
|
|
465
471
|
}
|
|
466
472
|
}
|
|
473
|
+
get isLocalMode() {
|
|
474
|
+
return this.contentApiUrl.includes("localhost");
|
|
475
|
+
}
|
|
467
476
|
setBranch(branchName) {
|
|
468
477
|
var _a, _b, _c;
|
|
469
478
|
const encodedBranch = encodeURIComponent(branchName);
|
|
@@ -591,15 +600,15 @@ mutation addPendingDocumentMutation(
|
|
|
591
600
|
try {
|
|
592
601
|
const res = await this.fetchWithToken(url, {
|
|
593
602
|
method: "POST",
|
|
594
|
-
body: {
|
|
603
|
+
body: JSON.stringify({
|
|
595
604
|
baseBranch,
|
|
596
605
|
branchName
|
|
597
|
-
},
|
|
606
|
+
}),
|
|
598
607
|
headers: {
|
|
599
608
|
"Content-Type": "application/json"
|
|
600
609
|
}
|
|
601
610
|
});
|
|
602
|
-
return
|
|
611
|
+
return await res.json().then((r) => parseRefForBranchName(r.data.ref));
|
|
603
612
|
} catch (error) {
|
|
604
613
|
console.error("There was an error creating a new branch.", error);
|
|
605
614
|
return null;
|
|
@@ -624,11 +633,11 @@ class LocalClient extends Client {
|
|
|
624
633
|
}
|
|
625
634
|
}
|
|
626
635
|
function ModalBuilder(modalProps) {
|
|
627
|
-
return /* @__PURE__ */ React.createElement(
|
|
636
|
+
return /* @__PURE__ */ React.createElement(Modal, null, /* @__PURE__ */ React.createElement(ModalPopup, null, /* @__PURE__ */ React.createElement(ModalHeader, null, modalProps.title), /* @__PURE__ */ React.createElement(ModalBody, {
|
|
628
637
|
padded: true
|
|
629
638
|
}, /* @__PURE__ */ React.createElement("p", null, modalProps.message), modalProps.error && /* @__PURE__ */ React.createElement(ErrorLabel, null, modalProps.error)), /* @__PURE__ */ React.createElement(ModalActions, null, modalProps.actions.map((action) => /* @__PURE__ */ React.createElement(AsyncButton, __spreadValues({
|
|
630
639
|
key: action.name
|
|
631
|
-
}, action))))))
|
|
640
|
+
}, action))))));
|
|
632
641
|
}
|
|
633
642
|
const ErrorLabel = styled.p`
|
|
634
643
|
color: var(--tina-color-error) !important;
|
|
@@ -1009,24 +1018,10 @@ function useGraphqlForms({
|
|
|
1009
1018
|
name: "tina-admin-link",
|
|
1010
1019
|
Component: () => /* @__PURE__ */ React.createElement("a", {
|
|
1011
1020
|
href: `/admin/collections/${result._internalSys.collection.name}/${result._internalSys.filename}`,
|
|
1012
|
-
|
|
1013
|
-
display: "flex",
|
|
1014
|
-
alignItems: "center",
|
|
1015
|
-
padding: "10px 20px",
|
|
1016
|
-
borderTop: "1px solid var(--tina-color-grey-2)",
|
|
1017
|
-
textTransform: "uppercase",
|
|
1018
|
-
fontSize: "11px",
|
|
1019
|
-
fontWeight: 500,
|
|
1020
|
-
background: "var(--tina-color-grey-0)"
|
|
1021
|
-
}
|
|
1021
|
+
className: "flex items-center px-5 py-2 border-t border-b shadow border-gray-100 uppercase text-xs font-medium bg-white hover:bg-gray-50 hover:text-blue-500 transition-colors duration-100 ease-out"
|
|
1022
1022
|
}, /* @__PURE__ */ React.createElement(BiLinkExternal, {
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
width: "auto",
|
|
1026
|
-
opacity: "0.8",
|
|
1027
|
-
marginRight: "8px"
|
|
1028
|
-
}
|
|
1029
|
-
}), " ", "Edit in Tina Admin")
|
|
1023
|
+
className: "h-4 w-auto opacity-80 mr-2"
|
|
1024
|
+
}), " Edit in Tina Admin")
|
|
1030
1025
|
});
|
|
1031
1026
|
cms.plugins.add(TinaAdminLink);
|
|
1032
1027
|
}
|
|
@@ -1154,8 +1149,8 @@ function useGraphqlForms({
|
|
|
1154
1149
|
}, [queryString, JSON.stringify(variables), currentBranch]);
|
|
1155
1150
|
return [data, isLoading];
|
|
1156
1151
|
}
|
|
1157
|
-
const transformDocumentIntoMutationRequestPayload = (
|
|
1158
|
-
const _a =
|
|
1152
|
+
const transformDocumentIntoMutationRequestPayload = (document, instructions) => {
|
|
1153
|
+
const _a = document, { _collection, __typename, _template } = _a, rest = __objRest(_a, ["_collection", "__typename", "_template"]);
|
|
1159
1154
|
const params = transformParams(rest);
|
|
1160
1155
|
const paramsWithTemplate = instructions.includeTemplate ? { [_template]: params } : params;
|
|
1161
1156
|
return instructions.includeCollection ? { [_collection]: paramsWithTemplate } : paramsWithTemplate;
|
|
@@ -1370,7 +1365,7 @@ const useDocumentCreatorPlugin = (args) => {
|
|
|
1370
1365
|
}));
|
|
1371
1366
|
};
|
|
1372
1367
|
run();
|
|
1373
|
-
}, [cms
|
|
1368
|
+
}, [cms]);
|
|
1374
1369
|
React.useEffect(() => {
|
|
1375
1370
|
if (plugin) {
|
|
1376
1371
|
cms.plugins.add(plugin);
|
|
@@ -1382,6 +1377,19 @@ const useDocumentCreatorPlugin = (args) => {
|
|
|
1382
1377
|
};
|
|
1383
1378
|
}, [plugin]);
|
|
1384
1379
|
};
|
|
1380
|
+
var styles = ".tina-tailwind {\n\n /* gray-600 from tailwind config */\n}\n\n/**\nUse a better box model (opinionated).\n*/\n\n.tina-tailwind *,\n.tina-tailwind ::before,\n.tina-tailwind ::after {\n box-sizing: border-box;\n}\n\n/**\nUse a more readable tab size (opinionated).\n*/\n\n.tina-tailwind html {\n -moz-tab-size: 4;\n tab-size: 4;\n}\n\n/**\n1. Correct the line height in all browsers.\n2. Prevent adjustments of font size after orientation changes in iOS.\n*/\n\n.tina-tailwind html {\n line-height: 1.15; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/**\nRemove the margin in all browsers.\n*/\n\n.tina-tailwind body {\n margin: 0;\n}\n\n/**\nImprove consistency of default fonts in all browsers. (https://github.com/sindresorhus/modern-normalize/issues/3)\n*/\n\n.tina-tailwind body {\n font-family:\n system-ui,\n -apple-system, /* Firefox supports this but not yet `system-ui` */\n 'Segoe UI',\n Roboto,\n Helvetica,\n Arial,\n sans-serif,\n 'Apple Color Emoji',\n 'Segoe UI Emoji';\n}\n\n/**\n1. Add the correct height in Firefox.\n2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\n*/\n\n.tina-tailwind hr {\n height: 0; /* 1 */\n color: inherit; /* 2 */\n}\n\n/**\nAdd the correct text decoration in Chrome, Edge, and Safari.\n*/\n\n.tina-tailwind abbr[title] {\n text-decoration: underline dotted;\n}\n\n/**\nAdd the correct font weight in Edge and Safari.\n*/\n\n.tina-tailwind b,\n.tina-tailwind strong {\n font-weight: bolder;\n}\n\n/**\n1. Improve consistency of default fonts in all browsers. (https://github.com/sindresorhus/modern-normalize/issues/3)\n2. Correct the odd 'em' font sizing in all browsers.\n*/\n\n.tina-tailwind code,\n.tina-tailwind kbd,\n.tina-tailwind samp,\n.tina-tailwind pre {\n font-family:\n ui-monospace,\n SFMono-Regular,\n Consolas,\n 'Liberation Mono',\n Menlo,\n monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/**\nAdd the correct font size in all browsers.\n*/\n\n.tina-tailwind small {\n font-size: 80%;\n}\n\n/**\nPrevent 'sub' and 'sup' elements from affecting the line height in all browsers.\n*/\n\n.tina-tailwind sub,\n.tina-tailwind sup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\n/*\nText-level semantics\n====================\n*/\n\n.tina-tailwind sub {\n bottom: -0.25em;\n}\n\n/*\nGrouping content\n================\n*/\n\n.tina-tailwind sup {\n top: -0.5em;\n}\n\n/**\n1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\n2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\n*/\n\n.tina-tailwind table {\n text-indent: 0; /* 1 */\n border-color: inherit; /* 2 */\n}\n\n/**\n1. Change the font styles in all browsers.\n2. Remove the margin in Firefox and Safari.\n*/\n\n.tina-tailwind button,\n.tina-tailwind input,\n.tina-tailwind optgroup,\n.tina-tailwind select,\n.tina-tailwind textarea {\n font-family: inherit; /* 1 */\n font-size: 100%; /* 1 */\n line-height: 1.15; /* 1 */\n margin: 0; /* 2 */\n}\n\n/**\nRemove the inheritance of text transform in Edge and Firefox.\n1. Remove the inheritance of text transform in Firefox.\n*/\n\n.tina-tailwind button,\n.tina-tailwind select { /* 1 */\n text-transform: none;\n}\n\n/**\nCorrect the inability to style clickable types in iOS and Safari.\n*/\n\n.tina-tailwind button,\n.tina-tailwind [type='button'],\n.tina-tailwind [type='reset'],\n.tina-tailwind [type='submit'] {\n -webkit-appearance: button;\n}\n\n/**\nRemove the inner border and padding in Firefox.\n*/\n\n.tina-tailwind ::-moz-focus-inner {\n border-style: none;\n padding: 0;\n}\n\n/**\nRestore the focus styles unset by the previous rule.\n*/\n\n.tina-tailwind :-moz-focusring {\n outline: 1px dotted ButtonText;\n}\n\n/**\nRemove the additional ':invalid' styles in Firefox.\nSee: https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737\n*/\n\n.tina-tailwind :-moz-ui-invalid {\n box-shadow: none;\n}\n\n/**\nRemove the padding so developers are not caught out when they zero out 'fieldset' elements in all browsers.\n*/\n\n.tina-tailwind legend {\n padding: 0;\n}\n\n/**\nAdd the correct vertical alignment in Chrome and Firefox.\n*/\n\n.tina-tailwind progress {\n vertical-align: baseline;\n}\n\n/**\nCorrect the cursor style of increment and decrement buttons in Safari.\n*/\n\n.tina-tailwind ::-webkit-inner-spin-button,\n.tina-tailwind ::-webkit-outer-spin-button {\n height: auto;\n}\n\n/**\n1. Correct the odd appearance in Chrome and Safari.\n2. Correct the outline style in Safari.\n*/\n\n.tina-tailwind [type='search'] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/**\nRemove the inner padding in Chrome and Safari on macOS.\n*/\n\n.tina-tailwind ::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/**\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Change font properties to 'inherit' in Safari.\n*/\n\n.tina-tailwind ::-webkit-file-upload-button {\n -webkit-appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n\n/*\nAdd the correct display in Chrome and Safari.\n*/\n\n.tina-tailwind summary {\n display: list-item;\n}\n\n/**\n * Removes the default spacing and border for appropriate elements.\n */\n\n.tina-tailwind blockquote,\n.tina-tailwind dl,\n.tina-tailwind dd,\n.tina-tailwind h1,\n.tina-tailwind h2,\n.tina-tailwind h3,\n.tina-tailwind h4,\n.tina-tailwind h5,\n.tina-tailwind h6,\n.tina-tailwind hr,\n.tina-tailwind figure,\n.tina-tailwind p,\n.tina-tailwind pre {\n margin: 0;\n}\n\n/**\n * Manually forked from SUIT CSS Base: https://github.com/suitcss/base\n * A thin layer on top of normalize.css that provides a starting point more\n * suitable for web applications.\n */\n\n.tina-tailwind button {\n background-color: transparent;\n background-image: none;\n}\n\n/*\nInteractive\n===========\n*/\n\n.tina-tailwind fieldset {\n margin: 0;\n padding: 0;\n}\n\n/*\nForms\n=====\n*/\n\n.tina-tailwind ol,\n.tina-tailwind ul {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n/**\n * 1. Use the user's configured `sans` font-family (with Tailwind's default\n * sans-serif font stack as a fallback) as a sane default.\n * 2. Use Tailwind's default \"normal\" line-height so the user isn't forced\n * to override it to ensure consistency even when using the default theme.\n */\n\n.tina-tailwind html {\n font-family: Inter var, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\"; /* 1 */\n line-height: 1.5; /* 2 */\n}\n\n/**\n * Inherit font-family and line-height from `html` so users can set them as\n * a class directly on the `html` element.\n */\n\n.tina-tailwind body {\n font-family: inherit;\n line-height: inherit;\n}\n\n/**\n * 1. Prevent padding and border from affecting element width.\n *\n * We used to set this in the html element and inherit from\n * the parent element for everything else. This caused issues\n * in shadow-dom-enhanced elements like <details> where the content\n * is wrapped by a div with box-sizing set to `content-box`.\n *\n * https://github.com/mozdevs/cssremedy/issues/4\n *\n *\n * 2. Allow adding a border to an element by just adding a border-width.\n *\n * By default, the way the browser specifies that an element should have no\n * border is by setting it's border-style to `none` in the user-agent\n * stylesheet.\n *\n * In order to easily add borders to elements by just setting the `border-width`\n * property, we change the default border-style for all elements to `solid`, and\n * use border-width to hide them instead. This way our `border` utilities only\n * need to set the `border-width` property instead of the entire `border`\n * shorthand, making our border utilities much more straightforward to compose.\n *\n * https://github.com/tailwindcss/tailwindcss/pull/116\n */\n\n.tina-tailwind *,\n.tina-tailwind ::before,\n.tina-tailwind ::after {\n box-sizing: border-box; /* 1 */\n border-width: 0; /* 2 */\n border-style: solid; /* 2 */\n border-color: currentColor; /* 2 */\n}\n\n/*\n * Ensure horizontal rules are visible by default\n */\n\n.tina-tailwind hr {\n border-top-width: 1px;\n}\n\n/**\n * Undo the `border-style: none` reset that Normalize applies to images so that\n * our `border-{width}` utilities have the expected effect.\n *\n * The Normalize reset is unnecessary for us since we default the border-width\n * to 0 on all elements.\n *\n * https://github.com/tailwindcss/tailwindcss/issues/362\n */\n\n.tina-tailwind img {\n border-style: solid;\n}\n\n/**\n * Tailwind custom reset styles\n */\n\n.tina-tailwind textarea {\n resize: vertical;\n}\n\n/*\nTabular data\n============\n*/\n\n.tina-tailwind input::placeholder,\n.tina-tailwind textarea::placeholder {\n opacity: 1;\n color: #918c9e;\n}\n\n/*\nSections\n========\n*/\n\n.tina-tailwind button,\n.tina-tailwind [role=\"button\"] {\n cursor: pointer;\n}\n\n/**\n * Override legacy focus reset from Normalize with modern Firefox focus styles.\n *\n * This is actually an improvement over the new defaults in Firefox in our testing,\n * as it triggers the better focus styles even for links, which still use a dotted\n * outline in Firefox by default.\n */\n\n.tina-tailwind :-moz-focusring {\n outline: auto;\n}\n\n/*\nDocument\n========\n*/\n\n.tina-tailwind table {\n border-collapse: collapse;\n}\n\n/*! modern-normalize v1.1.0 | MIT License | https://github.com/sindresorhus/modern-normalize */\n\n.tina-tailwind h1,\n.tina-tailwind h2,\n.tina-tailwind h3,\n.tina-tailwind h4,\n.tina-tailwind h5,\n.tina-tailwind h6 {\n font-size: inherit;\n font-weight: inherit;\n}\n\n/**\n * Reset links to optimize for opt-in styling instead of\n * opt-out.\n */\n\n.tina-tailwind a {\n color: inherit;\n text-decoration: inherit;\n}\n\n/**\n * Reset form element properties that are easy to forget to\n * style explicitly so you don't inadvertently introduce\n * styles that deviate from your design system. These styles\n * supplement a partial reset that is already applied by\n * normalize.css.\n */\n\n.tina-tailwind button,\n.tina-tailwind input,\n.tina-tailwind optgroup,\n.tina-tailwind select,\n.tina-tailwind textarea {\n padding: 0;\n line-height: inherit;\n color: inherit;\n}\n\n/**\n * Use the configured 'mono' font family for elements that\n * are expected to be rendered with a monospace font, falling\n * back to the system monospace stack if there is no configured\n * 'mono' font family.\n */\n\n.tina-tailwind pre,\n.tina-tailwind code,\n.tina-tailwind kbd,\n.tina-tailwind samp {\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n}\n\n/**\n * 1. Make replaced elements `display: block` by default as that's\n * the behavior you want almost all of the time. Inspired by\n * CSS Remedy, with `svg` added as well.\n *\n * https://github.com/mozdevs/cssremedy/issues/14\n * \n * 2. Add `vertical-align: middle` to align replaced elements more\n * sensibly by default when overriding `display` by adding a\n * utility like `inline`.\n *\n * This can trigger a poorly considered linting error in some\n * tools but is included by design.\n * \n * https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210\n */\n\n.tina-tailwind img,\n.tina-tailwind svg,\n.tina-tailwind video,\n.tina-tailwind canvas,\n.tina-tailwind audio,\n.tina-tailwind iframe,\n.tina-tailwind embed,\n.tina-tailwind object {\n display: block; /* 1 */\n vertical-align: middle; /* 2 */\n}\n\n/**\n * Constrain images and videos to the parent width and preserve\n * their intrinsic aspect ratio.\n *\n * https://github.com/mozdevs/cssremedy/issues/14\n */\n\n.tina-tailwind img,\n.tina-tailwind video {\n max-width: 100%;\n height: auto;\n}\n\n/**\n * Ensure the default browser behavior of the `hidden` attribute.\n */\n\n.tina-tailwind [hidden] {\n display: none;\n}\n\n/* ! tailwindcss v2.2.19 | MIT License | https://tailwindcss.com */\n\n.tina-tailwind *, .tina-tailwind ::before, .tina-tailwind ::after {\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-transform: translateX(var(--tw-translate-x)) translateY(var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n\n.tina-tailwind *, .tina-tailwind ::before, .tina-tailwind ::after {\n --tw-border-opacity: 1;\n border-color: rgba(225, 221, 236, var(--tw-border-opacity));\n}\n\n.tina-tailwind *, .tina-tailwind ::before, .tina-tailwind ::after {\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n}\n\n.tina-tailwind *, .tina-tailwind ::before, .tina-tailwind ::after {\n --tw-ring-inset: var(--tw-empty,/*!*/ /*!*/);\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgba(0, 132, 255, 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n}\n\n.tina-tailwind *, .tina-tailwind ::before, .tina-tailwind ::after {\n --tw-blur: var(--tw-empty,/*!*/ /*!*/);\n --tw-brightness: var(--tw-empty,/*!*/ /*!*/);\n --tw-contrast: var(--tw-empty,/*!*/ /*!*/);\n --tw-grayscale: var(--tw-empty,/*!*/ /*!*/);\n --tw-hue-rotate: var(--tw-empty,/*!*/ /*!*/);\n --tw-invert: var(--tw-empty,/*!*/ /*!*/);\n --tw-saturate: var(--tw-empty,/*!*/ /*!*/);\n --tw-sepia: var(--tw-empty,/*!*/ /*!*/);\n --tw-drop-shadow: var(--tw-empty,/*!*/ /*!*/);\n --tw-filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n\n.tina-tailwind .static {\n position: static !important;\n}\n\n.tina-tailwind .fixed {\n position: fixed !important;\n}\n\n.tina-tailwind .absolute {\n position: absolute !important;\n}\n\n.tina-tailwind .relative {\n position: relative !important;\n}\n\n.tina-tailwind .bottom-3 {\n bottom: 12px !important;\n}\n\n.tina-tailwind .right-5 {\n right: 20px !important;\n}\n\n.tina-tailwind .right-0 {\n right: 0px !important;\n}\n\n.tina-tailwind .z-50 {\n z-index: 50 !important;\n}\n\n.tina-tailwind .mr-2 {\n margin-right: 8px !important;\n}\n\n.tina-tailwind .-ml-1 {\n margin-left: -4px !important;\n}\n\n.tina-tailwind .mr-1\\.5 {\n margin-right: 6px !important;\n}\n\n.tina-tailwind .mr-1 {\n margin-right: 4px !important;\n}\n\n.tina-tailwind .mb-3 {\n margin-bottom: 12px !important;\n}\n\n.tina-tailwind .ml-1 {\n margin-left: 4px !important;\n}\n\n.tina-tailwind .mt-2 {\n margin-top: 8px !important;\n}\n\n.tina-tailwind .mt-8 {\n margin-top: 32px !important;\n}\n\n.tina-tailwind .mb-0\\.5 {\n margin-bottom: 2px !important;\n}\n\n.tina-tailwind .mb-0 {\n margin-bottom: 0px !important;\n}\n\n.tina-tailwind .block {\n display: block !important;\n}\n\n.tina-tailwind .inline-block {\n display: inline-block !important;\n}\n\n.tina-tailwind .flex {\n display: flex !important;\n}\n\n.tina-tailwind .inline-flex {\n display: inline-flex !important;\n}\n\n.tina-tailwind .table {\n display: table !important;\n}\n\n.tina-tailwind .h-screen {\n height: 100vh !important;\n}\n\n.tina-tailwind .h-4 {\n height: 16px !important;\n}\n\n.tina-tailwind .h-auto {\n height: auto !important;\n}\n\n.tina-tailwind .h-6 {\n height: 24px !important;\n}\n\n.tina-tailwind .h-5 {\n height: 20px !important;\n}\n\n.tina-tailwind .w-auto {\n width: auto !important;\n}\n\n.tina-tailwind .w-full {\n width: 100% !important;\n}\n\n.tina-tailwind .w-10 {\n width: 40px !important;\n}\n\n.tina-tailwind .w-80 {\n width: 320px !important;\n}\n\n.tina-tailwind .w-2\\/3 {\n width: 66.666667% !important;\n}\n\n.tina-tailwind .w-6 {\n width: 24px !important;\n}\n\n.tina-tailwind .w-56 {\n width: 224px !important;\n}\n\n.tina-tailwind .min-w-full {\n min-width: 100% !important;\n}\n\n.tina-tailwind .max-w-lg {\n max-width: 32rem !important;\n}\n\n.tina-tailwind .max-w-screen-md {\n max-width: 768px !important;\n}\n\n.tina-tailwind .max-w-xs {\n max-width: 20rem !important;\n}\n\n.tina-tailwind .flex-1 {\n flex: 1 1 0% !important;\n}\n\n.tina-tailwind .flex-shrink-0 {\n flex-shrink: 0 !important;\n}\n\n.tina-tailwind .origin-top-right {\n transform-origin: top right !important;\n}\n\n.tina-tailwind .translate-y-full {\n --tw-translate-y: 100% !important;\n transform: var(--tw-transform) !important;\n}\n\n.tina-tailwind .-translate-y-2 {\n --tw-translate-y: -8px !important;\n transform: var(--tw-transform) !important;\n}\n\n.tina-tailwind .translate-y-0 {\n --tw-translate-y: 0px !important;\n transform: var(--tw-transform) !important;\n}\n\n.tina-tailwind .rotate-90 {\n --tw-rotate: 90deg !important;\n transform: var(--tw-transform) !important;\n}\n\n.tina-tailwind .rotate-0 {\n --tw-rotate: 0deg !important;\n transform: var(--tw-transform) !important;\n}\n\n.tina-tailwind .scale-95 {\n --tw-scale-x: .95 !important;\n --tw-scale-y: .95 !important;\n transform: var(--tw-transform) !important;\n}\n\n.tina-tailwind .scale-100 {\n --tw-scale-x: 1 !important;\n --tw-scale-y: 1 !important;\n transform: var(--tw-transform) !important;\n}\n\n.tina-tailwind .transform {\n transform: var(--tw-transform) !important;\n}\n\n.tina-tailwind .flex-col {\n flex-direction: column !important;\n}\n\n.tina-tailwind .items-end {\n align-items: flex-end !important;\n}\n\n.tina-tailwind .items-center {\n align-items: center !important;\n}\n\n.tina-tailwind .items-stretch {\n align-items: stretch !important;\n}\n\n.tina-tailwind .justify-start {\n justify-content: flex-start !important;\n}\n\n.tina-tailwind .justify-end {\n justify-content: flex-end !important;\n}\n\n.tina-tailwind .justify-center {\n justify-content: center !important;\n}\n\n.tina-tailwind .justify-between {\n justify-content: space-between !important;\n}\n\n.tina-tailwind .gap-0\\.5 {\n gap: 2px !important;\n}\n\n.tina-tailwind .gap-0 {\n gap: 0px !important;\n}\n\n.tina-tailwind .gap-4 {\n gap: 16px !important;\n}\n\n.tina-tailwind .gap-1 {\n gap: 4px !important;\n}\n\n.tina-tailwind .gap-3 {\n gap: 12px !important;\n}\n\n.tina-tailwind .gap-1\\.5 {\n gap: 6px !important;\n}\n\n.tina-tailwind .divide-y > :not([hidden]) ~ :not([hidden]) {\n --tw-divide-y-reverse: 0 !important;\n border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse))) !important;\n border-bottom-width: calc(1px * var(--tw-divide-y-reverse)) !important;\n}\n\n.tina-tailwind .overflow-hidden {\n overflow: hidden !important;\n}\n\n.tina-tailwind .overflow-y-auto {\n overflow-y: auto !important;\n}\n\n.tina-tailwind .overflow-ellipsis {\n text-overflow: ellipsis !important;\n}\n\n.tina-tailwind .whitespace-nowrap {\n white-space: nowrap !important;\n}\n\n.tina-tailwind .rounded-lg {\n border-radius: 8px !important;\n}\n\n.tina-tailwind .rounded-full {\n border-radius: 9999px !important;\n}\n\n.tina-tailwind .rounded-md {\n border-radius: 6px !important;\n}\n\n.tina-tailwind .border {\n border-width: 1px !important;\n}\n\n.tina-tailwind .border-t {\n border-top-width: 1px !important;\n}\n\n.tina-tailwind .border-b {\n border-bottom-width: 1px !important;\n}\n\n.tina-tailwind .border-r {\n border-right-width: 1px !important;\n}\n\n.tina-tailwind .border-gray-100 {\n --tw-border-opacity: 1 !important;\n border-color: rgba(237, 236, 243, var(--tw-border-opacity)) !important;\n}\n\n.tina-tailwind .border-gray-200 {\n --tw-border-opacity: 1 !important;\n border-color: rgba(225, 221, 236, var(--tw-border-opacity)) !important;\n}\n\n.tina-tailwind .border-transparent {\n border-color: transparent !important;\n}\n\n.tina-tailwind .bg-white {\n --tw-bg-opacity: 1 !important;\n background-color: rgba(255, 255, 255, var(--tw-bg-opacity)) !important;\n}\n\n.tina-tailwind .bg-gray-50 {\n --tw-bg-opacity: 1 !important;\n background-color: rgba(246, 246, 249, var(--tw-bg-opacity)) !important;\n}\n\n.tina-tailwind .bg-transparent {\n background-color: transparent !important;\n}\n\n.tina-tailwind .bg-gradient-to-b {\n background-image: linear-gradient(to bottom, var(--tw-gradient-stops)) !important;\n}\n\n.tina-tailwind .from-blue-900 {\n --tw-gradient-from: #1D2C6C !important;\n --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to, rgba(29, 44, 108, 0)) !important;\n}\n\n.tina-tailwind .from-white {\n --tw-gradient-from: #fff !important;\n --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to, rgba(255, 255, 255, 0)) !important;\n}\n\n.tina-tailwind .to-gray-900 {\n --tw-gradient-to: #252336 !important;\n}\n\n.tina-tailwind .to-gray-50 {\n --tw-gradient-to: #F6F6F9 !important;\n}\n\n.tina-tailwind .px-5 {\n padding-left: 20px !important;\n padding-right: 20px !important;\n}\n\n.tina-tailwind .py-2 {\n padding-top: 8px !important;\n padding-bottom: 8px !important;\n}\n\n.tina-tailwind .px-4 {\n padding-left: 16px !important;\n padding-right: 16px !important;\n}\n\n.tina-tailwind .py-6 {\n padding-top: 24px !important;\n padding-bottom: 24px !important;\n}\n\n.tina-tailwind .py-4 {\n padding-top: 16px !important;\n padding-bottom: 16px !important;\n}\n\n.tina-tailwind .px-6 {\n padding-left: 24px !important;\n padding-right: 24px !important;\n}\n\n.tina-tailwind .py-1 {\n padding-top: 4px !important;\n padding-bottom: 4px !important;\n}\n\n.tina-tailwind .py-7 {\n padding-top: 28px !important;\n padding-bottom: 28px !important;\n}\n\n.tina-tailwind .px-8 {\n padding-left: 32px !important;\n padding-right: 32px !important;\n}\n\n.tina-tailwind .py-2\\.5 {\n padding-top: 10px !important;\n padding-bottom: 10px !important;\n}\n\n.tina-tailwind .py-14 {\n padding-top: 56px !important;\n padding-bottom: 56px !important;\n}\n\n.tina-tailwind .py-3 {\n padding-top: 12px !important;\n padding-bottom: 12px !important;\n}\n\n.tina-tailwind .py-1\\.5 {\n padding-top: 6px !important;\n padding-bottom: 6px !important;\n}\n\n.tina-tailwind .py-10 {\n padding-top: 40px !important;\n padding-bottom: 40px !important;\n}\n\n.tina-tailwind .pt-16 {\n padding-top: 64px !important;\n}\n\n.tina-tailwind .pb-10 {\n padding-bottom: 40px !important;\n}\n\n.tina-tailwind .text-left {\n text-align: left !important;\n}\n\n.tina-tailwind .text-center {\n text-align: center !important;\n}\n\n.tina-tailwind .font-sans {\n font-family: Inter var, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\" !important;\n}\n\n.tina-tailwind .text-xs {\n font-size: 13px !important;\n line-height: 1.33 !important;\n}\n\n.tina-tailwind .text-2xl {\n font-size: 24px !important;\n line-height: 1.33 !important;\n}\n\n.tina-tailwind .text-base {\n font-size: 16px !important;\n line-height: 1.5 !important;\n}\n\n.tina-tailwind .text-lg {\n font-size: 18px !important;\n line-height: 1.55 !important;\n}\n\n.tina-tailwind .text-sm {\n font-size: 14px !important;\n line-height: 1.43 !important;\n}\n\n.tina-tailwind .text-3xl {\n font-size: 30px !important;\n line-height: 1.2 !important;\n}\n\n.tina-tailwind .text-4xl {\n font-size: 36px !important;\n line-height: 1.1 !important;\n}\n\n.tina-tailwind .font-medium {\n font-weight: 500 !important;\n}\n\n.tina-tailwind .font-bold {\n font-weight: 700 !important;\n}\n\n.tina-tailwind .uppercase {\n text-transform: uppercase !important;\n}\n\n.tina-tailwind .italic {\n font-style: italic !important;\n}\n\n.tina-tailwind .leading-normal {\n line-height: 1.5 !important;\n}\n\n.tina-tailwind .leading-4 {\n line-height: 16px !important;\n}\n\n.tina-tailwind .leading-5 {\n line-height: 20px !important;\n}\n\n.tina-tailwind .tracking-wide {\n letter-spacing: 0.025em !important;\n}\n\n.tina-tailwind .text-gray-700 {\n --tw-text-opacity: 1 !important;\n color: rgba(67, 62, 82, var(--tw-text-opacity)) !important;\n}\n\n.tina-tailwind .text-gray-800 {\n --tw-text-opacity: 1 !important;\n color: rgba(54, 49, 69, var(--tw-text-opacity)) !important;\n}\n\n.tina-tailwind .text-gray-600 {\n --tw-text-opacity: 1 !important;\n color: rgba(86, 81, 101, var(--tw-text-opacity)) !important;\n}\n\n.tina-tailwind .text-blue-400 {\n --tw-text-opacity: 1 !important;\n color: rgba(34, 150, 254, var(--tw-text-opacity)) !important;\n}\n\n.tina-tailwind .text-blue-600 {\n --tw-text-opacity: 1 !important;\n color: rgba(5, 116, 228, var(--tw-text-opacity)) !important;\n}\n\n.tina-tailwind .text-white {\n --tw-text-opacity: 1 !important;\n color: rgba(255, 255, 255, var(--tw-text-opacity)) !important;\n}\n\n.tina-tailwind .text-gray-400 {\n --tw-text-opacity: 1 !important;\n color: rgba(145, 140, 158, var(--tw-text-opacity)) !important;\n}\n\n.tina-tailwind .text-gray-300 {\n --tw-text-opacity: 1 !important;\n color: rgba(178, 173, 190, var(--tw-text-opacity)) !important;\n}\n\n.tina-tailwind .text-gray-500 {\n --tw-text-opacity: 1 !important;\n color: rgba(113, 108, 127, var(--tw-text-opacity)) !important;\n}\n\n.tina-tailwind .underline {\n text-decoration: underline !important;\n}\n\n.tina-tailwind .opacity-80 {\n opacity: .8 !important;\n}\n\n.tina-tailwind .opacity-50 {\n opacity: .5 !important;\n}\n\n.tina-tailwind .opacity-100 {\n opacity: 1 !important;\n}\n\n.tina-tailwind .opacity-0 {\n opacity: 0 !important;\n}\n\n.tina-tailwind .opacity-90 {\n opacity: .9 !important;\n}\n\n.tina-tailwind .opacity-70 {\n opacity: .7 !important;\n}\n\n.tina-tailwind .shadow {\n --tw-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06) !important;\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow) !important;\n}\n\n.tina-tailwind .shadow-lg {\n --tw-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05) !important;\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow) !important;\n}\n\n.tina-tailwind .shadow-sm {\n --tw-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05) !important;\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow) !important;\n}\n\n.tina-tailwind .ring-1 {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color) !important;\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color) !important;\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000) !important;\n}\n\n.tina-tailwind .ring-black {\n --tw-ring-opacity: 1 !important;\n --tw-ring-color: rgba(0, 0, 0, var(--tw-ring-opacity)) !important;\n}\n\n.tina-tailwind .ring-opacity-5 {\n --tw-ring-opacity: .05 !important;\n}\n\n.tina-tailwind .filter {\n filter: var(--tw-filter) !important;\n}\n\n.tina-tailwind .transition-colors {\n transition-property: background-color, border-color, color, fill, stroke !important;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1) !important;\n transition-duration: 150ms !important;\n}\n\n.tina-tailwind .transition-opacity {\n transition-property: opacity !important;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1) !important;\n transition-duration: 150ms !important;\n}\n\n.tina-tailwind .transition-all {\n transition-property: all !important;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1) !important;\n transition-duration: 150ms !important;\n}\n\n.tina-tailwind .transition {\n transition-property: background-color, border-color, color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter !important;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1) !important;\n transition-duration: 150ms !important;\n}\n\n.tina-tailwind .duration-100 {\n transition-duration: 100ms !important;\n}\n\n.tina-tailwind .duration-150 {\n transition-duration: 150ms !important;\n}\n\n.tina-tailwind .duration-300 {\n transition-duration: 300ms !important;\n}\n\n.tina-tailwind .duration-75 {\n transition-duration: 75ms !important;\n}\n\n.tina-tailwind .ease-out {\n transition-timing-function: cubic-bezier(0, 0, 0.2, 1) !important;\n}\n\n.tina-tailwind .ease-in-out {\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1) !important;\n}\n\n.tina-tailwind .ease-in {\n transition-timing-function: cubic-bezier(0.4, 0, 1, 1) !important;\n}\n\n.tina-tailwind {\n color: #565165;\n}\n\n.hover\\:bg-gray-50:hover {\n --tw-bg-opacity: 1 !important;\n background-color: rgba(246, 246, 249, var(--tw-bg-opacity)) !important;\n}\n\n.hover\\:text-blue-500:hover {\n --tw-text-opacity: 1 !important;\n color: rgba(0, 132, 255, var(--tw-text-opacity)) !important;\n}\n\n.hover\\:text-blue-600:hover {\n --tw-text-opacity: 1 !important;\n color: rgba(5, 116, 228, var(--tw-text-opacity)) !important;\n}\n\n.hover\\:opacity-100:hover {\n opacity: 1 !important;\n}\n\n.hover\\:opacity-80:hover {\n opacity: .8 !important;\n}\n\n.focus\\:outline-none:focus {\n outline: 2px solid transparent !important;\n outline-offset: 2px !important;\n}\n\n.group:hover .group-hover\\:opacity-100 {\n opacity: 1 !important;\n}\n\n.group:hover .group-hover\\:opacity-80 {\n opacity: .8 !important;\n}\n\n@media (min-width: 640px) {\n\n .sm\\:rounded-lg {\n border-radius: 8px !important;\n }\n}\n\n@media (min-width: 1024px) {\n\n .lg\\:w-96 {\n width: 384px !important;\n }\n}\n";
|
|
1381
|
+
const errorButtonStyles = {
|
|
1382
|
+
background: "#eb6337",
|
|
1383
|
+
padding: "12px 18px",
|
|
1384
|
+
cursor: "pointer",
|
|
1385
|
+
borderRadius: "50px",
|
|
1386
|
+
textTransform: "uppercase",
|
|
1387
|
+
letterSpacing: "2px",
|
|
1388
|
+
fontWeight: "bold",
|
|
1389
|
+
border: "none",
|
|
1390
|
+
color: "white",
|
|
1391
|
+
margin: "1rem 0"
|
|
1392
|
+
};
|
|
1385
1393
|
const SetupHooks = (props) => {
|
|
1386
1394
|
const cms = useCMS();
|
|
1387
1395
|
const [payload, isLoading] = useGraphqlForms({
|
|
@@ -1411,6 +1419,8 @@ class ErrorBoundary extends React.Component {
|
|
|
1411
1419
|
return { hasError: true, message: error.message };
|
|
1412
1420
|
}
|
|
1413
1421
|
render() {
|
|
1422
|
+
const branchData = window.localStorage.getItem("tinacms-current-branch");
|
|
1423
|
+
const hasBranchData = branchData && branchData.length > 0;
|
|
1414
1424
|
if (this.state.hasError && !this.state.pageRefresh) {
|
|
1415
1425
|
return /* @__PURE__ */ React.createElement("div", {
|
|
1416
1426
|
style: {
|
|
@@ -1431,25 +1441,21 @@ class ErrorBoundary extends React.Component {
|
|
|
1431
1441
|
}
|
|
1432
1442
|
}, /* @__PURE__ */ React.createElement("h3", {
|
|
1433
1443
|
style: { color: "#eb6337" }
|
|
1434
|
-
}, "TinaCMS Render Error"), /* @__PURE__ */ React.createElement("p", null, "Tina caught an error while updating the page:"), /* @__PURE__ */ React.createElement("pre",
|
|
1435
|
-
style: {
|
|
1436
|
-
}, /* @__PURE__ */ React.createElement("button", {
|
|
1437
|
-
style:
|
|
1438
|
-
background: "#eb6337",
|
|
1439
|
-
padding: "12px 18px",
|
|
1440
|
-
cursor: "pointer",
|
|
1441
|
-
borderRadius: "50px",
|
|
1442
|
-
textTransform: "uppercase",
|
|
1443
|
-
letterSpacing: "2px",
|
|
1444
|
-
fontWeight: "bold",
|
|
1445
|
-
border: "none",
|
|
1446
|
-
color: "white"
|
|
1447
|
-
},
|
|
1444
|
+
}, "TinaCMS Render Error"), /* @__PURE__ */ React.createElement("p", null, "Tina caught an error while updating the page:"), /* @__PURE__ */ React.createElement("pre", {
|
|
1445
|
+
style: { marginTop: "1rem", overflowX: "auto" }
|
|
1446
|
+
}, this.state.message), /* @__PURE__ */ React.createElement("br", null), /* @__PURE__ */ React.createElement("p", null, `If you've just updated the form, undo your most recent changes and click "refresh". If after a few refreshes, you're still encountering this error. There is a bigger issue with the site. Please reach out to your site admin.`), /* @__PURE__ */ React.createElement("button", {
|
|
1447
|
+
style: errorButtonStyles,
|
|
1448
1448
|
onClick: () => {
|
|
1449
1449
|
this.setState({ pageRefresh: true });
|
|
1450
1450
|
setTimeout(() => this.setState({ hasError: false, pageRefresh: false }), 3e3);
|
|
1451
1451
|
}
|
|
1452
|
-
}, "Refresh"))
|
|
1452
|
+
}, "Refresh"), hasBranchData && /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("p", null, `If you're using the branch switcher, you may currently be on a "stale" branch that has been deleted or whose content is not compatible with the latest version of the site's layout. Click the button below to switch back to the default branch for this deployment.`), /* @__PURE__ */ React.createElement("button", {
|
|
1453
|
+
style: errorButtonStyles,
|
|
1454
|
+
onClick: () => {
|
|
1455
|
+
window.localStorage.removeItem("tinacms-current-branch");
|
|
1456
|
+
window.location.reload();
|
|
1457
|
+
}
|
|
1458
|
+
}, "Switch to default branch"))));
|
|
1453
1459
|
}
|
|
1454
1460
|
if (this.state.pageRefresh) {
|
|
1455
1461
|
return /* @__PURE__ */ React.createElement(Loader, null, "Let's try that again.");
|
|
@@ -1457,20 +1463,29 @@ class ErrorBoundary extends React.Component {
|
|
|
1457
1463
|
return this.props.children;
|
|
1458
1464
|
}
|
|
1459
1465
|
}
|
|
1466
|
+
const parseURL = (url) => {
|
|
1467
|
+
if (url.includes("localhost")) {
|
|
1468
|
+
return { branch: null, isLocalClient: true, clientId: null };
|
|
1469
|
+
}
|
|
1470
|
+
const tinaHost = "content.tinajs.io";
|
|
1471
|
+
const params = new URL(url);
|
|
1472
|
+
const pattern = new UrlPattern("/content/:clientId/github/:branch");
|
|
1473
|
+
const result = pattern.match(params.pathname);
|
|
1474
|
+
if (params.host !== tinaHost) {
|
|
1475
|
+
throw new Error(`The only supported hosts are ${tinaHost} or localhost, but received ${params.host}.`);
|
|
1476
|
+
}
|
|
1477
|
+
return __spreadProps(__spreadValues({}, result), {
|
|
1478
|
+
isLocalClient: false
|
|
1479
|
+
});
|
|
1480
|
+
};
|
|
1460
1481
|
const TinaCMSProvider2 = (_c) => {
|
|
1461
1482
|
var _d = _c, {
|
|
1462
1483
|
children,
|
|
1463
|
-
branch,
|
|
1464
|
-
clientId,
|
|
1465
|
-
isLocalClient,
|
|
1466
1484
|
cmsCallback,
|
|
1467
1485
|
mediaStore,
|
|
1468
1486
|
tinaioConfig
|
|
1469
1487
|
} = _d, props = __objRest(_d, [
|
|
1470
1488
|
"children",
|
|
1471
|
-
"branch",
|
|
1472
|
-
"clientId",
|
|
1473
|
-
"isLocalClient",
|
|
1474
1489
|
"cmsCallback",
|
|
1475
1490
|
"mediaStore",
|
|
1476
1491
|
"tinaioConfig"
|
|
@@ -1478,6 +1493,15 @@ const TinaCMSProvider2 = (_c) => {
|
|
|
1478
1493
|
if (typeof props.query === "string") {
|
|
1479
1494
|
props.query;
|
|
1480
1495
|
}
|
|
1496
|
+
const validOldSetup = new Boolean(props == null ? void 0 : props.isLocalClient) || new Boolean(props == null ? void 0 : props.clientId) && new Boolean(props == null ? void 0 : props.branch);
|
|
1497
|
+
if (!props.apiURL && !validOldSetup) {
|
|
1498
|
+
throw new Error(`apiURL is a required field`);
|
|
1499
|
+
}
|
|
1500
|
+
const { branch, clientId, isLocalClient } = props.apiURL ? parseURL(props.apiURL) : {
|
|
1501
|
+
branch: props.branch,
|
|
1502
|
+
clientId: props.clientId,
|
|
1503
|
+
isLocalClient: props.isLocalClient
|
|
1504
|
+
};
|
|
1481
1505
|
return /* @__PURE__ */ React.createElement(TinaCloudProvider, {
|
|
1482
1506
|
branch,
|
|
1483
1507
|
clientId,
|
|
@@ -1485,7 +1509,7 @@ const TinaCMSProvider2 = (_c) => {
|
|
|
1485
1509
|
isLocalClient,
|
|
1486
1510
|
cmsCallback,
|
|
1487
1511
|
mediaStore
|
|
1488
|
-
}, props.query ? /* @__PURE__ */ React.createElement(SetupHooks, __spreadProps(__spreadValues({
|
|
1512
|
+
}, /* @__PURE__ */ React.createElement("style", null, styles), props.query ? /* @__PURE__ */ React.createElement(SetupHooks, __spreadProps(__spreadValues({
|
|
1489
1513
|
key: props.query
|
|
1490
1514
|
}, props), {
|
|
1491
1515
|
query: props.query || ""
|
|
@@ -1619,10 +1643,10 @@ const staticRequest = async ({
|
|
|
1619
1643
|
if (!is_server()) {
|
|
1620
1644
|
console.warn(`Whoops! Looks like you are using \`staticRequest\` in the browser to fetch data.
|
|
1621
1645
|
|
|
1622
|
-
The local server is not available outside of \`getStaticProps\` or \`getStaticPaths\` functions.
|
|
1646
|
+
The local server is not available outside of \`getStaticProps\` or \`getStaticPaths\` functions.
|
|
1623
1647
|
This function should only be called on the server at build time.
|
|
1624
1648
|
|
|
1625
|
-
This will work when developing locally but NOT when deployed to production.
|
|
1649
|
+
This will work when developing locally but NOT when deployed to production.
|
|
1626
1650
|
`);
|
|
1627
1651
|
}
|
|
1628
1652
|
return client.request(query, { variables });
|
|
@@ -1635,7 +1659,8 @@ function gql(strings, ...args) {
|
|
|
1635
1659
|
return str;
|
|
1636
1660
|
}
|
|
1637
1661
|
const Layout = ({ children }) => {
|
|
1638
|
-
return /* @__PURE__ */ React.createElement("div", {
|
|
1662
|
+
return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("style", null, styles), /* @__PURE__ */ React.createElement("div", {
|
|
1663
|
+
className: "tina-tailwind",
|
|
1639
1664
|
style: {
|
|
1640
1665
|
position: "fixed",
|
|
1641
1666
|
top: 0,
|
|
@@ -1644,9 +1669,10 @@ const Layout = ({ children }) => {
|
|
|
1644
1669
|
height: "100%",
|
|
1645
1670
|
overflow: "auto",
|
|
1646
1671
|
background: "#F6F6F9",
|
|
1672
|
+
fontFamily: "'Inter', sans-serif",
|
|
1647
1673
|
zIndex: 9999
|
|
1648
1674
|
}
|
|
1649
|
-
}, children);
|
|
1675
|
+
}, children));
|
|
1650
1676
|
};
|
|
1651
1677
|
function ImFilesEmpty(props) {
|
|
1652
1678
|
return GenIcon({ "tag": "svg", "attr": { "version": "1.1", "viewBox": "0 0 16 16" }, "child": [{ "tag": "path", "attr": { "d": "M14.341 5.579c-0.347-0.473-0.831-1.027-1.362-1.558s-1.085-1.015-1.558-1.362c-0.806-0.591-1.197-0.659-1.421-0.659h-5.75c-0.689 0-1.25 0.561-1.25 1.25v11.5c0 0.689 0.561 1.25 1.25 1.25h9.5c0.689 0 1.25-0.561 1.25-1.25v-7.75c0-0.224-0.068-0.615-0.659-1.421zM12.271 4.729c0.48 0.48 0.856 0.912 1.134 1.271h-2.406v-2.405c0.359 0.278 0.792 0.654 1.271 1.134v0zM14 14.75c0 0.136-0.114 0.25-0.25 0.25h-9.5c-0.136 0-0.25-0.114-0.25-0.25v-11.5c0-0.135 0.114-0.25 0.25-0.25 0 0 5.749-0 5.75 0v3.5c0 0.276 0.224 0.5 0.5 0.5h3.5v7.75z" } }, { "tag": "path", "attr": { "d": "M9.421 0.659c-0.806-0.591-1.197-0.659-1.421-0.659h-5.75c-0.689 0-1.25 0.561-1.25 1.25v11.5c0 0.604 0.43 1.109 1 1.225v-12.725c0-0.135 0.115-0.25 0.25-0.25h7.607c-0.151-0.124-0.297-0.238-0.437-0.341z" } }] })(props);
|
|
@@ -1766,7 +1792,7 @@ const AuthTemplate = ({
|
|
|
1766
1792
|
return /* @__PURE__ */ React.createElement("div", {
|
|
1767
1793
|
className: "h-screen w-full bg-gradient-to-b from-blue-900 to-gray-900 flex items-center justify-center px-4 py-6"
|
|
1768
1794
|
}, /* @__PURE__ */ React.createElement("div", {
|
|
1769
|
-
className: "bg-white rounded-lg overflow-hidden shadow-lg w-full max-w-
|
|
1795
|
+
className: "bg-white rounded-lg overflow-hidden shadow-lg w-full max-w-lg"
|
|
1770
1796
|
}, /* @__PURE__ */ React.createElement("div", {
|
|
1771
1797
|
className: "px-5 py-4 border-b border-gray-150"
|
|
1772
1798
|
}, /* @__PURE__ */ React.createElement("h2", {
|
|
@@ -1791,9 +1817,7 @@ const AuthTemplate = ({
|
|
|
1791
1817
|
const LoginPage = () => {
|
|
1792
1818
|
const { setEdit } = useEditState();
|
|
1793
1819
|
const login = () => setEdit(true);
|
|
1794
|
-
return /* @__PURE__ */ React.createElement(AuthTemplate, {
|
|
1795
|
-
message: "Please log in to Tina Cloud to access your content."
|
|
1796
|
-
}, /* @__PURE__ */ React.createElement("a", {
|
|
1820
|
+
return /* @__PURE__ */ React.createElement(AuthTemplate, null, /* @__PURE__ */ React.createElement("a", {
|
|
1797
1821
|
href: "/",
|
|
1798
1822
|
className: "flex-1 text-center inline-flex justify-center items-center px-8 py-3 shadow-sm text-sm leading-4 font-medium rounded-full text-gray-600 border border-gray-150 hover:opacity-80 hover:bg-gray-50 focus:outline-none focus:shadow-outline-blue transition duration-150 ease-out"
|
|
1799
1823
|
}, /* @__PURE__ */ React.createElement(MdOutlineArrowBack, {
|
|
@@ -1805,7 +1829,7 @@ const LoginPage = () => {
|
|
|
1805
1829
|
style: { background: "#0084FF" }
|
|
1806
1830
|
}, /* @__PURE__ */ React.createElement(BiLogIn, {
|
|
1807
1831
|
className: "w-6 h-auto mr-1.5 opacity-80"
|
|
1808
|
-
}), "
|
|
1832
|
+
}), " Enter edit-mode"));
|
|
1809
1833
|
};
|
|
1810
1834
|
const logout = () => {
|
|
1811
1835
|
setEditing(false);
|
|
@@ -1963,37 +1987,37 @@ const CollectionListPage = () => {
|
|
|
1963
1987
|
className: "min-w-full"
|
|
1964
1988
|
}, /* @__PURE__ */ React.createElement("tbody", {
|
|
1965
1989
|
className: "bg-white divide-y divide-gray-150"
|
|
1966
|
-
}, documents.map((
|
|
1967
|
-
const livesiteRoute = routeMapping ? routeMapping.mapper(collection,
|
|
1990
|
+
}, documents.map((document) => {
|
|
1991
|
+
const livesiteRoute = routeMapping ? routeMapping.mapper(collection, document.node) : void 0;
|
|
1968
1992
|
return /* @__PURE__ */ React.createElement("tr", {
|
|
1969
|
-
key:
|
|
1993
|
+
key: document.node.sys.relativePath
|
|
1970
1994
|
}, /* @__PURE__ */ React.createElement("td", {
|
|
1971
1995
|
className: "px-5 py-3 whitespace-nowrap"
|
|
1972
1996
|
}, /* @__PURE__ */ React.createElement("span", {
|
|
1973
1997
|
className: "block text-xs mb-0.5 text-gray-400 uppercase"
|
|
1974
1998
|
}, "Filename"), /* @__PURE__ */ React.createElement(Link, {
|
|
1975
|
-
to: `${location2.pathname}/${
|
|
1976
|
-
className: "h-5 leading-5
|
|
1999
|
+
to: `${location2.pathname}/${document.node.sys.filename}`,
|
|
2000
|
+
className: "h-5 leading-5 flex max-w-xs"
|
|
1977
2001
|
}, /* @__PURE__ */ React.createElement("span", {
|
|
1978
|
-
className: "leading-5 font-medium text-base overflow-ellipsis overflow-hidden whitespace-nowrap text-gray-700"
|
|
1979
|
-
},
|
|
1980
|
-
className: "leading-5 text-base font-medium text-gray-300"
|
|
1981
|
-
},
|
|
2002
|
+
className: "flex-shrink-1 leading-5 font-medium text-base overflow-ellipsis overflow-hidden whitespace-nowrap text-gray-700"
|
|
2003
|
+
}, document.node.sys.filename), /* @__PURE__ */ React.createElement("span", {
|
|
2004
|
+
className: "flex-shrink-0 leading-5 text-base font-medium text-gray-300"
|
|
2005
|
+
}, document.node.sys.extension))), /* @__PURE__ */ React.createElement("td", {
|
|
1982
2006
|
className: "px-5 py-3 whitespace-nowrap"
|
|
1983
2007
|
}, /* @__PURE__ */ React.createElement("span", {
|
|
1984
2008
|
className: "block text-xs mb-0.5 text-gray-400 uppercase"
|
|
1985
2009
|
}, "Template"), /* @__PURE__ */ React.createElement("span", {
|
|
1986
2010
|
className: "h-5 block leading-5 font-regular text-base overflow-ellipsis overflow-hidden whitespace-nowrap text-gray-500"
|
|
1987
|
-
},
|
|
2011
|
+
}, document.node.sys.template)), /* @__PURE__ */ React.createElement("td", {
|
|
1988
2012
|
className: "px-5 py-3 whitespace-nowrap flex gap-3 items-center justify-end"
|
|
1989
2013
|
}, livesiteRoute && /* @__PURE__ */ React.createElement("a", {
|
|
1990
2014
|
href: livesiteRoute,
|
|
1991
|
-
className: "flex gap-1.5 items-center px-4 py-1.5 rounded-full transition-all ease-out duration-150 text-gray-500 hover:text-blue-500"
|
|
2015
|
+
className: "flex gap-1.5 items-center text-base px-4 py-1.5 rounded-full transition-all ease-out duration-150 text-gray-500 hover:text-blue-500"
|
|
1992
2016
|
}, /* @__PURE__ */ React.createElement(BiLinkExternal, {
|
|
1993
2017
|
className: "inline-block h-5 w-auto opacity-70"
|
|
1994
2018
|
}), " ", "View"), /* @__PURE__ */ React.createElement(Link, {
|
|
1995
|
-
to: `${location2.pathname}/${
|
|
1996
|
-
className: "flex gap-1.5 items-center px-4 py-1.5 rounded-full border border-gray-150 transition-all ease-out duration-150 text-gray-700 hover:bg-gray-50 hover:text-blue-500"
|
|
2019
|
+
to: `${location2.pathname}/${document.node.sys.filename}`,
|
|
2020
|
+
className: "flex gap-1.5 items-center text-base px-4 py-1.5 rounded-full border border-gray-150 transition-all ease-out duration-150 text-gray-700 hover:bg-gray-50 hover:text-blue-500"
|
|
1997
2021
|
}, /* @__PURE__ */ React.createElement(BiEdit, {
|
|
1998
2022
|
className: "inline-block h-5 w-auto opacity-70"
|
|
1999
2023
|
}), " ", "Edit")));
|
|
@@ -2056,10 +2080,8 @@ const createDocument = async (cms, collection, template, mutationInfo, values) =
|
|
|
2056
2080
|
});
|
|
2057
2081
|
await cms.api.tina.request(`mutation($collection: String!, $relativePath: String!, $params: DocumentMutation!) {
|
|
2058
2082
|
createDocument(
|
|
2059
|
-
collection: $collection,
|
|
2060
|
-
relativePath: $relativePath,
|
|
2061
|
-
params: $params
|
|
2062
|
-
){__typename}
|
|
2083
|
+
collection: $collection,
|
|
2084
|
+
relativePath: $relativePath,
|
|
2063
2085
|
}`, {
|
|
2064
2086
|
variables: {
|
|
2065
2087
|
collection: collection.name,
|
|
@@ -2106,7 +2128,7 @@ const CollectionCreatePage = () => {
|
|
|
2106
2128
|
}));
|
|
2107
2129
|
};
|
|
2108
2130
|
const useGetDocument = (cms, collectionName, relativePath) => {
|
|
2109
|
-
const [
|
|
2131
|
+
const [document, setDocument] = useState(void 0);
|
|
2110
2132
|
useEffect(() => {
|
|
2111
2133
|
const fetchDocument = async () => {
|
|
2112
2134
|
const response = await cms.api.tina.request(`
|
|
@@ -2122,7 +2144,7 @@ const useGetDocument = (cms, collectionName, relativePath) => {
|
|
|
2122
2144
|
};
|
|
2123
2145
|
fetchDocument();
|
|
2124
2146
|
}, [cms, collectionName, relativePath]);
|
|
2125
|
-
return
|
|
2147
|
+
return document;
|
|
2126
2148
|
};
|
|
2127
2149
|
const GetDocument = ({
|
|
2128
2150
|
cms,
|
|
@@ -2130,11 +2152,11 @@ const GetDocument = ({
|
|
|
2130
2152
|
relativePath,
|
|
2131
2153
|
children
|
|
2132
2154
|
}) => {
|
|
2133
|
-
const
|
|
2134
|
-
if (!
|
|
2155
|
+
const document = useGetDocument(cms, collectionName, relativePath);
|
|
2156
|
+
if (!document) {
|
|
2135
2157
|
return null;
|
|
2136
2158
|
}
|
|
2137
|
-
return /* @__PURE__ */ React.createElement(React.Fragment, null, children(
|
|
2159
|
+
return /* @__PURE__ */ React.createElement(React.Fragment, null, children(document));
|
|
2138
2160
|
};
|
|
2139
2161
|
const updateDocument = async (cms, relativePath, collection, mutationInfo, values) => {
|
|
2140
2162
|
const { includeCollection, includeTemplate } = mutationInfo;
|
|
@@ -2168,12 +2190,12 @@ const CollectionUpdatePage = () => {
|
|
|
2168
2190
|
cms,
|
|
2169
2191
|
collectionName: collection.name,
|
|
2170
2192
|
relativePath
|
|
2171
|
-
}, (
|
|
2193
|
+
}, (document) => {
|
|
2172
2194
|
const form = new Form({
|
|
2173
2195
|
id: "update-form",
|
|
2174
2196
|
label: "form",
|
|
2175
|
-
fields:
|
|
2176
|
-
initialValues:
|
|
2197
|
+
fields: document.form.fields,
|
|
2198
|
+
initialValues: document.values,
|
|
2177
2199
|
onSubmit: async (values) => {
|
|
2178
2200
|
await updateDocument(cms, relativePath, collection, mutationInfo, values);
|
|
2179
2201
|
navigate(`/collections/${collection.name}`);
|
|
@@ -2190,20 +2212,6 @@ const CollectionUpdatePage = () => {
|
|
|
2190
2212
|
});
|
|
2191
2213
|
}));
|
|
2192
2214
|
};
|
|
2193
|
-
const useEmbedTailwind = () => {
|
|
2194
|
-
useEffect(() => {
|
|
2195
|
-
const isSSR = typeof window === "undefined";
|
|
2196
|
-
if (!isSSR) {
|
|
2197
|
-
const head = document.head;
|
|
2198
|
-
const link = document.createElement("link");
|
|
2199
|
-
link.id = "tina-admin-stylesheet";
|
|
2200
|
-
link.type = "text/css";
|
|
2201
|
-
link.rel = "stylesheet";
|
|
2202
|
-
link.href = "https://unpkg.com/tailwindcss@^2/dist/tailwind.min.css";
|
|
2203
|
-
head.appendChild(link);
|
|
2204
|
-
}
|
|
2205
|
-
}, []);
|
|
2206
|
-
};
|
|
2207
2215
|
const Redirect = () => {
|
|
2208
2216
|
React.useEffect(() => {
|
|
2209
2217
|
if (window) {
|
|
@@ -2213,7 +2221,6 @@ const Redirect = () => {
|
|
|
2213
2221
|
return null;
|
|
2214
2222
|
};
|
|
2215
2223
|
const TinaAdmin = () => {
|
|
2216
|
-
useEmbedTailwind();
|
|
2217
2224
|
const isSSR = typeof window === "undefined";
|
|
2218
2225
|
const { edit } = useEditState();
|
|
2219
2226
|
if (isSSR) {
|