@underverse-ui/underverse 1.0.187 → 1.0.189

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",
@@ -25660,7 +25680,8 @@ function DataTableHeader({
25660
25680
  const columnLabel = getColumnLabel(col.title) || col.key;
25661
25681
  const sortByText = sortByLabel ?? gi18n.sortBy ?? "Sort by";
25662
25682
  const sortLabel = `${sortByText} ${columnLabel}`;
25663
- const titleContent = /* @__PURE__ */ jsxs55("div", { className: "flex items-center gap-1", children: [
25683
+ const useEndIcon = col.iconPosition === "end";
25684
+ const titleContent = /* @__PURE__ */ jsxs55("div", { className: cn("flex items-center gap-1", useEndIcon && "flex-1 justify-between"), children: [
25664
25685
  /* @__PURE__ */ jsx68("span", { className: cn("font-medium whitespace-nowrap select-text", headerTitleClass), children: col.title }),
25665
25686
  col.sortable && /* @__PURE__ */ jsx68(
25666
25687
  Tooltip,
@@ -25673,8 +25694,8 @@ function DataTableHeader({
25673
25694
  type: "button",
25674
25695
  title: sortLabel,
25675
25696
  className: cn(
25676
- "p-1 rounded-lg transition-all duration-200 hover:bg-accent",
25677
- sort?.key === col.key ? "opacity-100 bg-accent" : "opacity-60 hover:opacity-100"
25697
+ "p-1 rounded-lg transition-all duration-200 hover:bg-foreground/10",
25698
+ sort?.key === col.key ? "opacity-100 bg-foreground/10" : "opacity-60 hover:opacity-100"
25678
25699
  ),
25679
25700
  onClick: () => {
25680
25701
  setCurPage(1);
@@ -25689,7 +25710,7 @@ function DataTableHeader({
25689
25710
  /* @__PURE__ */ jsx68(
25690
25711
  "path",
25691
25712
  {
25692
- d: "M7 8l3-3 3 3",
25713
+ d: "M5 7.5l5-5 5 5",
25693
25714
  stroke: "currentColor",
25694
25715
  strokeWidth: "1.5",
25695
25716
  strokeLinecap: "round",
@@ -25700,7 +25721,7 @@ function DataTableHeader({
25700
25721
  /* @__PURE__ */ jsx68(
25701
25722
  "path",
25702
25723
  {
25703
- d: "M7 12l3 3 3-3",
25724
+ d: "M5 12.5l5 5 5-5",
25704
25725
  stroke: "currentColor",
25705
25726
  strokeWidth: "1.5",
25706
25727
  strokeLinecap: "round",
@@ -25729,8 +25750,8 @@ function DataTableHeader({
25729
25750
  type: "button",
25730
25751
  title: gi18n.filterByColumn ? gi18n.filterByColumn(columnLabel) : `Filter by ${columnLabel}`,
25731
25752
  className: cn(
25732
- "p-1.5 rounded-lg transition-all duration-200 hover:bg-accent",
25733
- filters[col.key] ? "bg-accent opacity-100" : "opacity-60 hover:opacity-100"
25753
+ "p-1.5 rounded-lg transition-all duration-200 hover:bg-foreground/10",
25754
+ filters[col.key] ? "bg-foreground/10 opacity-100" : "opacity-60 hover:opacity-100"
25734
25755
  ),
25735
25756
  "aria-label": gi18n.filterByColumn ? gi18n.filterByColumn(columnLabel) : `Filter by ${columnLabel}`,
25736
25757
  children: /* @__PURE__ */ jsx68(FilterIcon, { className: "w-4 h-4" })
@@ -25765,7 +25786,8 @@ function DataTableHeader({
25765
25786
  headerMinHeightClass,
25766
25787
  isRightAlign && "justify-end",
25767
25788
  isCenterAlign && "justify-center",
25768
- !isRightAlign && !isCenterAlign && "justify-start"
25789
+ !isRightAlign && !isCenterAlign && "justify-start",
25790
+ useEndIcon && "w-full"
25769
25791
  ),
25770
25792
  children: isRightAlign ? /* @__PURE__ */ jsxs55(Fragment25, { children: [
25771
25793
  filterContent,
@@ -28200,6 +28222,7 @@ import { Check as Check10 } from "lucide-react";
28200
28222
  import { jsx as jsx82 } from "react/jsx-runtime";
28201
28223
  var FormCheckboxView = ({ node, updateAttributes, editor, selected }) => {
28202
28224
  const isChecked = !!node.attrs.checked;
28225
+ const isCircle = node.attrs.variant === "circle";
28203
28226
  const isEditable = editor.isEditable;
28204
28227
  const handleToggle = (e) => {
28205
28228
  if (!isEditable) return;
@@ -28229,7 +28252,8 @@ var FormCheckboxView = ({ node, updateAttributes, editor, selected }) => {
28229
28252
  onClick: handleToggle,
28230
28253
  onKeyDown: handleKeyDown2,
28231
28254
  className: cn(
28232
- "flex items-center justify-center w-5 h-5 rounded-md border text-primary-foreground transition-all duration-200 outline-none",
28255
+ "flex items-center justify-center w-5 h-5 border text-primary-foreground transition-all duration-200 outline-none",
28256
+ isCircle ? "rounded-full" : "rounded-md",
28233
28257
  isChecked ? "bg-primary border-primary scale-100" : "bg-background border-border/70 hover:border-primary/50",
28234
28258
  selected && "ring-2 ring-primary/30 ring-offset-1",
28235
28259
  isEditable && "focus-visible:ring-2 focus-visible:ring-primary/45 focus-visible:ring-offset-1 focus-visible:border-primary"
@@ -28301,6 +28325,11 @@ var FormCheckbox2 = Node5.create({
28301
28325
  name: attributes.name
28302
28326
  };
28303
28327
  }
28328
+ },
28329
+ variant: {
28330
+ default: "square",
28331
+ parseHTML: (element) => element.getAttribute("data-variant") === "circle" ? "circle" : "square",
28332
+ renderHTML: (attributes) => attributes.variant === "circle" ? { "data-variant": "circle" } : {}
28304
28333
  }
28305
28334
  };
28306
28335
  },
@@ -28593,6 +28622,7 @@ import {
28593
28622
  Bookmark as BookmarkIcon,
28594
28623
  Paperclip,
28595
28624
  CheckSquare,
28625
+ CircleCheckBig,
28596
28626
  CircleDot
28597
28627
  } from "lucide-react";
28598
28628
 
@@ -28654,6 +28684,8 @@ var DEFAULT_MESSAGES = {
28654
28684
  fileCardDesc: "Upload a file card attachment",
28655
28685
  formCheckbox: "Form Checkbox",
28656
28686
  formCheckboxDesc: "Insert an interactive checkbox field",
28687
+ roundCheckbox: "Round Checkbox",
28688
+ roundCheckboxDesc: "Insert a circular interactive checkbox",
28657
28689
  formRadio: "Form Radio Button",
28658
28690
  formRadioDesc: "Insert an interactive radio button field"
28659
28691
  };
@@ -28709,6 +28741,8 @@ function buildSlashCommandMessages(translate) {
28709
28741
  fileCardDesc: translate("slashCommand.fileCardDesc") || "Upload a file card attachment",
28710
28742
  formCheckbox: translate("slashCommand.formCheckbox") || "Form Checkbox",
28711
28743
  formCheckboxDesc: translate("slashCommand.formCheckboxDesc") || "Insert an interactive checkbox field",
28744
+ roundCheckbox: translate("slashCommand.roundCheckbox") || "Round Checkbox",
28745
+ roundCheckboxDesc: translate("slashCommand.roundCheckboxDesc") || "Insert a circular interactive checkbox",
28712
28746
  formRadio: translate("slashCommand.formRadio") || "Form Radio Button",
28713
28747
  formRadioDesc: translate("slashCommand.formRadioDesc") || "Insert an interactive radio button field"
28714
28748
  };
@@ -28855,10 +28889,20 @@ function buildSlashCommandItems({
28855
28889
  icon: CheckSquare,
28856
28890
  title: messages.formCheckbox,
28857
28891
  description: messages.formCheckboxDesc,
28892
+ searchTerms: ["checkbox", "square checkbox"],
28858
28893
  command: run(({ editor, range }) => {
28859
28894
  getCommandChain(editor, range).setFormCheckbox().run();
28860
28895
  })
28861
28896
  },
28897
+ {
28898
+ icon: CircleCheckBig,
28899
+ title: messages.roundCheckbox,
28900
+ description: messages.roundCheckboxDesc,
28901
+ searchTerms: ["roundcheckbox", "round checkbox", "circle checkbox"],
28902
+ command: run(({ editor, range }) => {
28903
+ getCommandChain(editor, range).setFormCheckbox({ variant: "circle" }).run();
28904
+ })
28905
+ },
28862
28906
  {
28863
28907
  icon: CircleDot,
28864
28908
  title: messages.formRadio,
@@ -28867,7 +28911,11 @@ function buildSlashCommandItems({
28867
28911
  getCommandChain(editor, range).setFormRadio({ name: `radio-group-${Math.random().toString(36).substring(2, 6)}` }).run();
28868
28912
  })
28869
28913
  }
28870
- ].filter((item) => item.title.toLowerCase().includes(query.toLowerCase()));
28914
+ ].filter((item) => {
28915
+ const normalizedQuery = query.trim().toLowerCase();
28916
+ if (!normalizedQuery) return true;
28917
+ return [item.title, item.description, ...item.searchTerms ?? []].some((value) => value.toLowerCase().includes(normalizedQuery));
28918
+ });
28871
28919
  }
28872
28920
  var SlashCommandList = forwardRef14((props, ref) => {
28873
28921
  const [selectedIndex, setSelectedIndex] = useResettingIndex2(props.items);
@@ -31674,6 +31722,11 @@ var CustomTableCell = TableCell2.extend({
31674
31722
  "data-vertical-align": attributes.verticalAlign
31675
31723
  };
31676
31724
  }
31725
+ },
31726
+ textDirection: {
31727
+ default: null,
31728
+ parseHTML: (element) => element.getAttribute("data-text-direction") === "vertical" || element.style.writingMode === "vertical-rl" ? "vertical" : null,
31729
+ renderHTML: (attributes) => attributes.textDirection === "vertical" ? { "data-text-direction": "vertical" } : {}
31677
31730
  }
31678
31731
  };
31679
31732
  },
@@ -31684,12 +31737,14 @@ var CustomTableCell = TableCell2.extend({
31684
31737
  const borderStyle = HTMLAttributes["data-border-style"];
31685
31738
  const borderWidth = HTMLAttributes["data-border-width"];
31686
31739
  const verticalAlign = HTMLAttributes["data-vertical-align"];
31740
+ const textDirection = HTMLAttributes["data-text-direction"];
31687
31741
  let mergedStyle = style;
31688
31742
  if (bg) mergedStyle += `; background-color: ${bg}`;
31689
31743
  if (borderColor) mergedStyle += `; border-color: ${borderColor}`;
31690
31744
  if (borderStyle) mergedStyle += `; border-style: ${borderStyle}`;
31691
31745
  if (borderWidth) mergedStyle += `; border-width: ${borderWidth}`;
31692
31746
  if (verticalAlign) mergedStyle += `; vertical-align: ${verticalAlign}`;
31747
+ if (textDirection === "vertical") mergedStyle += "; writing-mode: vertical-rl; text-orientation: mixed";
31693
31748
  mergedStyle = mergedStyle.replace(/^;/, "").trim();
31694
31749
  return [
31695
31750
  "td",
@@ -31793,6 +31848,11 @@ var CustomTableHeader = TableHeader2.extend({
31793
31848
  "data-vertical-align": attributes.verticalAlign
31794
31849
  };
31795
31850
  }
31851
+ },
31852
+ textDirection: {
31853
+ default: null,
31854
+ parseHTML: (element) => element.getAttribute("data-text-direction") === "vertical" || element.style.writingMode === "vertical-rl" ? "vertical" : null,
31855
+ renderHTML: (attributes) => attributes.textDirection === "vertical" ? { "data-text-direction": "vertical" } : {}
31796
31856
  }
31797
31857
  };
31798
31858
  },
@@ -31803,12 +31863,14 @@ var CustomTableHeader = TableHeader2.extend({
31803
31863
  const borderStyle = HTMLAttributes["data-border-style"];
31804
31864
  const borderWidth = HTMLAttributes["data-border-width"];
31805
31865
  const verticalAlign = HTMLAttributes["data-vertical-align"];
31866
+ const textDirection = HTMLAttributes["data-text-direction"];
31806
31867
  let mergedStyle = style;
31807
31868
  if (bg) mergedStyle += `; background-color: ${bg}`;
31808
31869
  if (borderColor) mergedStyle += `; border-color: ${borderColor}`;
31809
31870
  if (borderStyle) mergedStyle += `; border-style: ${borderStyle}`;
31810
31871
  if (borderWidth) mergedStyle += `; border-width: ${borderWidth}`;
31811
31872
  if (verticalAlign) mergedStyle += `; vertical-align: ${verticalAlign}`;
31873
+ if (textDirection === "vertical") mergedStyle += "; writing-mode: vertical-rl; text-orientation: mixed";
31812
31874
  mergedStyle = mergedStyle.replace(/^;/, "").trim();
31813
31875
  return [
31814
31876
  "th",
@@ -32002,6 +32064,7 @@ import {
32002
32064
  Bold as BoldIcon,
32003
32065
  ChevronDown as ChevronDown8,
32004
32066
  ChevronsUpDown,
32067
+ CircleCheckBig as CircleCheckBig2,
32005
32068
  Code as CodeIcon,
32006
32069
  FileCode as FileCode3,
32007
32070
  Heading1 as Heading1Icon,
@@ -32017,6 +32080,7 @@ import {
32017
32080
  Redo as RedoIcon,
32018
32081
  RotateCcw as RotateCcw2,
32019
32082
  Smile as Smile3,
32083
+ SquareCheckBig,
32020
32084
  Strikethrough as StrikethroughIcon,
32021
32085
  Subscript as SubscriptIcon,
32022
32086
  Superscript as SuperscriptIcon,
@@ -33051,6 +33115,7 @@ var EditorToolbar = ({
33051
33115
  const canMergeCells = hasTableContext && editor.can().mergeCells();
33052
33116
  const canSplitCell = hasTableContext && editor.can().splitCell();
33053
33117
  const currentCellVerticalAlign = normalizeStyleValue(editor.getAttributes("tableCell").verticalAlign || editor.getAttributes("tableHeader").verticalAlign) || "";
33118
+ const currentCellTextDirection = normalizeStyleValue(editor.getAttributes("tableCell").textDirection || editor.getAttributes("tableHeader").textDirection) || "horizontal";
33054
33119
  const currentFontFamily = normalizeStyleValue(textStyleAttrs.fontFamily);
33055
33120
  const currentFontSize = normalizeStyleValue(textStyleAttrs.fontSize);
33056
33121
  const currentTextColor = normalizeStyleValue(textStyleAttrs.color) || "inherit";
@@ -33112,6 +33177,34 @@ var EditorToolbar = ({
33112
33177
  children: /* @__PURE__ */ jsx91(ListIcon, { className: "w-4 h-4" })
33113
33178
  }
33114
33179
  ),
33180
+ /* @__PURE__ */ jsxs75(
33181
+ DropdownMenu,
33182
+ {
33183
+ trigger: /* @__PURE__ */ jsxs75(ToolbarButton, { onClick: () => {
33184
+ }, active: editor.isActive("formCheckbox"), title: t("slashCommand.formCheckbox"), children: [
33185
+ /* @__PURE__ */ jsx91(SquareCheckBig, { className: "w-4 h-4" }),
33186
+ /* @__PURE__ */ jsx91(ChevronDown8, { className: "w-3 h-3" })
33187
+ ] }),
33188
+ children: [
33189
+ /* @__PURE__ */ jsx91(
33190
+ DropdownMenuItem,
33191
+ {
33192
+ icon: SquareCheckBig,
33193
+ label: t("slashCommand.formCheckbox"),
33194
+ onClick: () => editor.chain().focus().setFormCheckbox().run()
33195
+ }
33196
+ ),
33197
+ /* @__PURE__ */ jsx91(
33198
+ DropdownMenuItem,
33199
+ {
33200
+ icon: CircleCheckBig2,
33201
+ label: t("slashCommand.roundCheckbox"),
33202
+ onClick: () => editor.chain().focus().setFormCheckbox({ variant: "circle" }).run()
33203
+ }
33204
+ )
33205
+ ]
33206
+ }
33207
+ ),
33115
33208
  /* @__PURE__ */ jsx91(
33116
33209
  DropdownMenu,
33117
33210
  {
@@ -33537,6 +33630,36 @@ var EditorToolbar = ({
33537
33630
  ] })
33538
33631
  ]
33539
33632
  }
33633
+ ),
33634
+ hasTableContext && /* @__PURE__ */ jsxs75(
33635
+ DropdownMenu,
33636
+ {
33637
+ trigger: /* @__PURE__ */ jsxs75(ToolbarButton, { onClick: () => {
33638
+ }, title: t("tableMenu.textDirection"), children: [
33639
+ currentCellTextDirection === "vertical" ? /* @__PURE__ */ jsx91(ArrowDown, { className: "w-4 h-4" }) : /* @__PURE__ */ jsx91(ArrowRight, { className: "w-4 h-4" }),
33640
+ /* @__PURE__ */ jsx91(ChevronDown8, { className: "w-3 h-3" })
33641
+ ] }),
33642
+ children: [
33643
+ /* @__PURE__ */ jsx91(
33644
+ DropdownMenuItem,
33645
+ {
33646
+ icon: ArrowRight,
33647
+ label: t("tableMenu.horizontalText"),
33648
+ onClick: () => applyTableCellAttribute(editor, "textDirection", null),
33649
+ active: currentCellTextDirection === "horizontal"
33650
+ }
33651
+ ),
33652
+ /* @__PURE__ */ jsx91(
33653
+ DropdownMenuItem,
33654
+ {
33655
+ icon: ArrowDown,
33656
+ label: t("tableMenu.verticalText"),
33657
+ onClick: () => applyTableCellAttribute(editor, "textDirection", "vertical"),
33658
+ active: currentCellTextDirection === "vertical"
33659
+ }
33660
+ )
33661
+ ]
33662
+ }
33540
33663
  )
33541
33664
  ] }),
33542
33665
  /* @__PURE__ */ jsx91(ToolbarDivider, {}),
@@ -33582,6 +33705,34 @@ var EditorToolbar = ({
33582
33705
  ]
33583
33706
  }
33584
33707
  ),
33708
+ /* @__PURE__ */ jsxs75(
33709
+ DropdownMenu,
33710
+ {
33711
+ trigger: /* @__PURE__ */ jsxs75(ToolbarButton, { onClick: () => {
33712
+ }, active: editor.isActive("formCheckbox"), title: t("slashCommand.formCheckbox"), children: [
33713
+ /* @__PURE__ */ jsx91(SquareCheckBig, { className: "w-4 h-4" }),
33714
+ /* @__PURE__ */ jsx91(ChevronDown8, { className: "w-3 h-3" })
33715
+ ] }),
33716
+ children: [
33717
+ /* @__PURE__ */ jsx91(
33718
+ DropdownMenuItem,
33719
+ {
33720
+ icon: SquareCheckBig,
33721
+ label: t("slashCommand.formCheckbox"),
33722
+ onClick: () => editor.chain().focus().setFormCheckbox().run()
33723
+ }
33724
+ ),
33725
+ /* @__PURE__ */ jsx91(
33726
+ DropdownMenuItem,
33727
+ {
33728
+ icon: CircleCheckBig2,
33729
+ label: t("slashCommand.roundCheckbox"),
33730
+ onClick: () => editor.chain().focus().setFormCheckbox({ variant: "circle" }).run()
33731
+ }
33732
+ )
33733
+ ]
33734
+ }
33735
+ ),
33585
33736
  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
33737
  isFull && /* @__PURE__ */ jsxs75(
33587
33738
  DropdownMenu,
@@ -33977,7 +34128,9 @@ import {
33977
34128
  Sigma as Sigma2,
33978
34129
  AlignStartVertical as AlignStartVertical2,
33979
34130
  AlignCenterVertical as AlignCenterVertical2,
33980
- AlignEndVertical as AlignEndVertical2
34131
+ AlignEndVertical as AlignEndVertical2,
34132
+ ArrowDown as ArrowDown2,
34133
+ ArrowRight as ArrowRight2
33981
34134
  } from "lucide-react";
33982
34135
 
33983
34136
  // src/components/UEditor/table-formula-commands.ts
@@ -35053,6 +35206,7 @@ var BubbleMenuContent = ({
35053
35206
  const currentCellBorderStyle = editor.getAttributes("tableCell").borderStyle || editor.getAttributes("tableHeader").borderStyle || "solid";
35054
35207
  const currentCellBorderWidth = editor.getAttributes("tableCell").borderWidth || editor.getAttributes("tableHeader").borderWidth || "1px";
35055
35208
  const currentCellVerticalAlign = normalizeStyleValue(editor.getAttributes("tableCell").verticalAlign || editor.getAttributes("tableHeader").verticalAlign) || "";
35209
+ const currentCellTextDirection = normalizeStyleValue(editor.getAttributes("tableCell").textDirection || editor.getAttributes("tableHeader").textDirection) || "horizontal";
35056
35210
  const isInTable2 = isSelectionInTable(editor.state);
35057
35211
  const canMergeCells = isInTable2 && editor.can().mergeCells();
35058
35212
  const canSplitCell = isInTable2 && editor.can().splitCell();
@@ -35696,6 +35850,49 @@ var BubbleMenuContent = ({
35696
35850
  )
35697
35851
  ]
35698
35852
  }
35853
+ ),
35854
+ /* @__PURE__ */ jsxs76(
35855
+ DropdownMenu,
35856
+ {
35857
+ onOpenChange: (open) => {
35858
+ onKeepOpenChange?.(open);
35859
+ },
35860
+ trigger: /* @__PURE__ */ jsxs76(
35861
+ ToolbarButton,
35862
+ {
35863
+ onMouseDown: () => {
35864
+ onKeepOpenChange?.(true);
35865
+ },
35866
+ onClick: () => {
35867
+ },
35868
+ title: t("tableMenu.textDirection"),
35869
+ children: [
35870
+ currentCellTextDirection === "vertical" ? /* @__PURE__ */ jsx92(ArrowDown2, { className: "w-4 h-4" }) : /* @__PURE__ */ jsx92(ArrowRight2, { className: "w-4 h-4" }),
35871
+ /* @__PURE__ */ jsx92(ChevronDown9, { className: "w-3 h-3" })
35872
+ ]
35873
+ }
35874
+ ),
35875
+ children: [
35876
+ /* @__PURE__ */ jsx92(
35877
+ DropdownMenuItem,
35878
+ {
35879
+ icon: ArrowRight2,
35880
+ label: t("tableMenu.horizontalText"),
35881
+ onClick: () => applyTableCellAttribute2(editor, "textDirection", null, { focus: false }),
35882
+ active: currentCellTextDirection === "horizontal"
35883
+ }
35884
+ ),
35885
+ /* @__PURE__ */ jsx92(
35886
+ DropdownMenuItem,
35887
+ {
35888
+ icon: ArrowDown2,
35889
+ label: t("tableMenu.verticalText"),
35890
+ onClick: () => applyTableCellAttribute2(editor, "textDirection", "vertical", { focus: false }),
35891
+ active: currentCellTextDirection === "vertical"
35892
+ }
35893
+ )
35894
+ ]
35895
+ }
35699
35896
  )
35700
35897
  ] }),
35701
35898
  /* @__PURE__ */ jsx92(
@@ -40548,9 +40745,9 @@ import {
40548
40745
  AlignCenter as AlignCenter3,
40549
40746
  AlignLeft as AlignLeft3,
40550
40747
  AlignRight as AlignRight3,
40551
- ArrowDown as ArrowDown2,
40748
+ ArrowDown as ArrowDown3,
40552
40749
  ArrowLeft as ArrowLeft2,
40553
- ArrowRight as ArrowRight2,
40750
+ ArrowRight as ArrowRight3,
40554
40751
  ArrowUp as ArrowUp2,
40555
40752
  Copy as Copy3,
40556
40753
  Table as TableIcon2,
@@ -41617,7 +41814,7 @@ function TableControls({ editor, containerRef }) {
41617
41814
  },
41618
41815
  {
41619
41816
  label: t("tableMenu.addColumnAfter"),
41620
- icon: ArrowRight2,
41817
+ icon: ArrowRight3,
41621
41818
  onClick: () => runAtActiveCell((chain) => chain.addColumnAfter())
41622
41819
  },
41623
41820
  {
@@ -41627,7 +41824,7 @@ function TableControls({ editor, containerRef }) {
41627
41824
  },
41628
41825
  {
41629
41826
  label: t("tableMenu.addRowAfter"),
41630
- icon: ArrowDown2,
41827
+ icon: ArrowDown3,
41631
41828
  onClick: () => runAtActiveCell((chain) => chain.addRowAfter())
41632
41829
  },
41633
41830
  {
@@ -41668,7 +41865,7 @@ function TableControls({ editor, containerRef }) {
41668
41865
  },
41669
41866
  {
41670
41867
  label: t("tableMenu.addRowAfter"),
41671
- icon: ArrowDown2,
41868
+ icon: ArrowDown3,
41672
41869
  onClick: () => runAtCellPos(rowHandle.cellPos, (chain) => chain.addRowAfter())
41673
41870
  },
41674
41871
  {
@@ -41696,7 +41893,7 @@ function TableControls({ editor, containerRef }) {
41696
41893
  },
41697
41894
  {
41698
41895
  label: t("tableMenu.addColumnAfter"),
41699
- icon: ArrowRight2,
41896
+ icon: ArrowRight3,
41700
41897
  onClick: () => runAtCellPos(columnHandle.cellPos, (chain) => chain.addColumnAfter())
41701
41898
  },
41702
41899
  {
@@ -42935,6 +43132,7 @@ import {
42935
43132
  Undo as UndoIcon2,
42936
43133
  Square,
42937
43134
  CircleDot as CircleDot2,
43135
+ CircleCheckBig as CircleCheckBig3,
42938
43136
  Upload as Upload4
42939
43137
  } from "lucide-react";
42940
43138
 
@@ -43656,6 +43854,12 @@ var MenuBar = ({
43656
43854
  icon: Square,
43657
43855
  onClick: () => editor.chain().focus().setFormCheckbox().run()
43658
43856
  },
43857
+ {
43858
+ type: "action",
43859
+ label: t("slashCommand.roundCheckbox") || "Round Checkbox",
43860
+ icon: CircleCheckBig3,
43861
+ onClick: () => editor.chain().focus().setFormCheckbox({ variant: "circle" }).run()
43862
+ },
43659
43863
  {
43660
43864
  type: "action",
43661
43865
  label: t("menubar.formRadio") || "Form Radio Button",