tinacms 0.0.0-8eeb2df-20241010045955 → 0.0.0-97d38ab-20241104224426

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -6,28 +6,29 @@ var __publicField = (obj, key, value) => {
6
6
  };
7
7
  import { z } from "zod";
8
8
  import * as React from "react";
9
- import React__default, { useState, useCallback, createContext, forwardRef, useContext, useEffect, useMemo, startTransition, useRef, createElement, Component } from "react";
9
+ import React__default, { useState, useCallback, useEffect, useRef, createContext, forwardRef, useContext, useMemo, startTransition, createElement, Component } from "react";
10
10
  import { createPortal, findDOMNode } from "react-dom";
11
+ import { withRef, cn as cn$1, withVariants, withProps, withCn, createPrimitiveElement } from "@udecode/cn";
11
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, createBoldPlugin, createItalicPlugin, createUnderlinePlugin, createCodePlugin, createListPlugin, createIndentListPlugin, createHorizontalRulePlugin, createNodeIdPlugin, createTablePlugin, getListItemEntry, useListToolbarButtonState, useListToolbarButton } from "@udecode/plate";
12
- import { useSelected, useReadOnly, ReactEditor } from "slate-react";
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, insertEmptyElement, usePlateSelectors, useEventEditorSelectors, PortalBody, useFormInputProps, createPlugins, Plate } from "@udecode/plate-common";
13
14
  import { ELEMENT_SLASH_INPUT, createSlashPlugin } from "@udecode/plate-slash-command";
14
- import { cn as cn$1, withRef, withVariants, withCn, withProps, createPrimitiveElement } from "@udecode/cn";
15
- import { useComposedRef, useEditorRef, findNodePath, getPointBefore, createPointRef, insertText, moveSelection, PlateElement, toggleNodeType, PlateLeaf, isCollapsed, getPointAfter, insertNodes, ELEMENT_DEFAULT, focusEditor, setNodes, isElement, useElement, useRemoveNodeButton, useEditorSelector, isSelectionExpanded, withHOC, createPluginFactory, normalizeEditor, getBlockAbove, queryNode, getParentNode, isType, someNode, isSelectionAtBlockStart, setElements, insertNode, getPluginType, isBlock, isBlockAboveEmpty, findNode, PlateContent, useMarkToolbarButtonState, useMarkToolbarButton, useEditorState, getNodeEntries, collapseSelection, usePlateSelectors, useEventEditorSelectors, PortalBody, useFormInputProps, createPlugins, Plate } from "@udecode/plate-common";
16
- 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";
15
+ import { useSelected, useReadOnly, ReactEditor } from "slate-react";
16
+ import { useCodeBlockElementState, useCodeSyntaxLeaf, ELEMENT_CODE_BLOCK as ELEMENT_CODE_BLOCK$1 } from "@udecode/plate-code-block";
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";
17
19
  import { cva } from "class-variance-authority";
18
- import { 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, Eye, Moon, SunMedium, Twitter } from "lucide-react";
19
- import { useComboboxContext, Combobox, useComboboxStore, ComboboxProvider, Portal, ComboboxPopover, ComboboxItem } from "@ariakit/react";
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
+ import mermaid from "mermaid";
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$1, useComboboxStore, ComboboxProvider, Portal, ComboboxPopover, ComboboxItem } from "@ariakit/react";
20
24
  import { useHTMLInputCursorState, useComboboxInput, filterWords } from "@udecode/plate-combobox";
21
- import { useCodeSyntaxLeaf, useCodeBlockElementState, ELEMENT_CODE_BLOCK as ELEMENT_CODE_BLOCK$1 } from "@udecode/plate-code-block";
22
- import MonacoEditor, { loader, useMonaco } from "@monaco-editor/react";
23
- 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";
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
+ import { ResizeHandle as ResizeHandle$1 } from "@udecode/plate-resizable";
24
27
  import * as PopoverPrimitive from "@radix-ui/react-popover";
25
28
  import { PopoverAnchor } from "@radix-ui/react-popover";
26
- import { useTableBordersDropdownMenuContentState, useTableMergeState, TableProvider, useTableElementState, useTableElement, mergeTableCells, unmergeTableCells, useTableCellElementState, useTableCellElement, useTableCellElementResizableState, useTableCellElementResizable, ELEMENT_TABLE as ELEMENT_TABLE$1, getTableColumnCount, insertTable, deleteTable, insertTableColumn, deleteColumn, insertTableRow, deleteRow } from "@udecode/plate-table";
27
29
  import { Slot } from "@radix-ui/react-slot";
28
30
  import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu";
29
31
  import * as SeparatorPrimitive from "@radix-ui/react-separator";
30
- import { ResizeHandle as ResizeHandle$1 } from "@udecode/plate-resizable";
31
32
  import arrayMutators from "final-form-arrays";
32
33
  import setFieldData from "final-form-set-field-data";
33
34
  import { FORM_ERROR, createForm, getIn } from "final-form";
@@ -800,6 +801,22 @@ function wrapFieldsWithMeta(Field2) {
800
801
  );
801
802
  };
802
803
  }
