tinacms 0.0.0-942e18f-20250102010803 → 0.0.0-95a293c-20250401070633
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/README.md +1 -1
- package/dist/admin/api.d.ts +1 -0
- package/dist/admin/components/GetCollection.d.ts +2 -2
- package/dist/auth/TinaCloudProvider.d.ts +1 -1
- package/dist/client.js +71 -41
- package/dist/client.mjs +48 -30
- package/dist/hooks/create-page-plugin.d.ts +1 -1
- package/dist/index.js +2421 -1068
- package/dist/index.mjs +2429 -1076
- package/dist/internalClient/index.d.ts +3 -3
- package/dist/{node-cache-4c336858.mjs → node-cache-5e8db9f0.mjs} +23 -10
- package/dist/react.d.ts +1 -0
- package/dist/react.js +13 -1
- package/dist/react.mjs +13 -1
- package/dist/toolkit/components/media/media-manager.d.ts +1 -1
- package/dist/toolkit/fields/components/reference/reference-select.d.ts +2 -2
- package/dist/toolkit/fields/plugins/mdx-field-plugin/index.d.ts +4 -1
- package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/components/plate-ui/indent-list-toolbar-button.d.ts +17 -5
- package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/components/plate-ui/mark-toolbar-button.d.ts +4 -18
- package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/index.d.ts +1 -1
- package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/plugins/ui/components.d.ts +6 -11
- package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/toolbar/toolbar-overrides.d.ts +5 -1
- package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/toolbar/toolbar-provider.d.ts +2 -2
- package/dist/toolkit/plugin-branch-switcher/branch-switcher-legacy.d.ts +1 -1
- package/dist/toolkit/plugin-branch-switcher/branch-switcher.d.ts +1 -1
- package/dist/toolkit/react-cloud-config/cloud-config-plugin.d.ts +3 -3
- package/dist/toolkit/react-sidebar/components/sidebar-body.d.ts +5 -4
- package/dist/toolkit/react-sidebar/components/sidebar-loading-placeholder.d.ts +2 -0
- package/dist/toolkit/react-sidebar/components/sidebar-no-forms-placeholder.d.ts +2 -0
- package/dist/toolkit/react-sidebar/sidebar.d.ts +2 -2
- package/dist/toolkit/tina-state.d.ts +4 -0
- package/dist/unifiedClient/index.d.ts +8 -1
- package/package.json +35 -34
- package/dist/toolkit/react-sidebar/components/no-forms-placeholder.d.ts +0 -8
package/dist/index.mjs
CHANGED
|
@@ -9,18 +9,18 @@ import * as React from "react";
|
|
|
9
9
|
import React__default, { useState, useCallback, useEffect, useRef, createContext, forwardRef, useContext, useMemo, startTransition } from "react";
|
|
10
10
|
import { createPortal } from "react-dom";
|
|
11
11
|
import { withRef, cn as cn$1, withVariants, withProps, withCn, createPrimitiveElement } from "@udecode/cn";
|
|
12
|
-
import { toggleList, ELEMENT_UL, ELEMENT_OL, ELEMENT_H1 as ELEMENT_H1$1, ELEMENT_H2 as ELEMENT_H2$1, ELEMENT_H3 as ELEMENT_H3$1, ELEMENT_H4, ELEMENT_H5, ELEMENT_H6, ELEMENT_PARAGRAPH, ELEMENT_BLOCKQUOTE, ELEMENT_CODE_BLOCK, ELEMENT_CODE_LINE, ELEMENT_CODE_SYNTAX, ELEMENT_LI, ELEMENT_LINK, MARK_CODE, MARK_UNDERLINE, MARK_STRIKETHROUGH, MARK_ITALIC, MARK_BOLD, ELEMENT_HR, ELEMENT_TABLE, ELEMENT_TR, ELEMENT_TD, ELEMENT_TH, unwrapList, ELEMENT_TODO_LI, createTrailingBlockPlugin, createAutoformatPlugin, createExitBreakPlugin, KEYS_HEADING, createResetNodePlugin, createHeadingPlugin, createParagraphPlugin, createBlockquotePlugin,
|
|
13
|
-
import { PlateElement, isCollapsed, findNodePath, getPointAfter, insertNodes, ELEMENT_DEFAULT, focusEditor, getPointBefore, setNodes, isElement, PlateLeaf, createPluginFactory, useComposedRef, useEditorRef, createPointRef, insertText, moveSelection, toggleNodeType, useElement, useRemoveNodeButton, useEditorSelector, isSelectionExpanded, withHOC, normalizeEditor, getBlockAbove, queryNode, getParentNode, isType, someNode, isSelectionAtBlockStart, setElements, insertNode, getPluginType, isBlock, isBlockAboveEmpty, findNode, PlateContent, getNodeEntries, useEditorState, collapseSelection, useMarkToolbarButtonState, useMarkToolbarButton,
|
|
12
|
+
import { toggleList, ELEMENT_UL, ELEMENT_OL, ELEMENT_H1 as ELEMENT_H1$1, ELEMENT_H2 as ELEMENT_H2$1, ELEMENT_H3 as ELEMENT_H3$1, ELEMENT_H4, ELEMENT_H5, ELEMENT_H6, ELEMENT_PARAGRAPH, ELEMENT_BLOCKQUOTE, ELEMENT_CODE_BLOCK, ELEMENT_CODE_LINE, ELEMENT_CODE_SYNTAX, ELEMENT_LI, ELEMENT_LINK, MARK_CODE, MARK_UNDERLINE, MARK_STRIKETHROUGH, MARK_ITALIC, MARK_BOLD, ELEMENT_HR, ELEMENT_TABLE, ELEMENT_TR, ELEMENT_TD, ELEMENT_TH, unwrapList, ELEMENT_TODO_LI, createTrailingBlockPlugin, createAutoformatPlugin, createExitBreakPlugin, KEYS_HEADING, createResetNodePlugin, createBasicMarksPlugin, createHeadingPlugin, createParagraphPlugin, createBlockquotePlugin, createUnderlinePlugin, createListPlugin, createIndentListPlugin, createHorizontalRulePlugin, createNodeIdPlugin, createTablePlugin, getListItemEntry, useListToolbarButtonState, useListToolbarButton } from "@udecode/plate";
|
|
13
|
+
import { PlateElement, isCollapsed, findNodePath, getPointAfter, insertNodes, ELEMENT_DEFAULT, focusEditor, getPointBefore, setNodes, isElement, PlateLeaf, createPluginFactory, useComposedRef, useEditorRef, createPointRef, insertText, moveSelection, toggleNodeType, useElement, useRemoveNodeButton, useEditorSelector, isSelectionExpanded, withHOC, normalizeEditor, getBlockAbove, queryNode, getParentNode, isType, someNode, isSelectionAtBlockStart, setElements, insertNode, getPluginType, isBlock, isBlockAboveEmpty, findNode, PlateContent, getNodeEntries, useEditorState, collapseSelection, insertEmptyElement, useMarkToolbarButtonState, useMarkToolbarButton, usePlateSelectors, useEventEditorSelectors, PortalBody, useFormInputProps, createPlugins, Plate } from "@udecode/plate-common";
|
|
14
14
|
import { ELEMENT_SLASH_INPUT, createSlashPlugin } from "@udecode/plate-slash-command";
|
|
15
15
|
import { useSelected, useReadOnly, ReactEditor } from "slate-react";
|
|
16
16
|
import { useCodeBlockElementState, useCodeSyntaxLeaf, ELEMENT_CODE_BLOCK as ELEMENT_CODE_BLOCK$1 } from "@udecode/plate-code-block";
|
|
17
17
|
import MonacoEditor, { loader, useMonaco } from "@monaco-editor/react";
|
|
18
|
-
import { Combobox, ComboboxInput, ComboboxButton, Transition, ComboboxOptions, ComboboxOption, Popover as Popover$3, PopoverButton, PopoverPanel, TransitionChild, Disclosure, DisclosureButton, DisclosurePanel, Menu, MenuButton, MenuItems, MenuItem } from "@headlessui/react";
|
|
18
|
+
import { Combobox as Combobox$1, ComboboxInput, ComboboxButton, Transition, ComboboxOptions, ComboboxOption, Popover as Popover$3, PopoverButton, PopoverPanel, TransitionChild, Disclosure, DisclosureButton, DisclosurePanel, Menu, MenuButton, MenuItems, MenuItem } from "@headlessui/react";
|
|
19
19
|
import { cva } from "class-variance-authority";
|
|
20
20
|
import { Eye, SquarePen, Plus, AlignCenter as AlignCenter$1, AlignJustify, AlignLeft as AlignLeft$1, AlignRight as AlignRight$1, ChevronDown, PaintBucket, Quote, Check, ChevronRight, ChevronsUpDown, X, FileCode, Baseline, RectangleVertical, Combine, Ungroup, MessageSquare, MessageSquarePlus, Trash, GripVertical, Edit2, Smile, ExternalLink, Heading1, Heading2, Heading3, Heading4, Heading5, Heading6, Indent, Keyboard, WrapText, Minus, MoreHorizontal, Outdent, Pilcrow, RotateCcw, RectangleHorizontal, Search, Settings, Strikethrough, Subscript, Superscript, Table, Text, Underline, Link2Off, Moon, SunMedium, Twitter } from "lucide-react";
|
|
21
21
|
import mermaid from "mermaid";
|
|
22
22
|
import { ELEMENT_H1, ELEMENT_H2, ELEMENT_H3, ELEMENT_H4 as ELEMENT_H4$1, ELEMENT_H5 as ELEMENT_H5$1, ELEMENT_H6 as ELEMENT_H6$1 } from "@udecode/plate-heading";
|
|
23
|
-
import { useComboboxContext, Combobox as Combobox$
|
|
23
|
+
import { useComboboxContext, Combobox as Combobox$2, useComboboxStore, ComboboxProvider, Portal, ComboboxPopover, ComboboxItem } from "@ariakit/react";
|
|
24
24
|
import { useHTMLInputCursorState, useComboboxInput, filterWords } from "@udecode/plate-combobox";
|
|
25
25
|
import { useTableCellElementState, useTableCellElement, useTableCellElementResizableState, useTableCellElementResizable, useTableBordersDropdownMenuContentState, useTableMergeState, TableProvider, useTableElementState, useTableElement, mergeTableCells, unmergeTableCells, ELEMENT_TABLE as ELEMENT_TABLE$1, getTableColumnCount, insertTable, deleteTable, insertTableColumn, deleteColumn, insertTableRow, deleteRow } from "@udecode/plate-table";
|
|
26
26
|
import { ResizeHandle as ResizeHandle$1 } from "@udecode/plate-resizable";
|
|
@@ -43,6 +43,7 @@ import { twMerge } from "tailwind-merge";
|
|
|
43
43
|
import { Command as Command$1 } from "cmdk";
|
|
44
44
|
import { isHotkey } from "is-hotkey";
|
|
45
45
|
import { Transforms, Element, Range, Path, Node, Editor as Editor$1 } from "slate";
|
|
46
|
+
import { useWindowWidth } from "@react-hook/window-size";
|
|
46
47
|
import get from "lodash.get";
|
|
47
48
|
import moment from "moment";
|
|
48
49
|
import { formatDistanceToNow } from "date-fns";
|
|
@@ -52,14 +53,13 @@ import * as TooltipPrimitive from "@radix-ui/react-tooltip";
|
|
|
52
53
|
import { ELEMENT_PARAGRAPH as ELEMENT_PARAGRAPH$1 } from "@udecode/plate-paragraph";
|
|
53
54
|
import { ELEMENT_BLOCKQUOTE as ELEMENT_BLOCKQUOTE$1 } from "@udecode/plate-block-quote";
|
|
54
55
|
import { useFloatingToolbarState, offset, flip, useFloatingToolbar } from "@udecode/plate-floating";
|
|
55
|
-
import { useWindowWidth } from "@react-hook/window-size";
|
|
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";
|
|
60
|
-
import
|
|
59
|
+
import gql from "graphql-tag";
|
|
61
60
|
import { diff } from "@graphql-inspector/core";
|
|
62
|
-
import
|
|
61
|
+
import * as yup from "yup";
|
|
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(
|
|
@@ -992,7 +992,7 @@ const Autocomplete = ({
|
|
|
992
992
|
}
|
|
993
993
|
}, [items2, query]);
|
|
994
994
|
return /* @__PURE__ */ React__default.createElement(
|
|
995
|
-
Combobox,
|
|
995
|
+
Combobox$1,
|
|
996
996
|
{
|
|
997
997
|
value,
|
|
998
998
|
onChange,
|
|
@@ -2173,7 +2173,7 @@ const InlineComboboxInput = forwardRef(({ className, ...props }, propRef) => {
|
|
|
2173
2173
|
},
|
|
2174
2174
|
value || ""
|
|
2175
2175
|
), /* @__PURE__ */ React__default.createElement(
|
|
2176
|
-
Combobox$
|
|
2176
|
+
Combobox$2,
|
|
2177
2177
|
{
|
|
2178
2178
|
autoSelect: true,
|
|
2179
2179
|
className: cn$1(
|
|
@@ -2970,7 +2970,7 @@ const Components = () => {
|
|
|
2970
2970
|
),
|
|
2971
2971
|
[MARK_CODE]: CodeLeaf,
|
|
2972
2972
|
[MARK_UNDERLINE]: withProps(PlateLeaf, { as: "u" }),
|
|
2973
|
-
[MARK_STRIKETHROUGH]:
|
|
2973
|
+
[MARK_STRIKETHROUGH]: ({ editor, leaf, text, ...props }) => /* @__PURE__ */ React__default.createElement("s", { ...props.attributes, ...props }),
|
|
2974
2974
|
[MARK_ITALIC]: withProps(PlateLeaf, { as: "em" }),
|
|
2975
2975
|
[MARK_BOLD]: ({ editor, leaf, text, ...props }) => /* @__PURE__ */ React__default.createElement("strong", { ...props.attributes, ...props }),
|
|
2976
2976
|
[ELEMENT_HR]: ({
|
|
@@ -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) => {
|
|
@@ -5224,7 +5194,7 @@ const PopoverContent = React.forwardRef(({ className, align = "center", sideOffs
|
|
|
5224
5194
|
side: "bottom",
|
|
5225
5195
|
className: cn(
|
|
5226
5196
|
"rounded-md border bg-white p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
|
|
5227
|
-
"max-h-[30vh] max-w-[
|
|
5197
|
+
"max-h-[30vh] max-w-[30vw] overflow-y-auto",
|
|
5228
5198
|
className
|
|
5229
5199
|
),
|
|
5230
5200
|
...props
|
|
@@ -5316,11 +5286,7 @@ const getFilename = (optionSets, value) => {
|
|
|
5316
5286
|
const node = nodes.find((node2) => node2.id === value);
|
|
5317
5287
|
return node ? node._internalSys.filename : null;
|
|
5318
5288
|
};
|
|
5319
|
-
const
|
|
5320
|
-
cms,
|
|
5321
|
-
input,
|
|
5322
|
-
field
|
|
5323
|
-
}) => {
|
|
5289
|
+
const Combobox = ({ cms, input, field }) => {
|
|
5324
5290
|
const [open2, setOpen] = React.useState(false);
|
|
5325
5291
|
const [value, setValue] = React.useState(input.value);
|
|
5326
5292
|
const [displayText, setDisplayText] = React.useState(null);
|
|
@@ -5336,7 +5302,9 @@ const ComboboxDemo = ({
|
|
|
5336
5302
|
}, [value, input, optionSets]);
|
|
5337
5303
|
React.useEffect(() => {
|
|
5338
5304
|
if (field.experimental___filter && optionSets.length > 0) {
|
|
5339
|
-
setFilteredOptionsList(
|
|
5305
|
+
setFilteredOptionsList(
|
|
5306
|
+
field.experimental___filter(optionSets, void 0)
|
|
5307
|
+
);
|
|
5340
5308
|
} else {
|
|
5341
5309
|
setFilteredOptionsList(optionSets);
|
|
5342
5310
|
}
|
|
@@ -5344,17 +5312,17 @@ const ComboboxDemo = ({
|
|
|
5344
5312
|
if (loading === true) {
|
|
5345
5313
|
return /* @__PURE__ */ React.createElement(LoadingDots, { color: "var(--tina-color-primary)" });
|
|
5346
5314
|
}
|
|
5347
|
-
return /* @__PURE__ */ React.createElement(
|
|
5315
|
+
return /* @__PURE__ */ React.createElement(Popover, { open: open2, onOpenChange: setOpen }, /* @__PURE__ */ React.createElement(PopoverTrigger, { asChild: true }, /* @__PURE__ */ React.createElement(
|
|
5348
5316
|
Button,
|
|
5349
5317
|
{
|
|
5350
5318
|
variant: "outline",
|
|
5351
5319
|
role: "combobox",
|
|
5352
5320
|
"aria-expanded": open2,
|
|
5353
|
-
className: "w-
|
|
5321
|
+
className: "w-full justify-between"
|
|
5354
5322
|
},
|
|
5355
5323
|
/* @__PURE__ */ React.createElement("p", { className: "truncate" }, displayText ?? "Choose an option..."),
|
|
5356
5324
|
open2 ? /* @__PURE__ */ React.createElement(IoMdArrowDropup, { size: 20 }) : /* @__PURE__ */ React.createElement(IoMdArrowDropdown, { size: 20 })
|
|
5357
|
-
)), /* @__PURE__ */ React.createElement(PopoverContent, { className: "p-0 relative" }, /* @__PURE__ */ React.createElement(
|
|
5325
|
+
)), /* @__PURE__ */ React.createElement(PopoverContent, { className: "p-0 relative min-w-[var(--radix-popover-trigger-width)]" }, /* @__PURE__ */ React.createElement(
|
|
5358
5326
|
Command,
|
|
5359
5327
|
{
|
|
5360
5328
|
shouldFilter: !field.experimental___filter,
|
|
@@ -5378,32 +5346,25 @@ const ComboboxDemo = ({
|
|
|
5378
5346
|
}
|
|
5379
5347
|
),
|
|
5380
5348
|
/* @__PURE__ */ React.createElement(CommandEmpty, null, "No reference found"),
|
|
5381
|
-
/* @__PURE__ */ React.createElement(CommandList, null, filteredOptionsList.length > 0 && (filteredOptionsList == null ? void 0 : filteredOptionsList.map(({ collection, edges }) => /* @__PURE__ */ React.createElement(
|
|
5382
|
-
|
|
5383
|
-
|
|
5384
|
-
|
|
5385
|
-
|
|
5386
|
-
|
|
5387
|
-
|
|
5388
|
-
|
|
5389
|
-
|
|
5390
|
-
|
|
5391
|
-
|
|
5392
|
-
|
|
5393
|
-
|
|
5394
|
-
|
|
5395
|
-
field,
|
|
5396
|
-
_values,
|
|
5397
|
-
node,
|
|
5398
|
-
onSelect: (currentValue) => {
|
|
5399
|
-
setValue(currentValue);
|
|
5400
|
-
setOpen(false);
|
|
5401
|
-
}
|
|
5349
|
+
/* @__PURE__ */ React.createElement(CommandList, null, filteredOptionsList.length > 0 && (filteredOptionsList == null ? void 0 : filteredOptionsList.map(({ collection, edges }) => /* @__PURE__ */ React.createElement(CommandGroup, { key: `${collection}-group`, heading: collection }, /* @__PURE__ */ React.createElement(CommandList, null, edges == null ? void 0 : edges.map(({ node }) => {
|
|
5350
|
+
const { id, _values } = node;
|
|
5351
|
+
return /* @__PURE__ */ React.createElement(
|
|
5352
|
+
OptionComponent,
|
|
5353
|
+
{
|
|
5354
|
+
id,
|
|
5355
|
+
key: id,
|
|
5356
|
+
value,
|
|
5357
|
+
field,
|
|
5358
|
+
_values,
|
|
5359
|
+
node,
|
|
5360
|
+
onSelect: (currentValue) => {
|
|
5361
|
+
setValue(currentValue);
|
|
5362
|
+
setOpen(false);
|
|
5402
5363
|
}
|
|
5403
|
-
|
|
5404
|
-
|
|
5405
|
-
))))
|
|
5406
|
-
)))
|
|
5364
|
+
}
|
|
5365
|
+
);
|
|
5366
|
+
}))))))
|
|
5367
|
+
)));
|
|
5407
5368
|
};
|
|
5408
5369
|
const useGetNode = (cms, id) => {
|
|
5409
5370
|
const [document2, setDocument] = React.useState(
|
|
@@ -5476,7 +5437,7 @@ const ReferenceLink = ({ cms, input }) => {
|
|
|
5476
5437
|
};
|
|
5477
5438
|
const Reference = ({ input, field }) => {
|
|
5478
5439
|
const cms = useCMS();
|
|
5479
|
-
return /* @__PURE__ */ React.createElement(
|
|
5440
|
+
return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("div", { className: "relative group" }, /* @__PURE__ */ React.createElement(Combobox, { cms, input, field })), /* @__PURE__ */ React.createElement(ReferenceLink, { cms, input }));
|
|
5480
5441
|
};
|
|
5481
5442
|
const ButtonToggle = ({
|
|
5482
5443
|
input,
|
|
@@ -5713,7 +5674,9 @@ const Item$2 = ({
|
|
|
5713
5674
|
onClick: () => {
|
|
5714
5675
|
const state = tinaForm.finalForm.getState();
|
|
5715
5676
|
if (state.invalid === true) {
|
|
5716
|
-
cms.alerts.error(
|
|
5677
|
+
cms.alerts.error(
|
|
5678
|
+
"Cannot navigate away from an invalid form."
|
|
5679
|
+
);
|
|
5717
5680
|
return;
|
|
5718
5681
|
}
|
|
5719
5682
|
cms.dispatch({
|
|
@@ -6297,7 +6260,9 @@ const BlockListItem = ({
|
|
|
6297
6260
|
onClick: () => {
|
|
6298
6261
|
const state = tinaForm.finalForm.getState();
|
|
6299
6262
|
if (state.invalid === true) {
|
|
6300
|
-
cms.alerts.error(
|
|
6263
|
+
cms.alerts.error(
|
|
6264
|
+
"Cannot navigate away from an invalid form."
|
|
6265
|
+
);
|
|
6301
6266
|
return;
|
|
6302
6267
|
}
|
|
6303
6268
|
cms.dispatch({
|
|
@@ -6779,28 +6744,28 @@ class DaysView extends React__default.Component {
|
|
|
6779
6744
|
}
|
|
6780
6745
|
renderDayHeaders() {
|
|
6781
6746
|
const locale = this.props.viewDate.localeData();
|
|
6782
|
-
|
|
6747
|
+
const dayItems = getDaysOfWeek(locale).map((day, index) => /* @__PURE__ */ React__default.createElement("th", { key: day + index, className: "dow" }, day));
|
|
6783
6748
|
return /* @__PURE__ */ React__default.createElement("tr", null, dayItems);
|
|
6784
6749
|
}
|
|
6785
6750
|
renderDays() {
|
|
6786
6751
|
const date = this.props.viewDate;
|
|
6787
6752
|
const startOfMonth = date.clone().startOf("month");
|
|
6788
6753
|
const endOfMonth = date.clone().endOf("month");
|
|
6789
|
-
|
|
6790
|
-
|
|
6754
|
+
const rows = [[], [], [], [], [], []];
|
|
6755
|
+
const startDate = date.clone().subtract(1, "months");
|
|
6791
6756
|
startDate.date(startDate.daysInMonth()).startOf("week");
|
|
6792
|
-
|
|
6757
|
+
const endDate = startDate.clone().add(42, "d");
|
|
6793
6758
|
let i = 0;
|
|
6794
6759
|
while (startDate.isBefore(endDate)) {
|
|
6795
|
-
|
|
6760
|
+
const row = getRow$2(rows, i++);
|
|
6796
6761
|
row.push(this.renderDay(startDate, startOfMonth, endOfMonth));
|
|
6797
6762
|
startDate.add(1, "d");
|
|
6798
6763
|
}
|
|
6799
6764
|
return rows.map((r, i2) => /* @__PURE__ */ React__default.createElement("tr", { key: `${endDate.month()}_${i2}` }, r));
|
|
6800
6765
|
}
|
|
6801
6766
|
renderDay(date, startOfMonth, endOfMonth) {
|
|
6802
|
-
|
|
6803
|
-
|
|
6767
|
+
const selectedDate = this.props.selectedDate;
|
|
6768
|
+
const dayProps = {
|
|
6804
6769
|
key: date.format("M_D"),
|
|
6805
6770
|
"data-value": date.date(),
|
|
6806
6771
|
"data-month": date.month(),
|
|
@@ -6854,7 +6819,7 @@ function getRow$2(rows, day) {
|
|
|
6854
6819
|
}
|
|
6855
6820
|
function getDaysOfWeek(locale) {
|
|
6856
6821
|
const first = locale.firstDayOfWeek();
|
|
6857
|
-
|
|
6822
|
+
const dow = [];
|
|
6858
6823
|
let i = 0;
|
|
6859
6824
|
locale._weekdaysMin.forEach(function(day) {
|
|
6860
6825
|
dow[(7 + i++ - first) % 7] = day;
|
|
@@ -6872,7 +6837,7 @@ class MonthsView extends React__default.Component {
|
|
|
6872
6837
|
return /* @__PURE__ */ React__default.createElement("div", { className: "rdtMonths" }, /* @__PURE__ */ React__default.createElement("table", null, /* @__PURE__ */ React__default.createElement("thead", null, this.renderNavigation())), /* @__PURE__ */ React__default.createElement("table", null, /* @__PURE__ */ React__default.createElement("tbody", null, this.renderMonths())));
|
|
6873
6838
|
}
|
|
6874
6839
|
renderNavigation() {
|
|
6875
|
-
|
|
6840
|
+
const year = this.props.viewDate.year();
|
|
6876
6841
|
return /* @__PURE__ */ React__default.createElement(
|
|
6877
6842
|
ViewNavigation,
|
|
6878
6843
|
{
|
|
@@ -6885,9 +6850,9 @@ class MonthsView extends React__default.Component {
|
|
|
6885
6850
|
);
|
|
6886
6851
|
}
|
|
6887
6852
|
renderMonths() {
|
|
6888
|
-
|
|
6853
|
+
const rows = [[], [], []];
|
|
6889
6854
|
for (let month = 0; month < 12; month++) {
|
|
6890
|
-
|
|
6855
|
+
const row = getRow$1(rows, month);
|
|
6891
6856
|
row.push(this.renderMonth(month));
|
|
6892
6857
|
}
|
|
6893
6858
|
return rows.map((months, i) => /* @__PURE__ */ React__default.createElement("tr", { key: i }, months));
|
|
@@ -6904,7 +6869,7 @@ class MonthsView extends React__default.Component {
|
|
|
6904
6869
|
if (selectedDate && selectedDate.year() === this.props.viewDate.year() && selectedDate.month() === month) {
|
|
6905
6870
|
className += " rdtActive";
|
|
6906
6871
|
}
|
|
6907
|
-
|
|
6872
|
+
const props = { key: month, className, "data-value": month, onClick };
|
|
6908
6873
|
if (this.props.renderMonth) {
|
|
6909
6874
|
return this.props.renderMonth(
|
|
6910
6875
|
props,
|
|
@@ -6916,11 +6881,11 @@ class MonthsView extends React__default.Component {
|
|
|
6916
6881
|
return /* @__PURE__ */ React__default.createElement("td", { ...props }, this.getMonthText(month));
|
|
6917
6882
|
}
|
|
6918
6883
|
isDisabledMonth(month) {
|
|
6919
|
-
|
|
6884
|
+
const isValidDate = this.props.isValidDate;
|
|
6920
6885
|
if (!isValidDate) {
|
|
6921
6886
|
return false;
|
|
6922
6887
|
}
|
|
6923
|
-
|
|
6888
|
+
const date = this.props.viewDate.clone().set({ month });
|
|
6924
6889
|
let day = date.endOf("month").date() + 1;
|
|
6925
6890
|
while (day-- > 1) {
|
|
6926
6891
|
if (isValidDate(date.date(day))) {
|
|
@@ -6972,9 +6937,9 @@ class YearsView extends React__default.Component {
|
|
|
6972
6937
|
}
|
|
6973
6938
|
renderYears() {
|
|
6974
6939
|
const viewYear = this.getViewYear();
|
|
6975
|
-
|
|
6940
|
+
const rows = [[], [], []];
|
|
6976
6941
|
for (let year = viewYear - 1; year < viewYear + 11; year++) {
|
|
6977
|
-
|
|
6942
|
+
const row = getRow(rows, year - viewYear);
|
|
6978
6943
|
row.push(this.renderYear(year));
|
|
6979
6944
|
}
|
|
6980
6945
|
return rows.map((years, i) => /* @__PURE__ */ React__default.createElement("tr", { key: i }, years));
|
|
@@ -6991,7 +6956,7 @@ class YearsView extends React__default.Component {
|
|
|
6991
6956
|
if (selectedYear === year) {
|
|
6992
6957
|
className += " rdtActive";
|
|
6993
6958
|
}
|
|
6994
|
-
|
|
6959
|
+
const props = { key: year, className, "data-value": year, onClick };
|
|
6995
6960
|
return this.props.renderYear(
|
|
6996
6961
|
props,
|
|
6997
6962
|
year,
|
|
@@ -7005,15 +6970,15 @@ class YearsView extends React__default.Component {
|
|
|
7005
6970
|
return this.props.selectedDate && this.props.selectedDate.year();
|
|
7006
6971
|
}
|
|
7007
6972
|
isDisabledYear(year) {
|
|
7008
|
-
|
|
6973
|
+
const cache = this.disabledYearsCache;
|
|
7009
6974
|
if (cache[year] !== void 0) {
|
|
7010
6975
|
return cache[year];
|
|
7011
6976
|
}
|
|
7012
|
-
|
|
6977
|
+
const isValidDate = this.props.isValidDate;
|
|
7013
6978
|
if (!isValidDate) {
|
|
7014
6979
|
return false;
|
|
7015
6980
|
}
|
|
7016
|
-
|
|
6981
|
+
const date = this.props.viewDate.clone().set({ year });
|
|
7017
6982
|
let day = date.endOf("year").dayOfYear() + 1;
|
|
7018
6983
|
while (day-- > 1) {
|
|
7019
6984
|
if (isValidDate(date.dayOfYear(day))) {
|
|
@@ -7060,7 +7025,7 @@ const timeConstraints = {
|
|
|
7060
7025
|
}
|
|
7061
7026
|
};
|
|
7062
7027
|
function createConstraints(overrideTimeConstraints) {
|
|
7063
|
-
|
|
7028
|
+
const constraints = {};
|
|
7064
7029
|
Object.keys(timeConstraints).forEach((type) => {
|
|
7065
7030
|
constraints[type] = {
|
|
7066
7031
|
...timeConstraints[type],
|
|
@@ -7076,7 +7041,7 @@ class TimeView extends React__default.Component {
|
|
|
7076
7041
|
this.state = this.getTimeParts(props.selectedDate || props.viewDate);
|
|
7077
7042
|
}
|
|
7078
7043
|
render() {
|
|
7079
|
-
|
|
7044
|
+
const items2 = [];
|
|
7080
7045
|
const timeParts = this.state;
|
|
7081
7046
|
this.getCounters().forEach((c, i) => {
|
|
7082
7047
|
if (i && c !== "ampm") {
|
|
@@ -7138,8 +7103,8 @@ class TimeView extends React__default.Component {
|
|
|
7138
7103
|
}
|
|
7139
7104
|
if (type === "ampm")
|
|
7140
7105
|
return this.toggleDayPart();
|
|
7141
|
-
|
|
7142
|
-
|
|
7106
|
+
const update = {};
|
|
7107
|
+
const body = document.body;
|
|
7143
7108
|
update[type] = this[action](type);
|
|
7144
7109
|
this.setState(update);
|
|
7145
7110
|
this.timer = setTimeout(() => {
|
|
@@ -7182,8 +7147,8 @@ class TimeView extends React__default.Component {
|
|
|
7182
7147
|
return pad(type, value);
|
|
7183
7148
|
}
|
|
7184
7149
|
getCounters() {
|
|
7185
|
-
|
|
7186
|
-
|
|
7150
|
+
const counters = [];
|
|
7151
|
+
const format2 = this.props.timeFormat;
|
|
7187
7152
|
if (format2.toLowerCase().indexOf("h") !== -1) {
|
|
7188
7153
|
counters.push("hours");
|
|
7189
7154
|
if (format2.indexOf("m") !== -1) {
|
|
@@ -7315,7 +7280,7 @@ class Datetime extends React__default.Component {
|
|
|
7315
7280
|
__publicField(this, "_renderCalendar", () => {
|
|
7316
7281
|
const props = this.props;
|
|
7317
7282
|
const state = this.state;
|
|
7318
|
-
|
|
7283
|
+
const viewProps = {
|
|
7319
7284
|
viewDate: state.viewDate.clone(),
|
|
7320
7285
|
selectedDate: this.getSelectedDate(),
|
|
7321
7286
|
isValidDate: props.isValidDate,
|
|
@@ -7358,10 +7323,10 @@ class Datetime extends React__default.Component {
|
|
|
7358
7323
|
__publicField(this, "viewToMethod", { days: "date", months: "month", years: "year" });
|
|
7359
7324
|
__publicField(this, "nextView", { days: "time", months: "days", years: "months" });
|
|
7360
7325
|
__publicField(this, "_updateDate", (e) => {
|
|
7361
|
-
|
|
7362
|
-
|
|
7363
|
-
|
|
7364
|
-
|
|
7326
|
+
const state = this.state;
|
|
7327
|
+
const currentView = state.currentView;
|
|
7328
|
+
const updateOnView = this.getUpdateOn(this.getFormat("date"));
|
|
7329
|
+
const viewDate = this.state.viewDate.clone();
|
|
7365
7330
|
viewDate[this.viewToMethod[currentView]](
|
|
7366
7331
|
parseInt(e.target.getAttribute("data-value"), 10)
|
|
7367
7332
|
);
|
|
@@ -7369,7 +7334,7 @@ class Datetime extends React__default.Component {
|
|
|
7369
7334
|
viewDate.month(parseInt(e.target.getAttribute("data-month"), 10));
|
|
7370
7335
|
viewDate.year(parseInt(e.target.getAttribute("data-year"), 10));
|
|
7371
7336
|
}
|
|
7372
|
-
|
|
7337
|
+
const update = { viewDate };
|
|
7373
7338
|
if (currentView === updateOnView) {
|
|
7374
7339
|
update.selectedDate = viewDate.clone();
|
|
7375
7340
|
update.inputValue = viewDate.format(this.getFormat("datetime"));
|
|
@@ -7383,7 +7348,7 @@ class Datetime extends React__default.Component {
|
|
|
7383
7348
|
this.setState(update);
|
|
7384
7349
|
});
|
|
7385
7350
|
__publicField(this, "_viewNavigate", (modifier, unit) => {
|
|
7386
|
-
|
|
7351
|
+
const viewDate = this.state.viewDate.clone();
|
|
7387
7352
|
viewDate.add(modifier, unit);
|
|
7388
7353
|
if (modifier > 0) {
|
|
7389
7354
|
this.props.onNavigateForward(modifier, unit);
|
|
@@ -7393,7 +7358,7 @@ class Datetime extends React__default.Component {
|
|
|
7393
7358
|
this.setState({ viewDate });
|
|
7394
7359
|
});
|
|
7395
7360
|
__publicField(this, "_setTime", (type, value) => {
|
|
7396
|
-
|
|
7361
|
+
const date = (this.getSelectedDate() || this.state.viewDate).clone();
|
|
7397
7362
|
date[type](value);
|
|
7398
7363
|
if (!this.props.value) {
|
|
7399
7364
|
this.setState({
|
|
@@ -7417,7 +7382,7 @@ class Datetime extends React__default.Component {
|
|
|
7417
7382
|
});
|
|
7418
7383
|
});
|
|
7419
7384
|
__publicField(this, "_handleClickOutside", () => {
|
|
7420
|
-
|
|
7385
|
+
const props = this.props;
|
|
7421
7386
|
if (props.input && this.state.open && props.open === void 0 && props.closeOnClickOutside) {
|
|
7422
7387
|
this._closeCalendar();
|
|
7423
7388
|
}
|
|
@@ -7432,7 +7397,7 @@ class Datetime extends React__default.Component {
|
|
|
7432
7397
|
return;
|
|
7433
7398
|
const value = e.target ? e.target.value : e;
|
|
7434
7399
|
const localMoment = this.localMoment(value, this.getFormat("datetime"));
|
|
7435
|
-
|
|
7400
|
+
const update = { inputValue: value };
|
|
7436
7401
|
if (localMoment.isValid()) {
|
|
7437
7402
|
update.selectedDate = localMoment;
|
|
7438
7403
|
update.viewDate = localMoment.clone().startOf("month");
|
|
@@ -7496,9 +7461,9 @@ class Datetime extends React__default.Component {
|
|
|
7496
7461
|
return this.props.renderView(this.state.currentView, this._renderCalendar);
|
|
7497
7462
|
}
|
|
7498
7463
|
getInitialState() {
|
|
7499
|
-
|
|
7500
|
-
|
|
7501
|
-
|
|
7464
|
+
const props = this.props;
|
|
7465
|
+
const inputFormat = this.getFormat("datetime");
|
|
7466
|
+
const selectedDate = this.parseDate(
|
|
7502
7467
|
props.value || props.initialValue,
|
|
7503
7468
|
inputFormat
|
|
7504
7469
|
);
|
|
@@ -7529,7 +7494,7 @@ class Datetime extends React__default.Component {
|
|
|
7529
7494
|
return this.getInitialDate();
|
|
7530
7495
|
}
|
|
7531
7496
|
getInitialDate() {
|
|
7532
|
-
|
|
7497
|
+
const m = this.localMoment();
|
|
7533
7498
|
m.hour(0).minute(0).second(0).millisecond(0);
|
|
7534
7499
|
return m;
|
|
7535
7500
|
}
|
|
@@ -7549,8 +7514,8 @@ class Datetime extends React__default.Component {
|
|
|
7549
7514
|
}
|
|
7550
7515
|
getClassName() {
|
|
7551
7516
|
let cn2 = "rdt";
|
|
7552
|
-
|
|
7553
|
-
|
|
7517
|
+
const props = this.props;
|
|
7518
|
+
const propCn = props.className;
|
|
7554
7519
|
if (Array.isArray(propCn)) {
|
|
7555
7520
|
cn2 += " " + propCn.join(" ");
|
|
7556
7521
|
} else if (propCn) {
|
|
@@ -7583,14 +7548,14 @@ class Datetime extends React__default.Component {
|
|
|
7583
7548
|
return viewModes.DAYS;
|
|
7584
7549
|
}
|
|
7585
7550
|
getLocaleData() {
|
|
7586
|
-
|
|
7551
|
+
const p = this.props;
|
|
7587
7552
|
return this.localMoment(
|
|
7588
7553
|
p.value || p.defaultValue || /* @__PURE__ */ new Date()
|
|
7589
7554
|
).localeData();
|
|
7590
7555
|
}
|
|
7591
7556
|
getDateFormat() {
|
|
7592
7557
|
const locale = this.getLocaleData();
|
|
7593
|
-
|
|
7558
|
+
const format2 = this.props.dateFormat;
|
|
7594
7559
|
if (format2 === true)
|
|
7595
7560
|
return locale.longDateFormat("L");
|
|
7596
7561
|
if (format2)
|
|
@@ -7599,7 +7564,7 @@ class Datetime extends React__default.Component {
|
|
|
7599
7564
|
}
|
|
7600
7565
|
getTimeFormat() {
|
|
7601
7566
|
const locale = this.getLocaleData();
|
|
7602
|
-
|
|
7567
|
+
const format2 = this.props.timeFormat;
|
|
7603
7568
|
if (format2 === true) {
|
|
7604
7569
|
return locale.longDateFormat("LT");
|
|
7605
7570
|
}
|
|
@@ -7611,12 +7576,12 @@ class Datetime extends React__default.Component {
|
|
|
7611
7576
|
} else if (type === "time") {
|
|
7612
7577
|
return this.getTimeFormat();
|
|
7613
7578
|
}
|
|
7614
|
-
|
|
7615
|
-
|
|
7579
|
+
const dateFormat = this.getDateFormat();
|
|
7580
|
+
const timeFormat = this.getTimeFormat();
|
|
7616
7581
|
return dateFormat && timeFormat ? dateFormat + " " + timeFormat : dateFormat || timeFormat;
|
|
7617
7582
|
}
|
|
7618
7583
|
updateTime(op, amount, type, toSelected) {
|
|
7619
|
-
|
|
7584
|
+
const update = {};
|
|
7620
7585
|
const date = toSelected ? "selectedDate" : "viewDate";
|
|
7621
7586
|
update[date] = this.state[date].clone()[op](amount, type);
|
|
7622
7587
|
this.setState(update);
|
|
@@ -7649,7 +7614,7 @@ class Datetime extends React__default.Component {
|
|
|
7649
7614
|
if (prevProps === this.props)
|
|
7650
7615
|
return;
|
|
7651
7616
|
let needsUpdate = false;
|
|
7652
|
-
|
|
7617
|
+
const thisProps = this.props;
|
|
7653
7618
|
["locale", "utc", "displayZone", "dateFormat", "timeFormat"].forEach(
|
|
7654
7619
|
function(p) {
|
|
7655
7620
|
prevProps[p] !== thisProps[p] && (needsUpdate = true);
|
|
@@ -7665,8 +7630,8 @@ class Datetime extends React__default.Component {
|
|
|
7665
7630
|
}
|
|
7666
7631
|
regenerateDates() {
|
|
7667
7632
|
const props = this.props;
|
|
7668
|
-
|
|
7669
|
-
|
|
7633
|
+
const viewDate = this.state.viewDate.clone();
|
|
7634
|
+
const selectedDate = this.state.selectedDate && this.state.selectedDate.clone();
|
|
7670
7635
|
if (props.locale) {
|
|
7671
7636
|
viewDate.locale(props.locale);
|
|
7672
7637
|
selectedDate && selectedDate.locale(props.locale);
|
|
@@ -7681,7 +7646,7 @@ class Datetime extends React__default.Component {
|
|
|
7681
7646
|
viewDate.locale();
|
|
7682
7647
|
selectedDate && selectedDate.locale();
|
|
7683
7648
|
}
|
|
7684
|
-
|
|
7649
|
+
const update = { viewDate, selectedDate };
|
|
7685
7650
|
if (selectedDate && selectedDate.isValid()) {
|
|
7686
7651
|
update.inputValue = selectedDate.format(this.getFormat("datetime"));
|
|
7687
7652
|
}
|
|
@@ -7690,7 +7655,7 @@ class Datetime extends React__default.Component {
|
|
|
7690
7655
|
getSelectedDate() {
|
|
7691
7656
|
if (this.props.value === void 0)
|
|
7692
7657
|
return this.state.selectedDate;
|
|
7693
|
-
|
|
7658
|
+
const selectedDate = this.parseDate(
|
|
7694
7659
|
this.props.value,
|
|
7695
7660
|
this.getFormat("datetime")
|
|
7696
7661
|
);
|
|
@@ -7709,7 +7674,7 @@ class Datetime extends React__default.Component {
|
|
|
7709
7674
|
return "";
|
|
7710
7675
|
}
|
|
7711
7676
|
getInputValue() {
|
|
7712
|
-
|
|
7677
|
+
const selectedDate = this.getSelectedDate();
|
|
7713
7678
|
return selectedDate ? selectedDate.format(this.getFormat("datetime")) : this.state.inputValue;
|
|
7714
7679
|
}
|
|
7715
7680
|
/**
|
|
@@ -7719,7 +7684,7 @@ class Datetime extends React__default.Component {
|
|
|
7719
7684
|
* @public
|
|
7720
7685
|
*/
|
|
7721
7686
|
setViewDate(date) {
|
|
7722
|
-
|
|
7687
|
+
const logError = function() {
|
|
7723
7688
|
return log("Invalid date passed to the `setViewDate` method: " + date);
|
|
7724
7689
|
};
|
|
7725
7690
|
if (!date)
|
|
@@ -7815,7 +7780,7 @@ __publicField(Datetime, "defaultProps", {
|
|
|
7815
7780
|
// Make moment accessible through the Datetime class
|
|
7816
7781
|
__publicField(Datetime, "moment", moment);
|
|
7817
7782
|
function log(message, method) {
|
|
7818
|
-
|
|
7783
|
+
const con = typeof window !== "undefined" && window.console;
|
|
7819
7784
|
if (!con)
|
|
7820
7785
|
return;
|
|
7821
7786
|
if (!method) {
|
|
@@ -8068,9 +8033,6 @@ const PasswordFieldPlugin = {
|
|
|
8068
8033
|
},
|
|
8069
8034
|
parse: parse$2
|
|
8070
8035
|
};
|
|
8071
|
-
function GrCircleQuestion(props) {
|
|
8072
|
-
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);
|
|
8073
|
-
}
|
|
8074
8036
|
function AiFillWarning(props) {
|
|
8075
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);
|
|
8076
8038
|
}
|
|
@@ -8089,6 +8051,39 @@ function FaSpinner(props) {
|
|
|
8089
8051
|
function FaUnlock(props) {
|
|
8090
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);
|
|
8091
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
|
+
};
|
|
8092
8087
|
function formatBranchName$1(str) {
|
|
8093
8088
|
const pattern = /[^/\w-]+/g;
|
|
8094
8089
|
const formattedStr = str.replace(pattern, "");
|
|
@@ -8187,7 +8182,7 @@ const BranchSwitcherLegacy = ({
|
|
|
8187
8182
|
className: "transition-all duration-150 ease-out text-blue-600 hover:text-blue-400 hover:underline no-underline",
|
|
8188
8183
|
href: "https://tina.io/docs/tina-cloud/"
|
|
8189
8184
|
},
|
|
8190
|
-
"Learn more about moving to production with
|
|
8185
|
+
"Learn more about moving to production with TinaCloud."
|
|
8191
8186
|
)), /* @__PURE__ */ React.createElement("p", null, /* @__PURE__ */ React.createElement(
|
|
8192
8187
|
Button$1,
|
|
8193
8188
|
{
|
|
@@ -8423,7 +8418,7 @@ const EditoralBranchSwitcher = ({
|
|
|
8423
8418
|
className: "transition-all duration-150 ease-out text-blue-600 hover:text-blue-400 hover:underline no-underline",
|
|
8424
8419
|
href: "https://tina.io/docs/tina-cloud/"
|
|
8425
8420
|
},
|
|
8426
|
-
"Learn more about moving to production with
|
|
8421
|
+
"Learn more about moving to production with TinaCloud."
|
|
8427
8422
|
)), /* @__PURE__ */ React.createElement("p", null, /* @__PURE__ */ React.createElement(
|
|
8428
8423
|
Button$1,
|
|
8429
8424
|
{
|
|
@@ -8638,7 +8633,10 @@ const BranchSelector = ({
|
|
|
8638
8633
|
label: "View in GitHub",
|
|
8639
8634
|
Icon: /* @__PURE__ */ React.createElement(BiLinkExternal, { className: "w-5 h-auto text-blue-500 opacity-70" }),
|
|
8640
8635
|
onMouseDown: () => {
|
|
8641
|
-
window.open(
|
|
8636
|
+
window.open(
|
|
8637
|
+
branch.githubPullRequestUrl,
|
|
8638
|
+
"_blank"
|
|
8639
|
+
);
|
|
8642
8640
|
}
|
|
8643
8641
|
},
|
|
8644
8642
|
typeof previewFunction === "function" && ((_b2 = previewFunction({ branch: branch.name })) == null ? void 0 : _b2.url) && {
|
|
@@ -8944,7 +8942,9 @@ class EventBus {
|
|
|
8944
8942
|
} else {
|
|
8945
8943
|
events = event;
|
|
8946
8944
|
}
|
|
8947
|
-
const newListeners = events.map(
|
|
8945
|
+
const newListeners = events.map(
|
|
8946
|
+
(event2) => new Listener(event2, callback)
|
|
8947
|
+
);
|
|
8948
8948
|
newListeners.forEach((newListener) => this.listeners.add(newListener));
|
|
8949
8949
|
return () => {
|
|
8950
8950
|
newListeners.forEach((listener) => this.listeners.delete(listener));
|
|
@@ -9300,9 +9300,7 @@ class TinaMediaStore {
|
|
|
9300
9300
|
const deleteStartTime = Date.now();
|
|
9301
9301
|
while (true) {
|
|
9302
9302
|
await new Promise((resolve) => setTimeout(resolve, 1e3));
|
|
9303
|
-
const { error, message } = await this.api.getRequestStatus(
|
|
9304
|
-
requestId
|
|
9305
|
-
);
|
|
9303
|
+
const { error, message } = await this.api.getRequestStatus(requestId);
|
|
9306
9304
|
if (error !== void 0) {
|
|
9307
9305
|
if (error) {
|
|
9308
9306
|
throw new Error(message);
|
|
@@ -9327,6 +9325,17 @@ class TinaMediaStore {
|
|
|
9327
9325
|
}
|
|
9328
9326
|
}
|
|
9329
9327
|
}
|
|
9328
|
+
const encodeUrlIfNeeded = (url) => {
|
|
9329
|
+
if (url) {
|
|
9330
|
+
try {
|
|
9331
|
+
return new URL(url).toString();
|
|
9332
|
+
} catch (e) {
|
|
9333
|
+
return url;
|
|
9334
|
+
}
|
|
9335
|
+
} else {
|
|
9336
|
+
return url;
|
|
9337
|
+
}
|
|
9338
|
+
};
|
|
9330
9339
|
let MediaManager$1 = class MediaManager {
|
|
9331
9340
|
constructor(store, events) {
|
|
9332
9341
|
this.store = store;
|
|
@@ -9399,6 +9408,20 @@ let MediaManager$1 = class MediaManager {
|
|
|
9399
9408
|
try {
|
|
9400
9409
|
this.events.dispatch({ type: "media:list:start", ...options });
|
|
9401
9410
|
const media = await this.store.list(options);
|
|
9411
|
+
media.items = media.items.map((item) => {
|
|
9412
|
+
if (item.type === "dir") {
|
|
9413
|
+
return item;
|
|
9414
|
+
}
|
|
9415
|
+
if (item.thumbnails) {
|
|
9416
|
+
for (const [size, src] of Object.entries(item.thumbnails)) {
|
|
9417
|
+
item.thumbnails[size] = encodeUrlIfNeeded(src);
|
|
9418
|
+
}
|
|
9419
|
+
}
|
|
9420
|
+
return {
|
|
9421
|
+
...item,
|
|
9422
|
+
src: encodeUrlIfNeeded(item.src)
|
|
9423
|
+
};
|
|
9424
|
+
});
|
|
9402
9425
|
this.events.dispatch({ type: "media:list:success", ...options, media });
|
|
9403
9426
|
return media;
|
|
9404
9427
|
} catch (error) {
|
|
@@ -9427,7 +9450,7 @@ const E_BAD_ROUTE = new MediaListError({
|
|
|
9427
9450
|
});
|
|
9428
9451
|
new MediaListError({
|
|
9429
9452
|
title: "An Error Occurred",
|
|
9430
|
-
message: "Something went wrong accessing your media from
|
|
9453
|
+
message: "Something went wrong accessing your media from TinaCloud.",
|
|
9431
9454
|
docsLink: ""
|
|
9432
9455
|
// TODO
|
|
9433
9456
|
});
|
|
@@ -9612,7 +9635,7 @@ let Alerts$1 = class Alerts {
|
|
|
9612
9635
|
return this.add("error", message, timeout);
|
|
9613
9636
|
}
|
|
9614
9637
|
};
|
|
9615
|
-
const
|
|
9638
|
+
const SidebarLoadingPlaceholder = () => /* @__PURE__ */ React.createElement(
|
|
9616
9639
|
"div",
|
|
9617
9640
|
{
|
|
9618
9641
|
className: "relative flex flex-col items-center justify-center text-center p-5 pb-16 w-full h-full overflow-y-auto",
|
|
@@ -9625,25 +9648,8 @@ const NoFormsPlaceholder = () => /* @__PURE__ */ React.createElement(
|
|
|
9625
9648
|
animationDuration: "150ms"
|
|
9626
9649
|
}
|
|
9627
9650
|
},
|
|
9628
|
-
/* @__PURE__ */ React.createElement(
|
|
9629
|
-
/* @__PURE__ */ React.createElement(
|
|
9630
|
-
/* @__PURE__ */ React.createElement("p", { className: "block" }, /* @__PURE__ */ React.createElement(
|
|
9631
|
-
Button$1,
|
|
9632
|
-
{
|
|
9633
|
-
href: "https://tina.io/docs/tinacms-context/",
|
|
9634
|
-
target: "_blank",
|
|
9635
|
-
as: "a"
|
|
9636
|
-
},
|
|
9637
|
-
/* @__PURE__ */ React.createElement(Emoji$1, { className: "mr-1.5" }, "📖"),
|
|
9638
|
-
" Contextual Editing"
|
|
9639
|
-
))
|
|
9640
|
-
);
|
|
9641
|
-
const Emoji$1 = ({ className = "", ...props }) => /* @__PURE__ */ React.createElement(
|
|
9642
|
-
"span",
|
|
9643
|
-
{
|
|
9644
|
-
className: `text-[24px] leading-none inline-block ${className}`,
|
|
9645
|
-
...props
|
|
9646
|
-
}
|
|
9651
|
+
/* @__PURE__ */ React.createElement("p", { className: "block pb-5" }, "Please wait while TinaCMS", /* @__PURE__ */ React.createElement("br", null), "loads your content"),
|
|
9652
|
+
/* @__PURE__ */ React.createElement(LoadingDots, { color: "var(--tina-color-primary)" })
|
|
9647
9653
|
);
|
|
9648
9654
|
class SidebarState {
|
|
9649
9655
|
constructor(events, options = {}) {
|
|
@@ -9658,7 +9664,7 @@ class SidebarState {
|
|
|
9658
9664
|
};
|
|
9659
9665
|
this.position = options.position || "displace";
|
|
9660
9666
|
this.renderNav = options.renderNav || true;
|
|
9661
|
-
this.
|
|
9667
|
+
this.loadingPlaceholder = options.placeholder || SidebarLoadingPlaceholder;
|
|
9662
9668
|
if ((_a = options.buttons) == null ? void 0 : _a.save) {
|
|
9663
9669
|
this.buttons.save = options.buttons.save;
|
|
9664
9670
|
}
|
|
@@ -9732,238 +9738,6 @@ const ModalLayout = ({ children, name, close: close2, layout }) => {
|
|
|
9732
9738
|
children
|
|
9733
9739
|
)));
|
|
9734
9740
|
};
|
|
9735
|
-
const Item = ({
|
|
9736
|
-
item,
|
|
9737
|
-
depth,
|
|
9738
|
-
setActiveFormId
|
|
9739
|
-
}) => {
|
|
9740
|
-
const cms = useCMS();
|
|
9741
|
-
const depths = ["pl-6", "pl-10", "pl-14"];
|
|
9742
|
-
const form = React.useMemo(
|
|
9743
|
-
() => cms.state.forms.find(({ tinaForm }) => item.formId === tinaForm.id),
|
|
9744
|
-
[item.formId]
|
|
9745
|
-
);
|
|
9746
|
-
return /* @__PURE__ */ React.createElement(
|
|
9747
|
-
"button",
|
|
9748
|
-
{
|
|
9749
|
-
type: "button",
|
|
9750
|
-
key: item.path,
|
|
9751
|
-
onClick: () => setActiveFormId(item.formId),
|
|
9752
|
-
className: `${depths[depth] || "pl-12"} pr-6 py-3 w-full h-full bg-transparent border-none text-lg text-gray-700 group hover:bg-gray-50 transition-all ease-out duration-150 flex items-center justify-between gap-2`
|
|
9753
|
-
},
|
|
9754
|
-
/* @__PURE__ */ React.createElement(BiEdit, { className: "opacity-70 w-5 h-auto text-blue-500 flex-none" }),
|
|
9755
|
-
/* @__PURE__ */ React.createElement("div", { className: "flex-1 flex flex-col gap-0.5 items-start" }, /* @__PURE__ */ React.createElement("div", { className: "group-hover:text-blue-500 font-sans text-xs font-semibold text-gray-700 whitespace-normal" }, form.tinaForm.label), /* @__PURE__ */ React.createElement("div", { className: "group-hover:text-blue-500 text-base truncate leading-tight text-gray-600" }, form.tinaForm.id))
|
|
9756
|
-
);
|
|
9757
|
-
};
|
|
9758
|
-
const FormListItem = ({
|
|
9759
|
-
item,
|
|
9760
|
-
depth,
|
|
9761
|
-
setActiveFormId
|
|
9762
|
-
}) => {
|
|
9763
|
-
var _a;
|
|
9764
|
-
return /* @__PURE__ */ React.createElement("div", { className: "divide-y divide-gray-200" }, /* @__PURE__ */ React.createElement(Item, { setActiveFormId, item, depth }), item.subItems && /* @__PURE__ */ React.createElement("ul", { className: "divide-y divide-gray-200" }, (_a = item.subItems) == null ? void 0 : _a.map((subItem) => {
|
|
9765
|
-
if (subItem.type === "document") {
|
|
9766
|
-
return /* @__PURE__ */ React.createElement("li", { key: subItem.formId }, /* @__PURE__ */ React.createElement(
|
|
9767
|
-
Item,
|
|
9768
|
-
{
|
|
9769
|
-
setActiveFormId,
|
|
9770
|
-
depth: depth + 1,
|
|
9771
|
-
item: subItem
|
|
9772
|
-
}
|
|
9773
|
-
));
|
|
9774
|
-
}
|
|
9775
|
-
})));
|
|
9776
|
-
};
|
|
9777
|
-
const FormLists = (props) => {
|
|
9778
|
-
const cms = useCMS();
|
|
9779
|
-
return /* @__PURE__ */ React.createElement(
|
|
9780
|
-
Transition,
|
|
9781
|
-
{
|
|
9782
|
-
appear: true,
|
|
9783
|
-
show: true,
|
|
9784
|
-
as: "div",
|
|
9785
|
-
enter: "transition-all ease-out duration-150",
|
|
9786
|
-
enterFrom: "opacity-0 -translate-x-1/2",
|
|
9787
|
-
enterTo: "opacity-100",
|
|
9788
|
-
leave: "transition-all ease-out duration-150",
|
|
9789
|
-
leaveFrom: "opacity-100",
|
|
9790
|
-
leaveTo: "opacity-0 -translate-x-1/2"
|
|
9791
|
-
},
|
|
9792
|
-
cms.state.formLists.map((formList, index) => /* @__PURE__ */ React.createElement("div", { key: `${formList.id}-${index}`, className: "pt-16" }, /* @__PURE__ */ React.createElement(
|
|
9793
|
-
FormList,
|
|
9794
|
-
{
|
|
9795
|
-
isEditing: props.isEditing,
|
|
9796
|
-
setActiveFormId: (id) => {
|
|
9797
|
-
cms.dispatch({ type: "forms:set-active-form-id", value: id });
|
|
9798
|
-
},
|
|
9799
|
-
formList
|
|
9800
|
-
}
|
|
9801
|
-
)))
|
|
9802
|
-
);
|
|
9803
|
-
};
|
|
9804
|
-
const FormList = (props) => {
|
|
9805
|
-
const cms = useCMS();
|
|
9806
|
-
const listItems = React.useMemo(() => {
|
|
9807
|
-
var _a;
|
|
9808
|
-
const orderedListItems = [];
|
|
9809
|
-
const globalItems = [];
|
|
9810
|
-
const topItems = [];
|
|
9811
|
-
props.formList.items.forEach((item) => {
|
|
9812
|
-
if (item.type === "document") {
|
|
9813
|
-
const form = cms.state.forms.find(
|
|
9814
|
-
({ tinaForm }) => tinaForm.id === item.formId
|
|
9815
|
-
);
|
|
9816
|
-
if (form.tinaForm.global) {
|
|
9817
|
-
globalItems.push(item);
|
|
9818
|
-
} else {
|
|
9819
|
-
orderedListItems.push(item);
|
|
9820
|
-
}
|
|
9821
|
-
} else {
|
|
9822
|
-
orderedListItems.push(item);
|
|
9823
|
-
}
|
|
9824
|
-
});
|
|
9825
|
-
if (((_a = orderedListItems[0]) == null ? void 0 : _a.type) === "document") {
|
|
9826
|
-
topItems.push({ type: "list", label: "Documents" });
|
|
9827
|
-
}
|
|
9828
|
-
let extra = [];
|
|
9829
|
-
if (globalItems.length) {
|
|
9830
|
-
extra = [{ type: "list", label: "Global Documents" }, ...globalItems];
|
|
9831
|
-
}
|
|
9832
|
-
return [...topItems, ...orderedListItems, ...extra];
|
|
9833
|
-
}, [JSON.stringify(props.formList.items)]);
|
|
9834
|
-
return /* @__PURE__ */ React.createElement("ul", null, /* @__PURE__ */ React.createElement("li", { className: "divide-y divide-gray-200" }, listItems.map((item, index) => {
|
|
9835
|
-
if (item.type === "list") {
|
|
9836
|
-
return /* @__PURE__ */ React.createElement(
|
|
9837
|
-
"div",
|
|
9838
|
-
{
|
|
9839
|
-
key: item.label,
|
|
9840
|
-
className: `relative group text-left w-full bg-white shadow-sm
|
|
9841
|
-
border-gray-100 px-6 -mt-px pb-3 ${index > 0 ? "pt-6 bg-gradient-to-b from-gray-50 via-white to-white" : "pt-3"}`
|
|
9842
|
-
},
|
|
9843
|
-
/* @__PURE__ */ React.createElement(
|
|
9844
|
-
"span",
|
|
9845
|
-
{
|
|
9846
|
-
className: "text-sm tracking-wide font-bold text-gray-700 uppercase"
|
|
9847
|
-
},
|
|
9848
|
-
item.label
|
|
9849
|
-
)
|
|
9850
|
-
);
|
|
9851
|
-
}
|
|
9852
|
-
return /* @__PURE__ */ React.createElement(
|
|
9853
|
-
FormListItem,
|
|
9854
|
-
{
|
|
9855
|
-
setActiveFormId: (id) => props.setActiveFormId(id),
|
|
9856
|
-
key: item.formId,
|
|
9857
|
-
item,
|
|
9858
|
-
depth: 0
|
|
9859
|
-
}
|
|
9860
|
-
);
|
|
9861
|
-
})));
|
|
9862
|
-
};
|
|
9863
|
-
const FormsView = ({
|
|
9864
|
-
children
|
|
9865
|
-
}) => {
|
|
9866
|
-
const cms = useCMS$1();
|
|
9867
|
-
const { setFormIsPristine } = React.useContext(SidebarContext);
|
|
9868
|
-
const isMultiform = cms.state.forms.length > 1;
|
|
9869
|
-
const activeForm = cms.state.forms.find(
|
|
9870
|
-
({ tinaForm }) => tinaForm.id === cms.state.activeFormId
|
|
9871
|
-
);
|
|
9872
|
-
const isEditing = !!activeForm;
|
|
9873
|
-
if (!cms.state.formLists.length) {
|
|
9874
|
-
return /* @__PURE__ */ React.createElement(React.Fragment, null, " ", children, " ");
|
|
9875
|
-
}
|
|
9876
|
-
if (isMultiform && !activeForm) {
|
|
9877
|
-
return /* @__PURE__ */ React.createElement(FormLists, { isEditing });
|
|
9878
|
-
}
|
|
9879
|
-
const formMetas = cms.plugins.all("form:meta");
|
|
9880
|
-
return /* @__PURE__ */ React.createElement(React.Fragment, null, activeForm && /* @__PURE__ */ React.createElement(FormWrapper$1, { isEditing, isMultiform }, isMultiform && /* @__PURE__ */ React.createElement(MultiformFormHeader, { activeForm }), !isMultiform && /* @__PURE__ */ React.createElement(FormHeader, { activeForm }), formMetas == null ? void 0 : formMetas.map((meta) => /* @__PURE__ */ React.createElement(React.Fragment, { key: meta.name }, /* @__PURE__ */ React.createElement(meta.Component, null))), /* @__PURE__ */ React.createElement(FormBuilder, { form: activeForm, onPristineChange: setFormIsPristine })));
|
|
9881
|
-
};
|
|
9882
|
-
const FormWrapper$1 = ({ isEditing, children }) => {
|
|
9883
|
-
return /* @__PURE__ */ React.createElement(
|
|
9884
|
-
"div",
|
|
9885
|
-
{
|
|
9886
|
-
className: "flex-1 flex flex-col flex-nowrap overflow-hidden h-full w-full relative bg-white",
|
|
9887
|
-
style: isEditing ? {
|
|
9888
|
-
transform: "none",
|
|
9889
|
-
animationName: "fly-in-left",
|
|
9890
|
-
animationDuration: "150ms",
|
|
9891
|
-
animationDelay: "0",
|
|
9892
|
-
animationIterationCount: 1,
|
|
9893
|
-
animationTimingFunction: "ease-out"
|
|
9894
|
-
} : {
|
|
9895
|
-
transform: "translate3d(100%, 0, 0)"
|
|
9896
|
-
}
|
|
9897
|
-
},
|
|
9898
|
-
children
|
|
9899
|
-
);
|
|
9900
|
-
};
|
|
9901
|
-
const MultiformFormHeader = ({
|
|
9902
|
-
activeForm
|
|
9903
|
-
}) => {
|
|
9904
|
-
const cms = useCMS$1();
|
|
9905
|
-
const { formIsPristine } = React.useContext(SidebarContext);
|
|
9906
|
-
return /* @__PURE__ */ React.createElement(
|
|
9907
|
-
"div",
|
|
9908
|
-
{
|
|
9909
|
-
className: "pt-18 pb-4 px-6 border-b border-gray-200 bg-gradient-to-t from-white to-gray-50"
|
|
9910
|
-
},
|
|
9911
|
-
/* @__PURE__ */ React.createElement("div", { className: "max-w-form mx-auto flex gap-2 justify-between items-center" }, /* @__PURE__ */ React.createElement(
|
|
9912
|
-
"button",
|
|
9913
|
-
{
|
|
9914
|
-
type: "button",
|
|
9915
|
-
className: "pointer-events-auto text-xs text-blue-400 hover:text-blue-500 hover:underline transition-all ease-out duration-150",
|
|
9916
|
-
onClick: () => {
|
|
9917
|
-
const state = activeForm.tinaForm.finalForm.getState();
|
|
9918
|
-
if (state.invalid === true) {
|
|
9919
|
-
cms.alerts.error("Cannot navigate away from an invalid form.");
|
|
9920
|
-
} else {
|
|
9921
|
-
cms.dispatch({ type: "forms:set-active-form-id", value: null });
|
|
9922
|
-
}
|
|
9923
|
-
}
|
|
9924
|
-
},
|
|
9925
|
-
/* @__PURE__ */ React.createElement(BiDotsVertical, { className: "h-auto w-5 inline-block opacity-70" })
|
|
9926
|
-
), /* @__PURE__ */ React.createElement(
|
|
9927
|
-
"button",
|
|
9928
|
-
{
|
|
9929
|
-
type: "button",
|
|
9930
|
-
className: "pointer-events-auto text-xs text-blue-400 hover:text-blue-500 hover:underline transition-all ease-out duration-150",
|
|
9931
|
-
onClick: () => {
|
|
9932
|
-
const collectionName = cms.api.tina.schema.getCollectionByFullPath(
|
|
9933
|
-
cms.state.activeFormId
|
|
9934
|
-
).name;
|
|
9935
|
-
window.location.href = `${new URL(window.location.href).pathname}#/collections/${collectionName}/~`;
|
|
9936
|
-
}
|
|
9937
|
-
},
|
|
9938
|
-
/* @__PURE__ */ React.createElement(BiHomeAlt, { className: "h-auto w-5 inline-block opacity-70" })
|
|
9939
|
-
), /* @__PURE__ */ React.createElement("span", { className: "opacity-30 text-sm leading-tight whitespace-nowrap flex-0" }, "/"), /* @__PURE__ */ React.createElement("span", { className: "block w-full text-sm leading-tight whitespace-nowrap truncate" }, activeForm.tinaForm.label || activeForm.tinaForm.id), /* @__PURE__ */ React.createElement(FormStatus, { pristine: formIsPristine }))
|
|
9940
|
-
);
|
|
9941
|
-
};
|
|
9942
|
-
const FormHeader = ({ activeForm }) => {
|
|
9943
|
-
const { formIsPristine } = React.useContext(SidebarContext);
|
|
9944
|
-
const cms = useCMS$1();
|
|
9945
|
-
const shortFormLabel = activeForm.tinaForm.label ? activeForm.tinaForm.label.replace(/^.*[\\\/]/, "") : false;
|
|
9946
|
-
return /* @__PURE__ */ React.createElement(
|
|
9947
|
-
"div",
|
|
9948
|
-
{
|
|
9949
|
-
className: "pt-18 pb-4 px-6 border-b border-gray-200 bg-gradient-to-t from-white to-gray-50"
|
|
9950
|
-
},
|
|
9951
|
-
/* @__PURE__ */ React.createElement("div", { className: "max-w-form mx-auto flex gap-2 justify-between items-center" }, /* @__PURE__ */ React.createElement(
|
|
9952
|
-
"button",
|
|
9953
|
-
{
|
|
9954
|
-
type: "button",
|
|
9955
|
-
className: "pointer-events-auto text-xs text-blue-400 hover:text-blue-500 hover:underline transition-all ease-out duration-150",
|
|
9956
|
-
onClick: () => {
|
|
9957
|
-
const collectionName = cms.api.tina.schema.getCollectionByFullPath(
|
|
9958
|
-
cms.state.activeFormId
|
|
9959
|
-
).name;
|
|
9960
|
-
window.location.href = `${new URL(window.location.href).pathname}#/collections/${collectionName}/~`;
|
|
9961
|
-
}
|
|
9962
|
-
},
|
|
9963
|
-
/* @__PURE__ */ React.createElement(BiHomeAlt, { className: "h-auto w-5 inline-block opacity-70" })
|
|
9964
|
-
), shortFormLabel && /* @__PURE__ */ React.createElement("span", { className: "block w-full text-sm leading-tight whitespace-nowrap truncate" }, shortFormLabel), /* @__PURE__ */ React.createElement(FormStatus, { pristine: formIsPristine }))
|
|
9965
|
-
);
|
|
9966
|
-
};
|
|
9967
9741
|
function ImFilesEmpty(props) {
|
|
9968
9742
|
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" }, "child": [] }, { "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" }, "child": [] }] })(props);
|
|
9969
9743
|
}
|
|
@@ -10206,7 +9980,7 @@ const SyncStatus = ({ cms, setEventsOpen }) => {
|
|
|
10206
9980
|
"Event Log"
|
|
10207
9981
|
));
|
|
10208
9982
|
};
|
|
10209
|
-
const version = "2.
|
|
9983
|
+
const version = "2.7.4";
|
|
10210
9984
|
const Nav = ({
|
|
10211
9985
|
isLocalMode,
|
|
10212
9986
|
className = "",
|
|
@@ -10448,6 +10222,293 @@ const ResizeHandle = () => {
|
|
|
10448
10222
|
/* @__PURE__ */ React.createElement("span", { className: "absolute top-1/2 left-1/2 h-4/6 w-px bg-gray-200 transform -translate-y-1/2 -translate-x-1/2 opacity-30 transition-opacity duration-150 ease-out group-hover:opacity-100" })
|
|
10449
10223
|
);
|
|
10450
10224
|
};
|
|
10225
|
+
const Item = ({
|
|
10226
|
+
item,
|
|
10227
|
+
depth,
|
|
10228
|
+
setActiveFormId
|
|
10229
|
+
}) => {
|
|
10230
|
+
const cms = useCMS();
|
|
10231
|
+
const depths = ["pl-6", "pl-10", "pl-14"];
|
|
10232
|
+
const form = React.useMemo(
|
|
10233
|
+
() => cms.state.forms.find(({ tinaForm }) => item.formId === tinaForm.id),
|
|
10234
|
+
[item.formId]
|
|
10235
|
+
);
|
|
10236
|
+
return /* @__PURE__ */ React.createElement(
|
|
10237
|
+
"button",
|
|
10238
|
+
{
|
|
10239
|
+
type: "button",
|
|
10240
|
+
key: item.path,
|
|
10241
|
+
onClick: () => setActiveFormId(item.formId),
|
|
10242
|
+
className: `${depths[depth] || "pl-12"} pr-6 py-3 w-full h-full bg-transparent border-none text-lg text-gray-700 group hover:bg-gray-50 transition-all ease-out duration-150 flex items-center justify-between gap-2`
|
|
10243
|
+
},
|
|
10244
|
+
/* @__PURE__ */ React.createElement(BiEdit, { className: "opacity-70 w-5 h-auto text-blue-500 flex-none" }),
|
|
10245
|
+
/* @__PURE__ */ React.createElement("div", { className: "flex-1 flex flex-col gap-0.5 items-start" }, /* @__PURE__ */ React.createElement("div", { className: "group-hover:text-blue-500 font-sans text-xs font-semibold text-gray-700 whitespace-normal" }, form.tinaForm.label), /* @__PURE__ */ React.createElement("div", { className: "group-hover:text-blue-500 text-base truncate leading-tight text-gray-600" }, form.tinaForm.id))
|
|
10246
|
+
);
|
|
10247
|
+
};
|
|
10248
|
+
const FormListItem = ({
|
|
10249
|
+
item,
|
|
10250
|
+
depth,
|
|
10251
|
+
setActiveFormId
|
|
10252
|
+
}) => {
|
|
10253
|
+
var _a;
|
|
10254
|
+
return /* @__PURE__ */ React.createElement("div", { className: "divide-y divide-gray-200" }, /* @__PURE__ */ React.createElement(Item, { setActiveFormId, item, depth }), item.subItems && /* @__PURE__ */ React.createElement("ul", { className: "divide-y divide-gray-200" }, (_a = item.subItems) == null ? void 0 : _a.map((subItem) => {
|
|
10255
|
+
if (subItem.type === "document") {
|
|
10256
|
+
return /* @__PURE__ */ React.createElement("li", { key: subItem.formId }, /* @__PURE__ */ React.createElement(
|
|
10257
|
+
Item,
|
|
10258
|
+
{
|
|
10259
|
+
setActiveFormId,
|
|
10260
|
+
depth: depth + 1,
|
|
10261
|
+
item: subItem
|
|
10262
|
+
}
|
|
10263
|
+
));
|
|
10264
|
+
}
|
|
10265
|
+
})));
|
|
10266
|
+
};
|
|
10267
|
+
const FormLists = (props) => {
|
|
10268
|
+
const cms = useCMS();
|
|
10269
|
+
return /* @__PURE__ */ React.createElement(
|
|
10270
|
+
Transition,
|
|
10271
|
+
{
|
|
10272
|
+
appear: true,
|
|
10273
|
+
show: true,
|
|
10274
|
+
as: "div",
|
|
10275
|
+
enter: "transition-all ease-out duration-150",
|
|
10276
|
+
enterFrom: "opacity-0 -translate-x-1/2",
|
|
10277
|
+
enterTo: "opacity-100",
|
|
10278
|
+
leave: "transition-all ease-out duration-150",
|
|
10279
|
+
leaveFrom: "opacity-100",
|
|
10280
|
+
leaveTo: "opacity-0 -translate-x-1/2"
|
|
10281
|
+
},
|
|
10282
|
+
cms.state.formLists.map((formList, index) => /* @__PURE__ */ React.createElement("div", { key: `${formList.id}-${index}`, className: "pt-16" }, /* @__PURE__ */ React.createElement(
|
|
10283
|
+
FormList,
|
|
10284
|
+
{
|
|
10285
|
+
isEditing: props.isEditing,
|
|
10286
|
+
setActiveFormId: (id) => {
|
|
10287
|
+
cms.dispatch({ type: "forms:set-active-form-id", value: id });
|
|
10288
|
+
},
|
|
10289
|
+
formList
|
|
10290
|
+
}
|
|
10291
|
+
)))
|
|
10292
|
+
);
|
|
10293
|
+
};
|
|
10294
|
+
const FormList = (props) => {
|
|
10295
|
+
const cms = useCMS();
|
|
10296
|
+
const listItems = React.useMemo(() => {
|
|
10297
|
+
var _a;
|
|
10298
|
+
const orderedListItems = [];
|
|
10299
|
+
const globalItems = [];
|
|
10300
|
+
const topItems = [];
|
|
10301
|
+
props.formList.items.forEach((item) => {
|
|
10302
|
+
if (item.type === "document") {
|
|
10303
|
+
const form = cms.state.forms.find(
|
|
10304
|
+
({ tinaForm }) => tinaForm.id === item.formId
|
|
10305
|
+
);
|
|
10306
|
+
if (form.tinaForm.global) {
|
|
10307
|
+
globalItems.push(item);
|
|
10308
|
+
} else {
|
|
10309
|
+
orderedListItems.push(item);
|
|
10310
|
+
}
|
|
10311
|
+
} else {
|
|
10312
|
+
orderedListItems.push(item);
|
|
10313
|
+
}
|
|
10314
|
+
});
|
|
10315
|
+
if (((_a = orderedListItems[0]) == null ? void 0 : _a.type) === "document") {
|
|
10316
|
+
topItems.push({ type: "list", label: "Documents" });
|
|
10317
|
+
}
|
|
10318
|
+
let extra = [];
|
|
10319
|
+
if (globalItems.length) {
|
|
10320
|
+
extra = [{ type: "list", label: "Global Documents" }, ...globalItems];
|
|
10321
|
+
}
|
|
10322
|
+
return [...topItems, ...orderedListItems, ...extra];
|
|
10323
|
+
}, [JSON.stringify(props.formList.items)]);
|
|
10324
|
+
return /* @__PURE__ */ React.createElement("ul", null, /* @__PURE__ */ React.createElement("li", { className: "divide-y divide-gray-200" }, listItems.map((item, index) => {
|
|
10325
|
+
if (item.type === "list") {
|
|
10326
|
+
return /* @__PURE__ */ React.createElement(
|
|
10327
|
+
"div",
|
|
10328
|
+
{
|
|
10329
|
+
key: item.label,
|
|
10330
|
+
className: `relative group text-left w-full bg-white shadow-sm
|
|
10331
|
+
border-gray-100 px-6 -mt-px pb-3 ${index > 0 ? "pt-6 bg-gradient-to-b from-gray-50 via-white to-white" : "pt-3"}`
|
|
10332
|
+
},
|
|
10333
|
+
/* @__PURE__ */ React.createElement(
|
|
10334
|
+
"span",
|
|
10335
|
+
{
|
|
10336
|
+
className: "text-sm tracking-wide font-bold text-gray-700 uppercase"
|
|
10337
|
+
},
|
|
10338
|
+
item.label
|
|
10339
|
+
)
|
|
10340
|
+
);
|
|
10341
|
+
}
|
|
10342
|
+
return /* @__PURE__ */ React.createElement(
|
|
10343
|
+
FormListItem,
|
|
10344
|
+
{
|
|
10345
|
+
setActiveFormId: (id) => props.setActiveFormId(id),
|
|
10346
|
+
key: item.formId,
|
|
10347
|
+
item,
|
|
10348
|
+
depth: 0
|
|
10349
|
+
}
|
|
10350
|
+
);
|
|
10351
|
+
})));
|
|
10352
|
+
};
|
|
10353
|
+
const SidebarNoFormsPlaceholder = () => /* @__PURE__ */ React.createElement(
|
|
10354
|
+
"div",
|
|
10355
|
+
{
|
|
10356
|
+
className: "relative flex flex-col items-center justify-center text-center p-5 pb-16 w-full h-full overflow-y-auto",
|
|
10357
|
+
style: {
|
|
10358
|
+
animationName: "fade-in",
|
|
10359
|
+
animationDelay: "300ms",
|
|
10360
|
+
animationTimingFunction: "ease-out",
|
|
10361
|
+
animationIterationCount: 1,
|
|
10362
|
+
animationFillMode: "both",
|
|
10363
|
+
animationDuration: "150ms"
|
|
10364
|
+
}
|
|
10365
|
+
},
|
|
10366
|
+
/* @__PURE__ */ React.createElement("p", { className: "block pb-5" }, "Looks like there's ", /* @__PURE__ */ React.createElement("br", null), "nothing to edit on ", /* @__PURE__ */ React.createElement("br", null), "this page."),
|
|
10367
|
+
/* @__PURE__ */ React.createElement("p", { className: "block pt-5" }, /* @__PURE__ */ React.createElement(
|
|
10368
|
+
Button$1,
|
|
10369
|
+
{
|
|
10370
|
+
href: "https://tina.io/docs/contextual-editing/overview",
|
|
10371
|
+
target: "_blank",
|
|
10372
|
+
as: "a"
|
|
10373
|
+
},
|
|
10374
|
+
/* @__PURE__ */ React.createElement(Emoji$1, { className: "mr-1.5" }, "📖"),
|
|
10375
|
+
" Contextual Editing Docs"
|
|
10376
|
+
))
|
|
10377
|
+
);
|
|
10378
|
+
const Emoji$1 = ({ className = "", ...props }) => /* @__PURE__ */ React.createElement(
|
|
10379
|
+
"span",
|
|
10380
|
+
{
|
|
10381
|
+
className: `text-[24px] leading-none inline-block ${className}`,
|
|
10382
|
+
...props
|
|
10383
|
+
}
|
|
10384
|
+
);
|
|
10385
|
+
const minimumTimeToShowLoadingIndicator = 1e3;
|
|
10386
|
+
const FormsView = ({ loadingPlaceholder } = {}) => {
|
|
10387
|
+
const cms = useCMS$1();
|
|
10388
|
+
const { setFormIsPristine } = React.useContext(SidebarContext);
|
|
10389
|
+
const [isShowingLoading, setIsShowingLoading] = React.useState(true);
|
|
10390
|
+
const [initialLoadComplete, setInitialLoadComplete] = React.useState(false);
|
|
10391
|
+
React.useEffect(() => {
|
|
10392
|
+
if (cms.state.isLoadingContent) {
|
|
10393
|
+
setIsShowingLoading(true);
|
|
10394
|
+
const timer = setTimeout(() => {
|
|
10395
|
+
if (!cms.state.isLoadingContent) {
|
|
10396
|
+
setIsShowingLoading(false);
|
|
10397
|
+
setInitialLoadComplete(true);
|
|
10398
|
+
}
|
|
10399
|
+
}, minimumTimeToShowLoadingIndicator);
|
|
10400
|
+
return () => clearTimeout(timer);
|
|
10401
|
+
} else {
|
|
10402
|
+
const timer = setTimeout(() => {
|
|
10403
|
+
setIsShowingLoading(false);
|
|
10404
|
+
setInitialLoadComplete(true);
|
|
10405
|
+
}, minimumTimeToShowLoadingIndicator);
|
|
10406
|
+
return () => clearTimeout(timer);
|
|
10407
|
+
}
|
|
10408
|
+
}, [cms.state.isLoadingContent]);
|
|
10409
|
+
if (isShowingLoading || !initialLoadComplete) {
|
|
10410
|
+
const LoadingPlaceholder = loadingPlaceholder || SidebarLoadingPlaceholder;
|
|
10411
|
+
return /* @__PURE__ */ React.createElement(LoadingPlaceholder, null);
|
|
10412
|
+
}
|
|
10413
|
+
if (!cms.state.formLists.length) {
|
|
10414
|
+
return /* @__PURE__ */ React.createElement(SidebarNoFormsPlaceholder, null);
|
|
10415
|
+
}
|
|
10416
|
+
const isMultiform = cms.state.forms.length > 1;
|
|
10417
|
+
const activeForm = cms.state.forms.find(
|
|
10418
|
+
({ tinaForm }) => tinaForm.id === cms.state.activeFormId
|
|
10419
|
+
);
|
|
10420
|
+
const isEditing = !!activeForm;
|
|
10421
|
+
if (isMultiform && !activeForm) {
|
|
10422
|
+
return /* @__PURE__ */ React.createElement(FormLists, { isEditing });
|
|
10423
|
+
}
|
|
10424
|
+
const formMetas = cms.plugins.all("form:meta");
|
|
10425
|
+
return /* @__PURE__ */ React.createElement(React.Fragment, null, activeForm && /* @__PURE__ */ React.createElement(FormWrapper$1, { isEditing, isMultiform }, isMultiform && /* @__PURE__ */ React.createElement(MultiformFormHeader, { activeForm }), !isMultiform && /* @__PURE__ */ React.createElement(FormHeader, { activeForm }), formMetas == null ? void 0 : formMetas.map((meta) => /* @__PURE__ */ React.createElement(React.Fragment, { key: meta.name }, /* @__PURE__ */ React.createElement(meta.Component, null))), /* @__PURE__ */ React.createElement(FormBuilder, { form: activeForm, onPristineChange: setFormIsPristine })));
|
|
10426
|
+
};
|
|
10427
|
+
const FormWrapper$1 = ({ isEditing, children }) => {
|
|
10428
|
+
return /* @__PURE__ */ React.createElement(
|
|
10429
|
+
"div",
|
|
10430
|
+
{
|
|
10431
|
+
className: "flex-1 flex flex-col flex-nowrap overflow-hidden h-full w-full relative bg-white",
|
|
10432
|
+
style: isEditing ? {
|
|
10433
|
+
transform: "none",
|
|
10434
|
+
animationName: "fly-in-left",
|
|
10435
|
+
animationDuration: "150ms",
|
|
10436
|
+
animationDelay: "0",
|
|
10437
|
+
animationIterationCount: 1,
|
|
10438
|
+
animationTimingFunction: "ease-out"
|
|
10439
|
+
} : {
|
|
10440
|
+
transform: "translate3d(100%, 0, 0)"
|
|
10441
|
+
}
|
|
10442
|
+
},
|
|
10443
|
+
children
|
|
10444
|
+
);
|
|
10445
|
+
};
|
|
10446
|
+
const MultiformFormHeader = ({
|
|
10447
|
+
activeForm
|
|
10448
|
+
}) => {
|
|
10449
|
+
const cms = useCMS$1();
|
|
10450
|
+
const { formIsPristine } = React.useContext(SidebarContext);
|
|
10451
|
+
return /* @__PURE__ */ React.createElement(
|
|
10452
|
+
"div",
|
|
10453
|
+
{
|
|
10454
|
+
className: "pt-18 pb-4 px-6 border-b border-gray-200 bg-gradient-to-t from-white to-gray-50"
|
|
10455
|
+
},
|
|
10456
|
+
/* @__PURE__ */ React.createElement("div", { className: "max-w-form mx-auto flex gap-2 justify-between items-center" }, /* @__PURE__ */ React.createElement(
|
|
10457
|
+
"button",
|
|
10458
|
+
{
|
|
10459
|
+
type: "button",
|
|
10460
|
+
className: "pointer-events-auto text-xs text-blue-400 hover:text-blue-500 hover:underline transition-all ease-out duration-150",
|
|
10461
|
+
onClick: () => {
|
|
10462
|
+
const state = activeForm.tinaForm.finalForm.getState();
|
|
10463
|
+
if (state.invalid === true) {
|
|
10464
|
+
cms.alerts.error("Cannot navigate away from an invalid form.");
|
|
10465
|
+
} else {
|
|
10466
|
+
cms.dispatch({ type: "forms:set-active-form-id", value: null });
|
|
10467
|
+
}
|
|
10468
|
+
}
|
|
10469
|
+
},
|
|
10470
|
+
/* @__PURE__ */ React.createElement(BiDotsVertical, { className: "h-auto w-5 inline-block opacity-70" })
|
|
10471
|
+
), /* @__PURE__ */ React.createElement(
|
|
10472
|
+
"button",
|
|
10473
|
+
{
|
|
10474
|
+
type: "button",
|
|
10475
|
+
className: "pointer-events-auto text-xs text-blue-400 hover:text-blue-500 hover:underline transition-all ease-out duration-150",
|
|
10476
|
+
onClick: () => {
|
|
10477
|
+
const collectionName = cms.api.tina.schema.getCollectionByFullPath(
|
|
10478
|
+
cms.state.activeFormId
|
|
10479
|
+
).name;
|
|
10480
|
+
window.location.href = `${new URL(window.location.href).pathname}#/collections/${collectionName}/~`;
|
|
10481
|
+
}
|
|
10482
|
+
},
|
|
10483
|
+
/* @__PURE__ */ React.createElement(BiHomeAlt, { className: "h-auto w-5 inline-block opacity-70" })
|
|
10484
|
+
), /* @__PURE__ */ React.createElement("span", { className: "opacity-30 text-sm leading-tight whitespace-nowrap flex-0" }, "/"), /* @__PURE__ */ React.createElement("span", { className: "block w-full text-sm leading-tight whitespace-nowrap truncate" }, activeForm.tinaForm.label || activeForm.tinaForm.id), /* @__PURE__ */ React.createElement(FormStatus, { pristine: formIsPristine }))
|
|
10485
|
+
);
|
|
10486
|
+
};
|
|
10487
|
+
const FormHeader = ({ activeForm }) => {
|
|
10488
|
+
const { formIsPristine } = React.useContext(SidebarContext);
|
|
10489
|
+
const cms = useCMS$1();
|
|
10490
|
+
const shortFormLabel = activeForm.tinaForm.label ? activeForm.tinaForm.label.replace(/^.*[\\\/]/, "") : false;
|
|
10491
|
+
return /* @__PURE__ */ React.createElement(
|
|
10492
|
+
"div",
|
|
10493
|
+
{
|
|
10494
|
+
className: "pt-18 pb-4 px-6 border-b border-gray-200 bg-gradient-to-t from-white to-gray-50"
|
|
10495
|
+
},
|
|
10496
|
+
/* @__PURE__ */ React.createElement("div", { className: "max-w-form mx-auto flex gap-2 justify-between items-center" }, /* @__PURE__ */ React.createElement(
|
|
10497
|
+
"button",
|
|
10498
|
+
{
|
|
10499
|
+
type: "button",
|
|
10500
|
+
className: "pointer-events-auto text-xs text-blue-400 hover:text-blue-500 hover:underline transition-all ease-out duration-150",
|
|
10501
|
+
onClick: () => {
|
|
10502
|
+
const collectionName = cms.api.tina.schema.getCollectionByFullPath(
|
|
10503
|
+
cms.state.activeFormId
|
|
10504
|
+
).name;
|
|
10505
|
+
window.location.href = `${new URL(window.location.href).pathname}#/collections/${collectionName}/~`;
|
|
10506
|
+
}
|
|
10507
|
+
},
|
|
10508
|
+
/* @__PURE__ */ React.createElement(BiHomeAlt, { className: "h-auto w-5 inline-block opacity-70" })
|
|
10509
|
+
), shortFormLabel && /* @__PURE__ */ React.createElement("span", { className: "block w-full text-sm leading-tight whitespace-nowrap truncate" }, shortFormLabel), /* @__PURE__ */ React.createElement(FormStatus, { pristine: formIsPristine }))
|
|
10510
|
+
);
|
|
10511
|
+
};
|
|
10451
10512
|
const SidebarContext = React.createContext(null);
|
|
10452
10513
|
const minPreviewWidth = 440;
|
|
10453
10514
|
const minSidebarWidth = 360;
|
|
@@ -10666,7 +10727,7 @@ const Sidebar$1 = ({
|
|
|
10666
10727
|
isLocalMode: (_d = (_c = cms.api) == null ? void 0 : _c.tina) == null ? void 0 : _d.isLocalMode,
|
|
10667
10728
|
branchingEnabled
|
|
10668
10729
|
}
|
|
10669
|
-
), /* @__PURE__ */ React.createElement(FormsView,
|
|
10730
|
+
), /* @__PURE__ */ React.createElement(FormsView, { loadingPlaceholder: sidebar.loadingPlaceholder }), activeScreen && /* @__PURE__ */ React.createElement(
|
|
10670
10731
|
ScreenPluginModal,
|
|
10671
10732
|
{
|
|
10672
10733
|
screen: activeScreen,
|
|
@@ -10842,7 +10903,7 @@ const SidebarHeader = ({
|
|
|
10842
10903
|
className: "h-5 w-auto -mx-1 text-blue-500",
|
|
10843
10904
|
stroke: "currentColor",
|
|
10844
10905
|
fill: "currentColor",
|
|
10845
|
-
|
|
10906
|
+
strokeWidth: "0",
|
|
10846
10907
|
viewBox: "0 0 24 24",
|
|
10847
10908
|
xmlns: "http://www.w3.org/2000/svg"
|
|
10848
10909
|
},
|
|
@@ -10982,6 +11043,93 @@ function createPlaceholder(name, _pr) {
|
|
|
10982
11043
|
);
|
|
10983
11044
|
};
|
|
10984
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
|
+
};
|
|
10985
11133
|
function ListMediaItem({ item, onClick, active }) {
|
|
10986
11134
|
let FileIcon = BiFile;
|
|
10987
11135
|
if (item.type === "dir") {
|
|
@@ -11057,59 +11205,6 @@ function GridMediaItem({ item, active, onClick }) {
|
|
|
11057
11205
|
)
|
|
11058
11206
|
);
|
|
11059
11207
|
}
|
|
11060
|
-
function dirname(path) {
|
|
11061
|
-
var _a, _b;
|
|
11062
|
-
const pattern = new RegExp("(?<prevDir>.*)/");
|
|
11063
|
-
return (_b = (_a = path.match(pattern)) == null ? void 0 : _a.groups) == null ? void 0 : _b.prevDir;
|
|
11064
|
-
}
|
|
11065
|
-
const BreadcrumbButton = ({ className = "", ...props }) => /* @__PURE__ */ React__default.createElement(
|
|
11066
|
-
"button",
|
|
11067
|
-
{
|
|
11068
|
-
className: "capitalize transition-colors duration-150 border-0 bg-transparent hover:text-blue-500 " + className,
|
|
11069
|
-
...props
|
|
11070
|
-
}
|
|
11071
|
-
);
|
|
11072
|
-
function Breadcrumb$1({ directory = "", setDirectory }) {
|
|
11073
|
-
directory = directory.replace(/^\/|\/$/g, "");
|
|
11074
|
-
let prevDir = dirname(directory) || "";
|
|
11075
|
-
if (prevDir === ".") {
|
|
11076
|
-
prevDir = "";
|
|
11077
|
-
}
|
|
11078
|
-
return /* @__PURE__ */ React__default.createElement("div", { className: "w-full flex items-center text-[16px] text-gray-300" }, directory !== "" && /* @__PURE__ */ React__default.createElement(
|
|
11079
|
-
IconButton,
|
|
11080
|
-
{
|
|
11081
|
-
variant: "ghost",
|
|
11082
|
-
className: "mr-2",
|
|
11083
|
-
onClick: () => setDirectory(prevDir)
|
|
11084
|
-
},
|
|
11085
|
-
/* @__PURE__ */ React__default.createElement(
|
|
11086
|
-
LeftArrowIcon,
|
|
11087
|
-
{
|
|
11088
|
-
className: `w-7 h-auto fill-gray-300 hover:fill-gray-900 transition duration-150 ease-out`
|
|
11089
|
-
}
|
|
11090
|
-
)
|
|
11091
|
-
), /* @__PURE__ */ React__default.createElement(
|
|
11092
|
-
BreadcrumbButton,
|
|
11093
|
-
{
|
|
11094
|
-
onClick: () => setDirectory(""),
|
|
11095
|
-
className: directory === "" ? "text-gray-500 font-bold" : "text-gray-300 font-medium after:pl-1.5 after:content-['/']"
|
|
11096
|
-
},
|
|
11097
|
-
"Media"
|
|
11098
|
-
), directory && directory.split("/").map((part, index, parts) => {
|
|
11099
|
-
const currentDir = parts.slice(0, index + 1).join("/");
|
|
11100
|
-
return /* @__PURE__ */ React__default.createElement(
|
|
11101
|
-
BreadcrumbButton,
|
|
11102
|
-
{
|
|
11103
|
-
className: "pl-1.5 " + (index + 1 === parts.length ? "text-gray-500 font-bold" : "text-gray-300 font-medium after:pl-1.5 after:content-['/']"),
|
|
11104
|
-
key: currentDir,
|
|
11105
|
-
onClick: () => {
|
|
11106
|
-
setDirectory(currentDir);
|
|
11107
|
-
}
|
|
11108
|
-
},
|
|
11109
|
-
part
|
|
11110
|
-
);
|
|
11111
|
-
}));
|
|
11112
|
-
}
|
|
11113
11208
|
const DeleteModal$1 = ({
|
|
11114
11209
|
close: close2,
|
|
11115
11210
|
deleteFunc,
|
|
@@ -11163,40 +11258,6 @@ const NewFolderModal = ({ onSubmit, close: close2 }) => {
|
|
|
11163
11258
|
"Create New Folder"
|
|
11164
11259
|
))));
|
|
11165
11260
|
};
|
|
11166
|
-
const CopyField = ({ label, description, value }) => {
|
|
11167
|
-
const [copied, setCopied] = React__default.useState(false);
|
|
11168
|
-
const [fadeOut, setFadeOut] = React__default.useState(false);
|
|
11169
|
-
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(
|
|
11170
|
-
"span",
|
|
11171
|
-
{
|
|
11172
|
-
onClick: () => {
|
|
11173
|
-
if (copied === true)
|
|
11174
|
-
return;
|
|
11175
|
-
setCopied(true);
|
|
11176
|
-
setTimeout(() => {
|
|
11177
|
-
setFadeOut(true);
|
|
11178
|
-
}, 2500);
|
|
11179
|
-
setTimeout(() => {
|
|
11180
|
-
setCopied(false);
|
|
11181
|
-
setFadeOut(false);
|
|
11182
|
-
}, 3e3);
|
|
11183
|
-
navigator.clipboard.writeText(value);
|
|
11184
|
-
},
|
|
11185
|
-
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` : ``}`
|
|
11186
|
-
},
|
|
11187
|
-
/* @__PURE__ */ React__default.createElement(BiCopyAlt, { className: "relative text-blue-500 shrink-0 w-5 h-auto mr-1.5 -ml-0.5 z-20" }),
|
|
11188
|
-
" ",
|
|
11189
|
-
value,
|
|
11190
|
-
" ",
|
|
11191
|
-
copied && /* @__PURE__ */ React__default.createElement(
|
|
11192
|
-
"span",
|
|
11193
|
-
{
|
|
11194
|
-
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`
|
|
11195
|
-
},
|
|
11196
|
-
/* @__PURE__ */ React__default.createElement("span", null, "Copied to clipboard!")
|
|
11197
|
-
)
|
|
11198
|
-
), description && /* @__PURE__ */ React__default.createElement("p", { className: "mt-2 text-sm text-gray-500" }, description));
|
|
11199
|
-
};
|
|
11200
11261
|
const { useDropzone } = dropzone;
|
|
11201
11262
|
const join = function(...parts) {
|
|
11202
11263
|
const [first, last, slash] = [0, parts.length - 1, "/"];
|
|
@@ -11432,7 +11493,10 @@ function MediaPicker({
|
|
|
11432
11493
|
const observer = new IntersectionObserver((entries) => {
|
|
11433
11494
|
const target = entries[0];
|
|
11434
11495
|
if (target.isIntersecting && list.nextOffset) {
|
|
11435
|
-
setOffsetHistory((offsetHistory2) => [
|
|
11496
|
+
setOffsetHistory((offsetHistory2) => [
|
|
11497
|
+
...offsetHistory2,
|
|
11498
|
+
list.nextOffset
|
|
11499
|
+
]);
|
|
11436
11500
|
}
|
|
11437
11501
|
});
|
|
11438
11502
|
if (loaderRef.current) {
|
|
@@ -11695,7 +11759,7 @@ const SyncStatusContainer = ({ children }) => {
|
|
|
11695
11759
|
target: "_blank",
|
|
11696
11760
|
href: `${cms.api.tina.appDashboardLink}/media`
|
|
11697
11761
|
},
|
|
11698
|
-
"Sync Your Media In
|
|
11762
|
+
"Sync Your Media In TinaCloud.",
|
|
11699
11763
|
/* @__PURE__ */ React__default.createElement(BiLinkExternal, { className: `w-5 h-auto flex-shrink-0` })
|
|
11700
11764
|
)
|
|
11701
11765
|
)))) : /* @__PURE__ */ React__default.createElement(SyncStatusContext.Provider, { value: { syncStatus } }, children);
|
|
@@ -12027,6 +12091,7 @@ const initialState = (cms) => {
|
|
|
12027
12091
|
forms: [],
|
|
12028
12092
|
formLists: [],
|
|
12029
12093
|
editingMode: "basic",
|
|
12094
|
+
isLoadingContent: false,
|
|
12030
12095
|
quickEditSupported: false,
|
|
12031
12096
|
sidebarDisplayState: ((_a = cms == null ? void 0 : cms.sidebar) == null ? void 0 : _a.defaultState) || "open"
|
|
12032
12097
|
};
|
|
@@ -12086,7 +12151,12 @@ function tinaReducer(state, action) {
|
|
|
12086
12151
|
}
|
|
12087
12152
|
});
|
|
12088
12153
|
}
|
|
12089
|
-
return {
|
|
12154
|
+
return {
|
|
12155
|
+
...state,
|
|
12156
|
+
activeFormId,
|
|
12157
|
+
formLists: nextFormLists,
|
|
12158
|
+
isLoadingContent: false
|
|
12159
|
+
};
|
|
12090
12160
|
}
|
|
12091
12161
|
case "form-lists:remove": {
|
|
12092
12162
|
const nextFormLists = state.formLists.filter(
|
|
@@ -12155,6 +12225,9 @@ function tinaReducer(state, action) {
|
|
|
12155
12225
|
}
|
|
12156
12226
|
return { ...state, sidebarDisplayState: action.value };
|
|
12157
12227
|
}
|
|
12228
|
+
case "sidebar:set-loading-state": {
|
|
12229
|
+
return { ...state, isLoadingContent: action.value };
|
|
12230
|
+
}
|
|
12158
12231
|
default:
|
|
12159
12232
|
throw new Error(`Unhandled action ${action.type}`);
|
|
12160
12233
|
}
|
|
@@ -12396,7 +12469,9 @@ const ActiveFieldIndicator = () => {
|
|
|
12396
12469
|
if (activeEle) {
|
|
12397
12470
|
setDisplay(true);
|
|
12398
12471
|
setPosition(activeEle.getBoundingClientRect());
|
|
12399
|
-
const iframe = document.getElementById(
|
|
12472
|
+
const iframe = document.getElementById(
|
|
12473
|
+
"tina-iframe"
|
|
12474
|
+
);
|
|
12400
12475
|
if (iframe) {
|
|
12401
12476
|
setIframePosition(iframe.getBoundingClientRect());
|
|
12402
12477
|
}
|
|
@@ -12838,7 +12913,6 @@ const CreateBranchModel = ({
|
|
|
12838
12913
|
}) => {
|
|
12839
12914
|
const cms = useCMS$1();
|
|
12840
12915
|
const tinaApi = cms.api.tina;
|
|
12841
|
-
tinaApi.branch;
|
|
12842
12916
|
const [disabled, setDisabled] = React.useState(false);
|
|
12843
12917
|
const [newBranchName, setNewBranchName] = React.useState("");
|
|
12844
12918
|
const [error, setError] = React.useState("");
|
|
@@ -12864,10 +12938,10 @@ const CreateBranchModel = ({
|
|
|
12864
12938
|
const newUrl = window.location.href.replace(hash, newHash);
|
|
12865
12939
|
window.location.href = newUrl;
|
|
12866
12940
|
};
|
|
12867
|
-
return /* @__PURE__ */ React.createElement(Modal, null, /* @__PURE__ */ React.createElement(PopupModal, null, /* @__PURE__ */ React.createElement(ModalHeader, { close: close2 }, /* @__PURE__ */ React.createElement(BiGitBranch, { className: "w-6 h-auto mr-1 text-blue-500 opacity-70" }), " ", "Create Branch"), /* @__PURE__ */ React.createElement(ModalBody, { padded: true }, /* @__PURE__ */ React.createElement("p", { className: "text-
|
|
12941
|
+
return /* @__PURE__ */ React.createElement(Modal, null, /* @__PURE__ */ React.createElement(PopupModal, null, /* @__PURE__ */ React.createElement(ModalHeader, { close: close2 }, /* @__PURE__ */ React.createElement(BiGitBranch, { className: "w-6 h-auto mr-1 text-blue-500 opacity-70" }), " ", "Create Branch"), /* @__PURE__ */ React.createElement(ModalBody, { padded: true }, /* @__PURE__ */ React.createElement("p", { className: "text-lg text-gray-700 font-bold mb-2" }, "This content is protected 🚧"), /* @__PURE__ */ React.createElement("p", { className: "text-sm text-gray-700 mb-4" }, "To make changes, you need to create a copy then get it approved and merged for it to go live."), /* @__PURE__ */ React.createElement(
|
|
12868
12942
|
PrefixedTextField,
|
|
12869
12943
|
{
|
|
12870
|
-
placeholder: "
|
|
12944
|
+
placeholder: "e.g. {{PAGE-NAME}}-updates",
|
|
12871
12945
|
value: newBranchName,
|
|
12872
12946
|
onChange: (e) => {
|
|
12873
12947
|
setError("");
|
|
@@ -13014,7 +13088,9 @@ const ImgEmbed = ({
|
|
|
13014
13088
|
const { fieldName } = useTemplates();
|
|
13015
13089
|
const { handleClose, handleRemove, handleSelect, isExpanded } = useEmbedHandles(editor, element, fieldName);
|
|
13016
13090
|
useHotkey("enter", () => {
|
|
13017
|
-
insertNodes(editor, [
|
|
13091
|
+
insertNodes(editor, [
|
|
13092
|
+
{ type: ELEMENT_PARAGRAPH, children: [{ text: "" }] }
|
|
13093
|
+
]);
|
|
13018
13094
|
});
|
|
13019
13095
|
return /* @__PURE__ */ React__default.createElement("span", { ...attributes, className: "" }, children, element.url ? /* @__PURE__ */ React__default.createElement(
|
|
13020
13096
|
"div",
|
|
@@ -13157,7 +13233,9 @@ const InlineEmbed = ({
|
|
|
13157
13233
|
const { templates, fieldName } = useTemplates();
|
|
13158
13234
|
const { handleClose, handleRemove, handleSelect, isExpanded } = useEmbedHandles(editor, element, fieldName);
|
|
13159
13235
|
useHotkey("enter", () => {
|
|
13160
|
-
insertNodes(editor, [
|
|
13236
|
+
insertNodes(editor, [
|
|
13237
|
+
{ type: ELEMENT_PARAGRAPH, children: [{ text: "" }] }
|
|
13238
|
+
]);
|
|
13161
13239
|
});
|
|
13162
13240
|
useHotkey("space", () => {
|
|
13163
13241
|
insertNodes(editor, [{ text: " " }], {
|
|
@@ -13213,7 +13291,9 @@ const BlockEmbed = ({
|
|
|
13213
13291
|
const { templates, fieldName } = useTemplates();
|
|
13214
13292
|
const { handleClose, handleRemove, handleSelect, isExpanded } = useEmbedHandles(editor, element, fieldName);
|
|
13215
13293
|
useHotkey("enter", () => {
|
|
13216
|
-
insertNodes(editor, [
|
|
13294
|
+
insertNodes(editor, [
|
|
13295
|
+
{ type: ELEMENT_PARAGRAPH, children: [{ text: "" }] }
|
|
13296
|
+
]);
|
|
13217
13297
|
});
|
|
13218
13298
|
const activeTemplate = templates.find(
|
|
13219
13299
|
(template) => template.name === element.name
|
|
@@ -13559,6 +13639,11 @@ const autoformatMarks = [
|
|
|
13559
13639
|
mode: "mark",
|
|
13560
13640
|
type: MARK_CODE,
|
|
13561
13641
|
match: "`"
|
|
13642
|
+
},
|
|
13643
|
+
{
|
|
13644
|
+
mode: "mark",
|
|
13645
|
+
type: MARK_STRIKETHROUGH,
|
|
13646
|
+
match: ["~~", "~"]
|
|
13562
13647
|
}
|
|
13563
13648
|
];
|
|
13564
13649
|
const autoformatRules = [
|
|
@@ -13700,16 +13785,14 @@ const plugins$1 = [
|
|
|
13700
13785
|
})
|
|
13701
13786
|
];
|
|
13702
13787
|
const plugins = [
|
|
13788
|
+
createBasicMarksPlugin(),
|
|
13703
13789
|
createHeadingPlugin(),
|
|
13704
13790
|
createParagraphPlugin(),
|
|
13705
13791
|
createCodeBlockPlugin(),
|
|
13706
13792
|
createHTMLBlockPlugin(),
|
|
13707
13793
|
createHTMLInlinePlugin(),
|
|
13708
13794
|
createBlockquotePlugin(),
|
|
13709
|
-
createBoldPlugin(),
|
|
13710
|
-
createItalicPlugin(),
|
|
13711
13795
|
createUnderlinePlugin(),
|
|
13712
|
-
createCodePlugin(),
|
|
13713
13796
|
createListPlugin(),
|
|
13714
13797
|
createIndentListPlugin(),
|
|
13715
13798
|
createHorizontalRulePlugin(),
|
|
@@ -14069,7 +14152,9 @@ const EMBED_ICON_WIDTH = 78;
|
|
|
14069
14152
|
const CONTAINER_MD_BREAKPOINT = 448;
|
|
14070
14153
|
const FLOAT_BUTTON_WIDTH = 25;
|
|
14071
14154
|
const HEADING_LABEL = "Headings";
|
|
14072
|
-
const ToolbarContext = createContext(
|
|
14155
|
+
const ToolbarContext = createContext(
|
|
14156
|
+
void 0
|
|
14157
|
+
);
|
|
14073
14158
|
const ToolbarProvider = ({
|
|
14074
14159
|
tinaForm,
|
|
14075
14160
|
templates,
|
|
@@ -14219,7 +14304,7 @@ const useCodeBlockToolbarButton = (state) => {
|
|
|
14219
14304
|
const CodeBlockToolbarButton = withRef(({ clear, ...rest }, ref) => {
|
|
14220
14305
|
const state = useCodeBlockToolbarButtonState();
|
|
14221
14306
|
const { props } = useCodeBlockToolbarButton(state);
|
|
14222
|
-
return /* @__PURE__ */ React__default.createElement(ToolbarButton, { ref, tooltip: "
|
|
14307
|
+
return /* @__PURE__ */ React__default.createElement(ToolbarButton, { ref, tooltip: "Code Block", ...rest, ...props }, /* @__PURE__ */ React__default.createElement(Icons.codeBlock, null));
|
|
14223
14308
|
});
|
|
14224
14309
|
const useImageToolbarButtonState = () => {
|
|
14225
14310
|
const editor = useEditorState();
|
|
@@ -14251,36 +14336,54 @@ const useImageToolbarButton = (state) => {
|
|
|
14251
14336
|
const ImageToolbarButton = withRef(({ clear, ...rest }, ref) => {
|
|
14252
14337
|
const state = useImageToolbarButtonState();
|
|
14253
14338
|
const { props } = useImageToolbarButton(state);
|
|
14254
|
-
return /* @__PURE__ */ React__default.createElement(ToolbarButton, { ref, tooltip: "
|
|
14255
|
-
});
|
|
14256
|
-
const IndentListToolbarButton = withRef(({ nodeType = ELEMENT_UL }, ref) => {
|
|
14257
|
-
const editor = useEditorState();
|
|
14258
|
-
const state = useListToolbarButtonState({ nodeType });
|
|
14259
|
-
const { props } = useListToolbarButton(state);
|
|
14260
|
-
return /* @__PURE__ */ React__default.createElement(
|
|
14261
|
-
ToolbarButton,
|
|
14262
|
-
{
|
|
14263
|
-
ref,
|
|
14264
|
-
tooltip: nodeType === ELEMENT_UL ? "Bulleted List" : "Numbered List",
|
|
14265
|
-
...props,
|
|
14266
|
-
onClick: (e) => {
|
|
14267
|
-
e.preventDefault();
|
|
14268
|
-
e.stopPropagation();
|
|
14269
|
-
toggleList(editor, { type: nodeType });
|
|
14270
|
-
}
|
|
14271
|
-
},
|
|
14272
|
-
nodeType === ELEMENT_UL ? /* @__PURE__ */ React__default.createElement(Icons.ul, null) : /* @__PURE__ */ React__default.createElement(Icons.ol, null)
|
|
14273
|
-
);
|
|
14339
|
+
return /* @__PURE__ */ React__default.createElement(ToolbarButton, { ref, tooltip: "Image", ...rest, ...props }, /* @__PURE__ */ React__default.createElement(Icons.image, null));
|
|
14274
14340
|
});
|
|
14341
|
+
const UnorderedListToolbarButton = withRef(
|
|
14342
|
+
(props, ref) => {
|
|
14343
|
+
const editor = useEditorState();
|
|
14344
|
+
const state = useListToolbarButtonState({ nodeType: ELEMENT_UL });
|
|
14345
|
+
const { props: buttonProps } = useListToolbarButton(state);
|
|
14346
|
+
return /* @__PURE__ */ React__default.createElement(
|
|
14347
|
+
ToolbarButton,
|
|
14348
|
+
{
|
|
14349
|
+
ref,
|
|
14350
|
+
tooltip: "Bulleted List",
|
|
14351
|
+
...buttonProps,
|
|
14352
|
+
onClick: (e) => {
|
|
14353
|
+
e.preventDefault();
|
|
14354
|
+
e.stopPropagation();
|
|
14355
|
+
toggleList(editor, { type: ELEMENT_UL });
|
|
14356
|
+
}
|
|
14357
|
+
},
|
|
14358
|
+
/* @__PURE__ */ React__default.createElement(Icons.ul, null)
|
|
14359
|
+
);
|
|
14360
|
+
}
|
|
14361
|
+
);
|
|
14362
|
+
const OrderedListToolbarButton = withRef(
|
|
14363
|
+
(props, ref) => {
|
|
14364
|
+
const editor = useEditorState();
|
|
14365
|
+
const state = useListToolbarButtonState({ nodeType: ELEMENT_OL });
|
|
14366
|
+
const { props: buttonProps } = useListToolbarButton(state);
|
|
14367
|
+
return /* @__PURE__ */ React__default.createElement(
|
|
14368
|
+
ToolbarButton,
|
|
14369
|
+
{
|
|
14370
|
+
ref,
|
|
14371
|
+
tooltip: "Numbered List",
|
|
14372
|
+
...buttonProps,
|
|
14373
|
+
onClick: (e) => {
|
|
14374
|
+
e.preventDefault();
|
|
14375
|
+
e.stopPropagation();
|
|
14376
|
+
toggleList(editor, { type: ELEMENT_OL });
|
|
14377
|
+
}
|
|
14378
|
+
},
|
|
14379
|
+
/* @__PURE__ */ React__default.createElement(Icons.ol, null)
|
|
14380
|
+
);
|
|
14381
|
+
}
|
|
14382
|
+
);
|
|
14275
14383
|
const LinkToolbarButton = withRef((rest, ref) => {
|
|
14276
14384
|
const state = useLinkToolbarButtonState();
|
|
14277
14385
|
const { props } = useLinkToolbarButton(state);
|
|
14278
|
-
return /* @__PURE__ */ React__default.createElement(ToolbarButton, { ref, tooltip: "Link"
|
|
14279
|
-
});
|
|
14280
|
-
const MarkToolbarButton = withRef(({ clear, nodeType, ...rest }, ref) => {
|
|
14281
|
-
const state = useMarkToolbarButtonState({ clear, nodeType });
|
|
14282
|
-
const { props } = useMarkToolbarButton(state);
|
|
14283
|
-
return /* @__PURE__ */ React__default.createElement(ToolbarButton, { ref, ...props, ...rest });
|
|
14386
|
+
return /* @__PURE__ */ React__default.createElement(ToolbarButton, { ref, ...props, ...rest, tooltip: "Link" }, /* @__PURE__ */ React__default.createElement(Icons.link, null));
|
|
14284
14387
|
});
|
|
14285
14388
|
const useMermaidToolbarButtonState = () => {
|
|
14286
14389
|
const editor = useEditorState();
|
|
@@ -14361,7 +14464,7 @@ const useBlockQuoteToolbarButton = (state) => {
|
|
|
14361
14464
|
const QuoteToolbarButton = withRef(({ clear, ...rest }, ref) => {
|
|
14362
14465
|
const state = useBlockQuoteToolbarButtonState();
|
|
14363
14466
|
const { props } = useBlockQuoteToolbarButton(state);
|
|
14364
|
-
return /* @__PURE__ */ React__default.createElement(ToolbarButton, { ref, tooltip: "
|
|
14467
|
+
return /* @__PURE__ */ React__default.createElement(ToolbarButton, { ref, tooltip: "Quote (⌘+⇧+.)", ...rest, ...props }, /* @__PURE__ */ React__default.createElement(Icons.quote, null));
|
|
14365
14468
|
});
|
|
14366
14469
|
const useRawMarkdownToolbarButton = () => {
|
|
14367
14470
|
const { setRawMode } = useEditorContext();
|
|
@@ -14381,7 +14484,7 @@ const RawMarkdownToolbarButton = withRef(({ clear, ...rest }, ref) => {
|
|
|
14381
14484
|
ToolbarButton,
|
|
14382
14485
|
{
|
|
14383
14486
|
ref,
|
|
14384
|
-
tooltip: "
|
|
14487
|
+
tooltip: "Raw Markdown",
|
|
14385
14488
|
...rest,
|
|
14386
14489
|
...props,
|
|
14387
14490
|
"data-testid": "markdown-button"
|
|
@@ -14526,7 +14629,7 @@ const EmbedButton = ({ editor, templates }) => {
|
|
|
14526
14629
|
key: template.name,
|
|
14527
14630
|
onMouseDown: (e) => {
|
|
14528
14631
|
e.preventDefault();
|
|
14529
|
-
|
|
14632
|
+
setOpen(false);
|
|
14530
14633
|
insertMDX(editor, template);
|
|
14531
14634
|
},
|
|
14532
14635
|
className: ""
|
|
@@ -14534,6 +14637,15 @@ const EmbedButton = ({ editor, templates }) => {
|
|
|
14534
14637
|
template.label || template.name
|
|
14535
14638
|
))));
|
|
14536
14639
|
};
|
|
14640
|
+
const MarkToolbarButton = withRef(({ clear, nodeType, ...rest }, ref) => {
|
|
14641
|
+
const state = useMarkToolbarButtonState({ clear, nodeType });
|
|
14642
|
+
const { props } = useMarkToolbarButton(state);
|
|
14643
|
+
return /* @__PURE__ */ React__default.createElement(ToolbarButton, { ref, ...props, ...rest });
|
|
14644
|
+
});
|
|
14645
|
+
const BoldToolbarButton = () => /* @__PURE__ */ React__default.createElement(MarkToolbarButton, { tooltip: "Bold (⌘+B)", nodeType: MARK_BOLD }, /* @__PURE__ */ React__default.createElement(Icons.bold, null));
|
|
14646
|
+
const StrikethroughToolbarButton = () => /* @__PURE__ */ React__default.createElement(MarkToolbarButton, { tooltip: "Strikethrough", nodeType: MARK_STRIKETHROUGH }, /* @__PURE__ */ React__default.createElement(Icons.strikethrough, null));
|
|
14647
|
+
const ItalicToolbarButton = () => /* @__PURE__ */ React__default.createElement(MarkToolbarButton, { tooltip: "Italic (⌘+I)", nodeType: MARK_ITALIC }, /* @__PURE__ */ React__default.createElement(Icons.italic, null));
|
|
14648
|
+
const CodeToolbarButton = () => /* @__PURE__ */ React__default.createElement(MarkToolbarButton, { tooltip: "Code (⌘+E)", nodeType: MARK_CODE }, /* @__PURE__ */ React__default.createElement(Icons.code, null));
|
|
14537
14649
|
const toolbarItems = {
|
|
14538
14650
|
heading: {
|
|
14539
14651
|
label: HEADING_LABEL,
|
|
@@ -14554,32 +14666,37 @@ const toolbarItems = {
|
|
|
14554
14666
|
quote: {
|
|
14555
14667
|
label: "Quote",
|
|
14556
14668
|
width: () => STANDARD_ICON_WIDTH,
|
|
14557
|
-
Component: /* @__PURE__ */ React__default.createElement(QuoteToolbarButton,
|
|
14669
|
+
Component: /* @__PURE__ */ React__default.createElement(QuoteToolbarButton, null)
|
|
14558
14670
|
},
|
|
14559
14671
|
ul: {
|
|
14560
14672
|
label: "Unordered List",
|
|
14561
14673
|
width: () => STANDARD_ICON_WIDTH,
|
|
14562
|
-
Component: /* @__PURE__ */ React__default.createElement(
|
|
14674
|
+
Component: /* @__PURE__ */ React__default.createElement(UnorderedListToolbarButton, null)
|
|
14563
14675
|
},
|
|
14564
14676
|
ol: {
|
|
14565
14677
|
label: "Ordered List",
|
|
14566
14678
|
width: () => STANDARD_ICON_WIDTH,
|
|
14567
|
-
Component: /* @__PURE__ */ React__default.createElement(
|
|
14679
|
+
Component: /* @__PURE__ */ React__default.createElement(OrderedListToolbarButton, null)
|
|
14568
14680
|
},
|
|
14569
14681
|
bold: {
|
|
14570
14682
|
label: "Bold",
|
|
14571
14683
|
width: () => STANDARD_ICON_WIDTH,
|
|
14572
|
-
Component: /* @__PURE__ */ React__default.createElement(
|
|
14684
|
+
Component: /* @__PURE__ */ React__default.createElement(BoldToolbarButton, null)
|
|
14685
|
+
},
|
|
14686
|
+
strikethrough: {
|
|
14687
|
+
label: "Strikethrough",
|
|
14688
|
+
width: () => STANDARD_ICON_WIDTH,
|
|
14689
|
+
Component: /* @__PURE__ */ React__default.createElement(StrikethroughToolbarButton, null)
|
|
14573
14690
|
},
|
|
14574
14691
|
italic: {
|
|
14575
14692
|
label: "Italic",
|
|
14576
14693
|
width: () => STANDARD_ICON_WIDTH,
|
|
14577
|
-
Component: /* @__PURE__ */ React__default.createElement(
|
|
14694
|
+
Component: /* @__PURE__ */ React__default.createElement(ItalicToolbarButton, null)
|
|
14578
14695
|
},
|
|
14579
14696
|
code: {
|
|
14580
14697
|
label: "Code",
|
|
14581
14698
|
width: () => STANDARD_ICON_WIDTH,
|
|
14582
|
-
Component: /* @__PURE__ */ React__default.createElement(
|
|
14699
|
+
Component: /* @__PURE__ */ React__default.createElement(CodeToolbarButton, null)
|
|
14583
14700
|
},
|
|
14584
14701
|
codeBlock: {
|
|
14585
14702
|
label: "Code Block",
|
|
@@ -14612,7 +14729,12 @@ function FixedToolbarButtons() {
|
|
|
14612
14729
|
const [itemsShown, setItemsShown] = React__default.useState(11);
|
|
14613
14730
|
const { overrides, templates } = useToolbarContext();
|
|
14614
14731
|
const showEmbedButton = templates.length > 0;
|
|
14615
|
-
let items2 =
|
|
14732
|
+
let items2 = [];
|
|
14733
|
+
if (Array.isArray(overrides)) {
|
|
14734
|
+
items2 = overrides === void 0 ? Object.values(toolbarItems) : overrides.map((item) => toolbarItems[item]).filter((item) => item !== void 0);
|
|
14735
|
+
} else {
|
|
14736
|
+
items2 = (overrides == null ? void 0 : overrides.toolbar) === void 0 ? Object.values(toolbarItems) : overrides.toolbar.map((item) => toolbarItems[item]).filter((item) => item !== void 0);
|
|
14737
|
+
}
|
|
14616
14738
|
if (!showEmbedButton) {
|
|
14617
14739
|
items2 = items2.filter((item) => item.label !== toolbarItems.embed.label);
|
|
14618
14740
|
}
|
|
@@ -14940,6 +15062,9 @@ const isUrl = (string) => {
|
|
|
14940
15062
|
if (typeof string !== "string") {
|
|
14941
15063
|
return false;
|
|
14942
15064
|
}
|
|
15065
|
+
if (string.startsWith("#")) {
|
|
15066
|
+
return true;
|
|
15067
|
+
}
|
|
14943
15068
|
const generalMatch = string.match(protocolAndDomainRE);
|
|
14944
15069
|
const emailLinkMatch = string.match(emailLintRE);
|
|
14945
15070
|
const localUrlMatch = string.match(localUrlRE);
|
|
@@ -14961,12 +15086,12 @@ const isUrl = (string) => {
|
|
|
14961
15086
|
}
|
|
14962
15087
|
return localhostDomainRE.test(everythingAfterProtocol) || nonLocalhostDomainRE.test(everythingAfterProtocol);
|
|
14963
15088
|
};
|
|
14964
|
-
const RichEditor = (
|
|
15089
|
+
const RichEditor = ({ input, tinaForm, field }) => {
|
|
14965
15090
|
var _a;
|
|
14966
15091
|
const initialValue = React__default.useMemo(
|
|
14967
15092
|
() => {
|
|
14968
15093
|
var _a2, _b;
|
|
14969
|
-
return ((_b = (_a2 =
|
|
15094
|
+
return ((_b = (_a2 = input.value) == null ? void 0 : _a2.children) == null ? void 0 : _b.length) ? input.value.children.map(helpers.normalize) : [{ type: "p", children: [{ type: "text", text: "" }] }];
|
|
14970
15095
|
},
|
|
14971
15096
|
[]
|
|
14972
15097
|
);
|
|
@@ -14994,7 +15119,7 @@ const RichEditor = (props) => {
|
|
|
14994
15119
|
),
|
|
14995
15120
|
[]
|
|
14996
15121
|
);
|
|
14997
|
-
const tempId = [
|
|
15122
|
+
const tempId = [tinaForm.id, input.name].join(".");
|
|
14998
15123
|
const id = React__default.useMemo(() => uuid() + tempId, [tempId]);
|
|
14999
15124
|
const ref = React__default.useRef(null);
|
|
15000
15125
|
React__default.useEffect(() => {
|
|
@@ -15004,13 +15129,13 @@ const RichEditor = (props) => {
|
|
|
15004
15129
|
const plateElement = (_a2 = ref.current) == null ? void 0 : _a2.querySelector(
|
|
15005
15130
|
'[role="textbox"]'
|
|
15006
15131
|
);
|
|
15007
|
-
if (
|
|
15132
|
+
if (field.experimental_focusIntent && plateElement) {
|
|
15008
15133
|
if (plateElement)
|
|
15009
15134
|
plateElement.focus();
|
|
15010
15135
|
}
|
|
15011
15136
|
}, 100);
|
|
15012
15137
|
}
|
|
15013
|
-
}, [
|
|
15138
|
+
}, [field.experimental_focusIntent, ref]);
|
|
15014
15139
|
return /* @__PURE__ */ React__default.createElement("div", { ref }, /* @__PURE__ */ React__default.createElement(
|
|
15015
15140
|
Plate,
|
|
15016
15141
|
{
|
|
@@ -15018,7 +15143,7 @@ const RichEditor = (props) => {
|
|
|
15018
15143
|
initialValue,
|
|
15019
15144
|
plugins: plugins$2,
|
|
15020
15145
|
onChange: (value) => {
|
|
15021
|
-
|
|
15146
|
+
input.onChange({
|
|
15022
15147
|
type: "root",
|
|
15023
15148
|
children: value
|
|
15024
15149
|
});
|
|
@@ -15027,12 +15152,12 @@ const RichEditor = (props) => {
|
|
|
15027
15152
|
/* @__PURE__ */ React__default.createElement(TooltipProvider, null, /* @__PURE__ */ React__default.createElement(
|
|
15028
15153
|
ToolbarProvider,
|
|
15029
15154
|
{
|
|
15030
|
-
tinaForm
|
|
15031
|
-
templates:
|
|
15032
|
-
overrides: (
|
|
15155
|
+
tinaForm,
|
|
15156
|
+
templates: field.templates,
|
|
15157
|
+
overrides: (field == null ? void 0 : field.toolbarOverride) ? field.toolbarOverride : field.overrides
|
|
15033
15158
|
},
|
|
15034
15159
|
/* @__PURE__ */ React__default.createElement(FixedToolbar, null, /* @__PURE__ */ React__default.createElement(FixedToolbarButtons, null)),
|
|
15035
|
-
/* @__PURE__ */ React__default.createElement(FloatingToolbar, null, /* @__PURE__ */ React__default.createElement(FloatingToolbarButtons, null))
|
|
15160
|
+
((_a = field == null ? void 0 : field.overrides) == null ? void 0 : _a.showFloatingToolbar) !== false ? /* @__PURE__ */ React__default.createElement(FloatingToolbar, null, /* @__PURE__ */ React__default.createElement(FloatingToolbarButtons, null)) : null
|
|
15036
15161
|
), /* @__PURE__ */ React__default.createElement(Editor, null))
|
|
15037
15162
|
));
|
|
15038
15163
|
};
|
|
@@ -16220,132 +16345,1209 @@ const ben = [
|
|
|
16220
16345
|
"হয়"
|
|
16221
16346
|
];
|
|
16222
16347
|
const bre = [
|
|
16348
|
+
"'blam",
|
|
16349
|
+
"'d",
|
|
16350
|
+
"'m",
|
|
16351
|
+
"'r",
|
|
16352
|
+
"'ta",
|
|
16353
|
+
"'vat",
|
|
16354
|
+
"'z",
|
|
16355
|
+
"'zo",
|
|
16223
16356
|
"a",
|
|
16224
|
-
"
|
|
16225
|
-
"
|
|
16226
|
-
"
|
|
16227
|
-
"
|
|
16228
|
-
"
|
|
16229
|
-
"
|
|
16230
|
-
"
|
|
16231
|
-
"
|
|
16232
|
-
"
|
|
16233
|
-
"
|
|
16234
|
-
"
|
|
16235
|
-
"
|
|
16236
|
-
"
|
|
16237
|
-
"
|
|
16238
|
-
"
|
|
16239
|
-
"
|
|
16240
|
-
"
|
|
16241
|
-
"
|
|
16242
|
-
"
|
|
16243
|
-
"
|
|
16244
|
-
"
|
|
16357
|
+
"a:",
|
|
16358
|
+
"aba",
|
|
16359
|
+
"abalamour",
|
|
16360
|
+
"abaoe",
|
|
16361
|
+
"ac'hane",
|
|
16362
|
+
"ac'hanoc'h",
|
|
16363
|
+
"ac'hanomp",
|
|
16364
|
+
"ac'hanon",
|
|
16365
|
+
"ac'hanout",
|
|
16366
|
+
"adal",
|
|
16367
|
+
"adalek",
|
|
16368
|
+
"adarre",
|
|
16369
|
+
"ae",
|
|
16370
|
+
"aec'h",
|
|
16371
|
+
"aed",
|
|
16372
|
+
"aemp",
|
|
16373
|
+
"aen",
|
|
16374
|
+
"aent",
|
|
16375
|
+
"aes",
|
|
16376
|
+
"afe",
|
|
16377
|
+
"afec'h",
|
|
16378
|
+
"afed",
|
|
16379
|
+
"afemp",
|
|
16380
|
+
"afen",
|
|
16381
|
+
"afent",
|
|
16382
|
+
"afes",
|
|
16383
|
+
"ag",
|
|
16384
|
+
"ah",
|
|
16385
|
+
"aimp",
|
|
16386
|
+
"aint",
|
|
16387
|
+
"aio",
|
|
16388
|
+
"aiou",
|
|
16389
|
+
"aje",
|
|
16390
|
+
"ajec'h",
|
|
16391
|
+
"ajed",
|
|
16392
|
+
"ajemp",
|
|
16393
|
+
"ajen",
|
|
16394
|
+
"ajent",
|
|
16395
|
+
"ajes",
|
|
16396
|
+
"al",
|
|
16397
|
+
"alato",
|
|
16398
|
+
"alies",
|
|
16399
|
+
"aliesañ",
|
|
16400
|
+
"alkent",
|
|
16401
|
+
"all",
|
|
16402
|
+
"allas",
|
|
16403
|
+
"allo",
|
|
16404
|
+
"allô",
|
|
16405
|
+
"am",
|
|
16406
|
+
"amañ",
|
|
16407
|
+
"amzer",
|
|
16408
|
+
"an",
|
|
16409
|
+
"anezhañ",
|
|
16410
|
+
"anezhe",
|
|
16411
|
+
"anezhi",
|
|
16412
|
+
"anezho",
|
|
16413
|
+
"anvet",
|
|
16414
|
+
"aon",
|
|
16415
|
+
"aotren",
|
|
16416
|
+
"ar",
|
|
16417
|
+
"arall",
|
|
16418
|
+
"araok",
|
|
16419
|
+
"araoki",
|
|
16420
|
+
"araozañ",
|
|
16421
|
+
"araozo",
|
|
16422
|
+
"araozoc'h",
|
|
16423
|
+
"araozomp",
|
|
16424
|
+
"araozon",
|
|
16425
|
+
"araozor",
|
|
16426
|
+
"araozout",
|
|
16427
|
+
"arbenn",
|
|
16428
|
+
"arre",
|
|
16429
|
+
"atalek",
|
|
16430
|
+
"atav",
|
|
16431
|
+
"az",
|
|
16432
|
+
"azalek",
|
|
16433
|
+
"azirazañ",
|
|
16434
|
+
"azirazi",
|
|
16435
|
+
"azirazo",
|
|
16436
|
+
"azirazoc'h",
|
|
16437
|
+
"azirazomp",
|
|
16438
|
+
"azirazon",
|
|
16439
|
+
"azirazor",
|
|
16440
|
+
"azirazout",
|
|
16441
|
+
"b:",
|
|
16442
|
+
"ba",
|
|
16443
|
+
"ba'l",
|
|
16444
|
+
"ba'n",
|
|
16445
|
+
"ba'r",
|
|
16446
|
+
"bad",
|
|
16447
|
+
"bah",
|
|
16448
|
+
"bal",
|
|
16449
|
+
"ban",
|
|
16450
|
+
"bar",
|
|
16451
|
+
"bastañ",
|
|
16452
|
+
"befe",
|
|
16453
|
+
"bell",
|
|
16454
|
+
"benaos",
|
|
16455
|
+
"benn",
|
|
16456
|
+
"bennag",
|
|
16457
|
+
"bennak",
|
|
16458
|
+
"bennozh",
|
|
16459
|
+
"bep",
|
|
16460
|
+
"bepred",
|
|
16461
|
+
"berr",
|
|
16462
|
+
"berzh",
|
|
16463
|
+
"bet",
|
|
16464
|
+
"betek",
|
|
16465
|
+
"betra",
|
|
16466
|
+
"bev",
|
|
16467
|
+
"bevet",
|
|
16468
|
+
"bez",
|
|
16469
|
+
"bezañ",
|
|
16470
|
+
"beze",
|
|
16471
|
+
"bezent",
|
|
16472
|
+
"bezet",
|
|
16473
|
+
"bezh",
|
|
16474
|
+
"bezit",
|
|
16475
|
+
"bezomp",
|
|
16476
|
+
"bihan",
|
|
16477
|
+
"bije",
|
|
16478
|
+
"biou",
|
|
16479
|
+
"biskoazh",
|
|
16480
|
+
"blam",
|
|
16481
|
+
"bo",
|
|
16482
|
+
"boa",
|
|
16483
|
+
"bominapl",
|
|
16484
|
+
"boudoudom",
|
|
16485
|
+
"bouez",
|
|
16486
|
+
"boull",
|
|
16487
|
+
"boum",
|
|
16488
|
+
"bout",
|
|
16489
|
+
"bras",
|
|
16490
|
+
"brasañ",
|
|
16491
|
+
"brav",
|
|
16492
|
+
"bravo",
|
|
16493
|
+
"bremañ",
|
|
16494
|
+
"bres",
|
|
16495
|
+
"brokenn",
|
|
16496
|
+
"bronn",
|
|
16497
|
+
"brrr",
|
|
16498
|
+
"brutal",
|
|
16499
|
+
"buhezek",
|
|
16500
|
+
"c'h:",
|
|
16501
|
+
"c'haout",
|
|
16502
|
+
"c'he",
|
|
16503
|
+
"c'hem",
|
|
16504
|
+
"c'herz",
|
|
16505
|
+
"c'heñver",
|
|
16506
|
+
"c'hichen",
|
|
16507
|
+
"c'hiz",
|
|
16508
|
+
"c'hoazh",
|
|
16509
|
+
"c'horre",
|
|
16510
|
+
"c'houde",
|
|
16511
|
+
"c'houst",
|
|
16512
|
+
"c'hreiz",
|
|
16513
|
+
"c'hwec'h",
|
|
16514
|
+
"c'hwec'hvet",
|
|
16515
|
+
"c'hwezek",
|
|
16516
|
+
"c'hwi",
|
|
16517
|
+
"ch:",
|
|
16518
|
+
"chaous",
|
|
16519
|
+
"chik",
|
|
16520
|
+
"chit",
|
|
16521
|
+
"chom",
|
|
16522
|
+
"chut",
|
|
16523
|
+
"d'",
|
|
16524
|
+
"d'al",
|
|
16525
|
+
"d'an",
|
|
16526
|
+
"d'ar",
|
|
16527
|
+
"d'az",
|
|
16528
|
+
"d'e",
|
|
16529
|
+
"d'he",
|
|
16530
|
+
"d'ho",
|
|
16531
|
+
"d'hol",
|
|
16532
|
+
"d'hon",
|
|
16533
|
+
"d'hor",
|
|
16534
|
+
"d'o",
|
|
16535
|
+
"d'ober",
|
|
16536
|
+
"d'ul",
|
|
16537
|
+
"d'un",
|
|
16538
|
+
"d'ur",
|
|
16539
|
+
"d:",
|
|
16245
16540
|
"da",
|
|
16246
|
-
"
|
|
16247
|
-
"
|
|
16248
|
-
"
|
|
16249
|
-
"
|
|
16250
|
-
"
|
|
16251
|
-
"
|
|
16252
|
-
"
|
|
16253
|
-
"
|
|
16254
|
-
"
|
|
16255
|
-
"
|
|
16256
|
-
"
|
|
16257
|
-
"
|
|
16258
|
-
"
|
|
16259
|
-
"
|
|
16260
|
-
"
|
|
16541
|
+
"dak",
|
|
16542
|
+
"daka",
|
|
16543
|
+
"dal",
|
|
16544
|
+
"dalbezh",
|
|
16545
|
+
"dalc'hmat",
|
|
16546
|
+
"dalit",
|
|
16547
|
+
"damdost",
|
|
16548
|
+
"damheñvel",
|
|
16549
|
+
"damm",
|
|
16550
|
+
"dan",
|
|
16551
|
+
"danvez",
|
|
16552
|
+
"dao",
|
|
16553
|
+
"daol",
|
|
16554
|
+
"daonet",
|
|
16555
|
+
"daou",
|
|
16556
|
+
"daoust",
|
|
16557
|
+
"daouzek",
|
|
16558
|
+
"daouzekvet",
|
|
16559
|
+
"darn",
|
|
16560
|
+
"dastrewiñ",
|
|
16561
|
+
"dav",
|
|
16562
|
+
"davedoc'h",
|
|
16563
|
+
"davedomp",
|
|
16564
|
+
"davedon",
|
|
16565
|
+
"davedor",
|
|
16566
|
+
"davedout",
|
|
16567
|
+
"davet",
|
|
16568
|
+
"davetañ",
|
|
16569
|
+
"davete",
|
|
16570
|
+
"daveti",
|
|
16571
|
+
"daveto",
|
|
16572
|
+
"defe",
|
|
16573
|
+
"dehou",
|
|
16574
|
+
"dek",
|
|
16575
|
+
"dekvet",
|
|
16576
|
+
"den",
|
|
16577
|
+
"deoc'h",
|
|
16578
|
+
"deomp",
|
|
16579
|
+
"deor",
|
|
16580
|
+
"derc'hel",
|
|
16581
|
+
"deus",
|
|
16582
|
+
"dez",
|
|
16583
|
+
"deze",
|
|
16584
|
+
"dezhañ",
|
|
16585
|
+
"dezhe",
|
|
16586
|
+
"dezhi",
|
|
16587
|
+
"dezho",
|
|
16588
|
+
"di",
|
|
16589
|
+
"diabarzh",
|
|
16590
|
+
"diagent",
|
|
16591
|
+
"diar",
|
|
16592
|
+
"diaraok",
|
|
16593
|
+
"diavaez",
|
|
16594
|
+
"dibaoe",
|
|
16595
|
+
"dibaot",
|
|
16596
|
+
"dibar",
|
|
16597
|
+
"dic'halañ",
|
|
16598
|
+
"didiac'h",
|
|
16599
|
+
"dienn",
|
|
16600
|
+
"difer",
|
|
16601
|
+
"diganeoc'h",
|
|
16602
|
+
"diganeomp",
|
|
16603
|
+
"diganeor",
|
|
16604
|
+
"diganimp",
|
|
16605
|
+
"diganin",
|
|
16606
|
+
"diganit",
|
|
16607
|
+
"digant",
|
|
16608
|
+
"digantañ",
|
|
16609
|
+
"digante",
|
|
16610
|
+
"diganti",
|
|
16611
|
+
"diganto",
|
|
16612
|
+
"digemmesk",
|
|
16613
|
+
"diget",
|
|
16614
|
+
"digor",
|
|
16615
|
+
"digoret",
|
|
16616
|
+
"dija",
|
|
16617
|
+
"dije",
|
|
16618
|
+
"dimp",
|
|
16619
|
+
"din",
|
|
16620
|
+
"dinaou",
|
|
16621
|
+
"dindan",
|
|
16622
|
+
"dindanañ",
|
|
16623
|
+
"dindani",
|
|
16624
|
+
"dindano",
|
|
16625
|
+
"dindanoc'h",
|
|
16626
|
+
"dindanomp",
|
|
16627
|
+
"dindanon",
|
|
16628
|
+
"dindanor",
|
|
16629
|
+
"dindanout",
|
|
16630
|
+
"dioutañ",
|
|
16631
|
+
"dioute",
|
|
16632
|
+
"diouti",
|
|
16633
|
+
"diouto",
|
|
16634
|
+
"diouzh",
|
|
16635
|
+
"diouzhin",
|
|
16636
|
+
"diouzhit",
|
|
16637
|
+
"diouzhoc'h",
|
|
16638
|
+
"diouzhomp",
|
|
16639
|
+
"diouzhor",
|
|
16640
|
+
"dirak",
|
|
16641
|
+
"dirazañ",
|
|
16642
|
+
"dirazi",
|
|
16643
|
+
"dirazo",
|
|
16644
|
+
"dirazoc'h",
|
|
16645
|
+
"dirazomp",
|
|
16646
|
+
"dirazon",
|
|
16647
|
+
"dirazor",
|
|
16648
|
+
"dirazout",
|
|
16649
|
+
"disheñvel",
|
|
16650
|
+
"dispar",
|
|
16651
|
+
"distank",
|
|
16652
|
+
"dister",
|
|
16653
|
+
"disterañ",
|
|
16654
|
+
"disterig",
|
|
16655
|
+
"distro",
|
|
16656
|
+
"dit",
|
|
16657
|
+
"divaez",
|
|
16658
|
+
"diwar",
|
|
16659
|
+
"diwezhat",
|
|
16660
|
+
"diwezhañ",
|
|
16261
16661
|
"do",
|
|
16262
|
-
"
|
|
16263
|
-
"
|
|
16662
|
+
"doa",
|
|
16663
|
+
"doare",
|
|
16664
|
+
"dont",
|
|
16665
|
+
"dost",
|
|
16666
|
+
"doue",
|
|
16667
|
+
"douetus",
|
|
16668
|
+
"douez",
|
|
16669
|
+
"doug",
|
|
16670
|
+
"draou",
|
|
16671
|
+
"draoñ",
|
|
16672
|
+
"dre",
|
|
16673
|
+
"drede",
|
|
16674
|
+
"dreist",
|
|
16675
|
+
"dreistañ",
|
|
16676
|
+
"dreisti",
|
|
16677
|
+
"dreisto",
|
|
16678
|
+
"dreistoc'h",
|
|
16679
|
+
"dreistomp",
|
|
16680
|
+
"dreiston",
|
|
16681
|
+
"dreistor",
|
|
16682
|
+
"dreistout",
|
|
16683
|
+
"drek",
|
|
16684
|
+
"dreñv",
|
|
16685
|
+
"dring",
|
|
16686
|
+
"dro",
|
|
16687
|
+
"du",
|
|
16264
16688
|
"e",
|
|
16265
|
-
"
|
|
16266
|
-
"
|
|
16267
|
-
"
|
|
16268
|
-
"
|
|
16689
|
+
"e:",
|
|
16690
|
+
"eas",
|
|
16691
|
+
"ebet",
|
|
16692
|
+
"ec'h",
|
|
16693
|
+
"edo",
|
|
16694
|
+
"edoc'h",
|
|
16695
|
+
"edod",
|
|
16696
|
+
"edomp",
|
|
16697
|
+
"edon",
|
|
16698
|
+
"edont",
|
|
16699
|
+
"edos",
|
|
16700
|
+
"eer",
|
|
16701
|
+
"eeun",
|
|
16702
|
+
"efed",
|
|
16703
|
+
"egedoc'h",
|
|
16704
|
+
"egedomp",
|
|
16705
|
+
"egedon",
|
|
16706
|
+
"egedor",
|
|
16707
|
+
"egedout",
|
|
16708
|
+
"eget",
|
|
16709
|
+
"egetañ",
|
|
16710
|
+
"egete",
|
|
16711
|
+
"egeti",
|
|
16712
|
+
"egeto",
|
|
16713
|
+
"eh",
|
|
16714
|
+
"eil",
|
|
16715
|
+
"eilvet",
|
|
16716
|
+
"eizh",
|
|
16717
|
+
"eizhvet",
|
|
16718
|
+
"ejoc'h",
|
|
16719
|
+
"ejod",
|
|
16720
|
+
"ejomp",
|
|
16721
|
+
"ejont",
|
|
16722
|
+
"ejout",
|
|
16723
|
+
"el",
|
|
16269
16724
|
"em",
|
|
16270
|
-
"
|
|
16271
|
-
"
|
|
16272
|
-
"
|
|
16273
|
-
"
|
|
16274
|
-
"
|
|
16275
|
-
"
|
|
16276
|
-
"
|
|
16277
|
-
"
|
|
16278
|
-
"
|
|
16279
|
-
"
|
|
16725
|
+
"emaint",
|
|
16726
|
+
"emaoc'h",
|
|
16727
|
+
"emaomp",
|
|
16728
|
+
"emaon",
|
|
16729
|
+
"emaout",
|
|
16730
|
+
"emañ",
|
|
16731
|
+
"eme",
|
|
16732
|
+
"emeur",
|
|
16733
|
+
"emezañ",
|
|
16734
|
+
"emezi",
|
|
16735
|
+
"emezo",
|
|
16736
|
+
"emezoc'h",
|
|
16737
|
+
"emezomp",
|
|
16738
|
+
"emezon",
|
|
16739
|
+
"emezout",
|
|
16740
|
+
"emporzhiañ",
|
|
16741
|
+
"en",
|
|
16742
|
+
"end",
|
|
16743
|
+
"endan",
|
|
16744
|
+
"endra",
|
|
16745
|
+
"enep",
|
|
16746
|
+
"ennañ",
|
|
16747
|
+
"enni",
|
|
16748
|
+
"enno",
|
|
16749
|
+
"ennoc'h",
|
|
16750
|
+
"ennomp",
|
|
16751
|
+
"ennon",
|
|
16752
|
+
"ennor",
|
|
16753
|
+
"ennout",
|
|
16754
|
+
"enta",
|
|
16755
|
+
"eo",
|
|
16756
|
+
"eomp",
|
|
16757
|
+
"eont",
|
|
16758
|
+
"eor",
|
|
16759
|
+
"eot",
|
|
16760
|
+
"er",
|
|
16761
|
+
"erbet",
|
|
16762
|
+
"erfin",
|
|
16763
|
+
"esa",
|
|
16764
|
+
"esae",
|
|
16765
|
+
"espar",
|
|
16766
|
+
"estlamm",
|
|
16767
|
+
"estrañj",
|
|
16768
|
+
"eta",
|
|
16769
|
+
"etre",
|
|
16770
|
+
"etreoc'h",
|
|
16771
|
+
"etrezo",
|
|
16772
|
+
"etrezoc'h",
|
|
16773
|
+
"etrezomp",
|
|
16774
|
+
"etrezor",
|
|
16775
|
+
"euh",
|
|
16776
|
+
"eur",
|
|
16777
|
+
"eus",
|
|
16778
|
+
"evel",
|
|
16779
|
+
"evelato",
|
|
16780
|
+
"eveldoc'h",
|
|
16781
|
+
"eveldomp",
|
|
16782
|
+
"eveldon",
|
|
16783
|
+
"eveldor",
|
|
16784
|
+
"eveldout",
|
|
16785
|
+
"evelkent",
|
|
16786
|
+
"eveltañ",
|
|
16787
|
+
"evelte",
|
|
16788
|
+
"evelti",
|
|
16789
|
+
"evelto",
|
|
16790
|
+
"evidoc'h",
|
|
16791
|
+
"evidomp",
|
|
16792
|
+
"evidon",
|
|
16793
|
+
"evidor",
|
|
16794
|
+
"evidout",
|
|
16795
|
+
"evit",
|
|
16796
|
+
"evitañ",
|
|
16797
|
+
"evite",
|
|
16798
|
+
"eviti",
|
|
16799
|
+
"evito",
|
|
16800
|
+
"ez",
|
|
16801
|
+
"eñ",
|
|
16802
|
+
"f:",
|
|
16803
|
+
"fac'h",
|
|
16804
|
+
"fall",
|
|
16805
|
+
"fed",
|
|
16806
|
+
"feiz",
|
|
16807
|
+
"fenn",
|
|
16808
|
+
"fezh",
|
|
16809
|
+
"fin",
|
|
16810
|
+
"finsalvet",
|
|
16811
|
+
"foei",
|
|
16812
|
+
"fouilhezañ",
|
|
16813
|
+
"g:",
|
|
16814
|
+
"gallout",
|
|
16815
|
+
"ganeoc'h",
|
|
16816
|
+
"ganeomp",
|
|
16817
|
+
"ganin",
|
|
16818
|
+
"ganit",
|
|
16819
|
+
"gant",
|
|
16820
|
+
"gantañ",
|
|
16821
|
+
"ganti",
|
|
16822
|
+
"ganto",
|
|
16823
|
+
"gaout",
|
|
16824
|
+
"gast",
|
|
16825
|
+
"gein",
|
|
16826
|
+
"gellout",
|
|
16827
|
+
"genndost",
|
|
16828
|
+
"gentañ",
|
|
16829
|
+
"ger",
|
|
16830
|
+
"gerz",
|
|
16831
|
+
"get",
|
|
16832
|
+
"geñver",
|
|
16833
|
+
"gichen",
|
|
16834
|
+
"gin",
|
|
16835
|
+
"giz",
|
|
16836
|
+
"glan",
|
|
16837
|
+
"gloev",
|
|
16838
|
+
"goll",
|
|
16839
|
+
"gorre",
|
|
16840
|
+
"goude",
|
|
16841
|
+
"gouez",
|
|
16842
|
+
"gouezit",
|
|
16843
|
+
"gouezomp",
|
|
16844
|
+
"goulz",
|
|
16845
|
+
"gounnar",
|
|
16846
|
+
"gour",
|
|
16847
|
+
"goust",
|
|
16848
|
+
"gouze",
|
|
16849
|
+
"gouzout",
|
|
16850
|
+
"gra",
|
|
16851
|
+
"grak",
|
|
16852
|
+
"grec'h",
|
|
16853
|
+
"greiz",
|
|
16854
|
+
"grenn",
|
|
16855
|
+
"greomp",
|
|
16856
|
+
"grit",
|
|
16857
|
+
"groñs",
|
|
16858
|
+
"gutez",
|
|
16859
|
+
"gwall",
|
|
16860
|
+
"gwashoc'h",
|
|
16861
|
+
"gwazh",
|
|
16862
|
+
"gwech",
|
|
16863
|
+
"gwechall",
|
|
16864
|
+
"gwechoù",
|
|
16865
|
+
"gwell",
|
|
16866
|
+
"gwezh",
|
|
16867
|
+
"gwezhall",
|
|
16868
|
+
"gwezharall",
|
|
16869
|
+
"gwezhoù",
|
|
16870
|
+
"gwig",
|
|
16871
|
+
"gwirionez",
|
|
16872
|
+
"gwitibunan",
|
|
16873
|
+
"gêr",
|
|
16874
|
+
"h:",
|
|
16280
16875
|
"ha",
|
|
16281
|
-
"
|
|
16282
|
-
"
|
|
16283
|
-
"
|
|
16284
|
-
"
|
|
16285
|
-
"
|
|
16286
|
-
"
|
|
16287
|
-
"
|
|
16288
|
-
"
|
|
16289
|
-
"
|
|
16290
|
-
"
|
|
16291
|
-
"
|
|
16876
|
+
"hag",
|
|
16877
|
+
"han",
|
|
16878
|
+
"hanter",
|
|
16879
|
+
"hanterc'hantad",
|
|
16880
|
+
"hanterkantved",
|
|
16881
|
+
"harz",
|
|
16882
|
+
"hañ",
|
|
16883
|
+
"hañval",
|
|
16884
|
+
"he",
|
|
16885
|
+
"hebioù",
|
|
16886
|
+
"hec'h",
|
|
16887
|
+
"hei",
|
|
16888
|
+
"hein",
|
|
16889
|
+
"hem",
|
|
16890
|
+
"hemañ",
|
|
16891
|
+
"hen",
|
|
16892
|
+
"hend",
|
|
16893
|
+
"henhont",
|
|
16894
|
+
"henn",
|
|
16895
|
+
"hennezh",
|
|
16896
|
+
"hent",
|
|
16897
|
+
"hep",
|
|
16898
|
+
"hervez",
|
|
16899
|
+
"hervezañ",
|
|
16900
|
+
"hervezi",
|
|
16901
|
+
"hervezo",
|
|
16902
|
+
"hervezoc'h",
|
|
16903
|
+
"hervezomp",
|
|
16904
|
+
"hervezon",
|
|
16905
|
+
"hervezor",
|
|
16906
|
+
"hervezout",
|
|
16907
|
+
"heul",
|
|
16908
|
+
"heuliañ",
|
|
16909
|
+
"hevelep",
|
|
16910
|
+
"heverk",
|
|
16911
|
+
"heñvel",
|
|
16912
|
+
"heñvelat",
|
|
16913
|
+
"heñvelañ",
|
|
16914
|
+
"heñveliñ",
|
|
16915
|
+
"heñveloc'h",
|
|
16916
|
+
"heñvelout",
|
|
16917
|
+
"hi",
|
|
16918
|
+
"hilh",
|
|
16919
|
+
"hini",
|
|
16920
|
+
"hirie",
|
|
16921
|
+
"hirio",
|
|
16922
|
+
"hiziv",
|
|
16923
|
+
"hiziviken",
|
|
16924
|
+
"ho",
|
|
16925
|
+
"hoaliñ",
|
|
16926
|
+
"hoc'h",
|
|
16927
|
+
"hogen",
|
|
16928
|
+
"hogos",
|
|
16929
|
+
"hogozik",
|
|
16930
|
+
"hol",
|
|
16931
|
+
"holl",
|
|
16932
|
+
"holà",
|
|
16933
|
+
"homañ",
|
|
16934
|
+
"hon",
|
|
16935
|
+
"honhont",
|
|
16936
|
+
"honnezh",
|
|
16937
|
+
"hont",
|
|
16938
|
+
"hop",
|
|
16939
|
+
"hopala",
|
|
16940
|
+
"hor",
|
|
16941
|
+
"hou",
|
|
16942
|
+
"houp",
|
|
16943
|
+
"hudu",
|
|
16944
|
+
"hue",
|
|
16945
|
+
"hui",
|
|
16946
|
+
"hum",
|
|
16947
|
+
"hurrah",
|
|
16948
|
+
"i",
|
|
16949
|
+
"i:",
|
|
16950
|
+
"in",
|
|
16951
|
+
"int",
|
|
16952
|
+
"is",
|
|
16953
|
+
"ispisial",
|
|
16954
|
+
"isurzhiet",
|
|
16955
|
+
"it",
|
|
16956
|
+
"ivez",
|
|
16957
|
+
"izelañ",
|
|
16958
|
+
"j:",
|
|
16959
|
+
"just",
|
|
16960
|
+
"k:",
|
|
16961
|
+
"kae",
|
|
16962
|
+
"kaer",
|
|
16963
|
+
"kalon",
|
|
16964
|
+
"kalz",
|
|
16965
|
+
"kant",
|
|
16966
|
+
"kaout",
|
|
16967
|
+
"kar",
|
|
16968
|
+
"kazi",
|
|
16969
|
+
"keid",
|
|
16970
|
+
"kein",
|
|
16971
|
+
"keit",
|
|
16972
|
+
"kel",
|
|
16973
|
+
"kellies",
|
|
16974
|
+
"keloù",
|
|
16975
|
+
"kement",
|
|
16976
|
+
"ken",
|
|
16977
|
+
"kenkent",
|
|
16978
|
+
"kenkoulz",
|
|
16979
|
+
"kenment",
|
|
16980
|
+
"kent",
|
|
16981
|
+
"kentañ",
|
|
16982
|
+
"kentizh",
|
|
16983
|
+
"kentoc'h",
|
|
16984
|
+
"kentre",
|
|
16985
|
+
"ker",
|
|
16986
|
+
"kerkent",
|
|
16987
|
+
"kerz",
|
|
16988
|
+
"kerzh",
|
|
16989
|
+
"ket",
|
|
16990
|
+
"keta",
|
|
16991
|
+
"keñver",
|
|
16992
|
+
"keñverel",
|
|
16993
|
+
"keñverius",
|
|
16994
|
+
"kichen",
|
|
16995
|
+
"kichenik",
|
|
16996
|
+
"kit",
|
|
16997
|
+
"kiz",
|
|
16998
|
+
"klak",
|
|
16999
|
+
"klek",
|
|
17000
|
+
"klik",
|
|
17001
|
+
"komprenet",
|
|
17002
|
+
"komz",
|
|
17003
|
+
"kont",
|
|
17004
|
+
"korf",
|
|
17005
|
+
"korre",
|
|
17006
|
+
"koulskoude",
|
|
17007
|
+
"koulz",
|
|
17008
|
+
"koust",
|
|
17009
|
+
"krak",
|
|
17010
|
+
"krampouezh",
|
|
17011
|
+
"krec'h",
|
|
17012
|
+
"kreiz",
|
|
17013
|
+
"kuit",
|
|
17014
|
+
"kwir",
|
|
17015
|
+
"l:",
|
|
17016
|
+
"la",
|
|
17017
|
+
"laez",
|
|
17018
|
+
"laoskel",
|
|
17019
|
+
"laouen",
|
|
17020
|
+
"lavar",
|
|
17021
|
+
"lavaret",
|
|
17022
|
+
"lavarout",
|
|
17023
|
+
"lec'h",
|
|
17024
|
+
"lein",
|
|
17025
|
+
"leizh",
|
|
17026
|
+
"lerc'h",
|
|
17027
|
+
"leun",
|
|
17028
|
+
"leuskel",
|
|
17029
|
+
"lew",
|
|
17030
|
+
"lies",
|
|
17031
|
+
"liesañ",
|
|
17032
|
+
"lod",
|
|
17033
|
+
"lusk",
|
|
17034
|
+
"lâr",
|
|
17035
|
+
"lârout",
|
|
17036
|
+
"m:",
|
|
17037
|
+
"ma",
|
|
17038
|
+
"ma'z",
|
|
17039
|
+
"mac'h",
|
|
17040
|
+
"mac'hat",
|
|
17041
|
+
"mac'hañ",
|
|
17042
|
+
"mac'hoc'h",
|
|
17043
|
+
"mad",
|
|
17044
|
+
"maez",
|
|
17045
|
+
"maksimal",
|
|
17046
|
+
"mann",
|
|
17047
|
+
"mar",
|
|
17048
|
+
"mard",
|
|
17049
|
+
"marg",
|
|
17050
|
+
"marzh",
|
|
17051
|
+
"mat",
|
|
17052
|
+
"mañ",
|
|
17053
|
+
"me",
|
|
17054
|
+
"memes",
|
|
17055
|
+
"memestra",
|
|
17056
|
+
"merkapl",
|
|
17057
|
+
"mersi",
|
|
17058
|
+
"mes",
|
|
17059
|
+
"mesk",
|
|
17060
|
+
"met",
|
|
17061
|
+
"meur",
|
|
17062
|
+
"mil",
|
|
17063
|
+
"minimal",
|
|
17064
|
+
"moan",
|
|
17065
|
+
"moaniaat",
|
|
17066
|
+
"mod",
|
|
17067
|
+
"mont",
|
|
17068
|
+
"mout",
|
|
17069
|
+
"mui",
|
|
17070
|
+
"muiañ",
|
|
17071
|
+
"muioc'h",
|
|
17072
|
+
"n",
|
|
17073
|
+
"n'",
|
|
17074
|
+
"n:",
|
|
16292
17075
|
"na",
|
|
16293
|
-
"
|
|
16294
|
-
"
|
|
16295
|
-
"
|
|
16296
|
-
"
|
|
16297
|
-
"
|
|
16298
|
-
"
|
|
17076
|
+
"nag",
|
|
17077
|
+
"naontek",
|
|
17078
|
+
"naturel",
|
|
17079
|
+
"nav",
|
|
17080
|
+
"navet",
|
|
17081
|
+
"ne",
|
|
17082
|
+
"nebeudig",
|
|
17083
|
+
"nebeut",
|
|
17084
|
+
"nebeutañ",
|
|
17085
|
+
"nebeutoc'h",
|
|
17086
|
+
"neketa",
|
|
17087
|
+
"nemedoc'h",
|
|
17088
|
+
"nemedomp",
|
|
17089
|
+
"nemedon",
|
|
17090
|
+
"nemedor",
|
|
17091
|
+
"nemedout",
|
|
17092
|
+
"nemet",
|
|
17093
|
+
"nemetañ",
|
|
17094
|
+
"nemete",
|
|
17095
|
+
"nemeti",
|
|
17096
|
+
"nemeto",
|
|
17097
|
+
"nemeur",
|
|
17098
|
+
"neoac'h",
|
|
17099
|
+
"nepell",
|
|
17100
|
+
"nerzh",
|
|
17101
|
+
"nes",
|
|
17102
|
+
"neseser",
|
|
17103
|
+
"netra",
|
|
17104
|
+
"neubeudoù",
|
|
17105
|
+
"neuhe",
|
|
17106
|
+
"neuze",
|
|
17107
|
+
"nevez",
|
|
17108
|
+
"newazh",
|
|
17109
|
+
"nez",
|
|
17110
|
+
"ni",
|
|
17111
|
+
"nikun",
|
|
17112
|
+
"niverus",
|
|
17113
|
+
"nul",
|
|
16299
17114
|
"o",
|
|
16300
|
-
"
|
|
16301
|
-
"
|
|
16302
|
-
"
|
|
16303
|
-
"
|
|
16304
|
-
"
|
|
16305
|
-
"
|
|
16306
|
-
"
|
|
16307
|
-
"
|
|
16308
|
-
"
|
|
16309
|
-
"
|
|
16310
|
-
"
|
|
16311
|
-
"
|
|
16312
|
-
"
|
|
16313
|
-
"
|
|
16314
|
-
"
|
|
16315
|
-
"
|
|
16316
|
-
"
|
|
16317
|
-
"
|
|
16318
|
-
"
|
|
16319
|
-
"
|
|
16320
|
-
"
|
|
16321
|
-
"
|
|
16322
|
-
"
|
|
16323
|
-
"
|
|
17115
|
+
"o:",
|
|
17116
|
+
"oa",
|
|
17117
|
+
"oac'h",
|
|
17118
|
+
"oad",
|
|
17119
|
+
"oamp",
|
|
17120
|
+
"oan",
|
|
17121
|
+
"oant",
|
|
17122
|
+
"oar",
|
|
17123
|
+
"oas",
|
|
17124
|
+
"ober",
|
|
17125
|
+
"oc'h",
|
|
17126
|
+
"oc'ho",
|
|
17127
|
+
"oc'hola",
|
|
17128
|
+
"oc'hpenn",
|
|
17129
|
+
"oh",
|
|
17130
|
+
"ohe",
|
|
17131
|
+
"ollé",
|
|
17132
|
+
"olole",
|
|
17133
|
+
"olé",
|
|
17134
|
+
"omp",
|
|
17135
|
+
"on",
|
|
17136
|
+
"ordin",
|
|
17137
|
+
"ordinal",
|
|
17138
|
+
"ouejoc'h",
|
|
17139
|
+
"ouejod",
|
|
17140
|
+
"ouejomp",
|
|
17141
|
+
"ouejont",
|
|
17142
|
+
"ouejout",
|
|
17143
|
+
"ouek",
|
|
17144
|
+
"ouezas",
|
|
17145
|
+
"ouezi",
|
|
17146
|
+
"ouezimp",
|
|
17147
|
+
"ouezin",
|
|
17148
|
+
"ouezint",
|
|
17149
|
+
"ouezis",
|
|
17150
|
+
"ouezo",
|
|
17151
|
+
"ouezoc'h",
|
|
17152
|
+
"ouezor",
|
|
17153
|
+
"ouf",
|
|
17154
|
+
"oufe",
|
|
17155
|
+
"oufec'h",
|
|
17156
|
+
"oufed",
|
|
17157
|
+
"oufemp",
|
|
17158
|
+
"oufen",
|
|
17159
|
+
"oufent",
|
|
17160
|
+
"oufes",
|
|
17161
|
+
"ouie",
|
|
17162
|
+
"ouiec'h",
|
|
17163
|
+
"ouied",
|
|
17164
|
+
"ouiemp",
|
|
17165
|
+
"ouien",
|
|
17166
|
+
"ouient",
|
|
17167
|
+
"ouies",
|
|
17168
|
+
"ouije",
|
|
17169
|
+
"ouijec'h",
|
|
17170
|
+
"ouijed",
|
|
17171
|
+
"ouijemp",
|
|
17172
|
+
"ouijen",
|
|
17173
|
+
"ouijent",
|
|
17174
|
+
"ouijes",
|
|
17175
|
+
"out",
|
|
17176
|
+
"outañ",
|
|
17177
|
+
"outi",
|
|
17178
|
+
"outo",
|
|
17179
|
+
"ouzer",
|
|
17180
|
+
"ouzh",
|
|
17181
|
+
"ouzhin",
|
|
17182
|
+
"ouzhit",
|
|
17183
|
+
"ouzhoc'h",
|
|
17184
|
+
"ouzhomp",
|
|
17185
|
+
"ouzhor",
|
|
17186
|
+
"ouzhpenn",
|
|
17187
|
+
"ouzhpennik",
|
|
17188
|
+
"ouzoc'h",
|
|
17189
|
+
"ouzomp",
|
|
17190
|
+
"ouzon",
|
|
17191
|
+
"ouzont",
|
|
17192
|
+
"ouzout",
|
|
17193
|
+
"p'",
|
|
17194
|
+
"p:",
|
|
17195
|
+
"pa",
|
|
17196
|
+
"pad",
|
|
17197
|
+
"padal",
|
|
17198
|
+
"paf",
|
|
17199
|
+
"pan",
|
|
17200
|
+
"panevedeoc'h",
|
|
17201
|
+
"panevedo",
|
|
17202
|
+
"panevedomp",
|
|
17203
|
+
"panevedon",
|
|
17204
|
+
"panevedout",
|
|
17205
|
+
"panevet",
|
|
17206
|
+
"panevetañ",
|
|
17207
|
+
"paneveti",
|
|
17208
|
+
"pas",
|
|
17209
|
+
"paseet",
|
|
17210
|
+
"pe",
|
|
17211
|
+
"peadra",
|
|
17212
|
+
"peder",
|
|
17213
|
+
"pedervet",
|
|
17214
|
+
"pedervetvet",
|
|
17215
|
+
"pefe",
|
|
17216
|
+
"pegeit",
|
|
17217
|
+
"pegement",
|
|
17218
|
+
"pegen",
|
|
17219
|
+
"pegiz",
|
|
17220
|
+
"pegoulz",
|
|
17221
|
+
"pehini",
|
|
17222
|
+
"pelec'h",
|
|
17223
|
+
"pell",
|
|
17224
|
+
"pemod",
|
|
17225
|
+
"pemp",
|
|
17226
|
+
"pempved",
|
|
17227
|
+
"pemzek",
|
|
17228
|
+
"penaos",
|
|
17229
|
+
"penn",
|
|
17230
|
+
"peogwir",
|
|
17231
|
+
"peotramant",
|
|
17232
|
+
"pep",
|
|
17233
|
+
"perak",
|
|
17234
|
+
"perc'hennañ",
|
|
17235
|
+
"pergen",
|
|
17236
|
+
"permetiñ",
|
|
17237
|
+
"peseurt",
|
|
17238
|
+
"pet",
|
|
17239
|
+
"petiaoul",
|
|
17240
|
+
"petoare",
|
|
17241
|
+
"petra",
|
|
17242
|
+
"peur",
|
|
17243
|
+
"peurgetket",
|
|
17244
|
+
"peurheñvel",
|
|
17245
|
+
"peurliesañ",
|
|
17246
|
+
"peurvuiañ",
|
|
17247
|
+
"peus",
|
|
17248
|
+
"peustost",
|
|
17249
|
+
"peuz",
|
|
17250
|
+
"pevar",
|
|
17251
|
+
"pevare",
|
|
17252
|
+
"pevarevet",
|
|
17253
|
+
"pevarzek",
|
|
17254
|
+
"pez",
|
|
17255
|
+
"peze",
|
|
17256
|
+
"pezh",
|
|
17257
|
+
"pff",
|
|
17258
|
+
"pfft",
|
|
17259
|
+
"pfut",
|
|
17260
|
+
"picher",
|
|
17261
|
+
"pif",
|
|
17262
|
+
"pife",
|
|
17263
|
+
"pign",
|
|
17264
|
+
"pije",
|
|
17265
|
+
"pikol",
|
|
17266
|
+
"pitiaoul",
|
|
17267
|
+
"piv",
|
|
17268
|
+
"plaouf",
|
|
17269
|
+
"plok",
|
|
17270
|
+
"plouf",
|
|
17271
|
+
"po",
|
|
17272
|
+
"poa",
|
|
17273
|
+
"poelladus",
|
|
17274
|
+
"pof",
|
|
17275
|
+
"pok",
|
|
17276
|
+
"posupl",
|
|
17277
|
+
"pouah",
|
|
17278
|
+
"pourc'henn",
|
|
17279
|
+
"prest",
|
|
17280
|
+
"prestik",
|
|
17281
|
+
"prim",
|
|
17282
|
+
"prin",
|
|
17283
|
+
"provostapl",
|
|
17284
|
+
"pst",
|
|
17285
|
+
"pu",
|
|
17286
|
+
"pur",
|
|
17287
|
+
"r:",
|
|
17288
|
+
"ra",
|
|
17289
|
+
"rae",
|
|
17290
|
+
"raec'h",
|
|
17291
|
+
"raed",
|
|
17292
|
+
"raemp",
|
|
17293
|
+
"raen",
|
|
17294
|
+
"raent",
|
|
17295
|
+
"raes",
|
|
17296
|
+
"rafe",
|
|
17297
|
+
"rafec'h",
|
|
17298
|
+
"rafed",
|
|
17299
|
+
"rafemp",
|
|
17300
|
+
"rafen",
|
|
17301
|
+
"rafent",
|
|
17302
|
+
"rafes",
|
|
17303
|
+
"rag",
|
|
17304
|
+
"raimp",
|
|
17305
|
+
"raint",
|
|
17306
|
+
"raio",
|
|
17307
|
+
"raje",
|
|
17308
|
+
"rajec'h",
|
|
17309
|
+
"rajed",
|
|
17310
|
+
"rajemp",
|
|
17311
|
+
"rajen",
|
|
17312
|
+
"rajent",
|
|
17313
|
+
"rajes",
|
|
17314
|
+
"rak",
|
|
17315
|
+
"ral",
|
|
17316
|
+
"ran",
|
|
17317
|
+
"rankout",
|
|
17318
|
+
"raok",
|
|
17319
|
+
"razh",
|
|
17320
|
+
"re",
|
|
17321
|
+
"reas",
|
|
17322
|
+
"reer",
|
|
17323
|
+
"regennoù",
|
|
17324
|
+
"reiñ",
|
|
17325
|
+
"rejoc'h",
|
|
17326
|
+
"rejod",
|
|
17327
|
+
"rejomp",
|
|
17328
|
+
"rejont",
|
|
17329
|
+
"rejout",
|
|
17330
|
+
"rener",
|
|
17331
|
+
"rentañ",
|
|
17332
|
+
"reoc'h",
|
|
17333
|
+
"reomp",
|
|
17334
|
+
"reont",
|
|
17335
|
+
"reor",
|
|
17336
|
+
"reot",
|
|
17337
|
+
"resis",
|
|
17338
|
+
"ret",
|
|
17339
|
+
"reve",
|
|
17340
|
+
"rez",
|
|
17341
|
+
"ri",
|
|
17342
|
+
"rik",
|
|
17343
|
+
"rin",
|
|
17344
|
+
"ris",
|
|
17345
|
+
"rit",
|
|
17346
|
+
"rouez",
|
|
17347
|
+
"s:",
|
|
17348
|
+
"sac'h",
|
|
17349
|
+
"sant",
|
|
17350
|
+
"sav",
|
|
17351
|
+
"sañset",
|
|
16324
17352
|
"se",
|
|
16325
|
-
"
|
|
16326
|
-
"
|
|
16327
|
-
"
|
|
16328
|
-
"
|
|
16329
|
-
"
|
|
16330
|
-
"
|
|
16331
|
-
"
|
|
16332
|
-
"
|
|
16333
|
-
"
|
|
17353
|
+
"sed",
|
|
17354
|
+
"seitek",
|
|
17355
|
+
"seizh",
|
|
17356
|
+
"seizhvet",
|
|
17357
|
+
"sell",
|
|
17358
|
+
"sellit",
|
|
17359
|
+
"ser",
|
|
17360
|
+
"setu",
|
|
17361
|
+
"seul",
|
|
17362
|
+
"seurt",
|
|
17363
|
+
"siwazh",
|
|
17364
|
+
"skignañ",
|
|
17365
|
+
"skoaz",
|
|
17366
|
+
"skouer",
|
|
17367
|
+
"sort",
|
|
17368
|
+
"souden",
|
|
17369
|
+
"souvitañ",
|
|
17370
|
+
"soñj",
|
|
17371
|
+
"speriañ",
|
|
17372
|
+
"spririñ",
|
|
17373
|
+
"stad",
|
|
17374
|
+
"stlabezañ",
|
|
17375
|
+
"stop",
|
|
17376
|
+
"stranañ",
|
|
17377
|
+
"strewiñ",
|
|
17378
|
+
"strishaat",
|
|
17379
|
+
"stumm",
|
|
17380
|
+
"sujed",
|
|
17381
|
+
"surtoud",
|
|
17382
|
+
"t:",
|
|
17383
|
+
"ta",
|
|
17384
|
+
"taer",
|
|
17385
|
+
"tailh",
|
|
17386
|
+
"tak",
|
|
16334
17387
|
"tal",
|
|
16335
|
-
"
|
|
16336
|
-
"
|
|
17388
|
+
"talvoudegezh",
|
|
17389
|
+
"tamm",
|
|
17390
|
+
"tanav",
|
|
17391
|
+
"taol",
|
|
17392
|
+
"te",
|
|
17393
|
+
"techet",
|
|
17394
|
+
"teir",
|
|
17395
|
+
"teirvet",
|
|
17396
|
+
"telt",
|
|
17397
|
+
"teltenn",
|
|
16337
17398
|
"teus",
|
|
16338
|
-
"
|
|
16339
|
-
"
|
|
16340
|
-
"
|
|
16341
|
-
"
|
|
16342
|
-
"
|
|
16343
|
-
"
|
|
16344
|
-
"
|
|
16345
|
-
"
|
|
16346
|
-
"
|
|
16347
|
-
"
|
|
16348
|
-
"
|
|
17399
|
+
"teut",
|
|
17400
|
+
"teuteu",
|
|
17401
|
+
"ti",
|
|
17402
|
+
"tik",
|
|
17403
|
+
"toa",
|
|
17404
|
+
"tok",
|
|
17405
|
+
"tost",
|
|
17406
|
+
"tostig",
|
|
17407
|
+
"toud",
|
|
17408
|
+
"touesk",
|
|
17409
|
+
"touez",
|
|
17410
|
+
"toull",
|
|
17411
|
+
"tra",
|
|
17412
|
+
"trantenn",
|
|
17413
|
+
"traoñ",
|
|
17414
|
+
"trawalc'h",
|
|
17415
|
+
"tre",
|
|
17416
|
+
"trede",
|
|
17417
|
+
"tregont",
|
|
17418
|
+
"tremenet",
|
|
17419
|
+
"tri",
|
|
17420
|
+
"trivet",
|
|
17421
|
+
"triwec'h",
|
|
17422
|
+
"trizek",
|
|
17423
|
+
"tro",
|
|
17424
|
+
"trugarez",
|
|
17425
|
+
"trumm",
|
|
17426
|
+
"tsoin",
|
|
17427
|
+
"tsouin",
|
|
17428
|
+
"tu",
|
|
17429
|
+
"tud",
|
|
17430
|
+
"u:",
|
|
17431
|
+
"ugent",
|
|
17432
|
+
"uhel",
|
|
17433
|
+
"uhelañ",
|
|
17434
|
+
"ul",
|
|
17435
|
+
"un",
|
|
17436
|
+
"unan",
|
|
17437
|
+
"unanez",
|
|
17438
|
+
"unanig",
|
|
17439
|
+
"unnek",
|
|
17440
|
+
"unnekvet",
|
|
17441
|
+
"ur",
|
|
17442
|
+
"urzh",
|
|
17443
|
+
"us",
|
|
17444
|
+
"v:",
|
|
17445
|
+
"va",
|
|
17446
|
+
"vale",
|
|
17447
|
+
"van",
|
|
17448
|
+
"vare",
|
|
17449
|
+
"vat",
|
|
17450
|
+
"vefe",
|
|
17451
|
+
"vefec'h",
|
|
17452
|
+
"vefed",
|
|
17453
|
+
"vefemp",
|
|
17454
|
+
"vefen",
|
|
17455
|
+
"vefent",
|
|
17456
|
+
"vefes",
|
|
17457
|
+
"vesk",
|
|
17458
|
+
"vete",
|
|
17459
|
+
"vez",
|
|
17460
|
+
"vezan",
|
|
17461
|
+
"vezañ",
|
|
17462
|
+
"veze",
|
|
17463
|
+
"vezec'h",
|
|
17464
|
+
"vezed",
|
|
17465
|
+
"vezemp",
|
|
17466
|
+
"vezen",
|
|
17467
|
+
"vezent",
|
|
17468
|
+
"vezer",
|
|
17469
|
+
"vezes",
|
|
17470
|
+
"vezez",
|
|
17471
|
+
"vezit",
|
|
17472
|
+
"vezomp",
|
|
17473
|
+
"vezont",
|
|
17474
|
+
"vi",
|
|
17475
|
+
"vihan",
|
|
17476
|
+
"vihanañ",
|
|
17477
|
+
"vije",
|
|
17478
|
+
"vijec'h",
|
|
17479
|
+
"vijed",
|
|
17480
|
+
"vijemp",
|
|
17481
|
+
"vijen",
|
|
17482
|
+
"vijent",
|
|
17483
|
+
"vijes",
|
|
17484
|
+
"viken",
|
|
17485
|
+
"vimp",
|
|
17486
|
+
"vin",
|
|
17487
|
+
"vint",
|
|
17488
|
+
"vior",
|
|
17489
|
+
"viot",
|
|
17490
|
+
"virviken",
|
|
17491
|
+
"viskoazh",
|
|
17492
|
+
"vlan",
|
|
17493
|
+
"vlaou",
|
|
17494
|
+
"vo",
|
|
17495
|
+
"vod",
|
|
17496
|
+
"voe",
|
|
17497
|
+
"voec'h",
|
|
17498
|
+
"voed",
|
|
17499
|
+
"voemp",
|
|
17500
|
+
"voen",
|
|
17501
|
+
"voent",
|
|
17502
|
+
"voes",
|
|
17503
|
+
"vont",
|
|
17504
|
+
"vostapl",
|
|
17505
|
+
"vrac'h",
|
|
17506
|
+
"vrasañ",
|
|
17507
|
+
"vremañ",
|
|
17508
|
+
"w:",
|
|
17509
|
+
"walc'h",
|
|
17510
|
+
"war",
|
|
17511
|
+
"warnañ",
|
|
17512
|
+
"warni",
|
|
17513
|
+
"warno",
|
|
17514
|
+
"warnoc'h",
|
|
17515
|
+
"warnomp",
|
|
17516
|
+
"warnon",
|
|
17517
|
+
"warnor",
|
|
17518
|
+
"warnout",
|
|
17519
|
+
"wazh",
|
|
17520
|
+
"wech",
|
|
17521
|
+
"wechoù",
|
|
17522
|
+
"well",
|
|
17523
|
+
"y:",
|
|
17524
|
+
"you",
|
|
17525
|
+
"youadenn",
|
|
17526
|
+
"youc'hadenn",
|
|
17527
|
+
"youc'hou",
|
|
17528
|
+
"z:",
|
|
17529
|
+
"za",
|
|
17530
|
+
"zan",
|
|
17531
|
+
"zaw",
|
|
17532
|
+
"zeu",
|
|
17533
|
+
"zi",
|
|
17534
|
+
"ziar",
|
|
17535
|
+
"zigarez",
|
|
17536
|
+
"ziget",
|
|
17537
|
+
"zindan",
|
|
17538
|
+
"zioc'h",
|
|
17539
|
+
"ziouzh",
|
|
17540
|
+
"zirak",
|
|
17541
|
+
"zivout",
|
|
17542
|
+
"ziwar",
|
|
17543
|
+
"ziwezhañ",
|
|
17544
|
+
"zo",
|
|
17545
|
+
"zoken",
|
|
17546
|
+
"zokenoc'h",
|
|
17547
|
+
"zouesk",
|
|
17548
|
+
"zouez",
|
|
17549
|
+
"zro",
|
|
17550
|
+
"zu"
|
|
16349
17551
|
];
|
|
16350
17552
|
const bul = [
|
|
16351
17553
|
"а",
|
|
@@ -28001,22 +29203,32 @@ const tur = [
|
|
|
28001
29203
|
"şöyle"
|
|
28002
29204
|
];
|
|
28003
29205
|
const ukr = [
|
|
29206
|
+
"а",
|
|
29207
|
+
"або",
|
|
28004
29208
|
"авжеж",
|
|
28005
29209
|
"адже",
|
|
29210
|
+
"аж",
|
|
28006
29211
|
"але",
|
|
29212
|
+
"ані",
|
|
28007
29213
|
"б",
|
|
28008
29214
|
"без",
|
|
29215
|
+
"би",
|
|
29216
|
+
"бо",
|
|
28009
29217
|
"був",
|
|
28010
29218
|
"була",
|
|
28011
29219
|
"були",
|
|
28012
29220
|
"було",
|
|
28013
29221
|
"бути",
|
|
28014
29222
|
"більш",
|
|
29223
|
+
"в",
|
|
28015
29224
|
"вам",
|
|
29225
|
+
"вами",
|
|
28016
29226
|
"вас",
|
|
28017
29227
|
"весь",
|
|
29228
|
+
"вже",
|
|
28018
29229
|
"вздовж",
|
|
28019
29230
|
"ви",
|
|
29231
|
+
"від",
|
|
28020
29232
|
"вниз",
|
|
28021
29233
|
"внизу",
|
|
28022
29234
|
"вона",
|
|
@@ -28025,55 +29237,138 @@ const ukr = [
|
|
|
28025
29237
|
"все",
|
|
28026
29238
|
"всередині",
|
|
28027
29239
|
"всіх",
|
|
29240
|
+
"вся",
|
|
28028
29241
|
"від",
|
|
28029
29242
|
"він",
|
|
28030
29243
|
"да",
|
|
28031
29244
|
"давай",
|
|
28032
29245
|
"давати",
|
|
28033
29246
|
"де",
|
|
29247
|
+
"десь",
|
|
28034
29248
|
"дещо",
|
|
28035
29249
|
"для",
|
|
28036
29250
|
"до",
|
|
29251
|
+
"є",
|
|
29252
|
+
"ж",
|
|
29253
|
+
"же",
|
|
28037
29254
|
"з",
|
|
29255
|
+
"за",
|
|
28038
29256
|
"завжди",
|
|
28039
29257
|
"замість",
|
|
29258
|
+
"зі",
|
|
29259
|
+
"і",
|
|
29260
|
+
"із",
|
|
29261
|
+
"інших",
|
|
29262
|
+
"її",
|
|
29263
|
+
"їй",
|
|
29264
|
+
"їм",
|
|
29265
|
+
"їх",
|
|
28040
29266
|
"й",
|
|
29267
|
+
"його",
|
|
29268
|
+
"йому",
|
|
28041
29269
|
"коли",
|
|
28042
29270
|
"ледве",
|
|
29271
|
+
"лиш",
|
|
28043
29272
|
"майже",
|
|
29273
|
+
"мене",
|
|
29274
|
+
"мені",
|
|
28044
29275
|
"ми",
|
|
29276
|
+
"між",
|
|
29277
|
+
"мій",
|
|
29278
|
+
"мною",
|
|
29279
|
+
"мов",
|
|
29280
|
+
"мого",
|
|
29281
|
+
"моєї",
|
|
29282
|
+
"моє",
|
|
29283
|
+
"може",
|
|
29284
|
+
"мої",
|
|
29285
|
+
"моїх",
|
|
29286
|
+
"моя",
|
|
29287
|
+
"на",
|
|
29288
|
+
"над",
|
|
28045
29289
|
"навколо",
|
|
28046
29290
|
"навіть",
|
|
28047
29291
|
"нам",
|
|
29292
|
+
"нами",
|
|
29293
|
+
"нас",
|
|
29294
|
+
"наче",
|
|
29295
|
+
"наш",
|
|
29296
|
+
"не",
|
|
29297
|
+
"нє",
|
|
29298
|
+
"неї",
|
|
29299
|
+
"нема",
|
|
29300
|
+
"немов",
|
|
29301
|
+
"неначе",
|
|
29302
|
+
"нею",
|
|
29303
|
+
"ним",
|
|
29304
|
+
"ними",
|
|
29305
|
+
"них",
|
|
29306
|
+
"ні",
|
|
29307
|
+
"ніби",
|
|
29308
|
+
"ніщо",
|
|
29309
|
+
"нього",
|
|
29310
|
+
"о",
|
|
29311
|
+
"ось",
|
|
28048
29312
|
"от",
|
|
28049
29313
|
"отже",
|
|
28050
29314
|
"отож",
|
|
29315
|
+
"під",
|
|
29316
|
+
"по",
|
|
28051
29317
|
"поза",
|
|
28052
29318
|
"про",
|
|
28053
29319
|
"під",
|
|
29320
|
+
"сам",
|
|
29321
|
+
"сама",
|
|
29322
|
+
"свій",
|
|
29323
|
+
"свої",
|
|
29324
|
+
"своя",
|
|
29325
|
+
"свою",
|
|
29326
|
+
"себе",
|
|
29327
|
+
"собі",
|
|
28054
29328
|
"та",
|
|
29329
|
+
"там",
|
|
28055
29330
|
"так",
|
|
29331
|
+
"така",
|
|
28056
29332
|
"такий",
|
|
28057
29333
|
"також",
|
|
29334
|
+
"твій",
|
|
29335
|
+
"твого",
|
|
29336
|
+
"твоєї",
|
|
29337
|
+
"твої",
|
|
29338
|
+
"твоя",
|
|
28058
29339
|
"те",
|
|
29340
|
+
"тебе",
|
|
28059
29341
|
"ти",
|
|
29342
|
+
"ті",
|
|
29343
|
+
"тільки",
|
|
29344
|
+
"то",
|
|
29345
|
+
"тобі",
|
|
29346
|
+
"тобою",
|
|
28060
29347
|
"тобто",
|
|
29348
|
+
"тоді",
|
|
28061
29349
|
"тож",
|
|
29350
|
+
"той",
|
|
28062
29351
|
"тощо",
|
|
29352
|
+
"тут",
|
|
29353
|
+
"у",
|
|
29354
|
+
"хіба",
|
|
29355
|
+
"хоч",
|
|
28063
29356
|
"хоча",
|
|
28064
29357
|
"це",
|
|
28065
29358
|
"цей",
|
|
29359
|
+
"ці",
|
|
29360
|
+
"ця",
|
|
28066
29361
|
"чи",
|
|
28067
29362
|
"чого",
|
|
29363
|
+
"ще",
|
|
28068
29364
|
"що",
|
|
29365
|
+
"щоб",
|
|
29366
|
+
"щось",
|
|
29367
|
+
"я",
|
|
28069
29368
|
"як",
|
|
29369
|
+
"яка",
|
|
28070
29370
|
"який",
|
|
28071
|
-
"якої"
|
|
28072
|
-
"є",
|
|
28073
|
-
"із",
|
|
28074
|
-
"інших",
|
|
28075
|
-
"їх",
|
|
28076
|
-
"її"
|
|
29371
|
+
"якої"
|
|
28077
29372
|
];
|
|
28078
29373
|
const urd = [
|
|
28079
29374
|
"آئی",
|
|
@@ -29071,7 +30366,14 @@ const TINA_LOGIN_EVENT = "tinaCloudLogin";
|
|
|
29071
30366
|
const AUTH_TOKEN_KEY = "tinacms-auth";
|
|
29072
30367
|
const authenticate = (clientId, frontendUrl) => {
|
|
29073
30368
|
return new Promise((resolve) => {
|
|
29074
|
-
|
|
30369
|
+
const origin = `${window.location.protocol}//${window.location.host}`;
|
|
30370
|
+
const authTab = popupWindow(
|
|
30371
|
+
`${frontendUrl}/signin?clientId=${clientId}&origin=${origin}`,
|
|
30372
|
+
"_blank",
|
|
30373
|
+
window,
|
|
30374
|
+
1e3,
|
|
30375
|
+
700
|
|
30376
|
+
);
|
|
29075
30377
|
window.addEventListener("message", function(e) {
|
|
29076
30378
|
if (e.data.source === TINA_LOGIN_EVENT) {
|
|
29077
30379
|
if (authTab) {
|
|
@@ -29084,14 +30386,6 @@ const authenticate = (clientId, frontendUrl) => {
|
|
|
29084
30386
|
});
|
|
29085
30387
|
}
|
|
29086
30388
|
});
|
|
29087
|
-
const origin = `${window.location.protocol}//${window.location.host}`;
|
|
29088
|
-
authTab = popupWindow(
|
|
29089
|
-
`${frontendUrl}/signin?clientId=${clientId}&origin=${origin}`,
|
|
29090
|
-
"_blank",
|
|
29091
|
-
window,
|
|
29092
|
-
1e3,
|
|
29093
|
-
700
|
|
29094
|
-
);
|
|
29095
30389
|
});
|
|
29096
30390
|
};
|
|
29097
30391
|
const DefaultSessionProvider = ({
|
|
@@ -29444,7 +30738,7 @@ mutation addPendingDocumentMutation(
|
|
|
29444
30738
|
branch: ${this.branch}.`;
|
|
29445
30739
|
if (this.branch !== "main") {
|
|
29446
30740
|
errorMessage = `${errorMessage}
|
|
29447
|
-
Note: This error can occur if the branch does not exist on GitHub or on
|
|
30741
|
+
Note: This error can occur if the branch does not exist on GitHub or on TinaCloud`;
|
|
29448
30742
|
}
|
|
29449
30743
|
}
|
|
29450
30744
|
throw new Error(errorMessage);
|
|
@@ -29580,7 +30874,7 @@ mutation addPendingDocumentMutation(
|
|
|
29580
30874
|
unknownCount++;
|
|
29581
30875
|
if (unknownCount > 5) {
|
|
29582
30876
|
throw new Error(
|
|
29583
|
-
"AsyncPoller: status unknown for too long, please check indexing progress the
|
|
30877
|
+
"AsyncPoller: status unknown for too long, please check indexing progress the TinaCloud dashboard"
|
|
29584
30878
|
);
|
|
29585
30879
|
}
|
|
29586
30880
|
}
|
|
@@ -29797,56 +31091,6 @@ const AsyncButton = ({ name, primary, action }) => {
|
|
|
29797
31091
|
!submitting && name
|
|
29798
31092
|
);
|
|
29799
31093
|
};
|
|
29800
|
-
const TINA_AUTH_CONFIG = "tina_auth_config";
|
|
29801
|
-
const useTinaAuthRedirect = () => {
|
|
29802
|
-
useEffect(() => {
|
|
29803
|
-
const urlParams = new URLSearchParams(window.location.search);
|
|
29804
|
-
const config = {
|
|
29805
|
-
code: urlParams.get("code") || "",
|
|
29806
|
-
scope: urlParams.get("scope") || "email",
|
|
29807
|
-
state: urlParams.get("state")
|
|
29808
|
-
};
|
|
29809
|
-
if (!config.code) {
|
|
29810
|
-
return;
|
|
29811
|
-
}
|
|
29812
|
-
localStorage[TINA_AUTH_CONFIG] = JSON.stringify(config);
|
|
29813
|
-
}, []);
|
|
29814
|
-
};
|
|
29815
|
-
const createClient = ({
|
|
29816
|
-
clientId,
|
|
29817
|
-
isLocalClient = true,
|
|
29818
|
-
branch,
|
|
29819
|
-
tinaioConfig,
|
|
29820
|
-
schema,
|
|
29821
|
-
apiUrl,
|
|
29822
|
-
tinaGraphQLVersion
|
|
29823
|
-
}) => {
|
|
29824
|
-
return isLocalClient ? new LocalClient({ customContentApiUrl: apiUrl, schema }) : new Client({
|
|
29825
|
-
clientId: clientId || "",
|
|
29826
|
-
branch: branch || "main",
|
|
29827
|
-
tokenStorage: "LOCAL_STORAGE",
|
|
29828
|
-
tinaioConfig,
|
|
29829
|
-
schema,
|
|
29830
|
-
tinaGraphQLVersion
|
|
29831
|
-
});
|
|
29832
|
-
};
|
|
29833
|
-
function assertShape(value, yupSchema, errorMessage) {
|
|
29834
|
-
const shape = yupSchema(yup);
|
|
29835
|
-
try {
|
|
29836
|
-
shape.validateSync(value);
|
|
29837
|
-
} catch (e) {
|
|
29838
|
-
const message = errorMessage || `Failed to assertShape - ${e.message}`;
|
|
29839
|
-
throw new Error(message);
|
|
29840
|
-
}
|
|
29841
|
-
}
|
|
29842
|
-
function safeAssertShape(value, yupSchema) {
|
|
29843
|
-
try {
|
|
29844
|
-
assertShape(value, yupSchema);
|
|
29845
|
-
return true;
|
|
29846
|
-
} catch (e) {
|
|
29847
|
-
return false;
|
|
29848
|
-
}
|
|
29849
|
-
}
|
|
29850
31094
|
class TinaAdminApi {
|
|
29851
31095
|
constructor(cms) {
|
|
29852
31096
|
var _a, _b, _c, _d;
|
|
@@ -30193,6 +31437,56 @@ class TinaAdminApi {
|
|
|
30193
31437
|
);
|
|
30194
31438
|
}
|
|
30195
31439
|
}
|
|
31440
|
+
const createClient = ({
|
|
31441
|
+
clientId,
|
|
31442
|
+
isLocalClient = true,
|
|
31443
|
+
branch,
|
|
31444
|
+
tinaioConfig,
|
|
31445
|
+
schema,
|
|
31446
|
+
apiUrl,
|
|
31447
|
+
tinaGraphQLVersion
|
|
31448
|
+
}) => {
|
|
31449
|
+
return isLocalClient ? new LocalClient({ customContentApiUrl: apiUrl, schema }) : new Client({
|
|
31450
|
+
clientId: clientId || "",
|
|
31451
|
+
branch: branch || "main",
|
|
31452
|
+
tokenStorage: "LOCAL_STORAGE",
|
|
31453
|
+
tinaioConfig,
|
|
31454
|
+
schema,
|
|
31455
|
+
tinaGraphQLVersion
|
|
31456
|
+
});
|
|
31457
|
+
};
|
|
31458
|
+
function assertShape(value, yupSchema, errorMessage) {
|
|
31459
|
+
const shape = yupSchema(yup);
|
|
31460
|
+
try {
|
|
31461
|
+
shape.validateSync(value);
|
|
31462
|
+
} catch (e) {
|
|
31463
|
+
const message = errorMessage || `Failed to assertShape - ${e.message}`;
|
|
31464
|
+
throw new Error(message);
|
|
31465
|
+
}
|
|
31466
|
+
}
|
|
31467
|
+
function safeAssertShape(value, yupSchema) {
|
|
31468
|
+
try {
|
|
31469
|
+
assertShape(value, yupSchema);
|
|
31470
|
+
return true;
|
|
31471
|
+
} catch (e) {
|
|
31472
|
+
return false;
|
|
31473
|
+
}
|
|
31474
|
+
}
|
|
31475
|
+
const TINA_AUTH_CONFIG = "tina_auth_config";
|
|
31476
|
+
const useTinaAuthRedirect = () => {
|
|
31477
|
+
useEffect(() => {
|
|
31478
|
+
const urlParams = new URLSearchParams(window.location.search);
|
|
31479
|
+
const config = {
|
|
31480
|
+
code: urlParams.get("code") || "",
|
|
31481
|
+
scope: urlParams.get("scope") || "email",
|
|
31482
|
+
state: urlParams.get("state")
|
|
31483
|
+
};
|
|
31484
|
+
if (!config.code) {
|
|
31485
|
+
return;
|
|
31486
|
+
}
|
|
31487
|
+
localStorage[TINA_AUTH_CONFIG] = JSON.stringify(config);
|
|
31488
|
+
}, []);
|
|
31489
|
+
};
|
|
30196
31490
|
function sleep(ms) {
|
|
30197
31491
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
30198
31492
|
}
|
|
@@ -30291,7 +31585,7 @@ const AuthWallInner = ({
|
|
|
30291
31585
|
});
|
|
30292
31586
|
}
|
|
30293
31587
|
};
|
|
30294
|
-
let modalTitle = "
|
|
31588
|
+
let modalTitle = "TinaCloud";
|
|
30295
31589
|
if (activeModal === "authenticate" && loginStrategy === "Redirect" && !isTinaCloud) {
|
|
30296
31590
|
modalTitle = "Enter into edit mode";
|
|
30297
31591
|
} else if (activeModal === "authenticate" && loginStrategy === "UsernamePassword") {
|
|
@@ -30307,7 +31601,7 @@ const AuthWallInner = ({
|
|
|
30307
31601
|
ModalBuilder,
|
|
30308
31602
|
{
|
|
30309
31603
|
title: modalTitle,
|
|
30310
|
-
message: isTinaCloud ? "Your site uses
|
|
31604
|
+
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.",
|
|
30311
31605
|
close,
|
|
30312
31606
|
actions: [
|
|
30313
31607
|
...otherModalActions,
|
|
@@ -30529,6 +31823,9 @@ const TinaCloudProvider = (props) => {
|
|
|
30529
31823
|
cms.flags.set("branch-switcher", true);
|
|
30530
31824
|
client.usingEditorialWorkflow = true;
|
|
30531
31825
|
client.protectedBranches = project.protectedBranches;
|
|
31826
|
+
if (!project.metadata[currentBranch]) {
|
|
31827
|
+
setCurrentBranch(project.defaultBranch || "main");
|
|
31828
|
+
}
|
|
30532
31829
|
}
|
|
30533
31830
|
});
|
|
30534
31831
|
};
|
|
@@ -30541,7 +31838,7 @@ const TinaCloudProvider = (props) => {
|
|
|
30541
31838
|
}
|
|
30542
31839
|
});
|
|
30543
31840
|
return unsubscribe;
|
|
30544
|
-
}, [isTinaCloud, cms]);
|
|
31841
|
+
}, [currentBranch, isTinaCloud, cms]);
|
|
30545
31842
|
return /* @__PURE__ */ React__default.createElement(SessionProvider, { basePath: "/api/tina/auth" }, /* @__PURE__ */ React__default.createElement(
|
|
30546
31843
|
BranchDataProvider,
|
|
30547
31844
|
{
|
|
@@ -31027,6 +32324,14 @@ This will work when developing locally but NOT when deployed to production.
|
|
|
31027
32324
|
}
|
|
31028
32325
|
return client.request(query, { variables });
|
|
31029
32326
|
};
|
|
32327
|
+
const GetCMS = ({ children }) => {
|
|
32328
|
+
try {
|
|
32329
|
+
const cms = useCMS$1();
|
|
32330
|
+
return /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, children(cms));
|
|
32331
|
+
} catch (e) {
|
|
32332
|
+
return null;
|
|
32333
|
+
}
|
|
32334
|
+
};
|
|
31030
32335
|
const Layout = ({ children }) => {
|
|
31031
32336
|
return /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, /* @__PURE__ */ React__default.createElement(
|
|
31032
32337
|
"div",
|
|
@@ -31238,14 +32543,118 @@ const SidebarCloudLink = ({ config }) => {
|
|
|
31238
32543
|
}
|
|
31239
32544
|
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));
|
|
31240
32545
|
};
|
|
31241
|
-
const
|
|
31242
|
-
|
|
31243
|
-
|
|
31244
|
-
|
|
31245
|
-
|
|
31246
|
-
|
|
31247
|
-
|
|
31248
|
-
|
|
32546
|
+
const LoadingPage = () => /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, /* @__PURE__ */ React__default.createElement(
|
|
32547
|
+
"div",
|
|
32548
|
+
{
|
|
32549
|
+
style: {
|
|
32550
|
+
position: "absolute",
|
|
32551
|
+
top: 0,
|
|
32552
|
+
left: 0,
|
|
32553
|
+
width: "100%",
|
|
32554
|
+
height: "100%",
|
|
32555
|
+
zIndex: 200,
|
|
32556
|
+
opacity: "0.8",
|
|
32557
|
+
display: "flex",
|
|
32558
|
+
alignItems: "start",
|
|
32559
|
+
justifyContent: "center",
|
|
32560
|
+
padding: "120px 40px 40px 40px"
|
|
32561
|
+
}
|
|
32562
|
+
},
|
|
32563
|
+
/* @__PURE__ */ React__default.createElement(
|
|
32564
|
+
"div",
|
|
32565
|
+
{
|
|
32566
|
+
style: {
|
|
32567
|
+
background: "#FFF",
|
|
32568
|
+
border: "1px solid #EDECF3",
|
|
32569
|
+
boxShadow: "0px 2px 3px rgba(0, 0, 0, 0.05), 0 4px 12px rgba(0, 0, 0, 0.1)",
|
|
32570
|
+
borderRadius: "8px",
|
|
32571
|
+
padding: "32px 24px",
|
|
32572
|
+
width: "460px",
|
|
32573
|
+
maxWidth: "90%",
|
|
32574
|
+
display: "flex",
|
|
32575
|
+
alignItems: "center",
|
|
32576
|
+
justifyContent: "center",
|
|
32577
|
+
flexDirection: "column"
|
|
32578
|
+
}
|
|
32579
|
+
},
|
|
32580
|
+
/* @__PURE__ */ React__default.createElement(
|
|
32581
|
+
"svg",
|
|
32582
|
+
{
|
|
32583
|
+
style: {
|
|
32584
|
+
width: "64px",
|
|
32585
|
+
color: "#2296fe",
|
|
32586
|
+
marginTop: "-8px",
|
|
32587
|
+
marginBottom: "16px"
|
|
32588
|
+
},
|
|
32589
|
+
version: "1.1",
|
|
32590
|
+
id: "L5",
|
|
32591
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
32592
|
+
xmlnsXlink: "http://www.w3.org/1999/xlink",
|
|
32593
|
+
x: "0px",
|
|
32594
|
+
y: "0px",
|
|
32595
|
+
viewBox: "0 0 100 64",
|
|
32596
|
+
enableBackground: "new 0 0 0 0",
|
|
32597
|
+
xmlSpace: "preserve"
|
|
32598
|
+
},
|
|
32599
|
+
/* @__PURE__ */ React__default.createElement("circle", { fill: "currentColor", stroke: "none", cx: 6, cy: 32, r: 6 }, /* @__PURE__ */ React__default.createElement(
|
|
32600
|
+
"animateTransform",
|
|
32601
|
+
{
|
|
32602
|
+
attributeName: "transform",
|
|
32603
|
+
dur: "1s",
|
|
32604
|
+
type: "translate",
|
|
32605
|
+
values: "0 15 ; 0 -15; 0 15",
|
|
32606
|
+
calcMode: "spline",
|
|
32607
|
+
keySplines: "0.8 0 0.4 1; 0.4 0 0.2 1",
|
|
32608
|
+
repeatCount: "indefinite",
|
|
32609
|
+
begin: "0.1"
|
|
32610
|
+
}
|
|
32611
|
+
)),
|
|
32612
|
+
/* @__PURE__ */ React__default.createElement("circle", { fill: "currentColor", stroke: "none", cx: 30, cy: 32, r: 6 }, /* @__PURE__ */ React__default.createElement(
|
|
32613
|
+
"animateTransform",
|
|
32614
|
+
{
|
|
32615
|
+
attributeName: "transform",
|
|
32616
|
+
dur: "1s",
|
|
32617
|
+
type: "translate",
|
|
32618
|
+
values: "0 15 ; 0 -10; 0 15",
|
|
32619
|
+
calcMode: "spline",
|
|
32620
|
+
keySplines: "0.8 0 0.4 1; 0.4 0 0.2 1",
|
|
32621
|
+
repeatCount: "indefinite",
|
|
32622
|
+
begin: "0.2"
|
|
32623
|
+
}
|
|
32624
|
+
)),
|
|
32625
|
+
/* @__PURE__ */ React__default.createElement("circle", { fill: "currentColor", stroke: "none", cx: 54, cy: 32, r: 6 }, /* @__PURE__ */ React__default.createElement(
|
|
32626
|
+
"animateTransform",
|
|
32627
|
+
{
|
|
32628
|
+
attributeName: "transform",
|
|
32629
|
+
dur: "1s",
|
|
32630
|
+
type: "translate",
|
|
32631
|
+
values: "0 15 ; 0 -5; 0 15",
|
|
32632
|
+
calcMode: "spline",
|
|
32633
|
+
keySplines: "0.8 0 0.4 1; 0.4 0 0.2 1",
|
|
32634
|
+
repeatCount: "indefinite",
|
|
32635
|
+
begin: "0.3"
|
|
32636
|
+
}
|
|
32637
|
+
))
|
|
32638
|
+
),
|
|
32639
|
+
/* @__PURE__ */ React__default.createElement(
|
|
32640
|
+
"p",
|
|
32641
|
+
{
|
|
32642
|
+
style: {
|
|
32643
|
+
fontSize: "16px",
|
|
32644
|
+
color: "#716c7f",
|
|
32645
|
+
textAlign: "center",
|
|
32646
|
+
lineHeight: "1.3",
|
|
32647
|
+
fontFamily: "'Inter', sans-serif",
|
|
32648
|
+
fontWeight: "normal"
|
|
32649
|
+
}
|
|
32650
|
+
},
|
|
32651
|
+
"Please wait, Tina is loading data..."
|
|
32652
|
+
)
|
|
32653
|
+
)
|
|
32654
|
+
));
|
|
32655
|
+
function RiHome2Line(props) {
|
|
32656
|
+
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);
|
|
32657
|
+
}
|
|
31249
32658
|
const PageWrapper = ({ children }) => {
|
|
31250
32659
|
var _a, _b;
|
|
31251
32660
|
const cms = useCMS$1();
|
|
@@ -31270,321 +32679,6 @@ const PageHeader = ({
|
|
|
31270
32679
|
};
|
|
31271
32680
|
const PageBody = ({ children }) => /* @__PURE__ */ React__default.createElement("div", { className: "py-8 px-6 xl:px-12" }, children);
|
|
31272
32681
|
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));
|
|
31273
|
-
const DashboardPage = () => {
|
|
31274
|
-
return /* @__PURE__ */ React__default.createElement(GetCMS, null, (cms) => {
|
|
31275
|
-
var _a, _b;
|
|
31276
|
-
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.")));
|
|
31277
|
-
});
|
|
31278
|
-
};
|
|
31279
|
-
function RiHome2Line(props) {
|
|
31280
|
-
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);
|
|
31281
|
-
}
|
|
31282
|
-
const LoadingPage = () => /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, /* @__PURE__ */ React__default.createElement(
|
|
31283
|
-
"div",
|
|
31284
|
-
{
|
|
31285
|
-
style: {
|
|
31286
|
-
position: "absolute",
|
|
31287
|
-
top: 0,
|
|
31288
|
-
left: 0,
|
|
31289
|
-
width: "100%",
|
|
31290
|
-
height: "100%",
|
|
31291
|
-
zIndex: 200,
|
|
31292
|
-
opacity: "0.8",
|
|
31293
|
-
display: "flex",
|
|
31294
|
-
alignItems: "start",
|
|
31295
|
-
justifyContent: "center",
|
|
31296
|
-
padding: "120px 40px 40px 40px"
|
|
31297
|
-
}
|
|
31298
|
-
},
|
|
31299
|
-
/* @__PURE__ */ React__default.createElement(
|
|
31300
|
-
"div",
|
|
31301
|
-
{
|
|
31302
|
-
style: {
|
|
31303
|
-
background: "#FFF",
|
|
31304
|
-
border: "1px solid #EDECF3",
|
|
31305
|
-
boxShadow: "0px 2px 3px rgba(0, 0, 0, 0.05), 0 4px 12px rgba(0, 0, 0, 0.1)",
|
|
31306
|
-
borderRadius: "8px",
|
|
31307
|
-
padding: "32px 24px",
|
|
31308
|
-
width: "460px",
|
|
31309
|
-
maxWidth: "90%",
|
|
31310
|
-
display: "flex",
|
|
31311
|
-
alignItems: "center",
|
|
31312
|
-
justifyContent: "center",
|
|
31313
|
-
flexDirection: "column"
|
|
31314
|
-
}
|
|
31315
|
-
},
|
|
31316
|
-
/* @__PURE__ */ React__default.createElement(
|
|
31317
|
-
"svg",
|
|
31318
|
-
{
|
|
31319
|
-
style: {
|
|
31320
|
-
width: "64px",
|
|
31321
|
-
color: "#2296fe",
|
|
31322
|
-
marginTop: "-8px",
|
|
31323
|
-
marginBottom: "16px"
|
|
31324
|
-
},
|
|
31325
|
-
version: "1.1",
|
|
31326
|
-
id: "L5",
|
|
31327
|
-
xmlns: "http://www.w3.org/2000/svg",
|
|
31328
|
-
xmlnsXlink: "http://www.w3.org/1999/xlink",
|
|
31329
|
-
x: "0px",
|
|
31330
|
-
y: "0px",
|
|
31331
|
-
viewBox: "0 0 100 64",
|
|
31332
|
-
enableBackground: "new 0 0 0 0",
|
|
31333
|
-
xmlSpace: "preserve"
|
|
31334
|
-
},
|
|
31335
|
-
/* @__PURE__ */ React__default.createElement("circle", { fill: "currentColor", stroke: "none", cx: 6, cy: 32, r: 6 }, /* @__PURE__ */ React__default.createElement(
|
|
31336
|
-
"animateTransform",
|
|
31337
|
-
{
|
|
31338
|
-
attributeName: "transform",
|
|
31339
|
-
dur: "1s",
|
|
31340
|
-
type: "translate",
|
|
31341
|
-
values: "0 15 ; 0 -15; 0 15",
|
|
31342
|
-
calcMode: "spline",
|
|
31343
|
-
keySplines: "0.8 0 0.4 1; 0.4 0 0.2 1",
|
|
31344
|
-
repeatCount: "indefinite",
|
|
31345
|
-
begin: "0.1"
|
|
31346
|
-
}
|
|
31347
|
-
)),
|
|
31348
|
-
/* @__PURE__ */ React__default.createElement("circle", { fill: "currentColor", stroke: "none", cx: 30, cy: 32, r: 6 }, /* @__PURE__ */ React__default.createElement(
|
|
31349
|
-
"animateTransform",
|
|
31350
|
-
{
|
|
31351
|
-
attributeName: "transform",
|
|
31352
|
-
dur: "1s",
|
|
31353
|
-
type: "translate",
|
|
31354
|
-
values: "0 15 ; 0 -10; 0 15",
|
|
31355
|
-
calcMode: "spline",
|
|
31356
|
-
keySplines: "0.8 0 0.4 1; 0.4 0 0.2 1",
|
|
31357
|
-
repeatCount: "indefinite",
|
|
31358
|
-
begin: "0.2"
|
|
31359
|
-
}
|
|
31360
|
-
)),
|
|
31361
|
-
/* @__PURE__ */ React__default.createElement("circle", { fill: "currentColor", stroke: "none", cx: 54, cy: 32, r: 6 }, /* @__PURE__ */ React__default.createElement(
|
|
31362
|
-
"animateTransform",
|
|
31363
|
-
{
|
|
31364
|
-
attributeName: "transform",
|
|
31365
|
-
dur: "1s",
|
|
31366
|
-
type: "translate",
|
|
31367
|
-
values: "0 15 ; 0 -5; 0 15",
|
|
31368
|
-
calcMode: "spline",
|
|
31369
|
-
keySplines: "0.8 0 0.4 1; 0.4 0 0.2 1",
|
|
31370
|
-
repeatCount: "indefinite",
|
|
31371
|
-
begin: "0.3"
|
|
31372
|
-
}
|
|
31373
|
-
))
|
|
31374
|
-
),
|
|
31375
|
-
/* @__PURE__ */ React__default.createElement(
|
|
31376
|
-
"p",
|
|
31377
|
-
{
|
|
31378
|
-
style: {
|
|
31379
|
-
fontSize: "16px",
|
|
31380
|
-
color: "#716c7f",
|
|
31381
|
-
textAlign: "center",
|
|
31382
|
-
lineHeight: "1.3",
|
|
31383
|
-
fontFamily: "'Inter', sans-serif",
|
|
31384
|
-
fontWeight: "normal"
|
|
31385
|
-
}
|
|
31386
|
-
},
|
|
31387
|
-
"Please wait, Tina is loading data..."
|
|
31388
|
-
)
|
|
31389
|
-
)
|
|
31390
|
-
));
|
|
31391
|
-
const FullscreenError = ({
|
|
31392
|
-
title = "Error",
|
|
31393
|
-
errorMessage = "It looks like something went wrong."
|
|
31394
|
-
}) => {
|
|
31395
|
-
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"));
|
|
31396
|
-
};
|
|
31397
|
-
const useGetCollection = (cms, collectionName, includeDocuments = true, folder, after = "", sortKey, filterArgs) => {
|
|
31398
|
-
const api = new TinaAdminApi(cms);
|
|
31399
|
-
const schema = cms.api.tina.schema;
|
|
31400
|
-
const collectionExtra = schema.getCollection(collectionName);
|
|
31401
|
-
const [collection, setCollection] = useState(void 0);
|
|
31402
|
-
const [loading, setLoading] = useState(true);
|
|
31403
|
-
const [error, setError] = useState(void 0);
|
|
31404
|
-
const [resetState, setResetSate] = useState(0);
|
|
31405
|
-
useEffect(() => {
|
|
31406
|
-
let cancelled = false;
|
|
31407
|
-
const fetchCollection = async () => {
|
|
31408
|
-
var _a;
|
|
31409
|
-
if (await api.isAuthenticated() && !folder.loading && !cancelled) {
|
|
31410
|
-
const { name, order } = JSON.parse(sortKey || "{}");
|
|
31411
|
-
const validSortKey = ((_a = collectionExtra.fields) == null ? void 0 : _a.map((x) => x.name).includes(name)) ? name : void 0;
|
|
31412
|
-
try {
|
|
31413
|
-
const collection2 = await api.fetchCollection(
|
|
31414
|
-
collectionName,
|
|
31415
|
-
includeDocuments,
|
|
31416
|
-
(filterArgs == null ? void 0 : filterArgs.filterField) ? "" : folder.fullyQualifiedName,
|
|
31417
|
-
after,
|
|
31418
|
-
validSortKey,
|
|
31419
|
-
order,
|
|
31420
|
-
filterArgs
|
|
31421
|
-
);
|
|
31422
|
-
setCollection(collection2);
|
|
31423
|
-
} catch (error2) {
|
|
31424
|
-
cms.alerts.error(
|
|
31425
|
-
`[${error2.name}] GetCollection failed: ${error2.message}`
|
|
31426
|
-
);
|
|
31427
|
-
console.error(error2);
|
|
31428
|
-
setCollection(void 0);
|
|
31429
|
-
setError(error2);
|
|
31430
|
-
}
|
|
31431
|
-
setLoading(false);
|
|
31432
|
-
}
|
|
31433
|
-
};
|
|
31434
|
-
if (cancelled)
|
|
31435
|
-
return;
|
|
31436
|
-
setLoading(true);
|
|
31437
|
-
fetchCollection();
|
|
31438
|
-
return () => {
|
|
31439
|
-
cancelled = true;
|
|
31440
|
-
};
|
|
31441
|
-
}, [
|
|
31442
|
-
cms,
|
|
31443
|
-
collectionName,
|
|
31444
|
-
folder.loading,
|
|
31445
|
-
folder.fullyQualifiedName,
|
|
31446
|
-
resetState,
|
|
31447
|
-
after,
|
|
31448
|
-
sortKey
|
|
31449
|
-
]);
|
|
31450
|
-
const reFetchCollection = () => setResetSate((x) => x + 1);
|
|
31451
|
-
return { collection, loading, error, reFetchCollection, collectionExtra };
|
|
31452
|
-
};
|
|
31453
|
-
const useSearchCollection = (cms, collectionName, includeDocuments = true, folder, after = "", search) => {
|
|
31454
|
-
const api = new TinaAdminApi(cms);
|
|
31455
|
-
const schema = cms.api.tina.schema;
|
|
31456
|
-
const collectionExtra = schema.getCollection(collectionName);
|
|
31457
|
-
const [collection, setCollection] = useState(void 0);
|
|
31458
|
-
const [loading, setLoading] = useState(true);
|
|
31459
|
-
const [error, setError] = useState(void 0);
|
|
31460
|
-
const [resetState, setResetSate] = useState(0);
|
|
31461
|
-
useEffect(() => {
|
|
31462
|
-
let cancelled = false;
|
|
31463
|
-
const searchCollection = async () => {
|
|
31464
|
-
if (await api.isAuthenticated() && !folder.loading && !cancelled) {
|
|
31465
|
-
try {
|
|
31466
|
-
const response = await cms.api.search.query(
|
|
31467
|
-
`${search} AND _collection:${collectionName}`,
|
|
31468
|
-
{
|
|
31469
|
-
limit: 15,
|
|
31470
|
-
cursor: after
|
|
31471
|
-
}
|
|
31472
|
-
);
|
|
31473
|
-
const docs = await Promise.allSettled(
|
|
31474
|
-
response.results.map((result) => {
|
|
31475
|
-
const [collection2, relativePath2] = result._id.split(":");
|
|
31476
|
-
return api.fetchDocument(collection2, relativePath2, false);
|
|
31477
|
-
})
|
|
31478
|
-
);
|
|
31479
|
-
const edges = docs.filter((p) => {
|
|
31480
|
-
var _a;
|
|
31481
|
-
return p.status === "fulfilled" && !!((_a = p.value) == null ? void 0 : _a.document);
|
|
31482
|
-
}).map((result) => ({ node: result.value.document }));
|
|
31483
|
-
const c = await api.fetchCollection(collectionName, false, "");
|
|
31484
|
-
setCollection({
|
|
31485
|
-
format: collection.format,
|
|
31486
|
-
label: collection.label,
|
|
31487
|
-
name: collectionName,
|
|
31488
|
-
templates: collection.templates,
|
|
31489
|
-
documents: {
|
|
31490
|
-
pageInfo: {
|
|
31491
|
-
hasNextPage: !!response.nextCursor,
|
|
31492
|
-
hasPreviousPage: !!response.prevCursor,
|
|
31493
|
-
startCursor: "",
|
|
31494
|
-
endCursor: response.nextCursor || ""
|
|
31495
|
-
},
|
|
31496
|
-
edges
|
|
31497
|
-
}
|
|
31498
|
-
});
|
|
31499
|
-
} catch (error2) {
|
|
31500
|
-
cms.alerts.error(
|
|
31501
|
-
`[${error2.name}] GetCollection failed: ${error2.message}`
|
|
31502
|
-
);
|
|
31503
|
-
console.error(error2);
|
|
31504
|
-
setCollection(void 0);
|
|
31505
|
-
setError(error2);
|
|
31506
|
-
}
|
|
31507
|
-
setLoading(false);
|
|
31508
|
-
}
|
|
31509
|
-
};
|
|
31510
|
-
if (cancelled)
|
|
31511
|
-
return;
|
|
31512
|
-
setLoading(true);
|
|
31513
|
-
searchCollection();
|
|
31514
|
-
return () => {
|
|
31515
|
-
cancelled = true;
|
|
31516
|
-
};
|
|
31517
|
-
}, [
|
|
31518
|
-
cms,
|
|
31519
|
-
collectionName,
|
|
31520
|
-
folder.loading,
|
|
31521
|
-
folder.fullyQualifiedName,
|
|
31522
|
-
resetState,
|
|
31523
|
-
after,
|
|
31524
|
-
search
|
|
31525
|
-
]);
|
|
31526
|
-
const reFetchCollection = () => setResetSate((x) => x + 1);
|
|
31527
|
-
return { collection, loading, error, reFetchCollection, collectionExtra };
|
|
31528
|
-
};
|
|
31529
|
-
const GetCollection = ({
|
|
31530
|
-
cms,
|
|
31531
|
-
collectionName,
|
|
31532
|
-
folder,
|
|
31533
|
-
includeDocuments = true,
|
|
31534
|
-
startCursor,
|
|
31535
|
-
sortKey,
|
|
31536
|
-
children,
|
|
31537
|
-
filterArgs,
|
|
31538
|
-
search
|
|
31539
|
-
}) => {
|
|
31540
|
-
const navigate = useNavigate();
|
|
31541
|
-
const { collection, loading, error, reFetchCollection, collectionExtra } = search ? useSearchCollection(
|
|
31542
|
-
cms,
|
|
31543
|
-
collectionName,
|
|
31544
|
-
includeDocuments,
|
|
31545
|
-
folder,
|
|
31546
|
-
startCursor || "",
|
|
31547
|
-
search
|
|
31548
|
-
) : useGetCollection(
|
|
31549
|
-
cms,
|
|
31550
|
-
collectionName,
|
|
31551
|
-
includeDocuments,
|
|
31552
|
-
folder,
|
|
31553
|
-
startCursor || "",
|
|
31554
|
-
sortKey,
|
|
31555
|
-
filterArgs
|
|
31556
|
-
) || {};
|
|
31557
|
-
useEffect(() => {
|
|
31558
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _i;
|
|
31559
|
-
if (loading)
|
|
31560
|
-
return;
|
|
31561
|
-
const collectionDefinition = cms.api.tina.schema.getCollection(
|
|
31562
|
-
collection.name
|
|
31563
|
-
);
|
|
31564
|
-
const allowCreate = ((_b = (_a = collectionDefinition == null ? void 0 : collectionDefinition.ui) == null ? void 0 : _a.allowedActions) == null ? void 0 : _b.create) ?? true;
|
|
31565
|
-
const allowDelete = ((_d = (_c = collectionDefinition == null ? void 0 : collectionDefinition.ui) == null ? void 0 : _c.allowedActions) == null ? void 0 : _d.delete) ?? true;
|
|
31566
|
-
const collectionResponse = collection;
|
|
31567
|
-
if (!allowCreate && !allowDelete && // Check there is only one document
|
|
31568
|
-
((_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
|
|
31569
|
-
((_i = (_h = (_g = collectionResponse.documents) == null ? void 0 : _g.edges[0]) == null ? void 0 : _h.node) == null ? void 0 : _i.__typename) !== "Folder") {
|
|
31570
|
-
const doc = collectionResponse.documents.edges[0].node;
|
|
31571
|
-
handleNavigate(
|
|
31572
|
-
navigate,
|
|
31573
|
-
cms,
|
|
31574
|
-
collectionResponse,
|
|
31575
|
-
collectionDefinition,
|
|
31576
|
-
doc
|
|
31577
|
-
);
|
|
31578
|
-
}
|
|
31579
|
-
}, [(collection == null ? void 0 : collection.name) || "", loading]);
|
|
31580
|
-
if (error) {
|
|
31581
|
-
return /* @__PURE__ */ React__default.createElement(FullscreenError, null);
|
|
31582
|
-
}
|
|
31583
|
-
if (loading) {
|
|
31584
|
-
return /* @__PURE__ */ React__default.createElement(LoadingPage, null);
|
|
31585
|
-
}
|
|
31586
|
-
return /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, children(collection, loading, reFetchCollection, collectionExtra));
|
|
31587
|
-
};
|
|
31588
32682
|
const folderRegex = /^.*\/~\/*(.*)$/;
|
|
31589
32683
|
const parentFolder = (folder) => {
|
|
31590
32684
|
return {
|
|
@@ -31704,6 +32798,7 @@ const CollectionListPage = () => {
|
|
|
31704
32798
|
const [vars, setVars] = React__default.useState({
|
|
31705
32799
|
collection: collectionName,
|
|
31706
32800
|
relativePath: "",
|
|
32801
|
+
relativePathWithoutExtension: "",
|
|
31707
32802
|
newRelativePath: "",
|
|
31708
32803
|
filterField: "",
|
|
31709
32804
|
folderName: "",
|
|
@@ -31745,6 +32840,7 @@ const CollectionListPage = () => {
|
|
|
31745
32840
|
...old,
|
|
31746
32841
|
collection: collectionName,
|
|
31747
32842
|
relativePath: "",
|
|
32843
|
+
relativePathWithoutExtension: "",
|
|
31748
32844
|
newRelativePath: "",
|
|
31749
32845
|
filterField: "",
|
|
31750
32846
|
startsWith: "",
|
|
@@ -31770,6 +32866,7 @@ const CollectionListPage = () => {
|
|
|
31770
32866
|
collectionName === vars.collection ? vars : {
|
|
31771
32867
|
collection: collectionName,
|
|
31772
32868
|
relativePath: "",
|
|
32869
|
+
relativePathWithoutExtension: "",
|
|
31773
32870
|
newRelativePath: "",
|
|
31774
32871
|
filterField: "",
|
|
31775
32872
|
startsWith: "",
|
|
@@ -31857,7 +32954,9 @@ const CollectionListPage = () => {
|
|
|
31857
32954
|
safeSubmit: async () => {
|
|
31858
32955
|
try {
|
|
31859
32956
|
await admin.deleteDocument(vars);
|
|
31860
|
-
cms.alerts.info(
|
|
32957
|
+
cms.alerts.info(
|
|
32958
|
+
"Document was successfully deleted"
|
|
32959
|
+
);
|
|
31861
32960
|
reFetchCollection();
|
|
31862
32961
|
} catch (error) {
|
|
31863
32962
|
cms.alerts.warn(
|
|
@@ -31871,7 +32970,7 @@ const CollectionListPage = () => {
|
|
|
31871
32970
|
), renameModalOpen && /* @__PURE__ */ React__default.createElement(
|
|
31872
32971
|
RenameModal,
|
|
31873
32972
|
{
|
|
31874
|
-
filename: vars.
|
|
32973
|
+
filename: vars.relativePathWithoutExtension,
|
|
31875
32974
|
newRelativePath: vars.newRelativePath,
|
|
31876
32975
|
setNewRelativePath: (newRelativePath) => {
|
|
31877
32976
|
setVars((vars2) => {
|
|
@@ -31886,7 +32985,9 @@ const CollectionListPage = () => {
|
|
|
31886
32985
|
relativePath: vars.relativePath,
|
|
31887
32986
|
newRelativePath
|
|
31888
32987
|
});
|
|
31889
|
-
cms.alerts.info(
|
|
32988
|
+
cms.alerts.info(
|
|
32989
|
+
"Document was successfully renamed"
|
|
32990
|
+
);
|
|
31890
32991
|
reFetchCollection();
|
|
31891
32992
|
} catch (error) {
|
|
31892
32993
|
if (error.message.indexOf("has references")) {
|
|
@@ -31986,7 +33087,9 @@ const CollectionListPage = () => {
|
|
|
31986
33087
|
name: "sort",
|
|
31987
33088
|
value: sortKey,
|
|
31988
33089
|
onChange: (e) => {
|
|
31989
|
-
const val = JSON.parse(
|
|
33090
|
+
const val = JSON.parse(
|
|
33091
|
+
e.target.value
|
|
33092
|
+
);
|
|
31990
33093
|
setEndCursor("");
|
|
31991
33094
|
setPrevCursors([]);
|
|
31992
33095
|
window == null ? void 0 : window.localStorage.setItem(
|
|
@@ -32192,6 +33295,9 @@ const CollectionListPage = () => {
|
|
|
32192
33295
|
setVars((old) => ({
|
|
32193
33296
|
...old,
|
|
32194
33297
|
collection: collectionName,
|
|
33298
|
+
relativePathWithoutExtension: document2.node._sys.breadcrumbs.join(
|
|
33299
|
+
"/"
|
|
33300
|
+
),
|
|
32195
33301
|
relativePath: document2.node._sys.breadcrumbs.join(
|
|
32196
33302
|
"/"
|
|
32197
33303
|
) + document2.node._sys.extension,
|
|
@@ -32214,6 +33320,9 @@ const CollectionListPage = () => {
|
|
|
32214
33320
|
setVars((old) => ({
|
|
32215
33321
|
...old,
|
|
32216
33322
|
collection: collectionName,
|
|
33323
|
+
relativePathWithoutExtension: document2.node._sys.breadcrumbs.join(
|
|
33324
|
+
"/"
|
|
33325
|
+
),
|
|
32217
33326
|
relativePath: document2.node._sys.breadcrumbs.join(
|
|
32218
33327
|
"/"
|
|
32219
33328
|
) + document2.node._sys.extension,
|
|
@@ -32426,7 +33535,7 @@ const RenameModal = ({
|
|
|
32426
33535
|
newRelativePath,
|
|
32427
33536
|
setNewRelativePath
|
|
32428
33537
|
}) => {
|
|
32429
|
-
return /* @__PURE__ */ React__default.createElement(Modal, null, /* @__PURE__ */ React__default.createElement(PopupModal, null, /* @__PURE__ */ React__default.createElement(ModalHeader, { close: close2 }, "Rename ", filename), /* @__PURE__ */ React__default.createElement(ModalBody, { padded: true }, /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, /* @__PURE__ */ React__default.createElement("p", { className: "mb-4" }, "Are you sure you want to rename ", /* @__PURE__ */ React__default.createElement("strong", null, filename), "?
|
|
33538
|
+
return /* @__PURE__ */ React__default.createElement(Modal, null, /* @__PURE__ */ React__default.createElement(PopupModal, null, /* @__PURE__ */ React__default.createElement(ModalHeader, { close: close2 }, "Rename ", filename), /* @__PURE__ */ React__default.createElement(ModalBody, { padded: true }, /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, /* @__PURE__ */ React__default.createElement("p", { className: "mb-4" }, "Are you sure you want to rename ", /* @__PURE__ */ React__default.createElement("strong", null, filename), "?"), /* @__PURE__ */ React__default.createElement(
|
|
32430
33539
|
BaseTextField,
|
|
32431
33540
|
{
|
|
32432
33541
|
placeholder: "Enter a new name for the document's file",
|
|
@@ -32441,11 +33550,237 @@ const RenameModal = ({
|
|
|
32441
33550
|
onClick: async () => {
|
|
32442
33551
|
await renameFunc();
|
|
32443
33552
|
close2();
|
|
32444
|
-
}
|
|
33553
|
+
},
|
|
33554
|
+
disabled: !newRelativePath || newRelativePath === filename
|
|
32445
33555
|
},
|
|
32446
33556
|
"Rename"
|
|
32447
33557
|
))));
|
|
32448
33558
|
};
|
|
33559
|
+
const FullscreenError = ({
|
|
33560
|
+
title = "Error",
|
|
33561
|
+
errorMessage = "It looks like something went wrong."
|
|
33562
|
+
}) => {
|
|
33563
|
+
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"));
|
|
33564
|
+
};
|
|
33565
|
+
const isValidSortKey = (sortKey, collection) => {
|
|
33566
|
+
if (collection.fields) {
|
|
33567
|
+
const sortKeys = collection.fields.map((x) => x.name);
|
|
33568
|
+
return sortKeys.includes(sortKey);
|
|
33569
|
+
} else if (collection.templates) {
|
|
33570
|
+
const collectionMap = {};
|
|
33571
|
+
const conflictedFields = /* @__PURE__ */ new Set();
|
|
33572
|
+
for (const template of collection.templates) {
|
|
33573
|
+
for (const field of template.fields) {
|
|
33574
|
+
if (collectionMap[field.name]) {
|
|
33575
|
+
if (collectionMap[field.name].type !== field.type) {
|
|
33576
|
+
conflictedFields.add(field.name);
|
|
33577
|
+
}
|
|
33578
|
+
} else {
|
|
33579
|
+
collectionMap[field.name] = field;
|
|
33580
|
+
}
|
|
33581
|
+
}
|
|
33582
|
+
}
|
|
33583
|
+
for (const key in conflictedFields) {
|
|
33584
|
+
delete collectionMap[key];
|
|
33585
|
+
}
|
|
33586
|
+
for (const key in collectionMap) {
|
|
33587
|
+
if (key === sortKey) {
|
|
33588
|
+
return true;
|
|
33589
|
+
}
|
|
33590
|
+
}
|
|
33591
|
+
return false;
|
|
33592
|
+
}
|
|
33593
|
+
};
|
|
33594
|
+
const useGetCollection = (cms, collectionName, includeDocuments = true, folder, after = "", sortKey, filterArgs) => {
|
|
33595
|
+
const api = new TinaAdminApi(cms);
|
|
33596
|
+
const schema = cms.api.tina.schema;
|
|
33597
|
+
const collectionExtra = schema.getCollection(collectionName);
|
|
33598
|
+
const [collection, setCollection] = useState(void 0);
|
|
33599
|
+
const [loading, setLoading] = useState(true);
|
|
33600
|
+
const [error, setError] = useState(void 0);
|
|
33601
|
+
const [resetState, setResetSate] = useState(0);
|
|
33602
|
+
useEffect(() => {
|
|
33603
|
+
let cancelled = false;
|
|
33604
|
+
const fetchCollection = async () => {
|
|
33605
|
+
if (await api.isAuthenticated() && !folder.loading && !cancelled) {
|
|
33606
|
+
const { name, order } = JSON.parse(sortKey || "{}");
|
|
33607
|
+
const validSortKey = isValidSortKey(name, collectionExtra) ? name : void 0;
|
|
33608
|
+
try {
|
|
33609
|
+
const collection2 = await api.fetchCollection(
|
|
33610
|
+
collectionName,
|
|
33611
|
+
includeDocuments,
|
|
33612
|
+
(filterArgs == null ? void 0 : filterArgs.filterField) ? "" : folder.fullyQualifiedName,
|
|
33613
|
+
after,
|
|
33614
|
+
validSortKey,
|
|
33615
|
+
order,
|
|
33616
|
+
filterArgs
|
|
33617
|
+
);
|
|
33618
|
+
setCollection(collection2);
|
|
33619
|
+
} catch (error2) {
|
|
33620
|
+
cms.alerts.error(
|
|
33621
|
+
`[${error2.name}] GetCollection failed: ${error2.message}`
|
|
33622
|
+
);
|
|
33623
|
+
console.error(error2);
|
|
33624
|
+
setCollection(void 0);
|
|
33625
|
+
setError(error2);
|
|
33626
|
+
}
|
|
33627
|
+
setLoading(false);
|
|
33628
|
+
}
|
|
33629
|
+
};
|
|
33630
|
+
if (cancelled)
|
|
33631
|
+
return;
|
|
33632
|
+
setLoading(true);
|
|
33633
|
+
fetchCollection();
|
|
33634
|
+
return () => {
|
|
33635
|
+
cancelled = true;
|
|
33636
|
+
};
|
|
33637
|
+
}, [
|
|
33638
|
+
cms,
|
|
33639
|
+
collectionName,
|
|
33640
|
+
folder.loading,
|
|
33641
|
+
folder.fullyQualifiedName,
|
|
33642
|
+
resetState,
|
|
33643
|
+
after,
|
|
33644
|
+
sortKey
|
|
33645
|
+
]);
|
|
33646
|
+
const reFetchCollection = () => setResetSate((x) => x + 1);
|
|
33647
|
+
return { collection, loading, error, reFetchCollection, collectionExtra };
|
|
33648
|
+
};
|
|
33649
|
+
const useSearchCollection = (cms, collectionName, includeDocuments = true, folder, after = "", search) => {
|
|
33650
|
+
const api = new TinaAdminApi(cms);
|
|
33651
|
+
const schema = cms.api.tina.schema;
|
|
33652
|
+
const collectionExtra = schema.getCollection(collectionName);
|
|
33653
|
+
const [collection, setCollection] = useState(void 0);
|
|
33654
|
+
const [loading, setLoading] = useState(true);
|
|
33655
|
+
const [error, setError] = useState(void 0);
|
|
33656
|
+
const [resetState, setResetSate] = useState(0);
|
|
33657
|
+
useEffect(() => {
|
|
33658
|
+
let cancelled = false;
|
|
33659
|
+
const searchCollection = async () => {
|
|
33660
|
+
if (await api.isAuthenticated() && !folder.loading && !cancelled) {
|
|
33661
|
+
try {
|
|
33662
|
+
const response = await cms.api.search.query(
|
|
33663
|
+
`${search} AND _collection:${collectionName}`,
|
|
33664
|
+
{
|
|
33665
|
+
limit: 15,
|
|
33666
|
+
cursor: after
|
|
33667
|
+
}
|
|
33668
|
+
);
|
|
33669
|
+
const docs = await Promise.allSettled(
|
|
33670
|
+
response.results.map((result) => {
|
|
33671
|
+
const [collection2, relativePath2] = result._id.split(":");
|
|
33672
|
+
return api.fetchDocument(collection2, relativePath2, false);
|
|
33673
|
+
})
|
|
33674
|
+
);
|
|
33675
|
+
const edges = docs.filter((p) => {
|
|
33676
|
+
var _a;
|
|
33677
|
+
return p.status === "fulfilled" && !!((_a = p.value) == null ? void 0 : _a.document);
|
|
33678
|
+
}).map((result) => ({ node: result.value.document }));
|
|
33679
|
+
const c = await api.fetchCollection(collectionName, false, "");
|
|
33680
|
+
setCollection({
|
|
33681
|
+
format: collection.format,
|
|
33682
|
+
label: collection.label,
|
|
33683
|
+
name: collectionName,
|
|
33684
|
+
templates: collection.templates,
|
|
33685
|
+
documents: {
|
|
33686
|
+
pageInfo: {
|
|
33687
|
+
hasNextPage: !!response.nextCursor,
|
|
33688
|
+
hasPreviousPage: !!response.prevCursor,
|
|
33689
|
+
startCursor: "",
|
|
33690
|
+
endCursor: response.nextCursor || ""
|
|
33691
|
+
},
|
|
33692
|
+
edges
|
|
33693
|
+
}
|
|
33694
|
+
});
|
|
33695
|
+
} catch (error2) {
|
|
33696
|
+
cms.alerts.error(
|
|
33697
|
+
`[${error2.name}] GetCollection failed: ${error2.message}`
|
|
33698
|
+
);
|
|
33699
|
+
console.error(error2);
|
|
33700
|
+
setCollection(void 0);
|
|
33701
|
+
setError(error2);
|
|
33702
|
+
}
|
|
33703
|
+
setLoading(false);
|
|
33704
|
+
}
|
|
33705
|
+
};
|
|
33706
|
+
if (cancelled)
|
|
33707
|
+
return;
|
|
33708
|
+
setLoading(true);
|
|
33709
|
+
searchCollection();
|
|
33710
|
+
return () => {
|
|
33711
|
+
cancelled = true;
|
|
33712
|
+
};
|
|
33713
|
+
}, [
|
|
33714
|
+
cms,
|
|
33715
|
+
collectionName,
|
|
33716
|
+
folder.loading,
|
|
33717
|
+
folder.fullyQualifiedName,
|
|
33718
|
+
resetState,
|
|
33719
|
+
after,
|
|
33720
|
+
search
|
|
33721
|
+
]);
|
|
33722
|
+
const reFetchCollection = () => setResetSate((x) => x + 1);
|
|
33723
|
+
return { collection, loading, error, reFetchCollection, collectionExtra };
|
|
33724
|
+
};
|
|
33725
|
+
const GetCollection = ({
|
|
33726
|
+
cms,
|
|
33727
|
+
collectionName,
|
|
33728
|
+
folder,
|
|
33729
|
+
includeDocuments = true,
|
|
33730
|
+
startCursor,
|
|
33731
|
+
sortKey,
|
|
33732
|
+
children,
|
|
33733
|
+
filterArgs,
|
|
33734
|
+
search
|
|
33735
|
+
}) => {
|
|
33736
|
+
const navigate = useNavigate();
|
|
33737
|
+
const { collection, loading, error, reFetchCollection, collectionExtra } = search ? useSearchCollection(
|
|
33738
|
+
cms,
|
|
33739
|
+
collectionName,
|
|
33740
|
+
includeDocuments,
|
|
33741
|
+
folder,
|
|
33742
|
+
startCursor || "",
|
|
33743
|
+
search
|
|
33744
|
+
) : useGetCollection(
|
|
33745
|
+
cms,
|
|
33746
|
+
collectionName,
|
|
33747
|
+
includeDocuments,
|
|
33748
|
+
folder,
|
|
33749
|
+
startCursor || "",
|
|
33750
|
+
sortKey,
|
|
33751
|
+
filterArgs
|
|
33752
|
+
) || {};
|
|
33753
|
+
useEffect(() => {
|
|
33754
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i;
|
|
33755
|
+
if (loading)
|
|
33756
|
+
return;
|
|
33757
|
+
const collectionDefinition = cms.api.tina.schema.getCollection(
|
|
33758
|
+
collection.name
|
|
33759
|
+
);
|
|
33760
|
+
const allowCreate = ((_b = (_a = collectionDefinition == null ? void 0 : collectionDefinition.ui) == null ? void 0 : _a.allowedActions) == null ? void 0 : _b.create) ?? true;
|
|
33761
|
+
const allowDelete = ((_d = (_c = collectionDefinition == null ? void 0 : collectionDefinition.ui) == null ? void 0 : _c.allowedActions) == null ? void 0 : _d.delete) ?? true;
|
|
33762
|
+
const collectionResponse = collection;
|
|
33763
|
+
if (!allowCreate && !allowDelete && // Check there is only one document
|
|
33764
|
+
((_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
|
|
33765
|
+
((_i = (_h = (_g = collectionResponse.documents) == null ? void 0 : _g.edges[0]) == null ? void 0 : _h.node) == null ? void 0 : _i.__typename) !== "Folder") {
|
|
33766
|
+
const doc = collectionResponse.documents.edges[0].node;
|
|
33767
|
+
handleNavigate(
|
|
33768
|
+
navigate,
|
|
33769
|
+
cms,
|
|
33770
|
+
collectionResponse,
|
|
33771
|
+
collectionDefinition,
|
|
33772
|
+
doc
|
|
33773
|
+
);
|
|
33774
|
+
}
|
|
33775
|
+
}, [(collection == null ? void 0 : collection.name) || "", loading]);
|
|
33776
|
+
if (error) {
|
|
33777
|
+
return /* @__PURE__ */ React__default.createElement(FullscreenError, null);
|
|
33778
|
+
}
|
|
33779
|
+
if (loading) {
|
|
33780
|
+
return /* @__PURE__ */ React__default.createElement(LoadingPage, null);
|
|
33781
|
+
}
|
|
33782
|
+
return /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, children(collection, loading, reFetchCollection, collectionExtra));
|
|
33783
|
+
};
|
|
32449
33784
|
const ErrorDialog = (props) => {
|
|
32450
33785
|
return /* @__PURE__ */ React__default.createElement(
|
|
32451
33786
|
"div",
|
|
@@ -32768,7 +34103,10 @@ const useGetDocument = (cms, collectionName, relativePath2) => {
|
|
|
32768
34103
|
const fetchDocument = async () => {
|
|
32769
34104
|
if (api.isAuthenticated()) {
|
|
32770
34105
|
try {
|
|
32771
|
-
const response = await api.fetchDocument(
|
|
34106
|
+
const response = await api.fetchDocument(
|
|
34107
|
+
collectionName,
|
|
34108
|
+
relativePath2
|
|
34109
|
+
);
|
|
32772
34110
|
setDocument(response.document);
|
|
32773
34111
|
} catch (error2) {
|
|
32774
34112
|
cms.alerts.error(
|
|
@@ -32986,6 +34324,12 @@ const RenderForm = ({
|
|
|
32986
34324
|
), /* @__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 }))
|
|
32987
34325
|
), activeForm && /* @__PURE__ */ React__default.createElement(FormBuilder, { form: activeForm, onPristineChange: setFormIsPristine }));
|
|
32988
34326
|
};
|
|
34327
|
+
const DashboardPage = () => {
|
|
34328
|
+
return /* @__PURE__ */ React__default.createElement(GetCMS, null, (cms) => {
|
|
34329
|
+
var _a, _b;
|
|
34330
|
+
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.")));
|
|
34331
|
+
});
|
|
34332
|
+
};
|
|
32989
34333
|
const ScreenPage = () => {
|
|
32990
34334
|
const { screenName } = useParams();
|
|
32991
34335
|
return /* @__PURE__ */ React__default.createElement(GetCMS, null, (cms) => {
|
|
@@ -33068,7 +34412,7 @@ const IndexingPage = () => {
|
|
|
33068
34412
|
} catch {
|
|
33069
34413
|
cms.alerts.error("Branch indexing failed.");
|
|
33070
34414
|
setErrorMessage(
|
|
33071
|
-
'Branch indexing failed, please check the
|
|
34415
|
+
'Branch indexing failed, please check the TinaCloud dashboard for more information. To try again chick "re-index" on the branch in the dashboard.'
|
|
33072
34416
|
);
|
|
33073
34417
|
setState("error");
|
|
33074
34418
|
}
|
|
@@ -33112,15 +34456,24 @@ const IndexingPage = () => {
|
|
|
33112
34456
|
}
|
|
33113
34457
|
}
|
|
33114
34458
|
if (state === "creatingPR") {
|
|
33115
|
-
|
|
33116
|
-
|
|
33117
|
-
|
|
33118
|
-
|
|
33119
|
-
|
|
33120
|
-
|
|
33121
|
-
|
|
33122
|
-
|
|
33123
|
-
|
|
34459
|
+
try {
|
|
34460
|
+
const foo = await tinaApi.createPullRequest({
|
|
34461
|
+
baseBranch,
|
|
34462
|
+
branch,
|
|
34463
|
+
title: `${branch.replace("tina/", "").replace("-", " ")} (PR from TinaCMS)`
|
|
34464
|
+
});
|
|
34465
|
+
console.log("PR created", foo);
|
|
34466
|
+
cms.alerts.success("Pull request created.");
|
|
34467
|
+
localStorage.setItem("tina.createBranchState", "done");
|
|
34468
|
+
setState("done");
|
|
34469
|
+
} catch (e) {
|
|
34470
|
+
console.error(e);
|
|
34471
|
+
cms.alerts.error("Failed to create PR");
|
|
34472
|
+
setErrorMessage(
|
|
34473
|
+
"Failed to create PR, please try again. If the problem persists please contact support."
|
|
34474
|
+
);
|
|
34475
|
+
setState("error");
|
|
34476
|
+
}
|
|
33124
34477
|
}
|
|
33125
34478
|
if (state === "done") {
|
|
33126
34479
|
window.location.href = back;
|
|
@@ -33227,7 +34580,7 @@ const CheckSchema = ({
|
|
|
33227
34580
|
);
|
|
33228
34581
|
}
|
|
33229
34582
|
}).catch((e) => {
|
|
33230
|
-
if (e.message.includes("has not been indexed by
|
|
34583
|
+
if (e.message.includes("has not been indexed by TinaCloud")) {
|
|
33231
34584
|
setSchemaMissingError(true);
|
|
33232
34585
|
} else {
|
|
33233
34586
|
cms.alerts.error(`Unexpected error checking schema: ${e}`);
|