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/admin/types.d.ts +3 -0
- package/dist/cache/node-cache.d.ts +1 -0
- package/dist/client.js +18 -16
- package/dist/client.mjs +1 -1
- package/dist/index.js +1239 -994
- package/dist/index.mjs +1214 -968
- package/dist/{node-cache-7fa2452c.mjs → node-cache-4c336858.mjs} +18 -11
- package/dist/rich-text/index.d.ts +3 -0
- package/dist/rich-text/index.js +3 -1
- package/dist/rich-text/index.mjs +3 -1
- package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/components/plate-ui/icons.d.ts +2 -0
- package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/components/plate-ui/mermaid-element.d.ts +11 -0
- package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/components/plate-ui/mermaid-toolbar-button.d.ts +20 -0
- package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/components/plate-ui/text-area.d.ts +5 -0
- package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/plugins/custom/mermaid-plugin.d.ts +2 -0
- package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/plugins/ui/code-block/index.d.ts +4 -2
- package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/plugins/ui/components.d.ts +10 -0
- package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/toolbar/toolbar-overrides.d.ts +1 -1
- package/dist/toolkit/fields/plugins/mdx-field-plugin/plate/toolbar/toolbar-provider.d.ts +1 -1
- package/dist/toolkit/fields/plugins/wrap-field-with-meta.d.ts +8 -0
- package/package.json +6 -5
- package/dist/__vite-browser-external-d06ac358.mjs +0 -4
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,
|
|
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 {
|
|
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 {
|
|
15
|
-
import {
|
|
16
|
-
import
|
|
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,
|
|
19
|
-
import
|
|
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 {
|
|
22
|
-
import
|
|
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
|
-
|
|
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-
|
|
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 =
|
|
5693
|
-
|
|
5694
|
-
|
|
5695
|
-
|
|
5696
|
-
|
|
5697
|
-
|
|
5698
|
-
|
|
5699
|
-
|
|
5700
|
-
|
|
5701
|
-
|
|
5702
|
-
|
|
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
|
-
|
|
5705
|
-
|
|
5706
|
-
|
|
5707
|
-
|
|
5708
|
-
|
|
5709
|
-
|
|
5710
|
-
|
|
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.
|
|
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-
|
|
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-
|
|
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
|
|
14054
|
-
|
|
14055
|
-
|
|
14056
|
-
|
|
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
|
-
|
|
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
|
|
14282
|
-
const
|
|
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
|
-
|
|
14454
|
+
e.preventDefault();
|
|
14455
|
+
e.stopPropagation();
|
|
14285
14456
|
};
|
|
14286
14457
|
return {
|
|
14287
14458
|
props: {
|
|
14459
|
+
onClick,
|
|
14288
14460
|
onMouseDown,
|
|
14289
|
-
pressed:
|
|
14461
|
+
pressed: state.pressed
|
|
14290
14462
|
}
|
|
14291
14463
|
};
|
|
14292
14464
|
};
|
|
14293
|
-
const
|
|
14294
|
-
const
|
|
14295
|
-
|
|
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 = ({
|
|
32291
|
-
|
|
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
|
};
|