804
+ function wrapFieldWithNoHeader(Field2) {
805
+ return (props) => {
806
+ return /* @__PURE__ */ React.createElement(
807
+ FieldMeta,
808
+ {
809
+ name: props.input.name,
810
+ label: false,
811
+ description: "",
812
+ error: props.meta.error,
813
+ index: props.index,
814
+ tinaForm: props.tinaForm
815
+ },
816
+ /* @__PURE__ */ React.createElement(Field2, { ...props })
817
+ );
818
+ };
819
+ }
803
820
  function wrapFieldWithError(Field2) {
804
821
  return (props) => {
805
822
  return /* @__PURE__ */ React.createElement(
@@ -876,9 +893,9 @@ const FieldDescription = ({
876
893
  "span",
877
894
  {
878
895
  className: `block font-sans text-xs italic font-light text-gray-400 pt-0.5 whitespace-normal m-0 ${className}`,
879
- ...props
880
- },
881
- children
896
+ ...props,
897
+ dangerouslySetInnerHTML: { __html: children }
898
+ }
882
899
  );
883
900
  };
884
901
  const FieldError = ({
@@ -908,6 +925,20 @@ const useEditorContext = () => {
908
925
  const useTemplates = () => {
909
926
  return React__default.useContext(EditorContext);
910
927
  };
928
+ const BlockquoteElement = withRef(
929
+ ({ children, className, ...props }, ref) => {
930
+ return /* @__PURE__ */ React__default.createElement(
931
+ PlateElement,
932
+ {
933
+ asChild: true,
934
+ className: cn$1("my-1 border-l-2 pl-6 italic", className),
935
+ ref,
936
+ ...props
937
+ },
938
+ /* @__PURE__ */ React__default.createElement("blockquote", null, children)
939
+ );
940
+ }
941
+ );
911
942
  function classNames$1(...classes) {
912
943
  return classes.filter(Boolean).join(" ");
913
944
  }
@@ -917,6 +948,503 @@ const uuid = () => {
917
948
  (c) => (c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16)
918
949
  );
919
950
  };
951
+ function ChevronDownIcon(props, svgRef) {
952
+ return /* @__PURE__ */ React.createElement("svg", Object.assign({
953
+ xmlns: "http://www.w3.org/2000/svg",
954
+ viewBox: "0 0 20 20",
955
+ fill: "currentColor",
956
+ "aria-hidden": "true",
957
+ ref: svgRef
958
+ }, props), /* @__PURE__ */ React.createElement("path", {
959
+ fillRule: "evenodd",
960
+ d: "M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z",
961
+ clipRule: "evenodd"
962
+ }));
963
+ }
964
+ const ForwardRef = React.forwardRef(ChevronDownIcon);
965
+ const ChevronDownIcon$1 = ForwardRef;
966
+ const Autocomplete = ({
967
+ value,
968
+ onChange,
969
+ defaultQuery,
970
+ items: items2
971
+ }) => {
972
+ const [query, setQuery] = React__default.useState(defaultQuery ?? "");
973
+ const filteredItems = React__default.useMemo(() => {
974
+ try {
975
+ const reFilter = new RegExp(query, "i");
976
+ const _items = items2.filter((item) => reFilter.test(item.label));
977
+ if (_items.length === 0)
978
+ return items2;
979
+ return _items;
980
+ } catch (err) {
981
+ return items2;
982
+ }
983
+ }, [items2, query]);
984
+ return /* @__PURE__ */ React__default.createElement(
985
+ Combobox,
986
+ {
987
+ value,
988
+ onChange,
989
+ as: "div",
990
+ className: "relative inline-block text-left z-20"
991
+ },
992
+ /* @__PURE__ */ React__default.createElement("div", { className: "mt-1" }, /* @__PURE__ */ React__default.createElement("div", { className: "relative w-full cursor-default overflow-hidden rounded-lg bg-white text-left shadow-md sm:text-sm" }, /* @__PURE__ */ React__default.createElement(
993
+ ComboboxInput,
994
+ {
995
+ className: "w-full border-none py-2 pl-3 pr-10 text-sm leading-5 text-gray-900 focus:ring-0 focus:outline-none focus-visible:ring-2 focus-visible:ring-white focus-visible:ring-opacity-75 focus-visible:ring-offset-2 focus-visible:ring-offset-teal-300",
996
+ displayValue: (item) => (item == null ? void 0 : item.label) ?? "Plain Text",
997
+ onChange: (event) => setQuery(event.target.value),
998
+ onClick: (ev) => ev.stopPropagation()
999
+ }
1000
+ ), /* @__PURE__ */ React__default.createElement(ComboboxButton, { className: "absolute inset-y-0 right-0 flex items-center pr-2" }, /* @__PURE__ */ React__default.createElement(
1001
+ ChevronDownIcon$1,
1002
+ {
1003
+ className: "h-5 w-5 text-gray-400",
1004
+ "aria-hidden": "true"
1005
+ }
1006
+ )))),
1007
+ /* @__PURE__ */ React__default.createElement(
1008
+ Transition,
1009
+ {
1010
+ enter: "transition ease-out duration-100",
1011
+ enterFrom: "transform opacity-0 scale-95",
1012
+ enterTo: "transform opacity-100 scale-100",
1013
+ leave: "transition ease-in duration-75",
1014
+ leaveFrom: "transform opacity-100 scale-100",
1015
+ leaveTo: "transform opacity-0 scale-95"
1016
+ },
1017
+ /* @__PURE__ */ React__default.createElement(ComboboxOptions, { className: "origin-top-right absolute right-0 mt-1 w-full max-h-[300px] overflow-y-auto rounded-md shadow-lg bg-white ring-1 ring-black ring-opacity-5 focus:outline-none" }, filteredItems.map((item) => /* @__PURE__ */ React__default.createElement(ComboboxOption, { key: item.key, value: item }, ({ focus }) => /* @__PURE__ */ React__default.createElement(
1018
+ "button",
1019
+ {
1020
+ className: classNames$1(
1021
+ focus ? "bg-gray-100 text-gray-900" : "text-gray-700",
1022
+ "block px-4 py-2 text-xs w-full text-right"
1023
+ )
1024
+ },
1025
+ item.render(item)
1026
+ ))))
1027
+ )
1028
+ );
1029
+ };
1030
+ loader.config({
1031
+ paths: { vs: "https://cdn.jsdelivr.net/npm/monaco-editor@0.31.1/min/vs" }
1032
+ });
1033
+ let retryCount = 0;
1034
+ const retryFocus = (ref) => {
1035
+ if (ref.current) {
1036
+ ref.current.focus();
1037
+ } else {
1038
+ if (retryCount < 30) {
1039
+ setTimeout(() => {
1040
+ retryCount = retryCount + 1;
1041
+ retryFocus(ref);
1042
+ }, 100);
1043
+ }
1044
+ }
1045
+ };
1046
+ const MINIMUM_HEIGHT = 75;
1047
+ const CodeBlock = ({
1048
+ attributes,
1049
+ editor,
1050
+ element,
1051
+ language: restrictLanguage,
1052
+ onChangeCallback,
1053
+ defaultValue,
1054
+ ...props
1055
+ }) => {
1056
+ const [navigateAway, setNavigateAway] = React__default.useState(null);
1057
+ const monaco = useMonaco();
1058
+ const monacoEditorRef = React__default.useRef(null);
1059
+ const selected = useSelected();
1060
+ const [height, setHeight] = React__default.useState(MINIMUM_HEIGHT);
1061
+ React__default.useEffect(() => {
1062
+ if (selected && isCollapsed(editor.selection)) {
1063
+ retryFocus(monacoEditorRef);
1064
+ }
1065
+ }, [selected, monacoEditorRef.current]);
1066
+ const value = element.value || "";
1067
+ if (typeof value !== "string") {
1068
+ throw new Error("Element must be of type string for code block");
1069
+ }
1070
+ const language = restrictLanguage || element.lang;
1071
+ const id = React__default.useMemo(() => uuid(), []);
1072
+ const languages = React__default.useMemo(() => {
1073
+ const defaultLangSet = { "": "plain text" };
1074
+ if (!monaco)
1075
+ return defaultLangSet;
1076
+ return monaco.languages.getLanguages().reduce((ac, cv) => {
1077
+ if (cv.id === "plaintext")
1078
+ return ac;
1079
+ return { ...ac, [cv.id]: cv.id };
1080
+ }, defaultLangSet);
1081
+ }, [monaco]);
1082
+ React__default.useEffect(() => {
1083
+ if (monaco) {
1084
+ monaco.languages.typescript.typescriptDefaults.setEagerModelSync(true);
1085
+ monaco.languages.typescript.typescriptDefaults.setDiagnosticsOptions({
1086
+ // disable errors
1087
+ noSemanticValidation: true,
1088
+ noSyntaxValidation: true
1089
+ });
1090
+ }
1091
+ }, [monaco]);
1092
+ const items2 = Object.entries(languages).map(([key, label]) => ({
1093
+ key,
1094
+ label,
1095
+ render: (item) => item.label
1096
+ }));
1097
+ const currentItem = React__default.useMemo(() => {
1098
+ return items2.find((item) => item.key === language) ?? {
1099
+ key: "",
1100
+ label: "Plain Text"
1101
+ };
1102
+ }, [items2, language]);
1103
+ React__default.useEffect(() => {
1104
+ if (navigateAway) {
1105
+ setNavigateAway(null);
1106
+ switch (navigateAway) {
1107
+ case "remove":
1108
+ {
1109
+ focusEditor(editor);
1110
+ setNodes(
1111
+ editor,
1112
+ {
1113
+ type: "p",
1114
+ children: [{ text: "" }],
1115
+ lang: void 0,
1116
+ value: void 0
1117
+ },
1118
+ {
1119
+ match: (n) => {
1120
+ if (isElement(n) && n.type === element.type) {
1121
+ return true;
1122
+ }
1123
+ }
1124
+ }
1125
+ );
1126
+ }
1127
+ break;
1128
+ case "insertNext":
1129
+ {
1130
+ insertNodes(
1131
+ editor,
1132
+ [
1133
+ {
1134
+ type: ELEMENT_DEFAULT,
1135
+ children: [{ text: "" }],
1136
+ lang: void 0,
1137
+ value: void 0
1138
+ }
1139
+ ],
1140
+ { select: true }
1141
+ );
1142
+ focusEditor(editor);
1143
+ }
1144
+ break;
1145
+ case "up":
1146
+ {
1147
+ const path = findNodePath(editor, element);
1148
+ if (!path) {
1149
+ return;
1150
+ }
1151
+ const previousNodePath = getPointBefore(editor, path);
1152
+ if (!previousNodePath) {
1153
+ focusEditor(editor);
1154
+ insertNodes(
1155
+ editor,
1156
+ [
1157
+ {
1158
+ type: ELEMENT_DEFAULT,
1159
+ children: [{ text: "" }],
1160
+ lang: void 0,
1161
+ value: void 0
1162
+ }
1163
+ ],
1164
+ // Insert a new node at the current path, resulting in the code_block
1165
+ // moving down one block
1166
+ { at: path, select: true }
1167
+ );
1168
+ return;
1169
+ }
1170
+ focusEditor(editor, previousNodePath);
1171
+ }
1172
+ break;
1173
+ case "down": {
1174
+ const path = findNodePath(editor, element);
1175
+ if (!path) {
1176
+ return;
1177
+ }
1178
+ const nextNodePath = getPointAfter(editor, path);
1179
+ if (!nextNodePath) {
1180
+ insertNodes(
1181
+ editor,
1182
+ [
1183
+ {
1184
+ type: ELEMENT_DEFAULT,
1185
+ children: [{ text: "" }],
1186
+ lang: void 0,
1187
+ value: void 0
1188
+ }
1189
+ ],
1190
+ { select: true }
1191
+ );
1192
+ focusEditor(editor);
1193
+ } else {
1194
+ focusEditor(editor, nextNodePath);
1195
+ }
1196
+ break;
1197
+ }
1198
+ }
1199
+ }
1200
+ }, [navigateAway]);
1201
+ function handleEditorDidMount(monacoEditor, monaco2) {
1202
+ monacoEditorRef.current = monacoEditor;
1203
+ monacoEditor.onDidContentSizeChange(() => {
1204
+ setHeight(
1205
+ monacoEditor.getContentHeight() > MINIMUM_HEIGHT ? monacoEditor.getContentHeight() : MINIMUM_HEIGHT
1206
+ );
1207
+ monacoEditor.layout();
1208
+ });
1209
+ setNodes(editor, { value: defaultValue, lang: language });
1210
+ monacoEditor.addCommand(monaco2.KeyMod.Shift | monaco2.KeyCode.Enter, () => {
1211
+ if (monacoEditor.hasTextFocus()) {
1212
+ setNavigateAway("insertNext");
1213
+ }
1214
+ });
1215
+ monacoEditor.onKeyDown((l) => {
1216
+ if (l.code === "ArrowUp") {
1217
+ const selection = monacoEditor.getSelection();
1218
+ if (selection.endLineNumber === 1 && selection.startLineNumber === 1) {
1219
+ setNavigateAway("up");
1220
+ }
1221
+ }
1222
+ if (l.code === "ArrowDown") {
1223
+ const selection = monacoEditor.getSelection();
1224
+ const totalLines = monacoEditor.getModel().getLineCount();
1225
+ if (selection.endLineNumber === totalLines && selection.startLineNumber === totalLines) {
1226
+ setNavigateAway("down");
1227
+ }
1228
+ }
1229
+ if (l.code === "Backspace") {
1230
+ const selection = monacoEditor.getSelection();
1231
+ if (selection.endColumn === 1 && selection.endLineNumber === 1 && selection.positionColumn === 1 && selection.positionLineNumber === 1 && selection.selectionStartColumn === 1 && selection.selectionStartLineNumber === 1 && selection.startColumn === 1 && selection.startLineNumber === 1) {
1232
+ setNavigateAway("remove");
1233
+ }
1234
+ }
1235
+ });
1236
+ }
1237
+ return /* @__PURE__ */ React__default.createElement(
1238
+ "div",
1239
+ {
1240
+ ...attributes,
1241
+ className: "relative mb-2 mt-0.5 rounded-lg shadow-md p-2 border-gray-200 border"
1242
+ },
1243
+ /* @__PURE__ */ React__default.createElement("style", null, `.monaco-editor .editor-widget {
1244
+ display: none !important;
1245
+ visibility: hidden !important;
1246
+ }`),
1247
+ props.children,
1248
+ /* @__PURE__ */ React__default.createElement("div", { contentEditable: false }, !restrictLanguage && /* @__PURE__ */ React__default.createElement("div", { className: "flex justify-between pb-2" }, /* @__PURE__ */ React__default.createElement("div", null), /* @__PURE__ */ React__default.createElement(
1249
+ Autocomplete,
1250
+ {
1251
+ items: items2,
1252
+ value: currentItem,
1253
+ defaultQuery: "plaintext",
1254
+ onChange: (item) => setNodes(editor, { lang: item.key })
1255
+ }
1256
+ )), /* @__PURE__ */ React__default.createElement("div", { style: { height: `${height}px` } }, /* @__PURE__ */ React__default.createElement(
1257
+ MonacoEditor,
1258
+ {
1259
+ path: id,
1260
+ onMount: handleEditorDidMount,
1261
+ options: {
1262
+ scrollBeyondLastLine: false,
1263
+ // automaticLayout: true,
1264
+ tabSize: 2,
1265
+ disableLayerHinting: true,
1266
+ accessibilitySupport: "off",
1267
+ codeLens: false,
1268
+ wordWrap: "on",
1269
+ minimap: {
1270
+ enabled: false
1271
+ },
1272
+ fontSize: 14,
1273
+ lineHeight: 2,
1274
+ formatOnPaste: true,
1275
+ lineNumbers: "off",
1276
+ formatOnType: true,
1277
+ fixedOverflowWidgets: true,
1278
+ // Takes too much horizontal space for iframe
1279
+ folding: false,
1280
+ renderLineHighlight: "none",
1281
+ scrollbar: {
1282
+ verticalScrollbarSize: 1,
1283
+ horizontalScrollbarSize: 1,
1284
+ // https://github.com/microsoft/monaco-editor/issues/2007#issuecomment-644425664
1285
+ alwaysConsumeMouseWheel: false
1286
+ }
1287
+ },
1288
+ language: String(language),
1289
+ value: String(element.value),
1290
+ onChange: (value2) => {
1291
+ onChangeCallback == null ? void 0 : onChangeCallback(value2);
1292
+ setNodes(editor, { value: value2, lang: language });
1293
+ }
1294
+ }
1295
+ )))
1296
+ );
1297
+ };
1298
+ const CodeBlockElement = withRef(
1299
+ ({ className, ...props }, ref) => {
1300
+ const { element } = props;
1301
+ const state = useCodeBlockElementState({ element });
1302
+ return /* @__PURE__ */ React__default.createElement(
1303
+ PlateElement,
1304
+ {
1305
+ className: cn$1("relative py-1", state.className, className),
1306
+ ref,
1307
+ ...props
1308
+ },
1309
+ /* @__PURE__ */ React__default.createElement(CodeBlock, { ...props })
1310
+ );
1311
+ }
1312
+ );
1313
+ const CodeLeaf = withRef(
1314
+ ({ children, className, ...props }, ref) => {
1315
+ return /* @__PURE__ */ React__default.createElement(
1316
+ PlateLeaf,
1317
+ {
1318
+ asChild: true,
1319
+ className: cn$1(
1320
+ "whitespace-pre-wrap rounded-md bg-muted px-[0.3em] py-[0.2em] font-mono text-sm",
1321
+ className
1322
+ ),
1323
+ ref,
1324
+ ...props
1325
+ },
1326
+ /* @__PURE__ */ React__default.createElement("code", null, children)
1327
+ );
1328
+ }
1329
+ );
1330
+ const CodeLineElement = withRef((props, ref) => /* @__PURE__ */ React__default.createElement(PlateElement, { ref, ...props }));
1331
+ const CodeSyntaxLeaf = withRef(
1332
+ ({ children, ...props }, ref) => {
1333
+ const { leaf } = props;
1334
+ const { tokenProps } = useCodeSyntaxLeaf({ leaf });
1335
+ return /* @__PURE__ */ React__default.createElement(PlateLeaf, { ref, ...props }, /* @__PURE__ */ React__default.createElement("span", { ...tokenProps }, children));
1336
+ }
1337
+ );
1338
+ const listVariants = cva("m-0 ps-6", {
1339
+ variants: {
1340
+ variant: {
1341
+ ol: "list-decimal",
1342
+ ul: "list-disc [&_ul]:list-[circle] [&_ul_ul]:list-[square]"
1343
+ }
1344
+ }
1345
+ });
1346
+ const ListElementVariants = withVariants(PlateElement, listVariants, [
1347
+ "variant"
1348
+ ]);
1349
+ const ListElement = withRef(
1350
+ ({ children, variant = "ul", ...props }, ref) => {
1351
+ const Component2 = variant;
1352
+ return /* @__PURE__ */ React__default.createElement(ListElementVariants, { asChild: true, ref, variant, ...props }, /* @__PURE__ */ React__default.createElement(Component2, null, children));
1353
+ }
1354
+ );
1355
+ const ELEMENT_MERMAID = "mermaid";
1356
+ const createMermaidPlugin = createPluginFactory({
1357
+ isElement: true,
1358
+ isVoid: true,
1359
+ isInline: false,
1360
+ key: ELEMENT_MERMAID
1361
+ });
1362
+ const MermaidElementWithRef = ({ config }) => {
1363
+ const mermaidRef = useRef(null);
1364
+ useEffect(() => {
1365
+ if (mermaidRef.current) {
1366
+ mermaid.initialize({ startOnLoad: true });
1367
+ mermaid.init();
1368
+ }
1369
+ }, [config]);
1370
+ return /* @__PURE__ */ React__default.createElement("div", { contentEditable: false, className: "border-border border-b" }, /* @__PURE__ */ React__default.createElement("div", { ref: mermaidRef }, /* @__PURE__ */ React__default.createElement("pre", { className: "mermaid not-tina-prose" }, config)));
1371
+ };
1372
+ const Bubble = ({ children }) => {
1373
+ return /* @__PURE__ */ React__default.createElement("div", { className: "bg-blue-600 rounded-full p-2 transition-transform duration-200 ease-in-out hover:scale-110" }, children);
1374
+ };
1375
+ const ErrorMsg = ({ error }) => {
1376
+ if (error) {
1377
+ return /* @__PURE__ */ React__default.createElement(
1378
+ "div",
1379
+ {
1380
+ contentEditable: false,
1381
+ className: "font-mono bg-red-600 text-white p-2 rounded-md cursor-default"
1382
+ },
1383
+ error
1384
+ );
1385
+ }
1386
+ return null;
1387
+ };
1388
+ const DEFAULT_MERMAID_CONFIG = `%% This won't render without implementing a rendering engine (e.g. mermaid on npm)
1389
+ flowchart TD
1390
+ id1(this is an example flow diagram)
1391
+ --> id2(modify me to see changes!)
1392
+ id2
1393
+ --> id3(Click the top button to preview the changes)
1394
+ --> id4(Learn about mermaid diagrams - mermaid.js.org)`;
1395
+ const MermaidElement = withRef(
1396
+ ({ children, nodeProps, element, ...props }, ref) => {
1397
+ const [mermaidConfig, setMermaidConfig] = useState(
1398
+ element.value || DEFAULT_MERMAID_CONFIG
1399
+ );
1400
+ const [isEditing, setIsEditing] = useState(
1401
+ mermaidConfig === DEFAULT_MERMAID_CONFIG || false
1402
+ );
1403
+ const [mermaidError, setMermaidError] = useState(null);
1404
+ const node = {
1405
+ type: ELEMENT_MERMAID,
1406
+ value: mermaidConfig,
1407
+ children: [{ type: "text", text: "" }]
1408
+ };
1409
+ useEffect(() => {
1410
+ if (mermaid.parse(mermaidConfig)) {
1411
+ setMermaidError(null);
1412
+ }
1413
+ }, [mermaidConfig]);
1414
+ mermaid.parseError = (err) => {
1415
+ setMermaidError(
1416
+ String(err.message) || "An error occurred while parsing the diagram."
1417
+ );
1418
+ };
1419
+ return /* @__PURE__ */ React__default.createElement(PlateElement, { element, ref, ...props }, /* @__PURE__ */ React__default.createElement("div", { className: "relative group" }, /* @__PURE__ */ React__default.createElement("div", { className: "absolute top-2 right-2 z-10 space-y-2 opacity-0 group-hover:opacity-100 transition-opacity duration-200 ease-in-out" }, /* @__PURE__ */ React__default.createElement(Bubble, null, isEditing ? /* @__PURE__ */ React__default.createElement(
1420
+ Eye,
1421
+ {
1422
+ className: "w-5 h-5 fill-white cursor-pointer",
1423
+ onClick: () => {
1424
+ setIsEditing(!isEditing);
1425
+ }
1426
+ }
1427
+ ) : /* @__PURE__ */ React__default.createElement(
1428
+ SquarePen,
1429
+ {
1430
+ className: "w-5 h-5 fill-white cursor-pointer",
1431
+ onClick: () => {
1432
+ setIsEditing(!isEditing);
1433
+ }
1434
+ }
1435
+ ))), isEditing ? /* @__PURE__ */ React__default.createElement(
1436
+ CodeBlock,
1437
+ {
1438
+ children: "",
1439
+ language: "yaml",
1440
+ ...props,
1441
+ element: node,
1442
+ defaultValue: mermaidConfig,
1443
+ onChangeCallback: (value) => setMermaidConfig(value)
1444
+ }
1445
+ ) : /* @__PURE__ */ React__default.createElement(MermaidElementWithRef, { config: mermaidConfig })), children, /* @__PURE__ */ React__default.createElement(ErrorMsg, { error: mermaidError }));
1446
+ }
1447
+ );
920
1448
  const RawMarkdown = () => {
921
1449
  return /* @__PURE__ */ React__default.createElement(
922
1450
  "svg",
@@ -935,6 +1463,29 @@ const RawMarkdown = () => {
935
1463
  /* @__PURE__ */ React__default.createElement("path", { d: "M22.27 19.385H1.73A1.73 1.73 0 010 17.655V6.345a1.73 1.73 0 011.73-1.73h20.54A1.73 1.73 0 0124 6.345v11.308a1.73 1.73 0 01-1.73 1.731zM5.769 15.923v-4.5l2.308 2.885 2.307-2.885v4.5h2.308V8.078h-2.308l-2.307 2.885-2.308-2.885H3.46v7.847zM21.232 12h-2.309V8.077h-2.307V12h-2.308l3.461 4.039z" })
936
1464
  );
937
1465
  };
1466
+ const MermaidIcon = () => /* @__PURE__ */ React__default.createElement(
1467
+ "svg",
1468
+ {
1469
+ width: "100%",
1470
+ height: "100%",
1471
+ viewBox: "0 0 491 491",
1472
+ version: "1.1",
1473
+ xmlns: "http://www.w3.org/2000/svg",
1474
+ fillRule: "evenodd",
1475
+ clipRule: "evenodd",
1476
+ strokeLinejoin: "round",
1477
+ strokeMiterlimit: 2
1478
+ },
1479
+ /* @__PURE__ */ React__default.createElement("path", { d: "M490.16,84.61C490.16,37.912 452.248,0 405.55,0L84.61,0C37.912,0 0,37.912 0,84.61L0,405.55C0,452.248 37.912,490.16 84.61,490.16L405.55,490.16C452.248,490.16 490.16,452.248 490.16,405.55L490.16,84.61Z" }),
1480
+ /* @__PURE__ */ React__default.createElement(
1481
+ "path",
1482
+ {
1483
+ d: "M407.48,111.18C335.587,108.103 269.573,152.338 245.08,220C220.587,152.338 154.573,108.103 82.68,111.18C80.285,168.229 107.577,222.632 154.74,254.82C178.908,271.419 193.35,298.951 193.27,328.27L193.27,379.13L296.9,379.13L296.9,328.27C296.816,298.953 311.255,271.42 335.42,254.82C382.596,222.644 409.892,168.233 407.48,111.18Z",
1484
+ fill: "white",
1485
+ fillRule: "nonzero"
1486
+ }
1487
+ )
1488
+ );
938
1489
  const borderAll = (props) => /* @__PURE__ */ React__default.createElement(
939
1490
  "svg",
940
1491
  {
@@ -1175,6 +1726,7 @@ const Icons = {
1175
1726
  clear: X,
1176
1727
  close: X,
1177
1728
  // code: Code2,
1729
+ paint: PaintBucket,
1178
1730
  codeblock: FileCode,
1179
1731
  color: Baseline,
1180
1732
  column: RectangleVertical,
@@ -1200,6 +1752,7 @@ const Icons = {
1200
1752
  lineHeight: WrapText,
1201
1753
  // link: Link2,
1202
1754
  minus: Minus,
1755
+ mermaid: MermaidIcon,
1203
1756
  more: MoreHorizontal,
1204
1757
  // ol: ListOrdered,
1205
1758
  outdent: Outdent,
@@ -1610,7 +2163,7 @@ const InlineComboboxInput = forwardRef(({ className, ...props }, propRef) => {
1610
2163
  },
1611
2164
  value || "​"
1612
2165
  ), /* @__PURE__ */ React__default.createElement(
1613
- Combobox,
2166
+ Combobox$1,
1614
2167
  {
1615
2168
  autoSelect: true,
1616
2169
  className: cn$1(
@@ -1770,782 +2323,6 @@ const SlashInputElement = withRef(
1770
2323
  );
1771
2324
  }
1772
2325
  );
1773
- const listVariants = cva("m-0 ps-6", {
1774
- variants: {
1775
- variant: {
1776
- ol: "list-decimal",
1777
- ul: "list-disc [&_ul]:list-[circle] [&_ul_ul]:list-[square]"
1778
- }
1779
- }
1780
- });
1781
- const ListElementVariants = withVariants(PlateElement, listVariants, [
1782
- "variant"
1783
- ]);
1784
- const ListElement = withRef(
1785
- ({ children, variant = "ul", ...props }, ref) => {
1786
- const Component2 = variant;
1787
- return /* @__PURE__ */ React__default.createElement(ListElementVariants, { asChild: true, ref, variant, ...props }, /* @__PURE__ */ React__default.createElement(Component2, null, children));
1788
- }
1789
- );
1790
- const BlockquoteElement = withRef(
1791
- ({ children, className, ...props }, ref) => {
1792
- return /* @__PURE__ */ React__default.createElement(
1793
- PlateElement,
1794
- {
1795
- asChild: true,
1796
- className: cn$1("my-1 border-l-2 pl-6 italic", className),
1797
- ref,
1798
- ...props
1799
- },
1800
- /* @__PURE__ */ React__default.createElement("blockquote", null, children)
1801
- );
1802
- }
1803
- );
1804
- const CodeLeaf = withRef(
1805
- ({ children, className, ...props }, ref) => {
1806
- return /* @__PURE__ */ React__default.createElement(
1807
- PlateLeaf,
1808
- {
1809
- asChild: true,
1810
- className: cn$1(
1811
- "whitespace-pre-wrap rounded-md bg-muted px-[0.3em] py-[0.2em] font-mono text-sm",
1812
- className
1813
- ),
1814
- ref,
1815
- ...props
1816
- },
1817
- /* @__PURE__ */ React__default.createElement("code", null, children)
1818
- );
1819
- }
1820
- );
1821
- const CodeLineElement = withRef((props, ref) => /* @__PURE__ */ React__default.createElement(PlateElement, { ref, ...props }));
1822
- const CodeSyntaxLeaf = withRef(
1823
- ({ children, ...props }, ref) => {
1824
- const { leaf } = props;
1825
- const { tokenProps } = useCodeSyntaxLeaf({ leaf });
1826
- return /* @__PURE__ */ React__default.createElement(PlateLeaf, { ref, ...props }, /* @__PURE__ */ React__default.createElement("span", { ...tokenProps }, children));
1827
- }
1828
- );
1829
- function ChevronDownIcon(props, svgRef) {
1830
- return /* @__PURE__ */ React.createElement("svg", Object.assign({
1831
- xmlns: "http://www.w3.org/2000/svg",
1832
- viewBox: "0 0 20 20",
1833
- fill: "currentColor",
1834
- "aria-hidden": "true",
1835
- ref: svgRef
1836
- }, props), /* @__PURE__ */ React.createElement("path", {
1837
- fillRule: "evenodd",
1838
- d: "M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z",
1839
- clipRule: "evenodd"
1840
- }));
1841
- }
1842
- const ForwardRef = React.forwardRef(ChevronDownIcon);
1843
- const ChevronDownIcon$1 = ForwardRef;
1844
- const Autocomplete = ({
1845
- value,
1846
- onChange,
1847
- defaultQuery,
1848
- items: items2
1849
- }) => {
1850
- const [query, setQuery] = React__default.useState(defaultQuery ?? "");
1851
- const filteredItems = React__default.useMemo(() => {
1852
- try {
1853
- const reFilter = new RegExp(query, "i");
1854
- const _items = items2.filter((item) => reFilter.test(item.label));
1855
- if (_items.length === 0)
1856
- return items2;
1857
- return _items;
1858
- } catch (err) {
1859
- return items2;
1860
- }
1861
- }, [items2, query]);
1862
- return /* @__PURE__ */ React__default.createElement(
1863
- Combobox$1,
1864
- {
1865
- value,
1866
- onChange,
1867
- as: "div",
1868
- className: "relative inline-block text-left z-20"
1869
- },
1870
- /* @__PURE__ */ React__default.createElement("div", { className: "mt-1" }, /* @__PURE__ */ React__default.createElement("div", { className: "relative w-full cursor-default overflow-hidden rounded-lg bg-white text-left shadow-md sm:text-sm" }, /* @__PURE__ */ React__default.createElement(
1871
- ComboboxInput,
1872
- {
1873
- className: "w-full border-none py-2 pl-3 pr-10 text-sm leading-5 text-gray-900 focus:ring-0 focus:outline-none focus-visible:ring-2 focus-visible:ring-white focus-visible:ring-opacity-75 focus-visible:ring-offset-2 focus-visible:ring-offset-teal-300",
1874
- displayValue: (item) => (item == null ? void 0 : item.label) ?? "Plain Text",
1875
- onChange: (event) => setQuery(event.target.value),
1876
- onClick: (ev) => ev.stopPropagation()
1877
- }
1878
- ), /* @__PURE__ */ React__default.createElement(ComboboxButton, { className: "absolute inset-y-0 right-0 flex items-center pr-2" }, /* @__PURE__ */ React__default.createElement(
1879
- ChevronDownIcon$1,
1880
- {
1881
- className: "h-5 w-5 text-gray-400",
1882
- "aria-hidden": "true"
1883
- }
1884
- )))),
1885
- /* @__PURE__ */ React__default.createElement(
1886
- Transition,
1887
- {
1888
- enter: "transition ease-out duration-100",
1889
- enterFrom: "transform opacity-0 scale-95",
1890
- enterTo: "transform opacity-100 scale-100",
1891
- leave: "transition ease-in duration-75",
1892
- leaveFrom: "transform opacity-100 scale-100",
1893
- leaveTo: "transform opacity-0 scale-95"
1894
- },
1895
- /* @__PURE__ */ React__default.createElement(ComboboxOptions, { className: "origin-top-right absolute right-0 mt-1 w-full max-h-[300px] overflow-y-auto rounded-md shadow-lg bg-white ring-1 ring-black ring-opacity-5 focus:outline-none" }, filteredItems.map((item) => /* @__PURE__ */ React__default.createElement(ComboboxOption, { key: item.key, value: item }, ({ focus }) => /* @__PURE__ */ React__default.createElement(
1896
- "button",
1897
- {
1898
- className: classNames$1(
1899
- focus ? "bg-gray-100 text-gray-900" : "text-gray-700",
1900
- "block px-4 py-2 text-xs w-full text-right"
1901
- )
1902
- },
1903
- item.render(item)
1904
- ))))
1905
- )
1906
- );
1907
- };
1908
- loader.config({
1909
- paths: { vs: "https://cdn.jsdelivr.net/npm/monaco-editor@0.31.1/min/vs" }
1910
- });
1911
- let retryCount = 0;
1912
- const retryFocus = (ref) => {
1913
- if (ref.current) {
1914
- ref.current.focus();
1915
- } else {
1916
- if (retryCount < 30) {
1917
- setTimeout(() => {
1918
- retryCount = retryCount + 1;
1919
- retryFocus(ref);
1920
- }, 100);
1921
- }
1922
- }
1923
- };
1924
- const CodeBlock = ({
1925
- attributes,
1926
- editor,
1927
- element,
1928
- language: restrictLanguage,
1929
- ...props
1930
- }) => {
1931
- const [navigateAway, setNavigateAway] = React__default.useState(null);
1932
- const monaco = useMonaco();
1933
- const monacoEditorRef = React__default.useRef(null);
1934
- const selected = useSelected();
1935
- const [height, setHeight] = React__default.useState(28);
1936
- React__default.useEffect(() => {
1937
- if (selected && isCollapsed(editor.selection)) {
1938
- retryFocus(monacoEditorRef);
1939
- }
1940
- }, [selected, monacoEditorRef.current]);
1941
- const value = element.value || "";
1942
- if (typeof value !== "string") {
1943
- throw new Error("Element must be of type string for code block");
1944
- }
1945
- const language = restrictLanguage || element.lang;
1946
- const id = React__default.useMemo(() => uuid(), []);
1947
- const languages = React__default.useMemo(() => {
1948
- const defaultLangSet = { "": "plain text" };
1949
- if (!monaco)
1950
- return defaultLangSet;
1951
- return monaco.languages.getLanguages().reduce((ac, cv) => {
1952
- if (cv.id === "plaintext")
1953
- return ac;
1954
- return { ...ac, [cv.id]: cv.id };
1955
- }, defaultLangSet);
1956
- }, [monaco]);
1957
- React__default.useEffect(() => {
1958
- if (monaco) {
1959
- monaco.languages.typescript.typescriptDefaults.setEagerModelSync(true);
1960
- monaco.languages.typescript.typescriptDefaults.setDiagnosticsOptions({
1961
- // disable errors
1962
- noSemanticValidation: true,
1963
- noSyntaxValidation: true
1964
- });
1965
- }
1966
- }, [monaco]);
1967
- const items2 = Object.entries(languages).map(([key, label]) => ({
1968
- key,
1969
- label,
1970
- render: (item) => item.label
1971
- }));
1972
- const currentItem = React__default.useMemo(() => {
1973
- return items2.find((item) => item.key === language) ?? {
1974
- key: "",
1975
- label: "Plain Text"
1976
- };
1977
- }, [items2, language]);
1978
- React__default.useEffect(() => {
1979
- if (navigateAway) {
1980
- setNavigateAway(null);
1981
- switch (navigateAway) {
1982
- case "remove":
1983
- {
1984
- focusEditor(editor);
1985
- setNodes(
1986
- editor,
1987
- {
1988
- type: "p",
1989
- children: [{ text: "" }],
1990
- lang: void 0,
1991
- value: void 0
1992
- },
1993
- {
1994
- match: (n) => {
1995
- if (isElement(n) && n.type === element.type) {
1996
- return true;
1997
- }
1998
- }
1999
- }
2000
- );
2001
- }
2002
- break;
2003
- case "insertNext":
2004
- {
2005
- insertNodes(
2006
- editor,
2007
- [
2008
- {
2009
- type: ELEMENT_DEFAULT,
2010
- children: [{ text: "" }],
2011
- lang: void 0,
2012
- value: void 0
2013
- }
2014
- ],
2015
- { select: true }
2016
- );
2017
- focusEditor(editor);
2018
- }
2019
- break;
2020
- case "up":
2021
- {
2022
- const path = findNodePath(editor, element);
2023
- if (!path) {
2024
- return;
2025
- }
2026
- const previousNodePath = getPointBefore(editor, path);
2027
- if (!previousNodePath) {
2028
- focusEditor(editor);
2029
- insertNodes(
2030
- editor,
2031
- [
2032
- {
2033
- type: ELEMENT_DEFAULT,
2034
- children: [{ text: "" }],
2035
- lang: void 0,
2036
- value: void 0
2037
- }
2038
- ],
2039
- // Insert a new node at the current path, resulting in the code_block
2040
- // moving down one block
2041
- { at: path, select: true }
2042
- );
2043
- return;
2044
- }
2045
- focusEditor(editor, previousNodePath);
2046
- }
2047
- break;
2048
- case "down": {
2049
- const path = findNodePath(editor, element);
2050
- if (!path) {
2051
- return;
2052
- }
2053
- const nextNodePath = getPointAfter(editor, path);
2054
- if (!nextNodePath) {
2055
- insertNodes(
2056
- editor,
2057
- [
2058
- {
2059
- type: ELEMENT_DEFAULT,
2060
- children: [{ text: "" }],
2061
- lang: void 0,
2062
- value: void 0
2063
- }
2064
- ],
2065
- { select: true }
2066
- );
2067
- focusEditor(editor);
2068
- } else {
2069
- focusEditor(editor, nextNodePath);
2070
- }
2071
- break;
2072
- }
2073
- }
2074
- }
2075
- }, [navigateAway]);
2076
- function handleEditorDidMount(monacoEditor, monaco2) {
2077
- monacoEditorRef.current = monacoEditor;
2078
- monacoEditor.onDidContentSizeChange(() => {
2079
- setHeight(monacoEditor.getContentHeight());
2080
- monacoEditor.layout();
2081
- });
2082
- monacoEditor.addCommand(monaco2.KeyMod.Shift | monaco2.KeyCode.Enter, () => {
2083
- if (monacoEditor.hasTextFocus()) {
2084
- setNavigateAway("insertNext");
2085
- }
2086
- });
2087
- monacoEditor.onKeyDown((l) => {
2088
- if (l.code === "ArrowUp") {
2089
- const selection = monacoEditor.getSelection();
2090
- if (selection.endLineNumber === 1 && selection.startLineNumber === 1) {
2091
- setNavigateAway("up");
2092
- }
2093
- }
2094
- if (l.code === "ArrowDown") {
2095
- const selection = monacoEditor.getSelection();
2096
- const totalLines = monacoEditor.getModel().getLineCount();
2097
- if (selection.endLineNumber === totalLines && selection.startLineNumber === totalLines) {
2098
- setNavigateAway("down");
2099
- }
2100
- }
2101
- if (l.code === "Backspace") {
2102
- const selection = monacoEditor.getSelection();
2103
- if (selection.endColumn === 1 && selection.endLineNumber === 1 && selection.positionColumn === 1 && selection.positionLineNumber === 1 && selection.selectionStartColumn === 1 && selection.selectionStartLineNumber === 1 && selection.startColumn === 1 && selection.startLineNumber === 1) {
2104
- setNavigateAway("remove");
2105
- }
2106
- }
2107
- });
2108
- }
2109
- return /* @__PURE__ */ React__default.createElement(
2110
- "div",
2111
- {
2112
- ...attributes,
2113
- className: "relative mb-2 mt-0.5 rounded-lg shadow-md p-2 border-gray-200 border"
2114
- },
2115
- /* @__PURE__ */ React__default.createElement("style", null, `.monaco-editor .editor-widget {
2116
- display: none !important;
2117
- visibility: hidden !important;
2118
- }`),
2119
- props.children,
2120
- /* @__PURE__ */ React__default.createElement("div", { contentEditable: false }, !restrictLanguage && /* @__PURE__ */ React__default.createElement("div", { className: "flex justify-between pb-2" }, /* @__PURE__ */ React__default.createElement("div", null), /* @__PURE__ */ React__default.createElement(
2121
- Autocomplete,
2122
- {
2123
- items: items2,
2124
- value: currentItem,
2125
- defaultQuery: "plaintext",
2126
- onChange: (item) => setNodes(editor, { lang: item.key })
2127
- }
2128
- )), /* @__PURE__ */ React__default.createElement("div", { style: { height: `${height}px` } }, /* @__PURE__ */ React__default.createElement(
2129
- MonacoEditor,
2130
- {
2131
- path: id,
2132
- onMount: handleEditorDidMount,
2133
- options: {
2134
- scrollBeyondLastLine: false,
2135
- // automaticLayout: true,
2136
- tabSize: 2,
2137
- disableLayerHinting: true,
2138
- accessibilitySupport: "off",
2139
- codeLens: false,
2140
- wordWrap: "on",
2141
- minimap: {
2142
- enabled: false
2143
- },
2144
- fontSize: 14,
2145
- lineHeight: 2,
2146
- formatOnPaste: true,
2147
- lineNumbers: "off",
2148
- formatOnType: true,
2149
- fixedOverflowWidgets: true,
2150
- // Takes too much horizontal space for iframe
2151
- folding: false,
2152
- renderLineHighlight: "none",
2153
- scrollbar: {
2154
- verticalScrollbarSize: 1,
2155
- horizontalScrollbarSize: 1,
2156
- // https://github.com/microsoft/monaco-editor/issues/2007#issuecomment-644425664
2157
- alwaysConsumeMouseWheel: false
2158
- }
2159
- },
2160
- language: String(language),
2161
- value: String(element.value),
2162
- onChange: (value2) => {
2163
- setNodes(editor, { value: value2, lang: language });
2164
- }
2165
- }
2166
- )))
2167
- );
2168
- };
2169
- const CodeBlockElement = withRef(
2170
- ({ className, ...props }, ref) => {
2171
- const { element } = props;
2172
- const state = useCodeBlockElementState({ element });
2173
- return /* @__PURE__ */ React__default.createElement(
2174
- PlateElement,
2175
- {
2176
- className: cn$1("relative py-1", state.className, className),
2177
- ref,
2178
- ...props
2179
- },
2180
- /* @__PURE__ */ React__default.createElement(CodeBlock, { ...props })
2181
- );
2182
- }
2183
- );
2184
- const buttonVariants$1 = cva(
2185
- "inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",
2186
- {
2187
- defaultVariants: {
2188
- size: "default",
2189
- variant: "default"
2190
- },
2191
- variants: {
2192
- isMenu: {
2193
- true: "h-auto w-full cursor-pointer justify-start"
2194
- },
2195
- size: {
2196
- default: "h-10 px-4 py-2",
2197
- icon: "size-10",
2198
- lg: "h-11 rounded-md px-8",
2199
- none: "",
2200
- sm: "h-9 rounded-md px-3",
2201
- sms: "size-9 rounded-md px-0",
2202
- xs: "h-8 rounded-md px-3"
2203
- },
2204
- variant: {
2205
- default: "bg-primary text-primary-foreground hover:bg-primary/90",
2206
- destructive: "bg-destructive text-destructive-foreground hover:bg-destructive/90",
2207
- ghost: "hover:bg-accent hover:text-accent-foreground",
2208
- inlineLink: "text-base text-primary underline underline-offset-4",
2209
- link: "text-primary underline-offset-4 hover:underline",
2210
- outline: "border border-input bg-background hover:bg-accent hover:text-accent-foreground",
2211
- secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80"
2212
- }
2213
- }
2214
- }
2215
- );
2216
- const Button$2 = withRef(({ asChild = false, className, isMenu, size, variant, ...props }, ref) => {
2217
- const Comp = asChild ? Slot : "button";
2218
- return /* @__PURE__ */ React.createElement(
2219
- Comp,
2220
- {
2221
- className: cn$1(buttonVariants$1({ className, isMenu, size, variant })),
2222
- ref,
2223
- ...props
2224
- }
2225
- );
2226
- });
2227
- const DropdownMenu = DropdownMenuPrimitive.Root;
2228
- const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;
2229
- const DropdownMenuPortal = DropdownMenuPrimitive.Portal;
2230
- const DropdownMenuSub = DropdownMenuPrimitive.Sub;
2231
- const DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup;
2232
- const DropdownMenuSubTrigger = withRef(({ children, className, inset, ...props }, ref) => /* @__PURE__ */ React__default.createElement(
2233
- DropdownMenuPrimitive.SubTrigger,
2234
- {
2235
- className: cn$1(
2236
- "flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent",
2237
- "data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
2238
- inset && "pl-8",
2239
- className
2240
- ),
2241
- ref,
2242
- ...props
2243
- },
2244
- children,
2245
- /* @__PURE__ */ React__default.createElement(Icons.chevronRight, { className: "ml-auto size-4" })
2246
- ));
2247
- const DropdownMenuSubContent = withCn(
2248
- DropdownMenuPrimitive.SubContent,
2249
- "z-[99999] min-w-32 overflow-hidden rounded-md border bg-white p-1 text-black shadow-lg 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"
2250
- );
2251
- const DropdownMenuContentVariants = withProps(DropdownMenuPrimitive.Content, {
2252
- className: cn$1(
2253
- "z-[99999] min-w-32 overflow-hidden rounded-md border bg-white p-1 text-black shadow-md 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"
2254
- ),
2255
- sideOffset: 4
2256
- });
2257
- const DropdownMenuContent = withRef(({ ...props }, ref) => /* @__PURE__ */ React__default.createElement(DropdownMenuPrimitive.Portal, null, /* @__PURE__ */ React__default.createElement(DropdownMenuContentVariants, { ref, ...props })));
2258
- const menuItemVariants = cva(
2259
- cn$1(
2260
- "relative flex h-9 cursor-pointer select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors",
2261
- "focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50"
2262
- ),
2263
- {
2264
- variants: {
2265
- inset: {
2266
- true: "pl-8"
2267
- }
2268
- }
2269
- }
2270
- );
2271
- const DropdownMenuItem = withVariants(
2272
- DropdownMenuPrimitive.Item,
2273
- menuItemVariants,
2274
- ["inset"]
2275
- );
2276
- const DropdownMenuCheckboxItem = withRef(({ children, className, ...props }, ref) => /* @__PURE__ */ React__default.createElement(
2277
- DropdownMenuPrimitive.CheckboxItem,
2278
- {
2279
- className: cn$1(
2280
- "relative flex select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
2281
- "cursor-pointer",
2282
- className
2283
- ),
2284
- ref,
2285
- ...props
2286
- },
2287
- /* @__PURE__ */ React__default.createElement("span", { className: "absolute left-2 flex size-3.5 items-center justify-center" }, /* @__PURE__ */ React__default.createElement(DropdownMenuPrimitive.ItemIndicator, null, /* @__PURE__ */ React__default.createElement(Icons.check, { className: "size-4" }))),
2288
- children
2289
- ));
2290
- const DropdownMenuRadioItem = withRef(({ children, className, hideIcon, ...props }, ref) => /* @__PURE__ */ React__default.createElement(
2291
- DropdownMenuPrimitive.RadioItem,
2292
- {
2293
- className: cn$1(
2294
- "relative flex select-none items-center rounded-sm pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
2295
- "h-9 cursor-pointer px-2 data-[state=checked]:bg-accent data-[state=checked]:text-accent-foreground",
2296
- className
2297
- ),
2298
- ref,
2299
- ...props
2300
- },
2301
- !hideIcon && /* @__PURE__ */ React__default.createElement("span", { className: "absolute right-2 flex size-3.5 items-center justify-center" }, /* @__PURE__ */ React__default.createElement(DropdownMenuPrimitive.ItemIndicator, null, /* @__PURE__ */ React__default.createElement(Icons.check, { className: "size-4" }))),
2302
- children
2303
- ));
2304
- const dropdownMenuLabelVariants = cva(
2305
- cn$1("select-none px-2 py-1.5 text-sm font-semibold"),
2306
- {
2307
- variants: {
2308
- inset: {
2309
- true: "pl-8"
2310
- }
2311
- }
2312
- }
2313
- );
2314
- const DropdownMenuLabel = withVariants(
2315
- DropdownMenuPrimitive.Label,
2316
- dropdownMenuLabelVariants,
2317
- ["inset"]
2318
- );
2319
- const DropdownMenuSeparator = withCn(
2320
- DropdownMenuPrimitive.Separator,
2321
- "-mx-1 my-1 h-px bg-muted"
2322
- );
2323
- withCn(
2324
- createPrimitiveElement("span"),
2325
- "ml-auto text-xs tracking-widest opacity-60"
2326
- );
2327
- const useOpenState = () => {
2328
- const [open2, setOpen] = useState(false);
2329
- const onOpenChange = useCallback(
2330
- (_value = !open2) => {
2331
- setOpen(_value);
2332
- },
2333
- [open2]
2334
- );
2335
- return {
2336
- onOpenChange,
2337
- open: open2
2338
- };
2339
- };
2340
- const Popover$2 = PopoverPrimitive.Root;
2341
- const popoverVariants = cva(
2342
- "w-72 rounded-md border bg-popover 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 print:hidden"
2343
- );
2344
- const PopoverContent$1 = withRef(
2345
- ({ align = "center", className, sideOffset = 4, style, ...props }, ref) => /* @__PURE__ */ React.createElement(PopoverPrimitive.Portal, null, /* @__PURE__ */ React.createElement(
2346
- PopoverPrimitive.Content,
2347
- {
2348
- align,
2349
- className: cn$1(popoverVariants(), className),
2350
- ref,
2351
- sideOffset,
2352
- style: { zIndex: 1e3, ...style },
2353
- ...props
2354
- }
2355
- ))
2356
- );
2357
- const separatorVariants = cva("shrink-0 bg-border", {
2358
- defaultVariants: {
2359
- orientation: "horizontal"
2360
- },
2361
- variants: {
2362
- orientation: {
2363
- horizontal: "h-px w-full",
2364
- vertical: "h-full w-px"
2365
- }
2366
- }
2367
- });
2368
- const Separator = withVariants(
2369
- withProps(SeparatorPrimitive.Root, {
2370
- decorative: true,
2371
- orientation: "horizontal"
2372
- }),
2373
- separatorVariants
2374
- );
2375
- const TableBordersDropdownMenuContent = withRef((props, ref) => {
2376
- const {
2377
- getOnSelectTableBorder,
2378
- hasBottomBorder,
2379
- hasLeftBorder,
2380
- hasNoBorders,
2381
- hasOuterBorders,
2382
- hasRightBorder,
2383
- hasTopBorder
2384
- } = useTableBordersDropdownMenuContentState();
2385
- return /* @__PURE__ */ React__default.createElement(
2386
- DropdownMenuContent,
2387
- {
2388
- align: "start",
2389
- className: cn$1("min-w-[220px]"),
2390
- ref,
2391
- side: "right",
2392
- sideOffset: 0,
2393
- ...props
2394
- },
2395
- /* @__PURE__ */ React__default.createElement(
2396
- DropdownMenuCheckboxItem,
2397
- {
2398
- checked: hasBottomBorder,
2399
- onCheckedChange: getOnSelectTableBorder("bottom")
2400
- },
2401
- /* @__PURE__ */ React__default.createElement(Icons.borderBottom, { className: iconVariants({ size: "sm" }) }),
2402
- /* @__PURE__ */ React__default.createElement("div", null, "Bottom Border")
2403
- ),
2404
- /* @__PURE__ */ React__default.createElement(
2405
- DropdownMenuCheckboxItem,
2406
- {
2407
- checked: hasTopBorder,
2408
- onCheckedChange: getOnSelectTableBorder("top")
2409
- },
2410
- /* @__PURE__ */ React__default.createElement(Icons.borderTop, { className: iconVariants({ size: "sm" }) }),
2411
- /* @__PURE__ */ React__default.createElement("div", null, "Top Border")
2412
- ),
2413
- /* @__PURE__ */ React__default.createElement(
2414
- DropdownMenuCheckboxItem,
2415
- {
2416
- checked: hasLeftBorder,
2417
- onCheckedChange: getOnSelectTableBorder("left")
2418
- },
2419
- /* @__PURE__ */ React__default.createElement(Icons.borderLeft, { className: iconVariants({ size: "sm" }) }),
2420
- /* @__PURE__ */ React__default.createElement("div", null, "Left Border")
2421
- ),
2422
- /* @__PURE__ */ React__default.createElement(
2423
- DropdownMenuCheckboxItem,
2424
- {
2425
- checked: hasRightBorder,
2426
- onCheckedChange: getOnSelectTableBorder("right")
2427
- },
2428
- /* @__PURE__ */ React__default.createElement(Icons.borderRight, { className: iconVariants({ size: "sm" }) }),
2429
- /* @__PURE__ */ React__default.createElement("div", null, "Right Border")
2430
- ),
2431
- /* @__PURE__ */ React__default.createElement(Separator, null),
2432
- /* @__PURE__ */ React__default.createElement(
2433
- DropdownMenuCheckboxItem,
2434
- {
2435
- checked: hasNoBorders,
2436
- onCheckedChange: getOnSelectTableBorder("none")
2437
- },
2438
- /* @__PURE__ */ React__default.createElement(Icons.borderNone, { className: iconVariants({ size: "sm" }) }),
2439
- /* @__PURE__ */ React__default.createElement("div", null, "No Border")
2440
- ),
2441
- /* @__PURE__ */ React__default.createElement(
2442
- DropdownMenuCheckboxItem,
2443
- {
2444
- checked: hasOuterBorders,
2445
- onCheckedChange: getOnSelectTableBorder("outer")
2446
- },
2447
- /* @__PURE__ */ React__default.createElement(Icons.borderAll, { className: iconVariants({ size: "sm" }) }),
2448
- /* @__PURE__ */ React__default.createElement("div", null, "Outside Borders")
2449
- )
2450
- );
2451
- });
2452
- const TableFloatingToolbar = withRef(
2453
- ({ children, ...props }, ref) => {
2454
- const element = useElement();
2455
- const { props: buttonProps } = useRemoveNodeButton({ element });
2456
- const selectionCollapsed = useEditorSelector(
2457
- (editor2) => !isSelectionExpanded(editor2),
2458
- []
2459
- );
2460
- const readOnly = useReadOnly();
2461
- const selected = useSelected();
2462
- const editor = useEditorRef();
2463
- const collapsed = !readOnly && selected && selectionCollapsed;
2464
- const open2 = !readOnly && selected;
2465
- const { canMerge, canUnmerge } = useTableMergeState();
2466
- const mergeContent = canMerge && /* @__PURE__ */ React__default.createElement(
2467
- Button$2,
2468
- {
2469
- contentEditable: false,
2470
- isMenu: true,
2471
- onClick: () => mergeTableCells(editor),
2472
- variant: "ghost"
2473
- },
2474
- /* @__PURE__ */ React__default.createElement(Icons.combine, { className: "mr-2 size-4" }),
2475
- "Merge"
2476
- );
2477
- const unmergeButton = canUnmerge && /* @__PURE__ */ React__default.createElement(
2478
- Button$2,
2479
- {
2480
- contentEditable: false,
2481
- isMenu: true,
2482
- onClick: () => unmergeTableCells(editor),
2483
- variant: "ghost"
2484
- },
2485
- /* @__PURE__ */ React__default.createElement(Icons.ungroup, { className: "mr-2 size-4" }),
2486
- "Unmerge"
2487
- );
2488
- const bordersContent = collapsed && /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, /* @__PURE__ */ React__default.createElement(DropdownMenu, { modal: false }, /* @__PURE__ */ React__default.createElement(DropdownMenuTrigger, { asChild: true }, /* @__PURE__ */ React__default.createElement(Button$2, { isMenu: true, variant: "ghost" }, /* @__PURE__ */ React__default.createElement(Icons.borderAll, { className: "mr-2 size-4" }), "Borders")), /* @__PURE__ */ React__default.createElement(DropdownMenuPortal, null, /* @__PURE__ */ React__default.createElement(TableBordersDropdownMenuContent, null))), /* @__PURE__ */ React__default.createElement(Button$2, { contentEditable: false, isMenu: true, variant: "ghost", ...buttonProps }, /* @__PURE__ */ React__default.createElement(Icons.delete, { className: "mr-2 size-4" }), "Delete"));
2489
- return /* @__PURE__ */ React__default.createElement(Popover$2, { modal: false, open: open2 }, /* @__PURE__ */ React__default.createElement(PopoverAnchor, { asChild: true }, children), (canMerge || canUnmerge || collapsed) && /* @__PURE__ */ React__default.createElement(
2490
- PopoverContent$1,
2491
- {
2492
- className: cn$1(
2493
- popoverVariants(),
2494
- "flex w-[220px] flex-col gap-1 p-1"
2495
- ),
2496
- onOpenAutoFocus: (e) => e.preventDefault(),
2497
- ref,
2498
- ...props
2499
- },
2500
- unmergeButton,
2501
- mergeContent,
2502
- bordersContent
2503
- ));
2504
- }
2505
- );
2506
- const TableElement = withHOC(
2507
- TableProvider,
2508
- withRef(({ children, className, ...props }, ref) => {
2509
- const { colSizes, isSelectingCell, marginLeft, minColumnWidth } = useTableElementState();
2510
- const { colGroupProps, props: tableProps } = useTableElement();
2511
- return /* @__PURE__ */ React__default.createElement(TableFloatingToolbar, null, /* @__PURE__ */ React__default.createElement("div", { style: { paddingLeft: marginLeft } }, /* @__PURE__ */ React__default.createElement(
2512
- PlateElement,
2513
- {
2514
- asChild: true,
2515
- className: cn$1(
2516
- "my-4 ml-px mr-0 table h-px w-full table-fixed border-collapse",
2517
- isSelectingCell && "[&_*::selection]:bg-none",
2518
- className
2519
- ),
2520
- ref,
2521
- ...tableProps,
2522
- ...props
2523
- },
2524
- /* @__PURE__ */ React__default.createElement("table", null, /* @__PURE__ */ React__default.createElement("colgroup", { ...colGroupProps }, colSizes.map((width, index) => /* @__PURE__ */ React__default.createElement(
2525
- "col",
2526
- {
2527
- key: index,
2528
- style: {
2529
- minWidth: minColumnWidth,
2530
- width: width || void 0
2531
- }
2532
- }
2533
- ))), /* @__PURE__ */ React__default.createElement("tbody", { className: "min-w-full" }, children))
2534
- )));
2535
- })
2536
- );
2537
- const TableRowElement = withRef(({ children, hideBorder, ...props }, ref) => {
2538
- return /* @__PURE__ */ React__default.createElement(
2539
- PlateElement,
2540
- {
2541
- asChild: true,
2542
- className: cn$1("h-full", hideBorder && "border-none"),
2543
- ref,
2544
- ...props
2545
- },
2546
- /* @__PURE__ */ React__default.createElement("tr", null, children)
2547
- );
2548
- });
2549
2326
  const TableCellElement = withRef(({ children, className, hideBorder, isHeader, style, ...props }, ref) => {
2550
2327
  var _a, _b, _c, _d;
2551
2328
  const { element } = props;
@@ -2657,6 +2434,371 @@ TableCellElement.displayName = "TableCellElement";
2657
2434
  const TableCellHeaderElement = withProps(TableCellElement, {
2658
2435
  isHeader: true
2659
2436
  });
2437
+ const buttonVariants$1 = cva(
2438
+ "inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",
2439
+ {
2440
+ defaultVariants: {
2441
+ size: "default",
2442
+ variant: "default"
2443
+ },
2444
+ variants: {
2445
+ isMenu: {
2446
+ true: "h-auto w-full cursor-pointer justify-start"
2447
+ },
2448
+ size: {
2449
+ default: "h-10 px-4 py-2",
2450
+ icon: "size-10",
2451
+ lg: "h-11 rounded-md px-8",
2452
+ none: "",
2453
+ sm: "h-9 rounded-md px-3",
2454
+ sms: "size-9 rounded-md px-0",
2455
+ xs: "h-8 rounded-md px-3"
2456
+ },
2457
+ variant: {
2458
+ default: "bg-primary text-primary-foreground hover:bg-primary/90",
2459
+ destructive: "bg-destructive text-destructive-foreground hover:bg-destructive/90",
2460
+ ghost: "hover:bg-accent hover:text-accent-foreground",
2461
+ inlineLink: "text-base text-primary underline underline-offset-4",
2462
+ link: "text-primary underline-offset-4 hover:underline",
2463
+ outline: "border border-input bg-background hover:bg-accent hover:text-accent-foreground",
2464
+ secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80"
2465
+ }
2466
+ }
2467
+ }
2468
+ );
2469
+ const Button$2 = withRef(({ asChild = false, className, isMenu, size, variant, ...props }, ref) => {
2470
+ const Comp = asChild ? Slot : "button";
2471
+ return /* @__PURE__ */ React.createElement(
2472
+ Comp,
2473
+ {
2474
+ className: cn$1(buttonVariants$1({ className, isMenu, size, variant })),
2475
+ ref,
2476
+ ...props
2477
+ }
2478
+ );
2479
+ });
2480
+ const DropdownMenu = DropdownMenuPrimitive.Root;
2481
+ const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;
2482
+ const DropdownMenuPortal = DropdownMenuPrimitive.Portal;
2483
+ const DropdownMenuSub = DropdownMenuPrimitive.Sub;
2484
+ const DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup;
2485
+ const DropdownMenuSubTrigger = withRef(({ children, className, inset, ...props }, ref) => /* @__PURE__ */ React__default.createElement(
2486
+ DropdownMenuPrimitive.SubTrigger,
2487
+ {
2488
+ className: cn$1(
2489
+ "flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent",
2490
+ "data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
2491
+ inset && "pl-8",
2492
+ className
2493
+ ),
2494
+ ref,
2495
+ ...props
2496
+ },
2497
+ children,
2498
+ /* @__PURE__ */ React__default.createElement(Icons.chevronRight, { className: "ml-auto size-4" })
2499
+ ));
2500
+ const DropdownMenuSubContent = withCn(
2501
+ DropdownMenuPrimitive.SubContent,
2502
+ "z-[99999] min-w-32 overflow-hidden rounded-md border bg-white p-1 text-black shadow-lg 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"
2503
+ );
2504
+ const DropdownMenuContentVariants = withProps(DropdownMenuPrimitive.Content, {
2505
+ className: cn$1(
2506
+ "z-[99999] min-w-32 overflow-hidden rounded-md border bg-white p-1 text-black shadow-md 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"
2507
+ ),
2508
+ sideOffset: 4
2509
+ });
2510
+ const DropdownMenuContent = withRef(({ ...props }, ref) => /* @__PURE__ */ React__default.createElement(DropdownMenuPrimitive.Portal, null, /* @__PURE__ */ React__default.createElement(DropdownMenuContentVariants, { ref, ...props })));
2511
+ const menuItemVariants = cva(
2512
+ cn$1(
2513
+ "relative flex h-9 cursor-pointer select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors",
2514
+ "focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50"
2515
+ ),
2516
+ {
2517
+ variants: {
2518
+ inset: {
2519
+ true: "pl-8"
2520
+ }
2521
+ }
2522
+ }
2523
+ );
2524
+ const DropdownMenuItem = withVariants(
2525
+ DropdownMenuPrimitive.Item,
2526
+ menuItemVariants,
2527
+ ["inset"]
2528
+ );
2529
+ const DropdownMenuCheckboxItem = withRef(({ children, className, ...props }, ref) => /* @__PURE__ */ React__default.createElement(
2530
+ DropdownMenuPrimitive.CheckboxItem,
2531
+ {
2532
+ className: cn$1(
2533
+ "relative flex select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
2534
+ "cursor-pointer",
2535
+ className
2536
+ ),
2537
+ ref,
2538
+ ...props
2539
+ },
2540
+ /* @__PURE__ */ React__default.createElement("span", { className: "absolute left-2 flex size-3.5 items-center justify-center" }, /* @__PURE__ */ React__default.createElement(DropdownMenuPrimitive.ItemIndicator, null, /* @__PURE__ */ React__default.createElement(Icons.check, { className: "size-4" }))),
2541
+ children
2542
+ ));
2543
+ const DropdownMenuRadioItem = withRef(({ children, className, hideIcon, ...props }, ref) => /* @__PURE__ */ React__default.createElement(
2544
+ DropdownMenuPrimitive.RadioItem,
2545
+ {
2546
+ className: cn$1(
2547
+ "relative flex select-none items-center rounded-sm pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
2548
+ "h-9 cursor-pointer px-2 data-[state=checked]:bg-accent data-[state=checked]:text-accent-foreground",
2549
+ className
2550
+ ),
2551
+ ref,
2552
+ ...props
2553
+ },
2554
+ !hideIcon && /* @__PURE__ */ React__default.createElement("span", { className: "absolute right-2 flex size-3.5 items-center justify-center" }, /* @__PURE__ */ React__default.createElement(DropdownMenuPrimitive.ItemIndicator, null, /* @__PURE__ */ React__default.createElement(Icons.check, { className: "size-4" }))),
2555
+ children
2556
+ ));
2557
+ const dropdownMenuLabelVariants = cva(
2558
+ cn$1("select-none px-2 py-1.5 text-sm font-semibold"),
2559
+ {
2560
+ variants: {
2561
+ inset: {
2562
+ true: "pl-8"
2563
+ }
2564
+ }
2565
+ }
2566
+ );
2567
+ const DropdownMenuLabel = withVariants(
2568
+ DropdownMenuPrimitive.Label,
2569
+ dropdownMenuLabelVariants,
2570
+ ["inset"]
2571
+ );
2572
+ const DropdownMenuSeparator = withCn(
2573
+ DropdownMenuPrimitive.Separator,
2574
+ "-mx-1 my-1 h-px bg-muted"
2575
+ );
2576
+ withCn(
2577
+ createPrimitiveElement("span"),
2578
+ "ml-auto text-xs tracking-widest opacity-60"
2579
+ );
2580
+ const useOpenState = () => {
2581
+ const [open2, setOpen] = useState(false);
2582
+ const onOpenChange = useCallback(
2583
+ (_value = !open2) => {
2584
+ setOpen(_value);
2585
+ },
2586
+ [open2]
2587
+ );
2588
+ return {
2589
+ onOpenChange,
2590
+ open: open2
2591
+ };
2592
+ };
2593
+ const Popover$2 = PopoverPrimitive.Root;
2594
+ const popoverVariants = cva(
2595
+ "w-72 rounded-md border bg-popover 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 print:hidden"
2596
+ );
2597
+ const PopoverContent$1 = withRef(
2598
+ ({ align = "center", className, sideOffset = 4, style, ...props }, ref) => /* @__PURE__ */ React.createElement(PopoverPrimitive.Portal, null, /* @__PURE__ */ React.createElement(
2599
+ PopoverPrimitive.Content,
2600
+ {
2601
+ align,
2602
+ className: cn$1(popoverVariants(), className),
2603
+ ref,
2604
+ sideOffset,
2605
+ style: { zIndex: 1e3, ...style },
2606
+ ...props
2607
+ }
2608
+ ))
2609
+ );
2610
+ const separatorVariants = cva("shrink-0 bg-border", {
2611
+ defaultVariants: {
2612
+ orientation: "horizontal"
2613
+ },
2614
+ variants: {
2615
+ orientation: {
2616
+ horizontal: "h-px w-full",
2617
+ vertical: "h-full w-px"
2618
+ }
2619
+ }
2620
+ });
2621
+ const Separator = withVariants(
2622
+ withProps(SeparatorPrimitive.Root, {
2623
+ decorative: true,
2624
+ orientation: "horizontal"
2625
+ }),
2626
+ separatorVariants
2627
+ );
2628
+ const TableBordersDropdownMenuContent = withRef((props, ref) => {
2629
+ const {
2630
+ getOnSelectTableBorder,
2631
+ hasBottomBorder,
2632
+ hasLeftBorder,
2633
+ hasNoBorders,
2634
+ hasOuterBorders,
2635
+ hasRightBorder,
2636
+ hasTopBorder
2637
+ } = useTableBordersDropdownMenuContentState();
2638
+ return /* @__PURE__ */ React__default.createElement(
2639
+ DropdownMenuContent,
2640
+ {
2641
+ align: "start",
2642
+ className: cn$1("min-w-[220px]"),
2643
+ ref,
2644
+ side: "right",
2645
+ sideOffset: 0,
2646
+ ...props
2647
+ },
2648
+ /* @__PURE__ */ React__default.createElement(
2649
+ DropdownMenuCheckboxItem,
2650
+ {
2651
+ checked: hasBottomBorder,
2652
+ onCheckedChange: getOnSelectTableBorder("bottom")
2653
+ },
2654
+ /* @__PURE__ */ React__default.createElement(Icons.borderBottom, { className: iconVariants({ size: "sm" }) }),
2655
+ /* @__PURE__ */ React__default.createElement("div", null, "Bottom Border")
2656
+ ),
2657
+ /* @__PURE__ */ React__default.createElement(
2658
+ DropdownMenuCheckboxItem,
2659
+ {
2660
+ checked: hasTopBorder,
2661
+ onCheckedChange: getOnSelectTableBorder("top")
2662
+ },
2663
+ /* @__PURE__ */ React__default.createElement(Icons.borderTop, { className: iconVariants({ size: "sm" }) }),
2664
+ /* @__PURE__ */ React__default.createElement("div", null, "Top Border")
2665
+ ),
2666
+ /* @__PURE__ */ React__default.createElement(
2667
+ DropdownMenuCheckboxItem,
2668
+ {
2669
+ checked: hasLeftBorder,
2670
+ onCheckedChange: getOnSelectTableBorder("left")
2671
+ },
2672
+ /* @__PURE__ */ React__default.createElement(Icons.borderLeft, { className: iconVariants({ size: "sm" }) }),
2673
+ /* @__PURE__ */ React__default.createElement("div", null, "Left Border")
2674
+ ),
2675
+ /* @__PURE__ */ React__default.createElement(
2676
+ DropdownMenuCheckboxItem,
2677
+ {
2678
+ checked: hasRightBorder,
2679
+ onCheckedChange: getOnSelectTableBorder("right")
2680
+ },
2681
+ /* @__PURE__ */ React__default.createElement(Icons.borderRight, { className: iconVariants({ size: "sm" }) }),
2682
+ /* @__PURE__ */ React__default.createElement("div", null, "Right Border")
2683
+ ),
2684
+ /* @__PURE__ */ React__default.createElement(Separator, null),
2685
+ /* @__PURE__ */ React__default.createElement(
2686
+ DropdownMenuCheckboxItem,
2687
+ {
2688
+ checked: hasNoBorders,
2689
+ onCheckedChange: getOnSelectTableBorder("none")
2690
+ },
2691
+ /* @__PURE__ */ React__default.createElement(Icons.borderNone, { className: iconVariants({ size: "sm" }) }),
2692
+ /* @__PURE__ */ React__default.createElement("div", null, "No Border")
2693
+ ),
2694
+ /* @__PURE__ */ React__default.createElement(
2695
+ DropdownMenuCheckboxItem,
2696
+ {
2697
+ checked: hasOuterBorders,
2698
+ onCheckedChange: getOnSelectTableBorder("outer")
2699
+ },
2700
+ /* @__PURE__ */ React__default.createElement(Icons.borderAll, { className: iconVariants({ size: "sm" }) }),
2701
+ /* @__PURE__ */ React__default.createElement("div", null, "Outside Borders")
2702
+ )
2703
+ );
2704
+ });
2705
+ const TableFloatingToolbar = withRef(
2706
+ ({ children, ...props }, ref) => {
2707
+ const element = useElement();
2708
+ const { props: buttonProps } = useRemoveNodeButton({ element });
2709
+ const selectionCollapsed = useEditorSelector(
2710
+ (editor2) => !isSelectionExpanded(editor2),
2711
+ []
2712
+ );
2713
+ const readOnly = useReadOnly();
2714
+ const selected = useSelected();
2715
+ const editor = useEditorRef();
2716
+ const collapsed = !readOnly && selected && selectionCollapsed;
2717
+ const open2 = !readOnly && selected;
2718
+ const { canMerge, canUnmerge } = useTableMergeState();
2719
+ const mergeContent = canMerge && /* @__PURE__ */ React__default.createElement(
2720
+ Button$2,
2721
+ {
2722
+ contentEditable: false,
2723
+ isMenu: true,
2724
+ onClick: () => mergeTableCells(editor),
2725
+ variant: "ghost"
2726
+ },
2727
+ /* @__PURE__ */ React__default.createElement(Icons.combine, { className: "mr-2 size-4" }),
2728
+ "Merge"
2729
+ );
2730
+ const unmergeButton = canUnmerge && /* @__PURE__ */ React__default.createElement(
2731
+ Button$2,
2732
+ {
2733
+ contentEditable: false,
2734
+ isMenu: true,
2735
+ onClick: () => unmergeTableCells(editor),
2736
+ variant: "ghost"
2737
+ },
2738
+ /* @__PURE__ */ React__default.createElement(Icons.ungroup, { className: "mr-2 size-4" }),
2739
+ "Unmerge"
2740
+ );
2741
+ const bordersContent = collapsed && /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, /* @__PURE__ */ React__default.createElement(DropdownMenu, { modal: false }, /* @__PURE__ */ React__default.createElement(DropdownMenuTrigger, { asChild: true }, /* @__PURE__ */ React__default.createElement(Button$2, { isMenu: true, variant: "ghost" }, /* @__PURE__ */ React__default.createElement(Icons.borderAll, { className: "mr-2 size-4" }), "Borders")), /* @__PURE__ */ React__default.createElement(DropdownMenuPortal, null, /* @__PURE__ */ React__default.createElement(TableBordersDropdownMenuContent, null))), /* @__PURE__ */ React__default.createElement(Button$2, { contentEditable: false, isMenu: true, variant: "ghost", ...buttonProps }, /* @__PURE__ */ React__default.createElement(Icons.delete, { className: "mr-2 size-4" }), "Delete"));
2742
+ return /* @__PURE__ */ React__default.createElement(Popover$2, { modal: false, open: open2 }, /* @__PURE__ */ React__default.createElement(PopoverAnchor, { asChild: true }, children), (canMerge || canUnmerge || collapsed) && /* @__PURE__ */ React__default.createElement(
2743
+ PopoverContent$1,
2744
+ {
2745
+ className: cn$1(
2746
+ popoverVariants(),
2747
+ "flex w-[220px] flex-col gap-1 p-1"
2748
+ ),
2749
+ onOpenAutoFocus: (e) => e.preventDefault(),
2750
+ ref,
2751
+ ...props
2752
+ },
2753
+ unmergeButton,
2754
+ mergeContent,
2755
+ bordersContent
2756
+ ));
2757
+ }
2758
+ );
2759
+ const TableElement = withHOC(
2760
+ TableProvider,
2761
+ withRef(({ children, className, ...props }, ref) => {
2762
+ const { colSizes, isSelectingCell, marginLeft, minColumnWidth } = useTableElementState();
2763
+ const { colGroupProps, props: tableProps } = useTableElement();
2764
+ return /* @__PURE__ */ React__default.createElement(TableFloatingToolbar, null, /* @__PURE__ */ React__default.createElement("div", { style: { paddingLeft: marginLeft } }, /* @__PURE__ */ React__default.createElement(
2765
+ PlateElement,
2766
+ {
2767
+ asChild: true,
2768
+ className: cn$1(
2769
+ "my-4 ml-px mr-0 table h-px w-full table-fixed border-collapse",
2770
+ isSelectingCell && "[&_*::selection]:bg-none",
2771
+ className
2772
+ ),
2773
+ ref,
2774
+ ...tableProps,
2775
+ ...props
2776
+ },
2777
+ /* @__PURE__ */ React__default.createElement("table", null, /* @__PURE__ */ React__default.createElement("colgroup", { ...colGroupProps }, colSizes.map((width, index) => /* @__PURE__ */ React__default.createElement(
2778
+ "col",
2779
+ {
2780
+ key: index,
2781
+ style: {
2782
+ minWidth: minColumnWidth,
2783
+ width: width || void 0
2784
+ }
2785
+ }
2786
+ ))), /* @__PURE__ */ React__default.createElement("tbody", { className: "min-w-full" }, children))
2787
+ )));
2788
+ })
2789
+ );
2790
+ const TableRowElement = withRef(({ children, hideBorder, ...props }, ref) => {
2791
+ return /* @__PURE__ */ React__default.createElement(
2792
+ PlateElement,
2793
+ {
2794
+ asChild: true,
2795
+ className: cn$1("h-full", hideBorder && "border-none"),
2796
+ ref,
2797
+ ...props
2798
+ },
2799
+ /* @__PURE__ */ React__default.createElement("tr", null, children)
2800
+ );
2801
+ });
2660
2802
  const blockClasses = "mt-0.5";
2661
2803
  const headerClasses = "font-normal";
2662
2804
  const Components = () => {
@@ -2762,6 +2904,7 @@ const Components = () => {
2762
2904
  }
2763
2905
  )
2764
2906
  ),
2907
+ [ELEMENT_MERMAID]: MermaidElement,
2765
2908
  [ELEMENT_BLOCKQUOTE]: BlockquoteElement,
2766
2909
  [ELEMENT_CODE_BLOCK]: CodeBlockElement,
2767
2910
  [ELEMENT_CODE_LINE]: CodeLineElement,
@@ -3256,7 +3399,9 @@ class Form {
3256
3399
  {
3257
3400
  type: "string",
3258
3401
  label: "Caption",
3259
- name: [templateName.replace(/\.props$/, ""), "caption"].join("."),
3402
+ name: [templateName.replace(/\.props$/, ""), "caption"].join(
3403
+ "."
3404
+ ),
3260
3405
  component: "text"
3261
3406
  }
3262
3407
  ]
@@ -3574,7 +3719,7 @@ const Button$1 = ({
3574
3719
  };
3575
3720
  const sizeClasses = {
3576
3721
  small: `text-xs h-8 px-3`,
3577
- medium: `text-sm h-10 px-4`,
3722
+ medium: `text-sm h-10 px-8`,
3578
3723
  custom: ``
3579
3724
  };
3580
3725
  return /* @__PURE__ */ React.createElement(
@@ -5689,27 +5834,35 @@ const BlockSelector = ({
5689
5834
  ))))
5690
5835
  ))));
5691
5836
  };
5692
- const Group = wrapFieldWithError(({ tinaForm, field }) => {
5693
- const cms = useCMS$1();
5694
- React.useState(false);
5695
- return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(
5696
- Header,
5697
- {
5698
- onClick: () => {
5699
- const state = tinaForm.finalForm.getState();
5700
- if (state.invalid === true) {
5701
- cms.alerts.error("Cannot navigate away from an invalid form.");
5702
- return;
5837
+ const Group = wrapFieldWithNoHeader(
5838
+ ({ tinaForm, field }) => {
5839
+ const cms = useCMS$1();
5840
+ return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(
5841
+ Header,
5842
+ {
5843
+ onClick: () => {
5844
+ const state = tinaForm.finalForm.getState();
5845
+ if (state.invalid === true) {
5846
+ cms.alerts.error("Cannot navigate away from an invalid form.");
5847
+ return;
5848
+ }
5849
+ cms.dispatch({
5850
+ type: "forms:set-active-field-name",
5851
+ value: { formId: tinaForm.id, fieldName: field.name }
5852
+ });
5703
5853
  }
5704
- cms.dispatch({
5705
- type: "forms:set-active-field-name",
5706
- value: { formId: tinaForm.id, fieldName: field.name }
5707
- });
5708
- }
5709
- },
5710
- field.label || field.name
5711
- ));
5712
- });
5854
+ },
5855
+ field.label || field.name,
5856
+ field.description && /* @__PURE__ */ React.createElement(
5857
+ "span",
5858
+ {
5859
+ className: `block font-sans text-xs italic font-light text-gray-400 pt-0.5 whitespace-normal m-0`,
5860
+ dangerouslySetInnerHTML: { __html: field.description }
5861
+ }
5862
+ )
5863
+ ));
5864
+ }
5865
+ );
5713
5866
  const Header = ({ onClick, children }) => {
5714
5867
  return /* @__PURE__ */ React.createElement("div", { className: "pt-1 mb-5" }, /* @__PURE__ */ React.createElement(
5715
5868
  "button",
@@ -10206,7 +10359,7 @@ const SyncStatus = ({ cms, setEventsOpen }) => {
10206
10359
  "Event Log"
10207
10360
  ));
10208
10361
  };
10209
- const version = "2.2.9";
10362
+ const version = "2.4.0";
10210
10363
  const Nav = ({
10211
10364
  isLocalMode,
10212
10365
  className = "",
@@ -12737,15 +12890,14 @@ const FormBuilder = ({
12737
12890
  fields: fieldGroup.fields
12738
12891
  }
12739
12892
  ) : /* @__PURE__ */ React.createElement(NoFieldsPlaceholder, null)
12740
- )), !hideFooter && /* @__PURE__ */ React.createElement("div", { className: "relative flex-none w-full h-16 px-6 bg-white border-t border-gray-100 flex items-center justify-center" }, /* @__PURE__ */ React.createElement("div", { className: "flex-1 w-full flex justify-between gap-4 items-center max-w-form" }, tinaForm.reset && /* @__PURE__ */ React.createElement(
12893
+ )), !hideFooter && /* @__PURE__ */ React.createElement("div", { className: "relative flex-none w-full h-16 px-12 bg-white border-t border-gray-100 flex items-center justify-end" }, /* @__PURE__ */ React.createElement("div", { className: "flex-1 w-full justify-end gap-2 flex items-center max-w-form" }, tinaForm.reset && /* @__PURE__ */ React.createElement(
12741
12894
  ResetForm,
12742
12895
  {
12743
12896
  pristine,
12744
12897
  reset: async () => {
12745
12898
  finalForm.reset();
12746
12899
  await tinaForm.reset();
12747
- },
12748
- style: { flexGrow: 1 }
12900
+ }
12749
12901
  },
12750
12902
  tinaForm.buttons.reset
12751
12903
  ), /* @__PURE__ */ React.createElement(
@@ -12754,8 +12906,7 @@ const FormBuilder = ({
12754
12906
  onClick: safeHandleSubmit,
12755
12907
  disabled: !canSubmit,
12756
12908
  busy: submitting,
12757
- variant: "primary",
12758
- style: { flexGrow: 3 }
12909
+ variant: "primary"
12759
12910
  },
12760
12911
  submitting && /* @__PURE__ */ React.createElement(LoadingDots, null),
12761
12912
  !submitting && tinaForm.buttons.save
@@ -13725,6 +13876,7 @@ const unsupportedItemsInTable = /* @__PURE__ */ new Set([
13725
13876
  "Unordered List",
13726
13877
  "Ordered List",
13727
13878
  "Quote",
13879
+ "Mermaid",
13728
13880
  "Heading 1",
13729
13881
  "Heading 2",
13730
13882
  "Heading 3",
@@ -13924,7 +14076,7 @@ const TooltipContent = withCn(
13924
14076
  withProps(TooltipPrimitive.Content, {
13925
14077
  sideOffset: 4
13926
14078
  }),
13927
- "z-50 overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md"
14079
+ "z-[9999] overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md"
13928
14080
  );
13929
14081
  function withTooltip(Component2) {
13930
14082
  return React__default.forwardRef(function ExtendComponent({ tooltip, tooltipContentProps, tooltipProps, ...props }, ref) {
@@ -14050,30 +14202,42 @@ const FixedToolbar = withCn(
14050
14202
  Toolbar,
14051
14203
  "p-1 sticky left-0 top-0 z-50 w-full justify-between overflow-x-auto border border-border bg-background"
14052
14204
  );
14053
- const MarkToolbarButton = withRef(({ clear, nodeType, ...rest }, ref) => {
14054
- const state = useMarkToolbarButtonState({ clear, nodeType });
14055
- const { props } = useMarkToolbarButton(state);
14056
- return /* @__PURE__ */ React__default.createElement(ToolbarButton, { ref, ...props, ...rest });
14057
- });
14058
- const IndentListToolbarButton = withRef(({ nodeType = ELEMENT_UL }, ref) => {
14059
- const editor = useEditorState();
14060
- const state = useListToolbarButtonState({ nodeType });
14061
- const { props } = useListToolbarButton(state);
14062
- return /* @__PURE__ */ React__default.createElement(
14063
- ToolbarButton,
14064
- {
14065
- ref,
14066
- tooltip: nodeType === ELEMENT_UL ? "Bulleted List" : "Numbered List",
14067
- ...props,
14068
- onClick: (e) => {
14069
- e.preventDefault();
14070
- e.stopPropagation();
14071
- toggleList(editor, { type: nodeType });
14205
+ const useResize = (ref, callback) => {
14206
+ React__default.useEffect(() => {
14207
+ const resizeObserver = new ResizeObserver((entries) => {
14208
+ for (const entry of entries) {
14209
+ callback(entry);
14072
14210
  }
14073
- },
14074
- nodeType === ELEMENT_UL ? /* @__PURE__ */ React__default.createElement(Icons.ul, null) : /* @__PURE__ */ React__default.createElement(Icons.ol, null)
14075
- );
14076
- });
14211
+ });
14212
+ if (ref.current) {
14213
+ resizeObserver.observe(ref.current);
14214
+ }
14215
+ return () => resizeObserver.disconnect();
14216
+ }, [ref.current]);
14217
+ };
14218
+ const STANDARD_ICON_WIDTH = 32;
14219
+ const HEADING_ICON_WITH_TEXT = 127;
14220
+ const HEADING_ICON_ONLY = 58;
14221
+ const EMBED_ICON_WIDTH = 78;
14222
+ const CONTAINER_MD_BREAKPOINT = 448;
14223
+ const FLOAT_BUTTON_WIDTH = 25;
14224
+ const HEADING_LABEL = "Headings";
14225
+ const ToolbarContext = createContext(void 0);
14226
+ const ToolbarProvider = ({
14227
+ tinaForm,
14228
+ templates,
14229
+ overrides,
14230
+ children
14231
+ }) => {
14232
+ return /* @__PURE__ */ React__default.createElement(ToolbarContext.Provider, { value: { tinaForm, templates, overrides } }, children);
14233
+ };
14234
+ const useToolbarContext = () => {
14235
+ const context = useContext(ToolbarContext);
14236
+ if (!context) {
14237
+ throw new Error("useToolbarContext must be used within a ToolbarProvider");
14238
+ }
14239
+ return context;
14240
+ };
14077
14241
  const items$1 = [
14078
14242
  {
14079
14243
  description: "Paragraph",
@@ -14181,42 +14345,6 @@ function HeadingsMenu(props) {
14181
14345
  ))
14182
14346
  )));
14183
14347
  }
14184
- const LinkToolbarButton = withRef((rest, ref) => {
14185
- const state = useLinkToolbarButtonState();
14186
- const { props } = useLinkToolbarButton(state);
14187
- return /* @__PURE__ */ React__default.createElement(ToolbarButton, { ref, tooltip: "Link", ...props, ...rest }, /* @__PURE__ */ React__default.createElement(Icons.link, null));
14188
- });
14189
- const useBlockQuoteToolbarButtonState = () => {
14190
- const editor = useEditorState();
14191
- const isBlockActive = () => helpers.isNodeActive(editor, ELEMENT_BLOCKQUOTE$1);
14192
- return {
14193
- pressed: isBlockActive()
14194
- };
14195
- };
14196
- const useBlockQuoteToolbarButton = (state) => {
14197
- const editor = useEditorState();
14198
- const onClick = () => {
14199
- toggleNodeType(editor, {
14200
- activeType: ELEMENT_BLOCKQUOTE$1
14201
- });
14202
- };
14203
- const onMouseDown = (e) => {
14204
- e.preventDefault();
14205
- e.stopPropagation();
14206
- };
14207
- return {
14208
- props: {
14209
- onClick,
14210
- onMouseDown,
14211
- pressed: state.pressed
14212
- }
14213
- };
14214
- };
14215
- const QuoteToolbarButton = withRef(({ clear, ...rest }, ref) => {
14216
- const state = useBlockQuoteToolbarButtonState();
14217
- const { props } = useBlockQuoteToolbarButton(state);
14218
- return /* @__PURE__ */ React__default.createElement(ToolbarButton, { ref, tooltip: "Link", ...rest, ...props }, /* @__PURE__ */ React__default.createElement(Icons.quote, null));
14219
- });
14220
14348
  const useCodeBlockToolbarButtonState = () => {
14221
14349
  const editor = useEditorState();
14222
14350
  const isBlockActive = () => helpers.isNodeActive(editor, ELEMENT_CODE_BLOCK$1);
@@ -14278,101 +14406,67 @@ const ImageToolbarButton = withRef(({ clear, ...rest }, ref) => {
14278
14406
  const { props } = useImageToolbarButton(state);
14279
14407
  return /* @__PURE__ */ React__default.createElement(ToolbarButton, { ref, tooltip: "Link", ...rest, ...props }, /* @__PURE__ */ React__default.createElement(Icons.image, null));
14280
14408
  });
14281
- const useRawMarkdownToolbarButton = () => {
14282
- const { setRawMode } = useEditorContext();
14409
+ const IndentListToolbarButton = withRef(({ nodeType = ELEMENT_UL }, ref) => {
14410
+ const editor = useEditorState();
14411
+ const state = useListToolbarButtonState({ nodeType });
14412
+ const { props } = useListToolbarButton(state);
14413
+ return /* @__PURE__ */ React__default.createElement(
14414
+ ToolbarButton,
14415
+ {
14416
+ ref,
14417
+ tooltip: nodeType === ELEMENT_UL ? "Bulleted List" : "Numbered List",
14418
+ ...props,
14419
+ onClick: (e) => {
14420
+ e.preventDefault();
14421
+ e.stopPropagation();
14422
+ toggleList(editor, { type: nodeType });
14423
+ }
14424
+ },
14425
+ nodeType === ELEMENT_UL ? /* @__PURE__ */ React__default.createElement(Icons.ul, null) : /* @__PURE__ */ React__default.createElement(Icons.ol, null)
14426
+ );
14427
+ });
14428
+ const LinkToolbarButton = withRef((rest, ref) => {
14429
+ const state = useLinkToolbarButtonState();
14430
+ const { props } = useLinkToolbarButton(state);
14431
+ return /* @__PURE__ */ React__default.createElement(ToolbarButton, { ref, tooltip: "Link", ...props, ...rest }, /* @__PURE__ */ React__default.createElement(Icons.link, null));
14432
+ });
14433
+ const MarkToolbarButton = withRef(({ clear, nodeType, ...rest }, ref) => {
14434
+ const state = useMarkToolbarButtonState({ clear, nodeType });
14435
+ const { props } = useMarkToolbarButton(state);
14436
+ return /* @__PURE__ */ React__default.createElement(ToolbarButton, { ref, ...props, ...rest });
14437
+ });
14438
+ const useMermaidToolbarButtonState = () => {
14439
+ const editor = useEditorState();
14440
+ const isBlockActive = () => helpers.isNodeActive(editor, ELEMENT_MERMAID);
14441
+ return {
14442
+ pressed: isBlockActive()
14443
+ };
14444
+ };
14445
+ const useMermaidToolbarButton = (state) => {
14446
+ const editor = useEditorState();
14447
+ const onClick = () => {
14448
+ insertEmptyElement(editor, ELEMENT_MERMAID, {
14449
+ nextBlock: true,
14450
+ select: true
14451
+ });
14452
+ };
14283
14453
  const onMouseDown = (e) => {
14284
- setRawMode(true);
14454
+ e.preventDefault();
14455
+ e.stopPropagation();
14285
14456
  };
14286
14457
  return {
14287
14458
  props: {
14459
+ onClick,
14288
14460
  onMouseDown,
14289
- pressed: false
14461
+ pressed: state.pressed
14290
14462
  }
14291
14463
  };
14292
14464
  };
14293
- const RawMarkdownToolbarButton = withRef(({ clear, ...rest }, ref) => {
14294
- const { props } = useRawMarkdownToolbarButton();
14295
- return /* @__PURE__ */ React__default.createElement(ToolbarButton, { ref, tooltip: "Link", ...rest, ...props }, /* @__PURE__ */ React__default.createElement(Icons.raw, null));
14465
+ const MermaidToolbarButton = withRef(({ clear, ...rest }, ref) => {
14466
+ const state = useMermaidToolbarButtonState();
14467
+ const { props } = useMermaidToolbarButton(state);
14468
+ return /* @__PURE__ */ React__default.createElement(ToolbarButton, { ref, tooltip: "Mermaid", ...rest, ...props }, /* @__PURE__ */ React__default.createElement(Icons.mermaid, null));
14296
14469
  });
14297
- const ToolbarContext = createContext(void 0);
14298
- const ToolbarProvider = ({
14299
- tinaForm,
14300
- templates,
14301
- overrides,
14302
- children
14303
- }) => {
14304
- return /* @__PURE__ */ React__default.createElement(ToolbarContext.Provider, { value: { tinaForm, templates, overrides } }, children);
14305
- };
14306
- const useToolbarContext = () => {
14307
- const context = useContext(ToolbarContext);
14308
- if (!context) {
14309
- throw new Error("useToolbarContext must be used within a ToolbarProvider");
14310
- }
14311
- return context;
14312
- };
14313
- function TemplatesToolbarButton() {
14314
- const { templates } = useToolbarContext();
14315
- const editor = useEditorState();
14316
- return /* @__PURE__ */ React__default.createElement(EmbedButton, { templates, editor });
14317
- }
14318
- const EmbedButton = ({ editor, templates }) => {
14319
- const [open2, setOpen] = useState(false);
14320
- const [filteredTemplates, setFilteredTemplates] = useState(templates);
14321
- const filterChange = (e) => {
14322
- const filterText = e.target.value.toLowerCase();
14323
- setFilteredTemplates(
14324
- templates.filter(
14325
- (template) => template.name.toLowerCase().includes(filterText)
14326
- )
14327
- );
14328
- };
14329
- return /* @__PURE__ */ React__default.createElement(DropdownMenu, { open: open2, onOpenChange: setOpen }, /* @__PURE__ */ React__default.createElement(DropdownMenuTrigger, { className: "inline-flex items-center rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg:not([data-icon])]:size-5 h-9 px-2 bg-transparent hover:bg-muted hover:text-muted-foreground aria-checked:bg-accent aria-checked:text-accent-foreground my-1 justify-between pr-1" }, /* @__PURE__ */ React__default.createElement("span", { className: "flex" }, "Embed"), /* @__PURE__ */ React__default.createElement(
14330
- PlusIcon,
14331
- {
14332
- className: `origin-center transition-all ease-out duration-150 ${open2 ? "rotate-45" : ""}`
14333
- }
14334
- )), /* @__PURE__ */ React__default.createElement(DropdownMenuContent, { className: "max-h-48 overflow-y-auto" }, templates.length > 10 && /* @__PURE__ */ React__default.createElement(
14335
- "input",
14336
- {
14337
- type: "text",
14338
- placeholder: "Filter templates...",
14339
- className: "w-full p-2 border border-gray-300 rounded-md",
14340
- onChange: filterChange
14341
- }
14342
- ), /* @__PURE__ */ React__default.createElement(DropdownMenuSeparator, null), filteredTemplates.map((template) => /* @__PURE__ */ React__default.createElement(
14343
- DropdownMenuItem,
14344
- {
14345
- key: template.name,
14346
- onMouseDown: (e) => {
14347
- e.preventDefault();
14348
- close();
14349
- insertMDX(editor, template);
14350
- },
14351
- className: ""
14352
- },
14353
- template.label || template.name
14354
- ))));
14355
- };
14356
- const STANDARD_ICON_WIDTH = 32;
14357
- const HEADING_ICON_WITH_TEXT = 127;
14358
- const HEADING_ICON_ONLY = 58;
14359
- const EMBED_ICON_WIDTH = 78;
14360
- const CONTAINER_MD_BREAKPOINT = 448;
14361
- const FLOAT_BUTTON_WIDTH = 25;
14362
- const HEADING_LABEL = "Headings";
14363
- const useResize = (ref, callback) => {
14364
- React__default.useEffect(() => {
14365
- const resizeObserver = new ResizeObserver((entries) => {
14366
- for (const entry of entries) {
14367
- callback(entry);
14368
- }
14369
- });
14370
- if (ref.current) {
14371
- resizeObserver.observe(ref.current);
14372
- }
14373
- return () => resizeObserver.disconnect();
14374
- }, [ref.current]);
14375
- };
14376
14470
  function OverflowMenu({
14377
14471
  children,
14378
14472
  ...props
@@ -14382,6 +14476,7 @@ function OverflowMenu({
14382
14476
  ToolbarButton,
14383
14477
  {
14384
14478
  showArrow: false,
14479
+ "data-testid": "rich-text-editor-overflow-menu-button",
14385
14480
  className: "lg:min-w-[130px]",
14386
14481
  isDropdown: true,
14387
14482
  pressed: openState.open,
@@ -14390,6 +14485,63 @@ function OverflowMenu({
14390
14485
  /* @__PURE__ */ React__default.createElement(Icons.overflow, { className: "size-5" })
14391
14486
  )), /* @__PURE__ */ React__default.createElement(DropdownMenuContent, { align: "start", className: "min-w-0 flex flex-grow" }, children));
14392
14487
  }
14488
+ const useBlockQuoteToolbarButtonState = () => {
14489
+ const editor = useEditorState();
14490
+ const isBlockActive = () => helpers.isNodeActive(editor, ELEMENT_BLOCKQUOTE$1);
14491
+ return {
14492
+ pressed: isBlockActive()
14493
+ };
14494
+ };
14495
+ const useBlockQuoteToolbarButton = (state) => {
14496
+ const editor = useEditorState();
14497
+ const onClick = () => {
14498
+ toggleNodeType(editor, {
14499
+ activeType: ELEMENT_BLOCKQUOTE$1
14500
+ });
14501
+ };
14502
+ const onMouseDown = (e) => {
14503
+ e.preventDefault();
14504
+ e.stopPropagation();
14505
+ };
14506
+ return {
14507
+ props: {
14508
+ onClick,
14509
+ onMouseDown,
14510
+ pressed: state.pressed
14511
+ }
14512
+ };
14513
+ };
14514
+ const QuoteToolbarButton = withRef(({ clear, ...rest }, ref) => {
14515
+ const state = useBlockQuoteToolbarButtonState();
14516
+ const { props } = useBlockQuoteToolbarButton(state);
14517
+ return /* @__PURE__ */ React__default.createElement(ToolbarButton, { ref, tooltip: "Link", ...rest, ...props }, /* @__PURE__ */ React__default.createElement(Icons.quote, null));
14518
+ });
14519
+ const useRawMarkdownToolbarButton = () => {
14520
+ const { setRawMode } = useEditorContext();
14521
+ const onMouseDown = (e) => {
14522
+ setRawMode(true);
14523
+ };
14524
+ return {
14525
+ props: {
14526
+ onMouseDown,
14527
+ pressed: false
14528
+ }
14529
+ };
14530
+ };
14531
+ const RawMarkdownToolbarButton = withRef(({ clear, ...rest }, ref) => {
14532
+ const { props } = useRawMarkdownToolbarButton();
14533
+ return /* @__PURE__ */ React__default.createElement(
14534
+ ToolbarButton,
14535
+ {
14536
+ ref,
14537
+ tooltip: "Link",
14538
+ ...rest,
14539
+ ...props,
14540
+ "data-testid": "markdown-button"
14541
+ },
14542
+ /* @__PURE__ */ React__default.createElement(Icons.raw, null)
14543
+ );
14544
+ });
14393
14545
  function TableDropdownMenu(props) {
14394
14546
  const tableSelected = useEditorSelector(
14395
14547
  (editor2) => someNode(editor2, { match: { type: ELEMENT_TABLE$1 } }),
@@ -14492,6 +14644,49 @@ function TableDropdownMenu(props) {
14492
14644
  )))
14493
14645
  ));
14494
14646
  }
14647
+ function TemplatesToolbarButton() {
14648
+ const { templates } = useToolbarContext();
14649
+ const editor = useEditorState();
14650
+ return /* @__PURE__ */ React__default.createElement(EmbedButton, { templates, editor });
14651
+ }
14652
+ const EmbedButton = ({ editor, templates }) => {
14653
+ const [open2, setOpen] = useState(false);
14654
+ const [filteredTemplates, setFilteredTemplates] = useState(templates);
14655
+ const filterChange = (e) => {
14656
+ const filterText = e.target.value.toLowerCase();
14657
+ setFilteredTemplates(
14658
+ templates.filter(
14659
+ (template) => template.name.toLowerCase().includes(filterText)
14660
+ )
14661
+ );
14662
+ };
14663
+ return /* @__PURE__ */ React__default.createElement(DropdownMenu, { open: open2, onOpenChange: setOpen }, /* @__PURE__ */ React__default.createElement(DropdownMenuTrigger, { className: "inline-flex items-center rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg:not([data-icon])]:size-5 h-9 px-2 bg-transparent hover:bg-muted hover:text-muted-foreground aria-checked:bg-accent aria-checked:text-accent-foreground my-1 justify-between pr-1" }, /* @__PURE__ */ React__default.createElement("span", { className: "flex" }, "Embed"), /* @__PURE__ */ React__default.createElement(
14664
+ PlusIcon,
14665
+ {
14666
+ className: `origin-center transition-all ease-out duration-150 ${open2 ? "rotate-45" : ""}`
14667
+ }
14668
+ )), /* @__PURE__ */ React__default.createElement(DropdownMenuContent, { className: "max-h-48 overflow-y-auto" }, templates.length > 10 && /* @__PURE__ */ React__default.createElement(
14669
+ "input",
14670
+ {
14671
+ type: "text",
14672
+ placeholder: "Filter templates...",
14673
+ className: "w-full p-2 border border-gray-300 rounded-md",
14674
+ onChange: filterChange
14675
+ }
14676
+ ), /* @__PURE__ */ React__default.createElement(DropdownMenuSeparator, null), filteredTemplates.map((template) => /* @__PURE__ */ React__default.createElement(
14677
+ DropdownMenuItem,
14678
+ {
14679
+ key: template.name,
14680
+ onMouseDown: (e) => {
14681
+ e.preventDefault();
14682
+ close();
14683
+ insertMDX(editor, template);
14684
+ },
14685
+ className: ""
14686
+ },
14687
+ template.label || template.name
14688
+ ))));
14689
+ };
14495
14690
  const toolbarItems = {
14496
14691
  heading: {
14497
14692
  label: HEADING_LABEL,
@@ -14544,6 +14739,11 @@ const toolbarItems = {
14544
14739
  width: () => STANDARD_ICON_WIDTH,
14545
14740
  Component: /* @__PURE__ */ React__default.createElement(CodeBlockToolbarButton, null)
14546
14741
  },
14742
+ mermaid: {
14743
+ label: "Mermaid",
14744
+ width: () => STANDARD_ICON_WIDTH,
14745
+ Component: /* @__PURE__ */ React__default.createElement(MermaidToolbarButton, null)
14746
+ },
14547
14747
  table: {
14548
14748
  label: "Table",
14549
14749
  width: () => STANDARD_ICON_WIDTH,
@@ -14931,6 +15131,7 @@ const RichEditor = (props) => {
14931
15131
  createMdxBlockPlugin(),
14932
15132
  createMdxInlinePlugin(),
14933
15133
  createImgPlugin(),
15134
+ createMermaidPlugin(),
14934
15135
  createInvalidMarkdownPlugin(),
14935
15136
  createLinkPlugin({
14936
15137
  options: {
@@ -29938,6 +30139,7 @@ class TinaAdminApi {
29938
30139
  relativePath
29939
30140
  filename
29940
30141
  extension
30142
+ hasReferences
29941
30143
  }
29942
30144
  }
29943
30145
  }
@@ -30029,6 +30231,9 @@ class TinaAdminApi {
30029
30231
  document(collection:$collection, relativePath:$relativePath) {
30030
30232
  ... on Document {
30031
30233
  _values
30234
+ _sys {
30235
+ hasReferences
30236
+ }
30032
30237
  }
30033
30238
  }
30034
30239
  }`;
@@ -31755,6 +31960,23 @@ const CollectionListPage = () => {
31755
31960
  DeleteModal,
31756
31961
  {
31757
31962
  filename: vars.relativePath,
31963
+ checkRefsFunc: async () => {
31964
+ var _a2, _b2;
31965
+ try {
31966
+ const doc = await admin.fetchDocument(
31967
+ collection.name,
31968
+ vars.relativePath,
31969
+ true
31970
+ );
31971
+ return (_b2 = (_a2 = doc == null ? void 0 : doc.document) == null ? void 0 : _a2._sys) == null ? void 0 : _b2.hasReferences;
31972
+ } catch (error) {
31973
+ cms.alerts.error(
31974
+ "Document was not found, ask a developer for help or check the console for an error message"
31975
+ );
31976
+ console.error(error);
31977
+ throw error;
31978
+ }
31979
+ },
31758
31980
  deleteFunc: async () => {
31759
31981
  try {
31760
31982
  await admin.deleteDocument(vars);
@@ -31763,6 +31985,12 @@ const CollectionListPage = () => {
31763
31985
  );
31764
31986
  reFetchCollection();
31765
31987
  } catch (error) {
31988
+ if (error.message.indexOf("has references")) {
31989
+ cms.alerts.error(
31990
+ error.message.split("\n ").filter(Boolean)[1]
31991
+ );
31992
+ return;
31993
+ }
31766
31994
  cms.alerts.warn(
31767
31995
  "Document was not deleted, ask a developer for help or check the console for an error message"
31768
31996
  );
@@ -31814,6 +32042,12 @@ const CollectionListPage = () => {
31814
32042
  cms.alerts.info("Document was successfully renamed");
31815
32043
  reFetchCollection();
31816
32044
  } catch (error) {
32045
+ if (error.message.indexOf("has references")) {
32046
+ cms.alerts.error(
32047
+ error.message.split("\n ").filter(Boolean)[1]
32048
+ );
32049
+ return;
32050
+ }
31817
32051
  cms.alerts.warn(
31818
32052
  "Document was not renamed, ask a developer for help or check the console for an error message"
31819
32053
  );
@@ -32287,8 +32521,19 @@ const Breadcrumb = ({ folder, navigate, collectionName }) => {
32287
32521
  const NoDocumentsPlaceholder = () => {
32288
32522
  return /* @__PURE__ */ React__default.createElement("div", { className: "text-center px-5 py-3 flex flex-col items-center justify-center shadow border border-gray-100 bg-gray-50 border-b border-gray-200 w-full max-w-full rounded-lg" }, /* @__PURE__ */ React__default.createElement("p", { className: "text-base italic font-medium text-gray-300" }, "No documents found."));
32289
32523
  };
32290
- const DeleteModal = ({ close: close2, deleteFunc, filename }) => {
32291
- return /* @__PURE__ */ React__default.createElement(Modal, null, /* @__PURE__ */ React__default.createElement(PopupModal, null, /* @__PURE__ */ React__default.createElement(ModalHeader, { close: close2 }, "Delete ", filename), /* @__PURE__ */ React__default.createElement(ModalBody, { padded: true }, /* @__PURE__ */ React__default.createElement("p", null, `Are you sure you want to delete ${filename}?`)), /* @__PURE__ */ React__default.createElement(ModalActions, null, /* @__PURE__ */ React__default.createElement(Button$1, { style: { flexGrow: 2 }, onClick: close2 }, "Cancel"), /* @__PURE__ */ React__default.createElement(
32524
+ const DeleteModal = ({
32525
+ close: close2,
32526
+ deleteFunc,
32527
+ checkRefsFunc,
32528
+ filename
32529
+ }) => {
32530
+ const [hasRefs, setHasRefs] = React__default.useState();
32531
+ useEffect(() => {
32532
+ checkRefsFunc().then((result) => {
32533
+ setHasRefs(result);
32534
+ });
32535
+ }, [filename, checkRefsFunc]);
32536
+ return /* @__PURE__ */ React__default.createElement(Modal, null, /* @__PURE__ */ React__default.createElement(PopupModal, null, /* @__PURE__ */ React__default.createElement(ModalHeader, { close: close2 }, "Delete ", filename), /* @__PURE__ */ React__default.createElement(ModalBody, { padded: true }, /* @__PURE__ */ React__default.createElement("p", null, `Are you sure you want to delete ${filename}?${hasRefs ? " References to this document will also be deleted." : ""}`)), /* @__PURE__ */ React__default.createElement(ModalActions, null, /* @__PURE__ */ React__default.createElement(Button$1, { style: { flexGrow: 2 }, onClick: close2 }, "Cancel"), /* @__PURE__ */ React__default.createElement(
32292
32537
  Button$1,
32293
32538
  {
32294
32539
  style: { flexGrow: 3 },
@@ -33650,5 +33895,6 @@ export {
33650
33895
  useScreenPlugin,
33651
33896
  useTinaAuthRedirect,
33652
33897
  wrapFieldWithError,
33898
+ wrapFieldWithNoHeader,
33653
33899
  wrapFieldsWithMeta
33654
33900
  };