@underverse-ui/underverse 1.0.187 → 1.0.188

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -808,6 +808,8 @@ var en_default = {
808
808
  fileCardDesc: "Upload a file card attachment",
809
809
  formCheckbox: "Form Checkbox",
810
810
  formCheckboxDesc: "Insert an interactive checkbox field",
811
+ roundCheckbox: "Round Checkbox",
812
+ roundCheckboxDesc: "Insert a circular interactive checkbox",
811
813
  formRadio: "Form Radio Button",
812
814
  formRadioDesc: "Insert an interactive radio button field"
813
815
  },
@@ -907,7 +909,10 @@ var en_default = {
907
909
  alignVertical: "Vertical Alignment",
908
910
  alignVerticalTop: "Top Align",
909
911
  alignVerticalMiddle: "Middle Align",
910
- alignVerticalBottom: "Bottom Align"
912
+ alignVerticalBottom: "Bottom Align",
913
+ textDirection: "Text Direction",
914
+ horizontalText: "Horizontal Text",
915
+ verticalText: "Vertical Text"
911
916
  },
912
917
  callout: {
913
918
  selectEmoji: "Select Emoji",
@@ -1236,6 +1241,8 @@ var vi_default = {
1236
1241
  fileCardDesc: "T\u1EA3i l\xEAn t\u1EC7p tin \u0111\xEDnh k\xE8m",
1237
1242
  formCheckbox: "Checkbox bi\u1EC3u m\u1EABu",
1238
1243
  formCheckboxDesc: "Th\xEAm \xF4 checkbox bi\u1EC3u m\u1EABu",
1244
+ roundCheckbox: "Checkbox tr\xF2n",
1245
+ roundCheckboxDesc: "Th\xEAm checkbox t\u01B0\u01A1ng t\xE1c h\xECnh tr\xF2n",
1239
1246
  formRadio: "Radio bi\u1EC3u m\u1EABu",
1240
1247
  formRadioDesc: "Th\xEAm n\xFAt ch\u1ECDn m\u1ED9t (Radio) bi\u1EC3u m\u1EABu"
1241
1248
  },
@@ -1335,7 +1342,10 @@ var vi_default = {
1335
1342
  alignVertical: "C\u0103n l\u1EC1 d\u1ECDc",
1336
1343
  alignVerticalTop: "C\u0103n tr\xEAn",
1337
1344
  alignVerticalMiddle: "C\u0103n gi\u1EEFa",
1338
- alignVerticalBottom: "C\u0103n d\u01B0\u1EDBi"
1345
+ alignVerticalBottom: "C\u0103n d\u01B0\u1EDBi",
1346
+ textDirection: "H\u01B0\u1EDBng ch\u1EEF",
1347
+ horizontalText: "Ch\u1EEF ngang",
1348
+ verticalText: "Ch\u1EEF d\u1ECDc"
1339
1349
  },
1340
1350
  callout: {
1341
1351
  selectEmoji: "Ch\u1ECDn Bi\u1EC3u t\u01B0\u1EE3ng",
@@ -1664,6 +1674,8 @@ var ko_default = {
1664
1674
  fileCardDesc: "\uD30C\uC77C \uCE74\uB4DC \uCCA8\uBD80 \uD30C\uC77C\uC744 \uC5C5\uB85C\uB4DC\uD569\uB2C8\uB2E4",
1665
1675
  formCheckbox: "\uC591\uC2DD \uCCB4\uD06C\uBC15\uC2A4",
1666
1676
  formCheckboxDesc: "\uB300\uD654\uD615 \uCCB4\uD06C\uBC15\uC2A4 \uD544\uB4DC \uC0BD\uC785",
1677
+ roundCheckbox: "\uC6D0\uD615 \uCCB4\uD06C\uBC15\uC2A4",
1678
+ roundCheckboxDesc: "\uC6D0\uD615 \uB300\uD654\uD615 \uCCB4\uD06C\uBC15\uC2A4 \uC0BD\uC785",
1667
1679
  formRadio: "\uC591\uC2DD \uB77C\uB514\uC624 \uBC84\uD2BC",
1668
1680
  formRadioDesc: "\uB300\uD654\uD615 \uB77C\uB514\uC624 \uBC84\uD2BC \uD544\uB4DC \uC0BD\uC785"
1669
1681
  },
@@ -1763,7 +1775,10 @@ var ko_default = {
1763
1775
  alignVertical: "\uC138\uB85C \uB9DE\uCDA4",
1764
1776
  alignVerticalTop: "\uC704\uCABD \uB9DE\uCDA4",
1765
1777
  alignVerticalMiddle: "\uAC00\uC6B4\uB370 \uB9DE\uCDA4",
1766
- alignVerticalBottom: "\uC544\uB798\uCABD \uB9DE\uCDA4"
1778
+ alignVerticalBottom: "\uC544\uB798\uCABD \uB9DE\uCDA4",
1779
+ textDirection: "\uD14D\uC2A4\uD2B8 \uBC29\uD5A5",
1780
+ horizontalText: "\uAC00\uB85C\uC4F0\uAE30",
1781
+ verticalText: "\uC138\uB85C\uC4F0\uAE30"
1767
1782
  },
1768
1783
  callout: {
1769
1784
  selectEmoji: "\uC774\uBAA8\uC9C0 \uC120\uD0DD",
@@ -2092,6 +2107,8 @@ var ja_default = {
2092
2107
  fileCardDesc: "\u30D5\u30A1\u30A4\u30EB\u30AB\u30FC\u30C9\u306E\u6DFB\u4ED8\u30D5\u30A1\u30A4\u30EB\u3092\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u3057\u307E\u3059",
2093
2108
  formCheckbox: "\u30D5\u30A9\u30FC\u30E0\u30C1\u30A7\u30C3\u30AF\u30DC\u30C3\u30AF\u30B9",
2094
2109
  formCheckboxDesc: "\u30A4\u30F3\u30BF\u30E9\u30AF\u30C6\u30A3\u30D6\u306A\u30C1\u30A7\u30C3\u30AF\u30DC\u30C3\u30AF\u30B9\u3092\u633F\u5165\u3057\u307E\u3059",
2110
+ roundCheckbox: "\u4E38\u578B\u30C1\u30A7\u30C3\u30AF\u30DC\u30C3\u30AF\u30B9",
2111
+ roundCheckboxDesc: "\u4E38\u578B\u306E\u30A4\u30F3\u30BF\u30E9\u30AF\u30C6\u30A3\u30D6\u306A\u30C1\u30A7\u30C3\u30AF\u30DC\u30C3\u30AF\u30B9\u3092\u633F\u5165\u3057\u307E\u3059",
2095
2112
  formRadio: "\u30D5\u30A9\u30FC\u30E0\u30E9\u30B8\u30AA\u30DC\u30BF\u30F3",
2096
2113
  formRadioDesc: "\u30A4\u30F3\u30BF\u30E9\u30AF\u30C6\u30A3\u30D6\u306A\u30E9\u30B8\u30AA\u30DC\u30BF\u30F3\u3092\u633F\u5165\u3057\u307E\u3059"
2097
2114
  },
@@ -2191,7 +2208,10 @@ var ja_default = {
2191
2208
  alignVertical: "\u5782\u76F4\u63C3\u3048",
2192
2209
  alignVerticalTop: "\u4E0A\u63C3\u3048",
2193
2210
  alignVerticalMiddle: "\u4E0A\u4E0B\u4E2D\u592E\u63C3\u3048",
2194
- alignVerticalBottom: "\u4E0B\u63C3\u3048"
2211
+ alignVerticalBottom: "\u4E0B\u63C3\u3048",
2212
+ textDirection: "\u6587\u5B57\u65B9\u5411",
2213
+ horizontalText: "\u6A2A\u66F8\u304D",
2214
+ verticalText: "\u7E26\u66F8\u304D"
2195
2215
  },
2196
2216
  callout: {
2197
2217
  selectEmoji: "\u7D75\u6587\u5B57\u3092\u9078\u629E",
@@ -28200,6 +28220,7 @@ import { Check as Check10 } from "lucide-react";
28200
28220
  import { jsx as jsx82 } from "react/jsx-runtime";
28201
28221
  var FormCheckboxView = ({ node, updateAttributes, editor, selected }) => {
28202
28222
  const isChecked = !!node.attrs.checked;
28223
+ const isCircle = node.attrs.variant === "circle";
28203
28224
  const isEditable = editor.isEditable;
28204
28225
  const handleToggle = (e) => {
28205
28226
  if (!isEditable) return;
@@ -28229,7 +28250,8 @@ var FormCheckboxView = ({ node, updateAttributes, editor, selected }) => {
28229
28250
  onClick: handleToggle,
28230
28251
  onKeyDown: handleKeyDown2,
28231
28252
  className: cn(
28232
- "flex items-center justify-center w-5 h-5 rounded-md border text-primary-foreground transition-all duration-200 outline-none",
28253
+ "flex items-center justify-center w-5 h-5 border text-primary-foreground transition-all duration-200 outline-none",
28254
+ isCircle ? "rounded-full" : "rounded-md",
28233
28255
  isChecked ? "bg-primary border-primary scale-100" : "bg-background border-border/70 hover:border-primary/50",
28234
28256
  selected && "ring-2 ring-primary/30 ring-offset-1",
28235
28257
  isEditable && "focus-visible:ring-2 focus-visible:ring-primary/45 focus-visible:ring-offset-1 focus-visible:border-primary"
@@ -28301,6 +28323,11 @@ var FormCheckbox2 = Node5.create({
28301
28323
  name: attributes.name
28302
28324
  };
28303
28325
  }
28326
+ },
28327
+ variant: {
28328
+ default: "square",
28329
+ parseHTML: (element) => element.getAttribute("data-variant") === "circle" ? "circle" : "square",
28330
+ renderHTML: (attributes) => attributes.variant === "circle" ? { "data-variant": "circle" } : {}
28304
28331
  }
28305
28332
  };
28306
28333
  },
@@ -28593,6 +28620,7 @@ import {
28593
28620
  Bookmark as BookmarkIcon,
28594
28621
  Paperclip,
28595
28622
  CheckSquare,
28623
+ CircleCheckBig,
28596
28624
  CircleDot
28597
28625
  } from "lucide-react";
28598
28626
 
@@ -28654,6 +28682,8 @@ var DEFAULT_MESSAGES = {
28654
28682
  fileCardDesc: "Upload a file card attachment",
28655
28683
  formCheckbox: "Form Checkbox",
28656
28684
  formCheckboxDesc: "Insert an interactive checkbox field",
28685
+ roundCheckbox: "Round Checkbox",
28686
+ roundCheckboxDesc: "Insert a circular interactive checkbox",
28657
28687
  formRadio: "Form Radio Button",
28658
28688
  formRadioDesc: "Insert an interactive radio button field"
28659
28689
  };
@@ -28709,6 +28739,8 @@ function buildSlashCommandMessages(translate) {
28709
28739
  fileCardDesc: translate("slashCommand.fileCardDesc") || "Upload a file card attachment",
28710
28740
  formCheckbox: translate("slashCommand.formCheckbox") || "Form Checkbox",
28711
28741
  formCheckboxDesc: translate("slashCommand.formCheckboxDesc") || "Insert an interactive checkbox field",
28742
+ roundCheckbox: translate("slashCommand.roundCheckbox") || "Round Checkbox",
28743
+ roundCheckboxDesc: translate("slashCommand.roundCheckboxDesc") || "Insert a circular interactive checkbox",
28712
28744
  formRadio: translate("slashCommand.formRadio") || "Form Radio Button",
28713
28745
  formRadioDesc: translate("slashCommand.formRadioDesc") || "Insert an interactive radio button field"
28714
28746
  };
@@ -28855,10 +28887,20 @@ function buildSlashCommandItems({
28855
28887
  icon: CheckSquare,
28856
28888
  title: messages.formCheckbox,
28857
28889
  description: messages.formCheckboxDesc,
28890
+ searchTerms: ["checkbox", "square checkbox"],
28858
28891
  command: run(({ editor, range }) => {
28859
28892
  getCommandChain(editor, range).setFormCheckbox().run();
28860
28893
  })
28861
28894
  },
28895
+ {
28896
+ icon: CircleCheckBig,
28897
+ title: messages.roundCheckbox,
28898
+ description: messages.roundCheckboxDesc,
28899
+ searchTerms: ["roundcheckbox", "round checkbox", "circle checkbox"],
28900
+ command: run(({ editor, range }) => {
28901
+ getCommandChain(editor, range).setFormCheckbox({ variant: "circle" }).run();
28902
+ })
28903
+ },
28862
28904
  {
28863
28905
  icon: CircleDot,
28864
28906
  title: messages.formRadio,
@@ -28867,7 +28909,11 @@ function buildSlashCommandItems({
28867
28909
  getCommandChain(editor, range).setFormRadio({ name: `radio-group-${Math.random().toString(36).substring(2, 6)}` }).run();
28868
28910
  })
28869
28911
  }
28870
- ].filter((item) => item.title.toLowerCase().includes(query.toLowerCase()));
28912
+ ].filter((item) => {
28913
+ const normalizedQuery = query.trim().toLowerCase();
28914
+ if (!normalizedQuery) return true;
28915
+ return [item.title, item.description, ...item.searchTerms ?? []].some((value) => value.toLowerCase().includes(normalizedQuery));
28916
+ });
28871
28917
  }
28872
28918
  var SlashCommandList = forwardRef14((props, ref) => {
28873
28919
  const [selectedIndex, setSelectedIndex] = useResettingIndex2(props.items);
@@ -31674,6 +31720,11 @@ var CustomTableCell = TableCell2.extend({
31674
31720
  "data-vertical-align": attributes.verticalAlign
31675
31721
  };
31676
31722
  }
31723
+ },
31724
+ textDirection: {
31725
+ default: null,
31726
+ parseHTML: (element) => element.getAttribute("data-text-direction") === "vertical" || element.style.writingMode === "vertical-rl" ? "vertical" : null,
31727
+ renderHTML: (attributes) => attributes.textDirection === "vertical" ? { "data-text-direction": "vertical" } : {}
31677
31728
  }
31678
31729
  };
31679
31730
  },
@@ -31684,12 +31735,14 @@ var CustomTableCell = TableCell2.extend({
31684
31735
  const borderStyle = HTMLAttributes["data-border-style"];
31685
31736
  const borderWidth = HTMLAttributes["data-border-width"];
31686
31737
  const verticalAlign = HTMLAttributes["data-vertical-align"];
31738
+ const textDirection = HTMLAttributes["data-text-direction"];
31687
31739
  let mergedStyle = style;
31688
31740
  if (bg) mergedStyle += `; background-color: ${bg}`;
31689
31741
  if (borderColor) mergedStyle += `; border-color: ${borderColor}`;
31690
31742
  if (borderStyle) mergedStyle += `; border-style: ${borderStyle}`;
31691
31743
  if (borderWidth) mergedStyle += `; border-width: ${borderWidth}`;
31692
31744
  if (verticalAlign) mergedStyle += `; vertical-align: ${verticalAlign}`;
31745
+ if (textDirection === "vertical") mergedStyle += "; writing-mode: vertical-rl; text-orientation: mixed";
31693
31746
  mergedStyle = mergedStyle.replace(/^;/, "").trim();
31694
31747
  return [
31695
31748
  "td",
@@ -31793,6 +31846,11 @@ var CustomTableHeader = TableHeader2.extend({
31793
31846
  "data-vertical-align": attributes.verticalAlign
31794
31847
  };
31795
31848
  }
31849
+ },
31850
+ textDirection: {
31851
+ default: null,
31852
+ parseHTML: (element) => element.getAttribute("data-text-direction") === "vertical" || element.style.writingMode === "vertical-rl" ? "vertical" : null,
31853
+ renderHTML: (attributes) => attributes.textDirection === "vertical" ? { "data-text-direction": "vertical" } : {}
31796
31854
  }
31797
31855
  };
31798
31856
  },
@@ -31803,12 +31861,14 @@ var CustomTableHeader = TableHeader2.extend({
31803
31861
  const borderStyle = HTMLAttributes["data-border-style"];
31804
31862
  const borderWidth = HTMLAttributes["data-border-width"];
31805
31863
  const verticalAlign = HTMLAttributes["data-vertical-align"];
31864
+ const textDirection = HTMLAttributes["data-text-direction"];
31806
31865
  let mergedStyle = style;
31807
31866
  if (bg) mergedStyle += `; background-color: ${bg}`;
31808
31867
  if (borderColor) mergedStyle += `; border-color: ${borderColor}`;
31809
31868
  if (borderStyle) mergedStyle += `; border-style: ${borderStyle}`;
31810
31869
  if (borderWidth) mergedStyle += `; border-width: ${borderWidth}`;
31811
31870
  if (verticalAlign) mergedStyle += `; vertical-align: ${verticalAlign}`;
31871
+ if (textDirection === "vertical") mergedStyle += "; writing-mode: vertical-rl; text-orientation: mixed";
31812
31872
  mergedStyle = mergedStyle.replace(/^;/, "").trim();
31813
31873
  return [
31814
31874
  "th",
@@ -32002,6 +32062,7 @@ import {
32002
32062
  Bold as BoldIcon,
32003
32063
  ChevronDown as ChevronDown8,
32004
32064
  ChevronsUpDown,
32065
+ CircleCheckBig as CircleCheckBig2,
32005
32066
  Code as CodeIcon,
32006
32067
  FileCode as FileCode3,
32007
32068
  Heading1 as Heading1Icon,
@@ -32017,6 +32078,7 @@ import {
32017
32078
  Redo as RedoIcon,
32018
32079
  RotateCcw as RotateCcw2,
32019
32080
  Smile as Smile3,
32081
+ SquareCheckBig,
32020
32082
  Strikethrough as StrikethroughIcon,
32021
32083
  Subscript as SubscriptIcon,
32022
32084
  Superscript as SuperscriptIcon,
@@ -33051,6 +33113,7 @@ var EditorToolbar = ({
33051
33113
  const canMergeCells = hasTableContext && editor.can().mergeCells();
33052
33114
  const canSplitCell = hasTableContext && editor.can().splitCell();
33053
33115
  const currentCellVerticalAlign = normalizeStyleValue(editor.getAttributes("tableCell").verticalAlign || editor.getAttributes("tableHeader").verticalAlign) || "";
33116
+ const currentCellTextDirection = normalizeStyleValue(editor.getAttributes("tableCell").textDirection || editor.getAttributes("tableHeader").textDirection) || "horizontal";
33054
33117
  const currentFontFamily = normalizeStyleValue(textStyleAttrs.fontFamily);
33055
33118
  const currentFontSize = normalizeStyleValue(textStyleAttrs.fontSize);
33056
33119
  const currentTextColor = normalizeStyleValue(textStyleAttrs.color) || "inherit";
@@ -33112,6 +33175,34 @@ var EditorToolbar = ({
33112
33175
  children: /* @__PURE__ */ jsx91(ListIcon, { className: "w-4 h-4" })
33113
33176
  }
33114
33177
  ),
33178
+ /* @__PURE__ */ jsxs75(
33179
+ DropdownMenu,
33180
+ {
33181
+ trigger: /* @__PURE__ */ jsxs75(ToolbarButton, { onClick: () => {
33182
+ }, active: editor.isActive("formCheckbox"), title: t("slashCommand.formCheckbox"), children: [
33183
+ /* @__PURE__ */ jsx91(SquareCheckBig, { className: "w-4 h-4" }),
33184
+ /* @__PURE__ */ jsx91(ChevronDown8, { className: "w-3 h-3" })
33185
+ ] }),
33186
+ children: [
33187
+ /* @__PURE__ */ jsx91(
33188
+ DropdownMenuItem,
33189
+ {
33190
+ icon: SquareCheckBig,
33191
+ label: t("slashCommand.formCheckbox"),
33192
+ onClick: () => editor.chain().focus().setFormCheckbox().run()
33193
+ }
33194
+ ),
33195
+ /* @__PURE__ */ jsx91(
33196
+ DropdownMenuItem,
33197
+ {
33198
+ icon: CircleCheckBig2,
33199
+ label: t("slashCommand.roundCheckbox"),
33200
+ onClick: () => editor.chain().focus().setFormCheckbox({ variant: "circle" }).run()
33201
+ }
33202
+ )
33203
+ ]
33204
+ }
33205
+ ),
33115
33206
  /* @__PURE__ */ jsx91(
33116
33207
  DropdownMenu,
33117
33208
  {
@@ -33537,6 +33628,36 @@ var EditorToolbar = ({
33537
33628
  ] })
33538
33629
  ]
33539
33630
  }
33631
+ ),
33632
+ hasTableContext && /* @__PURE__ */ jsxs75(
33633
+ DropdownMenu,
33634
+ {
33635
+ trigger: /* @__PURE__ */ jsxs75(ToolbarButton, { onClick: () => {
33636
+ }, title: t("tableMenu.textDirection"), children: [
33637
+ currentCellTextDirection === "vertical" ? /* @__PURE__ */ jsx91(ArrowDown, { className: "w-4 h-4" }) : /* @__PURE__ */ jsx91(ArrowRight, { className: "w-4 h-4" }),
33638
+ /* @__PURE__ */ jsx91(ChevronDown8, { className: "w-3 h-3" })
33639
+ ] }),
33640
+ children: [
33641
+ /* @__PURE__ */ jsx91(
33642
+ DropdownMenuItem,
33643
+ {
33644
+ icon: ArrowRight,
33645
+ label: t("tableMenu.horizontalText"),
33646
+ onClick: () => applyTableCellAttribute(editor, "textDirection", null),
33647
+ active: currentCellTextDirection === "horizontal"
33648
+ }
33649
+ ),
33650
+ /* @__PURE__ */ jsx91(
33651
+ DropdownMenuItem,
33652
+ {
33653
+ icon: ArrowDown,
33654
+ label: t("tableMenu.verticalText"),
33655
+ onClick: () => applyTableCellAttribute(editor, "textDirection", "vertical"),
33656
+ active: currentCellTextDirection === "vertical"
33657
+ }
33658
+ )
33659
+ ]
33660
+ }
33540
33661
  )
33541
33662
  ] }),
33542
33663
  /* @__PURE__ */ jsx91(ToolbarDivider, {}),
@@ -33582,6 +33703,34 @@ var EditorToolbar = ({
33582
33703
  ]
33583
33704
  }
33584
33705
  ),
33706
+ /* @__PURE__ */ jsxs75(
33707
+ DropdownMenu,
33708
+ {
33709
+ trigger: /* @__PURE__ */ jsxs75(ToolbarButton, { onClick: () => {
33710
+ }, active: editor.isActive("formCheckbox"), title: t("slashCommand.formCheckbox"), children: [
33711
+ /* @__PURE__ */ jsx91(SquareCheckBig, { className: "w-4 h-4" }),
33712
+ /* @__PURE__ */ jsx91(ChevronDown8, { className: "w-3 h-3" })
33713
+ ] }),
33714
+ children: [
33715
+ /* @__PURE__ */ jsx91(
33716
+ DropdownMenuItem,
33717
+ {
33718
+ icon: SquareCheckBig,
33719
+ label: t("slashCommand.formCheckbox"),
33720
+ onClick: () => editor.chain().focus().setFormCheckbox().run()
33721
+ }
33722
+ ),
33723
+ /* @__PURE__ */ jsx91(
33724
+ DropdownMenuItem,
33725
+ {
33726
+ icon: CircleCheckBig2,
33727
+ label: t("slashCommand.roundCheckbox"),
33728
+ onClick: () => editor.chain().focus().setFormCheckbox({ variant: "circle" }).run()
33729
+ }
33730
+ )
33731
+ ]
33732
+ }
33733
+ ),
33585
33734
  isMediumFull && /* @__PURE__ */ jsx91(ToolbarButton, { onClick: () => editor.chain().focus().toggleBlockquote().run(), active: editor.isActive("blockquote"), title: t("toolbar.quote"), children: /* @__PURE__ */ jsx91(QuoteIcon, { className: "w-4 h-4" }) }),
33586
33735
  isFull && /* @__PURE__ */ jsxs75(
33587
33736
  DropdownMenu,
@@ -33977,7 +34126,9 @@ import {
33977
34126
  Sigma as Sigma2,
33978
34127
  AlignStartVertical as AlignStartVertical2,
33979
34128
  AlignCenterVertical as AlignCenterVertical2,
33980
- AlignEndVertical as AlignEndVertical2
34129
+ AlignEndVertical as AlignEndVertical2,
34130
+ ArrowDown as ArrowDown2,
34131
+ ArrowRight as ArrowRight2
33981
34132
  } from "lucide-react";
33982
34133
 
33983
34134
  // src/components/UEditor/table-formula-commands.ts
@@ -35053,6 +35204,7 @@ var BubbleMenuContent = ({
35053
35204
  const currentCellBorderStyle = editor.getAttributes("tableCell").borderStyle || editor.getAttributes("tableHeader").borderStyle || "solid";
35054
35205
  const currentCellBorderWidth = editor.getAttributes("tableCell").borderWidth || editor.getAttributes("tableHeader").borderWidth || "1px";
35055
35206
  const currentCellVerticalAlign = normalizeStyleValue(editor.getAttributes("tableCell").verticalAlign || editor.getAttributes("tableHeader").verticalAlign) || "";
35207
+ const currentCellTextDirection = normalizeStyleValue(editor.getAttributes("tableCell").textDirection || editor.getAttributes("tableHeader").textDirection) || "horizontal";
35056
35208
  const isInTable2 = isSelectionInTable(editor.state);
35057
35209
  const canMergeCells = isInTable2 && editor.can().mergeCells();
35058
35210
  const canSplitCell = isInTable2 && editor.can().splitCell();
@@ -35696,6 +35848,49 @@ var BubbleMenuContent = ({
35696
35848
  )
35697
35849
  ]
35698
35850
  }
35851
+ ),
35852
+ /* @__PURE__ */ jsxs76(
35853
+ DropdownMenu,
35854
+ {
35855
+ onOpenChange: (open) => {
35856
+ onKeepOpenChange?.(open);
35857
+ },
35858
+ trigger: /* @__PURE__ */ jsxs76(
35859
+ ToolbarButton,
35860
+ {
35861
+ onMouseDown: () => {
35862
+ onKeepOpenChange?.(true);
35863
+ },
35864
+ onClick: () => {
35865
+ },
35866
+ title: t("tableMenu.textDirection"),
35867
+ children: [
35868
+ currentCellTextDirection === "vertical" ? /* @__PURE__ */ jsx92(ArrowDown2, { className: "w-4 h-4" }) : /* @__PURE__ */ jsx92(ArrowRight2, { className: "w-4 h-4" }),
35869
+ /* @__PURE__ */ jsx92(ChevronDown9, { className: "w-3 h-3" })
35870
+ ]
35871
+ }
35872
+ ),
35873
+ children: [
35874
+ /* @__PURE__ */ jsx92(
35875
+ DropdownMenuItem,
35876
+ {
35877
+ icon: ArrowRight2,
35878
+ label: t("tableMenu.horizontalText"),
35879
+ onClick: () => applyTableCellAttribute2(editor, "textDirection", null, { focus: false }),
35880
+ active: currentCellTextDirection === "horizontal"
35881
+ }
35882
+ ),
35883
+ /* @__PURE__ */ jsx92(
35884
+ DropdownMenuItem,
35885
+ {
35886
+ icon: ArrowDown2,
35887
+ label: t("tableMenu.verticalText"),
35888
+ onClick: () => applyTableCellAttribute2(editor, "textDirection", "vertical", { focus: false }),
35889
+ active: currentCellTextDirection === "vertical"
35890
+ }
35891
+ )
35892
+ ]
35893
+ }
35699
35894
  )
35700
35895
  ] }),
35701
35896
  /* @__PURE__ */ jsx92(
@@ -40548,9 +40743,9 @@ import {
40548
40743
  AlignCenter as AlignCenter3,
40549
40744
  AlignLeft as AlignLeft3,
40550
40745
  AlignRight as AlignRight3,
40551
- ArrowDown as ArrowDown2,
40746
+ ArrowDown as ArrowDown3,
40552
40747
  ArrowLeft as ArrowLeft2,
40553
- ArrowRight as ArrowRight2,
40748
+ ArrowRight as ArrowRight3,
40554
40749
  ArrowUp as ArrowUp2,
40555
40750
  Copy as Copy3,
40556
40751
  Table as TableIcon2,
@@ -41617,7 +41812,7 @@ function TableControls({ editor, containerRef }) {
41617
41812
  },
41618
41813
  {
41619
41814
  label: t("tableMenu.addColumnAfter"),
41620
- icon: ArrowRight2,
41815
+ icon: ArrowRight3,
41621
41816
  onClick: () => runAtActiveCell((chain) => chain.addColumnAfter())
41622
41817
  },
41623
41818
  {
@@ -41627,7 +41822,7 @@ function TableControls({ editor, containerRef }) {
41627
41822
  },
41628
41823
  {
41629
41824
  label: t("tableMenu.addRowAfter"),
41630
- icon: ArrowDown2,
41825
+ icon: ArrowDown3,
41631
41826
  onClick: () => runAtActiveCell((chain) => chain.addRowAfter())
41632
41827
  },
41633
41828
  {
@@ -41668,7 +41863,7 @@ function TableControls({ editor, containerRef }) {
41668
41863
  },
41669
41864
  {
41670
41865
  label: t("tableMenu.addRowAfter"),
41671
- icon: ArrowDown2,
41866
+ icon: ArrowDown3,
41672
41867
  onClick: () => runAtCellPos(rowHandle.cellPos, (chain) => chain.addRowAfter())
41673
41868
  },
41674
41869
  {
@@ -41696,7 +41891,7 @@ function TableControls({ editor, containerRef }) {
41696
41891
  },
41697
41892
  {
41698
41893
  label: t("tableMenu.addColumnAfter"),
41699
- icon: ArrowRight2,
41894
+ icon: ArrowRight3,
41700
41895
  onClick: () => runAtCellPos(columnHandle.cellPos, (chain) => chain.addColumnAfter())
41701
41896
  },
41702
41897
  {
@@ -42935,6 +43130,7 @@ import {
42935
43130
  Undo as UndoIcon2,
42936
43131
  Square,
42937
43132
  CircleDot as CircleDot2,
43133
+ CircleCheckBig as CircleCheckBig3,
42938
43134
  Upload as Upload4
42939
43135
  } from "lucide-react";
42940
43136
 
@@ -43656,6 +43852,12 @@ var MenuBar = ({
43656
43852
  icon: Square,
43657
43853
  onClick: () => editor.chain().focus().setFormCheckbox().run()
43658
43854
  },
43855
+ {
43856
+ type: "action",
43857
+ label: t("slashCommand.roundCheckbox") || "Round Checkbox",
43858
+ icon: CircleCheckBig3,
43859
+ onClick: () => editor.chain().focus().setFormCheckbox({ variant: "circle" }).run()
43860
+ },
43659
43861
  {
43660
43862
  type: "action",
43661
43863
  label: t("menubar.formRadio") || "Form Radio Button",