sellmate-design-system-react 9.0.0-beta.61 → 9.0.0-beta.62

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.cjs CHANGED
@@ -10,7 +10,7 @@ var reactDom = require('react-dom');
10
10
  var RCheckbox = require('@radix-ui/react-checkbox');
11
11
  var client = require('react-dom/client');
12
12
  var RTooltip = require('@radix-ui/react-tooltip');
13
- var RDropdown3 = require('@radix-ui/react-dropdown-menu');
13
+ var RDropdown5 = require('@radix-ui/react-dropdown-menu');
14
14
  var RSwitch = require('@radix-ui/react-switch');
15
15
  var RDialog = require('@radix-ui/react-dialog');
16
16
  var Ariakit = require('@ariakit/react');
@@ -36,7 +36,7 @@ function _interopNamespace(e) {
36
36
  var RPopover12__namespace = /*#__PURE__*/_interopNamespace(RPopover12);
37
37
  var RCheckbox__namespace = /*#__PURE__*/_interopNamespace(RCheckbox);
38
38
  var RTooltip__namespace = /*#__PURE__*/_interopNamespace(RTooltip);
39
- var RDropdown3__namespace = /*#__PURE__*/_interopNamespace(RDropdown3);
39
+ var RDropdown5__namespace = /*#__PURE__*/_interopNamespace(RDropdown5);
40
40
  var RSwitch__namespace = /*#__PURE__*/_interopNamespace(RSwitch);
41
41
  var RDialog__namespace = /*#__PURE__*/_interopNamespace(RDialog);
42
42
  var Ariakit__namespace = /*#__PURE__*/_interopNamespace(Ariakit);
@@ -8035,8 +8035,8 @@ function renderItems(message, depth = 1) {
8035
8035
  });
8036
8036
  return out;
8037
8037
  }
8038
- var SCallout = /* @__PURE__ */ react.forwardRef(function SCallout2({ type = "default", message = [], children, className, style }, ref) {
8039
- const isDanger = type === "danger";
8038
+ var SCallout = /* @__PURE__ */ react.forwardRef(function SCallout2({ type = "default", showTitle = true, message = [], children, className, style }, ref) {
8039
+ const hasDangerTitle = type === "danger" && showTitle;
8040
8040
  const surface = SURFACE[type];
8041
8041
  const vars = {
8042
8042
  "--co-bg": surface.bg,
@@ -8055,7 +8055,7 @@ var SCallout = /* @__PURE__ */ react.forwardRef(function SCallout2({ type = "def
8055
8055
  ),
8056
8056
  style: { ...vars, ...style },
8057
8057
  children: [
8058
- isDanger && /* @__PURE__ */ jsxRuntime.jsxs(
8058
+ hasDangerTitle && /* @__PURE__ */ jsxRuntime.jsxs(
8059
8059
  "div",
8060
8060
  {
8061
8061
  className: "flex shrink-0 flex-col items-center justify-center gap-[var(--cmp-callout-danger-title-gap)] px-[var(--cmp-callout-danger-title-paddingX)] py-[8px] text-[16px] font-bold leading-[26px]",
@@ -8382,6 +8382,58 @@ function clampToAvailableWidth(value, availableWidth) {
8382
8382
  const css = typeof value === "number" ? `${value}px` : value;
8383
8383
  return `min(${css}, ${availableWidth})`;
8384
8384
  }
8385
+ var VIEWPORT_PADDING = 12;
8386
+ var itemClass = cn(
8387
+ "flex min-h-[28px] cursor-pointer select-none items-center gap-[8px] rounded-[2px] px-[12px] py-[4px] text-[12px] leading-[20px] outline-none",
8388
+ "text-[color:var(--sys-color-fg-secondary)]",
8389
+ "data-[disabled]:cursor-not-allowed data-[disabled]:text-[color:var(--cmp-button-text-disabled)]",
8390
+ "data-[highlighted]:bg-[var(--sys-color-bg-accent)] data-[highlighted]:text-[color:var(--sys-color-fg-inverse)]"
8391
+ );
8392
+ function DropdownMenuContent({
8393
+ items,
8394
+ onItemClick,
8395
+ align = "start",
8396
+ className,
8397
+ ...contentProps
8398
+ }) {
8399
+ const portalContainer = usePortalContainer();
8400
+ return /* @__PURE__ */ jsxRuntime.jsx(RDropdown5__namespace.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxRuntime.jsx(
8401
+ RDropdown5__namespace.Content,
8402
+ {
8403
+ sideOffset: 4,
8404
+ align,
8405
+ collisionPadding: VIEWPORT_PADDING,
8406
+ className: cn(
8407
+ "z-50 overflow-hidden rounded-[var(--cmp-listBox-radius)] bg-[var(--cmp-listBox-bg)] shadow-normal-sm",
8408
+ // 창보다 넓은 메뉴는 창 폭에 맞춰 줄인다. 호출부가 하한(min-width)을 줄 때도 같은
8409
+ // 상한으로 감싸야 한다 — min-width 가 max-width 를 이기기 때문이다.
8410
+ "max-w-[var(--radix-dropdown-menu-content-available-width)]",
8411
+ FLOATING_SLIDE_ANIM,
8412
+ className
8413
+ ),
8414
+ ...contentProps,
8415
+ children: items.map((it) => /* @__PURE__ */ jsxRuntime.jsxs(
8416
+ RDropdown5__namespace.Item,
8417
+ {
8418
+ disabled: it.disabled,
8419
+ onSelect: () => onItemClick?.(it.value),
8420
+ className: itemClass,
8421
+ children: [
8422
+ it.icon && /* @__PURE__ */ jsxRuntime.jsx(SIcon, { name: it.icon, size: 12 }),
8423
+ /* @__PURE__ */ jsxRuntime.jsx(
8424
+ "span",
8425
+ {
8426
+ className: "min-w-0 break-words",
8427
+ dangerouslySetInnerHTML: { __html: sanitizeInlineHtml(it.label) }
8428
+ }
8429
+ )
8430
+ ]
8431
+ },
8432
+ it.value
8433
+ ))
8434
+ }
8435
+ ) });
8436
+ }
8385
8437
  var SIZE2 = {
8386
8438
  xs: { height: 24, paddingX: 8, gap: 6, arrow: 12, fontSize: 12, minWidth: 64, splitMinWidth: 72 },
8387
8439
  sm: {
@@ -8418,13 +8470,6 @@ function splitDivider(color, outline) {
8418
8470
  };
8419
8471
  return (outline ? outlined : solid)[color];
8420
8472
  }
8421
- var VIEWPORT_PADDING = 12;
8422
- var itemClass = cn(
8423
- "flex min-h-[28px] cursor-pointer select-none items-center gap-[8px] rounded-[2px] px-[12px] py-[4px] text-[12px] leading-[20px] outline-none",
8424
- "text-[color:var(--sys-color-fg-secondary)]",
8425
- "data-[disabled]:cursor-not-allowed data-[disabled]:text-[color:var(--cmp-button-text-disabled)]",
8426
- "data-[highlighted]:bg-[var(--sys-color-bg-accent)] data-[highlighted]:text-[color:var(--sys-color-fg-inverse)]"
8427
- );
8428
8473
  var SDropdownButtonImpl = /* @__PURE__ */ react.forwardRef(
8429
8474
  function SDropdownButton({
8430
8475
  color = "primary",
@@ -8440,7 +8485,6 @@ var SDropdownButtonImpl = /* @__PURE__ */ react.forwardRef(
8440
8485
  className,
8441
8486
  style
8442
8487
  }, ref) {
8443
- const portalContainer = usePortalContainer();
8444
8488
  const insideModal = useInsideModal();
8445
8489
  const [open, setOpen] = react.useState(false);
8446
8490
  const splitWrapRef = react.useRef(null);
@@ -8494,45 +8538,20 @@ var SDropdownButtonImpl = /* @__PURE__ */ react.forwardRef(
8494
8538
  "border-[color:var(--dd-border)] bg-[var(--dd-bg)] text-[color:var(--dd-text)]",
8495
8539
  disabled ? "cursor-not-allowed" : "cursor-pointer hover:bg-[var(--dd-bg-hover)]"
8496
8540
  );
8497
- const menu = /* @__PURE__ */ jsxRuntime.jsx(RDropdown3__namespace.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxRuntime.jsx(
8498
- RDropdown3__namespace.Content,
8541
+ const menu = /* @__PURE__ */ jsxRuntime.jsx(
8542
+ DropdownMenuContent,
8499
8543
  {
8500
- sideOffset: 4,
8501
- align: "start",
8544
+ items,
8545
+ onItemClick,
8502
8546
  alignOffset: split ? splitAlignOffset : 0,
8503
- collisionPadding: VIEWPORT_PADDING,
8504
8547
  className: cn(
8505
- "z-50 overflow-hidden rounded-[var(--cmp-listBox-radius)] bg-[var(--cmp-listBox-bg)] shadow-normal-sm",
8506
- // 창보다 넓은 메뉴는 창 폭에 맞춰 줄인다. 트리거 너비를 따르는 하한도 같은 상한으로
8507
- // 감싸야 한다 — min-width 가 max-width 를 이기기 때문이다.
8508
- "max-w-[var(--radix-dropdown-menu-content-available-width)]",
8509
- !split && "min-w-[min(var(--radix-dropdown-menu-trigger-width),var(--radix-dropdown-menu-content-available-width))]",
8510
- FLOATING_SLIDE_ANIM
8548
+ !split && "min-w-[min(var(--radix-dropdown-menu-trigger-width),var(--radix-dropdown-menu-content-available-width))]"
8511
8549
  ),
8512
- style: split ? { minWidth: clampToAvailableWidth(splitWidth, DROPDOWN_AVAILABLE_WIDTH) } : void 0,
8513
- children: items.map((it) => /* @__PURE__ */ jsxRuntime.jsxs(
8514
- RDropdown3__namespace.Item,
8515
- {
8516
- disabled: it.disabled,
8517
- onSelect: () => onItemClick?.(it.value),
8518
- className: itemClass,
8519
- children: [
8520
- it.icon && /* @__PURE__ */ jsxRuntime.jsx(SIcon, { name: it.icon, size: 12 }),
8521
- /* @__PURE__ */ jsxRuntime.jsx(
8522
- "span",
8523
- {
8524
- className: "min-w-0 break-words",
8525
- dangerouslySetInnerHTML: { __html: sanitizeInlineHtml(it.label) }
8526
- }
8527
- )
8528
- ]
8529
- },
8530
- it.value
8531
- ))
8550
+ style: split ? { minWidth: clampToAvailableWidth(splitWidth, DROPDOWN_AVAILABLE_WIDTH) } : void 0
8532
8551
  }
8533
- ) });
8552
+ );
8534
8553
  return /* @__PURE__ */ jsxRuntime.jsxs(
8535
- RDropdown3__namespace.Root,
8554
+ RDropdown5__namespace.Root,
8536
8555
  {
8537
8556
  modal: !insideModal,
8538
8557
  open,
@@ -8564,7 +8583,7 @@ var SDropdownButtonImpl = /* @__PURE__ */ react.forwardRef(
8564
8583
  children: label
8565
8584
  }
8566
8585
  ),
8567
- /* @__PURE__ */ jsxRuntime.jsx(RDropdown3__namespace.Trigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
8586
+ /* @__PURE__ */ jsxRuntime.jsx(RDropdown5__namespace.Trigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
8568
8587
  "button",
8569
8588
  {
8570
8589
  ref: splitToggleRef,
@@ -8583,7 +8602,7 @@ var SDropdownButtonImpl = /* @__PURE__ */ react.forwardRef(
8583
8602
  ) })
8584
8603
  ]
8585
8604
  }
8586
- ) : /* @__PURE__ */ jsxRuntime.jsx(RDropdown3__namespace.Trigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs(
8605
+ ) : /* @__PURE__ */ jsxRuntime.jsx(RDropdown5__namespace.Trigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs(
8587
8606
  "button",
8588
8607
  {
8589
8608
  type: "button",
@@ -8611,6 +8630,87 @@ var SDropdownButtonImpl = /* @__PURE__ */ react.forwardRef(
8611
8630
  }
8612
8631
  );
8613
8632
  var SDropdownButton2 = /* @__PURE__ */ withDisplayName(SDropdownButtonImpl, "SDropdownButton");
8633
+ var DEFAULT_LABEL = "\uAE30\uB2A5 \uB354 \uBCF4\uAE30";
8634
+ var SMeatballButtonImpl = /* @__PURE__ */ react.forwardRef(
8635
+ function SMeatballButton({
8636
+ size = "sm",
8637
+ intent = "default",
8638
+ items = [],
8639
+ // 기본값을 리터럴로 둬야 README(docs:gen)에 실제 문구가 찍힌다
8640
+ tooltipText = "\uAE30\uB2A5 \uB354 \uBCF4\uAE30",
8641
+ ariaLabel,
8642
+ disabled = false,
8643
+ onItemClick,
8644
+ onOpenChange,
8645
+ className,
8646
+ style
8647
+ }, ref) {
8648
+ const insideModal = useInsideModal();
8649
+ const [open, setOpen] = react.useState(false);
8650
+ const buttonRef = react.useRef(null);
8651
+ const pointerRef = react.useRef(false);
8652
+ const setMenuOpen = (o) => {
8653
+ setOpen(o);
8654
+ onOpenChange?.(o);
8655
+ };
8656
+ react.useImperativeHandle(
8657
+ ref,
8658
+ () => ({
8659
+ open: () => setOpen(true),
8660
+ close: () => setOpen(false)
8661
+ }),
8662
+ []
8663
+ );
8664
+ const label = ariaLabel?.trim() || tooltipText.trim() || DEFAULT_LABEL;
8665
+ return /* @__PURE__ */ jsxRuntime.jsxs(
8666
+ RDropdown5__namespace.Root,
8667
+ {
8668
+ modal: !insideModal,
8669
+ open,
8670
+ onOpenChange: setMenuOpen,
8671
+ children: [
8672
+ /* @__PURE__ */ jsxRuntime.jsx(RDropdown5__namespace.Trigger, { asChild: true, disabled, children: /* @__PURE__ */ jsxRuntime.jsx(
8673
+ "span",
8674
+ {
8675
+ className: cn("inline-flex", className),
8676
+ style,
8677
+ onPointerDownCapture: () => pointerRef.current = true,
8678
+ onKeyDownCapture: () => pointerRef.current = false,
8679
+ children: /* @__PURE__ */ jsxRuntime.jsx(
8680
+ SGhostButton,
8681
+ {
8682
+ ref: buttonRef,
8683
+ icon: "etc",
8684
+ size,
8685
+ intent,
8686
+ tooltipText: open ? "" : tooltipText,
8687
+ ariaLabel: label,
8688
+ ariaExpanded: open,
8689
+ disabled
8690
+ }
8691
+ )
8692
+ }
8693
+ ) }),
8694
+ /* @__PURE__ */ jsxRuntime.jsx(
8695
+ DropdownMenuContent,
8696
+ {
8697
+ items,
8698
+ onItemClick,
8699
+ onPointerDown: () => pointerRef.current = true,
8700
+ onPointerDownOutside: () => pointerRef.current = true,
8701
+ onKeyDown: () => pointerRef.current = false,
8702
+ onCloseAutoFocus: (e) => {
8703
+ e.preventDefault();
8704
+ if (!pointerRef.current) buttonRef.current?.focus();
8705
+ }
8706
+ }
8707
+ )
8708
+ ]
8709
+ }
8710
+ );
8711
+ }
8712
+ );
8713
+ var SMeatballButton2 = /* @__PURE__ */ withDisplayName(SMeatballButtonImpl, "SMeatballButton");
8614
8714
  function SSwitch({
8615
8715
  value = false,
8616
8716
  leftLabel,
@@ -9586,7 +9686,7 @@ var SPopup = /* @__PURE__ */ react.forwardRef(function SPopup2({
9586
9686
  }
9587
9687
  );
9588
9688
  });
9589
- var DEFAULT_LABEL = { tip: "\uD65C\uC6A9 TIP", notion: "\uC0AC\uC6A9\uBC95 \uC548\uB0B4" };
9689
+ var DEFAULT_LABEL2 = { tip: "\uD65C\uC6A9 TIP", notion: "\uC0AC\uC6A9\uBC95 \uC548\uB0B4" };
9590
9690
  var ICON = { tip: "helpOutline", notion: "notion" };
9591
9691
  var VIEWPORT_GUTTER = 24;
9592
9692
  var CLOSE_INSET = 12;
@@ -9608,7 +9708,7 @@ function SGuide({
9608
9708
  const portalContainer = usePortalContainer();
9609
9709
  const isNotion = type === "notion";
9610
9710
  const isAutoWidth = popupWidth === "auto";
9611
- const defaultLabel = DEFAULT_LABEL[type];
9711
+ const defaultLabel = DEFAULT_LABEL2[type];
9612
9712
  const iconName = ICON[type];
9613
9713
  const messages = flattenMessages(message);
9614
9714
  const active = open;
@@ -16506,7 +16606,7 @@ var STable = /* @__PURE__ */ react.forwardRef(function STable2({
16506
16606
  ),
16507
16607
  contextMenuOn && typeof document !== "undefined" && reactDom.createPortal(
16508
16608
  /* @__PURE__ */ jsxRuntime.jsxs(
16509
- RDropdown3__namespace.Root,
16609
+ RDropdown5__namespace.Root,
16510
16610
  {
16511
16611
  modal: false,
16512
16612
  open: contextMenuOpen,
@@ -16514,7 +16614,7 @@ var STable = /* @__PURE__ */ react.forwardRef(function STable2({
16514
16614
  if (!open) setContextMenu((m) => m == null ? null : { ...m, open: false });
16515
16615
  },
16516
16616
  children: [
16517
- /* @__PURE__ */ jsxRuntime.jsx(RDropdown3__namespace.Trigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
16617
+ /* @__PURE__ */ jsxRuntime.jsx(RDropdown5__namespace.Trigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
16518
16618
  "span",
16519
16619
  {
16520
16620
  "aria-hidden": true,
@@ -16523,7 +16623,7 @@ var STable = /* @__PURE__ */ react.forwardRef(function STable2({
16523
16623
  }
16524
16624
  ) }),
16525
16625
  /* @__PURE__ */ jsxRuntime.jsx(
16526
- RDropdown3__namespace.Content,
16626
+ RDropdown5__namespace.Content,
16527
16627
  {
16528
16628
  align: "start",
16529
16629
  side: "bottom",
@@ -16537,7 +16637,7 @@ var STable = /* @__PURE__ */ react.forwardRef(function STable2({
16537
16637
  FLOATING_SLIDE_ANIM
16538
16638
  ),
16539
16639
  children: contextMenuItems?.map((item4) => /* @__PURE__ */ jsxRuntime.jsxs(
16540
- RDropdown3__namespace.Item,
16640
+ RDropdown5__namespace.Item,
16541
16641
  {
16542
16642
  disabled: item4.disabled,
16543
16643
  onSelect: () => onContextMenuItemClick?.(item4.value, contextMenu?.rows ?? []),
@@ -19432,6 +19532,7 @@ function ChartTooltip({
19432
19532
  anchor,
19433
19533
  bounds,
19434
19534
  gapX = DEFAULT_GAP_X,
19535
+ footer,
19435
19536
  className
19436
19537
  }) {
19437
19538
  const { ref, size } = useElementSize();
@@ -19482,7 +19583,8 @@ function ChartTooltip({
19482
19583
  ]
19483
19584
  },
19484
19585
  `${item4.label}-${index}`
19485
- ))
19586
+ )),
19587
+ footer != null && footer !== false && /* @__PURE__ */ jsxRuntime.jsx("div", { children: footer })
19486
19588
  ]
19487
19589
  }
19488
19590
  );
@@ -19573,6 +19675,7 @@ var SBarChart = /* @__PURE__ */ react.forwardRef(function SBarChart2({
19573
19675
  formatValue = defaultFormat,
19574
19676
  height,
19575
19677
  onBarClick,
19678
+ tooltipFooter,
19576
19679
  className,
19577
19680
  style
19578
19681
  }, ref) {
@@ -20001,7 +20104,16 @@ var SBarChart = /* @__PURE__ */ react.forwardRef(function SBarChart2({
20001
20104
  items: tooltipItems,
20002
20105
  anchor: tooltipAnchor,
20003
20106
  bounds: size,
20004
- gapX: tooltipGapX
20107
+ gapX: tooltipGapX,
20108
+ footer: tooltipFooter?.({
20109
+ categoryIndex: hoveredCategory,
20110
+ name: categories[hoveredCategory] ?? "",
20111
+ points: series.flatMap((s, seriesIndex) => {
20112
+ const value = s.data[hoveredCategory];
20113
+ if (value == null || !Number.isFinite(value)) return [];
20114
+ return [{ seriesIndex, categoryIndex: hoveredCategory, value }];
20115
+ })
20116
+ })
20005
20117
  }
20006
20118
  )
20007
20119
  ]
@@ -20063,7 +20175,8 @@ var POINT_HOVER_BG = "var(--cmp-chart-bg)";
20063
20175
  var POINT_HOVER_EXTENT = POINT_HOVER_RADIUS + POINT_HOVER_BORDER_WIDTH / 2;
20064
20176
  var BAND_MIN = 40;
20065
20177
  var VALUE_LABEL_GAP2 = 6;
20066
- var AREA_OPACITY = "var(--opacity-040)";
20178
+ var AREA_OPACITY_TOP = "30%";
20179
+ var AREA_OPACITY_BOTTOM = "var(--opacity-005)";
20067
20180
  var LINE_DATA_LABEL_COLOR = "var(--cmp-chart-bar-dataLabel-color-default)";
20068
20181
  var LINE_DATA_LABEL_TYPO = "typo-body-sm-medium";
20069
20182
  var LINE_DATA_LABEL_TYPO_HOVER = "typo-body-md-bold";
@@ -20159,6 +20272,7 @@ var SLineChart = /* @__PURE__ */ react.forwardRef(function SLineChart2({
20159
20272
  formatValue = defaultFormat2,
20160
20273
  height,
20161
20274
  onPointClick,
20275
+ tooltipFooter,
20162
20276
  className,
20163
20277
  style
20164
20278
  }, ref) {
@@ -20166,6 +20280,7 @@ var SLineChart = /* @__PURE__ */ react.forwardRef(function SLineChart2({
20166
20280
  const { ref: plotRef, size } = useElementSize();
20167
20281
  const { ref: axisTextRef, size: axisText } = useElementSize();
20168
20282
  const { ref: axisSampleRef, size: axisSample } = useElementSize();
20283
+ const gradientId = react.useId();
20169
20284
  const [hoveredCategory, setHoveredCategory] = react.useState(null);
20170
20285
  const colorAt = react.useCallback(
20171
20286
  (seriesIndex) => paletteColor(palette, seriesIndex, customColors),
@@ -20294,13 +20409,43 @@ var SLineChart = /* @__PURE__ */ react.forwardRef(function SLineChart2({
20294
20409
  {
20295
20410
  "aria-hidden": true,
20296
20411
  d,
20297
- style: { fill: colorAt(seriesIndex), fillOpacity: AREA_OPACITY }
20412
+ style: { fill: `url(#${gradientId}-area-${seriesIndex})` }
20298
20413
  },
20299
20414
  `area-${seriesIndex}-${runIndex}`
20300
20415
  );
20301
20416
  })
20302
20417
  );
20303
- }, [area, plotted, smooth, colorAt]);
20418
+ }, [area, plotted, smooth, gradientId]);
20419
+ const areaGradients = react.useMemo(() => {
20420
+ if (!area) return null;
20421
+ return /* @__PURE__ */ jsxRuntime.jsx("defs", { children: plotted.map((_, seriesIndex) => /* @__PURE__ */ jsxRuntime.jsxs(
20422
+ "linearGradient",
20423
+ {
20424
+ id: `${gradientId}-area-${seriesIndex}`,
20425
+ x1: "0",
20426
+ y1: "0",
20427
+ x2: "0",
20428
+ y2: "1",
20429
+ children: [
20430
+ /* @__PURE__ */ jsxRuntime.jsx(
20431
+ "stop",
20432
+ {
20433
+ offset: "0",
20434
+ style: { stopColor: colorAt(seriesIndex), stopOpacity: AREA_OPACITY_TOP }
20435
+ }
20436
+ ),
20437
+ /* @__PURE__ */ jsxRuntime.jsx(
20438
+ "stop",
20439
+ {
20440
+ offset: "1",
20441
+ style: { stopColor: colorAt(seriesIndex), stopOpacity: AREA_OPACITY_BOTTOM }
20442
+ }
20443
+ )
20444
+ ]
20445
+ },
20446
+ `area-gradient-${seriesIndex}`
20447
+ )) });
20448
+ }, [area, plotted, colorAt, gradientId]);
20304
20449
  const lines = react.useMemo(
20305
20450
  () => plotted.flatMap(
20306
20451
  (row, seriesIndex) => runsOf(row).map((run, runIndex) => {
@@ -20482,6 +20627,7 @@ var SLineChart = /* @__PURE__ */ react.forwardRef(function SLineChart2({
20482
20627
  }
20483
20628
  }
20484
20629
  ),
20630
+ areaGradients,
20485
20631
  areas,
20486
20632
  lines,
20487
20633
  pointHalos,
@@ -20497,7 +20643,16 @@ var SLineChart = /* @__PURE__ */ react.forwardRef(function SLineChart2({
20497
20643
  items: tooltipItems,
20498
20644
  anchor: tooltipAnchor,
20499
20645
  bounds: size,
20500
- gapX: { after: -4, before: -4 }
20646
+ gapX: { after: -4, before: -4 },
20647
+ footer: tooltipFooter?.({
20648
+ categoryIndex: hoveredCategory,
20649
+ name: categories[hoveredCategory] ?? "",
20650
+ points: rows.flatMap((row, seriesIndex) => {
20651
+ const point = row[hoveredCategory];
20652
+ if (point == null) return [];
20653
+ return [{ seriesIndex, categoryIndex: hoveredCategory, value: point.own }];
20654
+ })
20655
+ })
20501
20656
  }
20502
20657
  )
20503
20658
  ]
@@ -20515,9 +20670,11 @@ var SLineChart = /* @__PURE__ */ react.forwardRef(function SLineChart2({
20515
20670
  }
20516
20671
  );
20517
20672
  });
20518
- var DONUT_INNER_RATIO = 0.6;
20673
+ var DONUT_INNER_RATIO = 0.4;
20519
20674
  var LABEL_MIN_RATIO = 0.05;
20520
20675
  var PIE_LABEL_RADIUS_RATIO = 0.65;
20676
+ var HOVER_GROW = 4;
20677
+ var HOVER_CORNER = 2;
20521
20678
  var OPACITY_DEFAULT = "var(--cmp-chart-bar-opacity-default)";
20522
20679
  var OPACITY_DIMMED = "var(--cmp-chart-bar-opacity-dimmed)";
20523
20680
  var OPACITY_HOVER = 1;
@@ -20530,19 +20687,42 @@ var r2 = (value) => Math.round(value * 100) / 100;
20530
20687
  function polar(center, radius, angle) {
20531
20688
  return { x: center + radius * Math.sin(angle), y: center - radius * Math.cos(angle) };
20532
20689
  }
20533
- function slicePath(center, outer, inner, start, end) {
20690
+ var arc = (radius, large, sweep, p) => `A${r2(radius)} ${r2(radius)} 0 ${large} ${sweep} ${r2(p.x)} ${r2(p.y)}`;
20691
+ function fitCorner(corner, outer, inner, span) {
20692
+ if (corner <= 0 || outer <= 0) return 0;
20693
+ let fitted = Math.min(corner, (outer - inner) / 2);
20694
+ if (span < Math.PI) {
20695
+ const half = Math.sin(span / 2);
20696
+ fitted = Math.min(fitted, outer * half / (1 + half));
20697
+ if (inner > 0) fitted = Math.min(fitted, inner * half / (1 - half));
20698
+ }
20699
+ return fitted >= 0.5 ? fitted : 0;
20700
+ }
20701
+ function slicePath(center, outer, inner, start, end, corner = 0) {
20534
20702
  if (end - start >= Math.PI * 2 - 1e-6) {
20535
20703
  const ring = (radius) => `M${r2(center - radius)} ${r2(center)}A${r2(radius)} ${r2(radius)} 0 1 1 ${r2(center + radius)} ${r2(center)}A${r2(radius)} ${r2(radius)} 0 1 1 ${r2(center - radius)} ${r2(center)}Z`;
20536
20704
  return inner > 0 ? ring(outer) + ring(inner) : ring(outer);
20537
20705
  }
20538
- const large = end - start > Math.PI ? 1 : 0;
20539
- const o0 = polar(center, outer, start);
20540
- const o1 = polar(center, outer, end);
20541
- const outerArc = `M${r2(o0.x)} ${r2(o0.y)}A${r2(outer)} ${r2(outer)} 0 ${large} 1 ${r2(o1.x)} ${r2(o1.y)}`;
20542
- if (inner <= 0) return `${outerArc}L${r2(center)} ${r2(center)}Z`;
20543
- const i1 = polar(center, inner, end);
20544
- const i0 = polar(center, inner, start);
20545
- return `${outerArc}L${r2(i1.x)} ${r2(i1.y)}A${r2(inner)} ${r2(inner)} 0 ${large} 0 ${r2(i0.x)} ${r2(i0.y)}Z`;
20706
+ const span = end - start;
20707
+ const round = fitCorner(corner, outer, inner, span);
20708
+ const outerLine = Math.sqrt(Math.max(outer * outer - 2 * outer * round, 0));
20709
+ const outerPhi = round > 0 ? Math.asin(round / (outer - round)) : 0;
20710
+ const outerLarge = span - 2 * outerPhi > Math.PI ? 1 : 0;
20711
+ const o0 = polar(center, outerLine, start);
20712
+ let d = `M${r2(o0.x)} ${r2(o0.y)}`;
20713
+ if (round > 0) d += arc(round, 0, 1, polar(center, outer, start + outerPhi));
20714
+ d += arc(outer, outerLarge, 1, polar(center, outer, end - outerPhi));
20715
+ if (round > 0) d += arc(round, 0, 1, polar(center, outerLine, end));
20716
+ if (inner <= 0) return `${d}L${r2(center)} ${r2(center)}Z`;
20717
+ const innerLine = Math.sqrt(inner * inner + 2 * inner * round);
20718
+ const innerPhi = round > 0 ? Math.asin(round / (inner + round)) : 0;
20719
+ const innerLarge = span - 2 * innerPhi > Math.PI ? 1 : 0;
20720
+ const i0 = polar(center, innerLine, end);
20721
+ d += `L${r2(i0.x)} ${r2(i0.y)}`;
20722
+ if (round > 0) d += arc(round, 0, 1, polar(center, inner, end - innerPhi));
20723
+ d += arc(inner, innerLarge, 0, polar(center, inner, start + innerPhi));
20724
+ if (round > 0) d += arc(round, 0, 1, polar(center, innerLine, start));
20725
+ return `${d}Z`;
20546
20726
  }
20547
20727
  var RadialChart = /* @__PURE__ */ react.forwardRef(function RadialChart2({
20548
20728
  data,
@@ -20554,44 +20734,44 @@ var RadialChart = /* @__PURE__ */ react.forwardRef(function RadialChart2({
20554
20734
  showTooltip = true,
20555
20735
  formatValue = defaultFormat3,
20556
20736
  onSliceClick,
20737
+ tooltipFooter,
20557
20738
  className,
20558
20739
  style,
20559
20740
  innerRatio,
20560
- renderCenter,
20561
20741
  kind
20562
20742
  }, ref) {
20563
20743
  const { ref: plotRef, size } = useElementSize();
20564
20744
  const [hovered, setHovered] = react.useState(null);
20565
- const { arcs, total } = react.useMemo(() => {
20745
+ const arcs = react.useMemo(() => {
20566
20746
  const effective = palette === "custom" && !colors?.length ? "multi" : palette;
20567
- const valid = data.map((slice, index) => ({ ...slice, index })).filter((slice) => Number.isFinite(slice.value) && slice.value > 0);
20568
- const sum = valid.reduce((acc, slice) => acc + slice.value, 0);
20747
+ const valid = data.map((slice2, index) => ({ ...slice2, index })).filter((slice2) => Number.isFinite(slice2.value) && slice2.value > 0);
20748
+ const sum = valid.reduce((acc, slice2) => acc + slice2.value, 0);
20569
20749
  let angle = 0;
20570
- const list = valid.map((slice) => {
20571
- const ratio = slice.value / sum;
20750
+ const list = valid.map((slice2) => {
20751
+ const ratio = slice2.value / sum;
20572
20752
  const start = angle;
20573
20753
  angle += ratio * Math.PI * 2;
20574
20754
  return {
20575
- index: slice.index,
20576
- name: slice.name,
20577
- value: slice.value,
20755
+ index: slice2.index,
20756
+ name: slice2.name,
20757
+ value: slice2.value,
20578
20758
  ratio,
20579
20759
  start,
20580
20760
  end: angle,
20581
- color: paletteColor(effective, slice.index, colors)
20761
+ color: paletteColor(effective, slice2.index, colors)
20582
20762
  };
20583
20763
  });
20584
- return { arcs: list, total: sum };
20764
+ return list;
20585
20765
  }, [data, palette, colors]);
20586
20766
  const diameter = size.width;
20587
20767
  const center = diameter / 2;
20588
- const outer = center;
20768
+ const outer = Math.max(center - HOVER_GROW, 0);
20589
20769
  const inner = outer * innerRatio;
20590
- const hoveredArc = arcs.find((arc) => arc.index === hovered) ?? null;
20770
+ const hoveredArc = arcs.find((arc2) => arc2.index === hovered) ?? null;
20591
20771
  const legend = showLegend ? /* @__PURE__ */ jsxRuntime.jsx(
20592
20772
  ChartLegend,
20593
20773
  {
20594
- items: arcs.map((arc) => ({ name: arc.name, color: arc.color })),
20774
+ items: arcs.map((arc2) => ({ name: arc2.name, color: arc2.color })),
20595
20775
  activeIndex: hoveredArc ? arcs.indexOf(hoveredArc) : null
20596
20776
  }
20597
20777
  ) : null;
@@ -20602,6 +20782,17 @@ var RadialChart = /* @__PURE__ */ react.forwardRef(function RadialChart2({
20602
20782
  return { left: point.x, right: point.x, top: point.y };
20603
20783
  }, [hoveredArc, diameter, center, outer, inner]);
20604
20784
  const labelRadius = inner > 0 ? (outer + inner) / 2 : outer * PIE_LABEL_RADIUS_RATIO;
20785
+ const slice = (target) => {
20786
+ const picked = hovered === target.index;
20787
+ return slicePath(
20788
+ center,
20789
+ picked ? outer + HOVER_GROW : outer,
20790
+ picked ? Math.max(inner - HOVER_GROW, 0) : inner,
20791
+ target.start,
20792
+ target.end,
20793
+ picked ? HOVER_CORNER : 0
20794
+ );
20795
+ };
20605
20796
  return /* @__PURE__ */ jsxRuntime.jsx(
20606
20797
  ChartFrame,
20607
20798
  {
@@ -20631,34 +20822,34 @@ var RadialChart = /* @__PURE__ */ react.forwardRef(function RadialChart2({
20631
20822
  style: { fill: "var(--cmp-chart-grid-line-color)" }
20632
20823
  }
20633
20824
  )
20634
- ) : arcs.map((arc) => {
20635
- const opacity = hovered == null ? OPACITY_DEFAULT : hovered === arc.index ? OPACITY_HOVER : OPACITY_DIMMED;
20825
+ ) : arcs.map((arc2) => {
20826
+ const opacity = hovered == null ? OPACITY_DEFAULT : hovered === arc2.index ? OPACITY_HOVER : OPACITY_DIMMED;
20636
20827
  return /* @__PURE__ */ jsxRuntime.jsx(
20637
20828
  "path",
20638
20829
  {
20639
- d: slicePath(center, outer, inner, arc.start, arc.end),
20830
+ d: slice(arc2),
20640
20831
  fillRule: "evenodd",
20641
20832
  className: "transition-opacity duration-200 ease-out motion-reduce:transition-none",
20642
20833
  style: {
20643
- fill: arc.color,
20834
+ fill: arc2.color,
20644
20835
  opacity,
20645
20836
  cursor: onSliceClick ? "pointer" : void 0
20646
20837
  },
20647
- onMouseEnter: () => setHovered(arc.index),
20838
+ onMouseEnter: () => setHovered(arc2.index),
20648
20839
  onClick: onSliceClick ? () => onSliceClick({
20649
- index: arc.index,
20650
- name: arc.name,
20651
- value: arc.value,
20652
- ratio: arc.ratio
20840
+ index: arc2.index,
20841
+ name: arc2.name,
20842
+ value: arc2.value,
20843
+ ratio: arc2.ratio
20653
20844
  }) : void 0,
20654
- children: /* @__PURE__ */ jsxRuntime.jsx("title", { children: `${arc.name} ${formatValue(arc.value)} (${formatRatio(arc.ratio)})` })
20845
+ children: /* @__PURE__ */ jsxRuntime.jsx("title", { children: `${arc2.name} ${formatValue(arc2.value)} (${formatRatio(arc2.ratio)})` })
20655
20846
  },
20656
- `slice-${arc.index}`
20847
+ `slice-${arc2.index}`
20657
20848
  );
20658
20849
  }),
20659
- showValueLabel && arcs.map((arc) => {
20660
- if (arc.ratio < LABEL_MIN_RATIO) return null;
20661
- const point = polar(center, labelRadius, (arc.start + arc.end) / 2);
20850
+ showValueLabel && arcs.map((arc2) => {
20851
+ if (arc2.ratio < LABEL_MIN_RATIO) return null;
20852
+ const point = polar(center, labelRadius, (arc2.start + arc2.end) / 2);
20662
20853
  return /* @__PURE__ */ jsxRuntime.jsx(
20663
20854
  "text",
20664
20855
  {
@@ -20670,25 +20861,16 @@ var RadialChart = /* @__PURE__ */ react.forwardRef(function RadialChart2({
20670
20861
  className: "pointer-events-none typo-body-sm-bold transition-opacity duration-200 ease-out motion-reduce:transition-none",
20671
20862
  style: {
20672
20863
  fill: "var(--sys-color-fg-inverse)",
20673
- opacity: hovered != null && hovered !== arc.index ? OPACITY_DIMMED : void 0
20864
+ opacity: hovered != null && hovered !== arc2.index ? OPACITY_DIMMED : void 0
20674
20865
  },
20675
- children: formatRatio(arc.ratio)
20866
+ children: formatRatio(arc2.ratio)
20676
20867
  },
20677
- `label-${arc.index}`
20868
+ `label-${arc2.index}`
20678
20869
  );
20679
20870
  })
20680
20871
  ]
20681
20872
  }
20682
20873
  ),
20683
- renderCenter && diameter > 0 && // 가운데 글자는 조각을 가리지 않도록 마우스를 통과시킨다.
20684
- /* @__PURE__ */ jsxRuntime.jsx(
20685
- "div",
20686
- {
20687
- className: "pointer-events-none absolute top-1/2 left-1/2 flex -translate-x-1/2 -translate-y-1/2 flex-col items-center text-center",
20688
- style: { maxWidth: inner * Math.SQRT2 },
20689
- children: renderCenter(total)
20690
- }
20691
- ),
20692
20874
  showTooltip && hoveredArc && tooltipAnchor && /* @__PURE__ */ jsxRuntime.jsx(
20693
20875
  ChartTooltip,
20694
20876
  {
@@ -20701,19 +20883,19 @@ var RadialChart = /* @__PURE__ */ react.forwardRef(function RadialChart2({
20701
20883
  }
20702
20884
  ],
20703
20885
  anchor: tooltipAnchor,
20704
- bounds: size
20886
+ bounds: size,
20887
+ footer: tooltipFooter?.({
20888
+ index: hoveredArc.index,
20889
+ name: hoveredArc.name,
20890
+ value: hoveredArc.value,
20891
+ ratio: hoveredArc.ratio
20892
+ })
20705
20893
  }
20706
20894
  )
20707
20895
  ] })
20708
20896
  }
20709
20897
  );
20710
20898
  });
20711
- function RadialCenter({ label, value }) {
20712
- return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
20713
- label != null && /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("typo-body-sm-medium text-(--cmp-chart-axis-color)"), children: label }),
20714
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "typo-body-lg-bold break-all text-(--cmp-chart-bar-dataLabel-color-default)", children: value })
20715
- ] });
20716
- }
20717
20899
  var SPieChart = /* @__PURE__ */ react.forwardRef(function SPieChart2({
20718
20900
  palette = "multi",
20719
20901
  showValueLabel = false,
@@ -20737,17 +20919,12 @@ var SPieChart = /* @__PURE__ */ react.forwardRef(function SPieChart2({
20737
20919
  }
20738
20920
  );
20739
20921
  });
20740
- var defaultFormat4 = (value) => value.toLocaleString();
20741
20922
  var SDonutChart = /* @__PURE__ */ react.forwardRef(function SDonutChart2({
20742
- centerLabel,
20743
- centerValue,
20744
- hideCenter = false,
20745
20923
  palette = "multi",
20746
20924
  showValueLabel = false,
20747
20925
  showLegend = true,
20748
20926
  legendPosition = "top",
20749
20927
  showTooltip = true,
20750
- formatValue = defaultFormat4,
20751
20928
  ...props
20752
20929
  }, ref) {
20753
20930
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -20760,10 +20937,8 @@ var SDonutChart = /* @__PURE__ */ react.forwardRef(function SDonutChart2({
20760
20937
  showLegend,
20761
20938
  legendPosition,
20762
20939
  showTooltip,
20763
- formatValue,
20764
20940
  innerRatio: DONUT_INNER_RATIO,
20765
- kind: "\uB3C4\uB11B \uADF8\uB798\uD504",
20766
- renderCenter: hideCenter ? void 0 : (total) => /* @__PURE__ */ jsxRuntime.jsx(RadialCenter, { label: centerLabel, value: centerValue ?? formatValue(total) })
20941
+ kind: "\uB3C4\uB11B \uADF8\uB798\uD504"
20767
20942
  }
20768
20943
  );
20769
20944
  });
@@ -22049,7 +22224,7 @@ var PaletteItem = ({
22049
22224
  className,
22050
22225
  onSelect,
22051
22226
  children
22052
- }) => asMenu ? /* @__PURE__ */ jsxRuntime.jsx(RDropdown3__namespace.Item, { title: label, "aria-label": label, className, onSelect, children }) : /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", title: label, "aria-label": label, className, onClick: onSelect, children });
22227
+ }) => asMenu ? /* @__PURE__ */ jsxRuntime.jsx(RDropdown5__namespace.Item, { title: label, "aria-label": label, className, onSelect, children }) : /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", title: label, "aria-label": label, className, onClick: onSelect, children });
22053
22228
  var ColorPalette = ({
22054
22229
  colors,
22055
22230
  columns,
@@ -22181,7 +22356,7 @@ var TableMenuItem = ({
22181
22356
  disabled,
22182
22357
  onSelect
22183
22358
  }) => /* @__PURE__ */ jsxRuntime.jsx(
22184
- RDropdown3__namespace.Item,
22359
+ RDropdown5__namespace.Item,
22185
22360
  {
22186
22361
  className: cn(menuItemClass, menuItemDisabledClass),
22187
22362
  disabled,
@@ -22348,8 +22523,8 @@ function EditorToolbarBar({
22348
22523
  const node = (item4) => {
22349
22524
  switch (item4) {
22350
22525
  case "heading":
22351
- return /* @__PURE__ */ jsxRuntime.jsxs(RDropdown3__namespace.Root, { modal: !insideModal, children: [
22352
- /* @__PURE__ */ jsxRuntime.jsx(RDropdown3__namespace.Trigger, { asChild: true, disabled: off, children: /* @__PURE__ */ jsxRuntime.jsxs(
22526
+ return /* @__PURE__ */ jsxRuntime.jsxs(RDropdown5__namespace.Root, { modal: !insideModal, children: [
22527
+ /* @__PURE__ */ jsxRuntime.jsx(RDropdown5__namespace.Trigger, { asChild: true, disabled: off, children: /* @__PURE__ */ jsxRuntime.jsxs(
22353
22528
  ToolbarButton,
22354
22529
  {
22355
22530
  label: "\uC81C\uBAA9 \uB2E8\uACC4",
@@ -22362,9 +22537,9 @@ function EditorToolbarBar({
22362
22537
  ]
22363
22538
  }
22364
22539
  ) }),
22365
- /* @__PURE__ */ jsxRuntime.jsx(RDropdown3__namespace.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxRuntime.jsxs(RDropdown3__namespace.Content, { sideOffset: 4, align: "start", className: menuClass, children: [
22540
+ /* @__PURE__ */ jsxRuntime.jsx(RDropdown5__namespace.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxRuntime.jsxs(RDropdown5__namespace.Content, { sideOffset: 4, align: "start", className: menuClass, children: [
22366
22541
  /* @__PURE__ */ jsxRuntime.jsx(
22367
- RDropdown3__namespace.Item,
22542
+ RDropdown5__namespace.Item,
22368
22543
  {
22369
22544
  className: menuItemClass,
22370
22545
  onSelect: () => chain()?.setParagraph().run(),
@@ -22372,7 +22547,7 @@ function EditorToolbarBar({
22372
22547
  }
22373
22548
  ),
22374
22549
  SEDITOR_HEADING_LEVELS.map((level) => /* @__PURE__ */ jsxRuntime.jsx(
22375
- RDropdown3__namespace.Item,
22550
+ RDropdown5__namespace.Item,
22376
22551
  {
22377
22552
  className: menuItemClass,
22378
22553
  onSelect: () => chain()?.setHeading({ level }).run(),
@@ -22383,13 +22558,13 @@ function EditorToolbarBar({
22383
22558
  ] }) })
22384
22559
  ] }, item4);
22385
22560
  case "fontSize":
22386
- return /* @__PURE__ */ jsxRuntime.jsxs(RDropdown3__namespace.Root, { modal: !insideModal, children: [
22387
- /* @__PURE__ */ jsxRuntime.jsx(RDropdown3__namespace.Trigger, { asChild: true, disabled: off, children: /* @__PURE__ */ jsxRuntime.jsxs(ToolbarButton, { label: "\uAE00\uC790 \uD06C\uAE30", disabled: off, className: "px-[6px]", children: [
22561
+ return /* @__PURE__ */ jsxRuntime.jsxs(RDropdown5__namespace.Root, { modal: !insideModal, children: [
22562
+ /* @__PURE__ */ jsxRuntime.jsx(RDropdown5__namespace.Trigger, { asChild: true, disabled: off, children: /* @__PURE__ */ jsxRuntime.jsxs(ToolbarButton, { label: "\uAE00\uC790 \uD06C\uAE30", disabled: off, className: "px-[6px]", children: [
22388
22563
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[12px] leading-[20px]", children: activeFontSize ?? FONT_SIZE_DEFAULT_LABEL }),
22389
22564
  /* @__PURE__ */ jsxRuntime.jsx(SIcon, { name: "caretDown", size: 12 })
22390
22565
  ] }) }),
22391
- /* @__PURE__ */ jsxRuntime.jsx(RDropdown3__namespace.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxRuntime.jsxs(
22392
- RDropdown3__namespace.Content,
22566
+ /* @__PURE__ */ jsxRuntime.jsx(RDropdown5__namespace.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxRuntime.jsxs(
22567
+ RDropdown5__namespace.Content,
22393
22568
  {
22394
22569
  sideOffset: 4,
22395
22570
  align: "start",
@@ -22397,7 +22572,7 @@ function EditorToolbarBar({
22397
22572
  style: { maxHeight: FONT_SIZE_MENU_MAX_HEIGHT },
22398
22573
  children: [
22399
22574
  /* @__PURE__ */ jsxRuntime.jsx(
22400
- RDropdown3__namespace.Item,
22575
+ RDropdown5__namespace.Item,
22401
22576
  {
22402
22577
  className: cn(menuItemClass, activeFontSize === null && menuItemSelectedClass),
22403
22578
  title: `${FONT_SIZE_DEFAULT_LABEL} (\uBCF8\uBB38 ${SEDITOR_DEFAULT_FONT_SIZE}px)`,
@@ -22406,7 +22581,7 @@ function EditorToolbarBar({
22406
22581
  }
22407
22582
  ),
22408
22583
  SEDITOR_FONT_SIZES.map((size) => /* @__PURE__ */ jsxRuntime.jsx(
22409
- RDropdown3__namespace.Item,
22584
+ RDropdown5__namespace.Item,
22410
22585
  {
22411
22586
  ref: activeFontSize === size ? (el) => {
22412
22587
  el?.scrollIntoView({ block: "nearest" });
@@ -22498,9 +22673,9 @@ function EditorToolbarBar({
22498
22673
  },
22499
22674
  item4
22500
22675
  );
22501
- return /* @__PURE__ */ jsxRuntime.jsxs(RDropdown3__namespace.Root, { modal: !insideModal, children: [
22502
- /* @__PURE__ */ jsxRuntime.jsx(RDropdown3__namespace.Trigger, { asChild: true, disabled: off, children: /* @__PURE__ */ jsxRuntime.jsx(ToolbarButton, { label: "\uAE00\uC790\uC0C9", disabled: off, children: /* @__PURE__ */ jsxRuntime.jsx(ColorIndicator, { color: off ? "currentColor" : activeColor, children: /* @__PURE__ */ jsxRuntime.jsx(IconTextColor, { size: ICON_SIZE }) }) }) }),
22503
- /* @__PURE__ */ jsxRuntime.jsx(RDropdown3__namespace.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxRuntime.jsx(RDropdown3__namespace.Content, { sideOffset: 4, align: "start", className: menuClass, children: /* @__PURE__ */ jsxRuntime.jsx(
22676
+ return /* @__PURE__ */ jsxRuntime.jsxs(RDropdown5__namespace.Root, { modal: !insideModal, children: [
22677
+ /* @__PURE__ */ jsxRuntime.jsx(RDropdown5__namespace.Trigger, { asChild: true, disabled: off, children: /* @__PURE__ */ jsxRuntime.jsx(ToolbarButton, { label: "\uAE00\uC790\uC0C9", disabled: off, children: /* @__PURE__ */ jsxRuntime.jsx(ColorIndicator, { color: off ? "currentColor" : activeColor, children: /* @__PURE__ */ jsxRuntime.jsx(IconTextColor, { size: ICON_SIZE }) }) }) }),
22678
+ /* @__PURE__ */ jsxRuntime.jsx(RDropdown5__namespace.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxRuntime.jsx(RDropdown5__namespace.Content, { sideOffset: 4, align: "start", className: menuClass, children: /* @__PURE__ */ jsxRuntime.jsx(
22504
22679
  ColorPalette,
22505
22680
  {
22506
22681
  asMenu: true,
@@ -22606,14 +22781,14 @@ function EditorToolbarBar({
22606
22781
  case "list": {
22607
22782
  const ListIcon = state2.orderedList ? IconOrderedList : state2.taskList ? IconTaskList : IconBulletList;
22608
22783
  const listActive = state2.bulletList || state2.orderedList || state2.taskList;
22609
- return /* @__PURE__ */ jsxRuntime.jsxs(RDropdown3__namespace.Root, { modal: !insideModal, children: [
22610
- /* @__PURE__ */ jsxRuntime.jsx(RDropdown3__namespace.Trigger, { asChild: true, disabled: off, children: /* @__PURE__ */ jsxRuntime.jsxs(ToolbarButton, { label: "\uBAA9\uB85D", active: listActive, disabled: off, className: "px-[4px]", children: [
22784
+ return /* @__PURE__ */ jsxRuntime.jsxs(RDropdown5__namespace.Root, { modal: !insideModal, children: [
22785
+ /* @__PURE__ */ jsxRuntime.jsx(RDropdown5__namespace.Trigger, { asChild: true, disabled: off, children: /* @__PURE__ */ jsxRuntime.jsxs(ToolbarButton, { label: "\uBAA9\uB85D", active: listActive, disabled: off, className: "px-[4px]", children: [
22611
22786
  /* @__PURE__ */ jsxRuntime.jsx(ListIcon, { size: ICON_SIZE }),
22612
22787
  /* @__PURE__ */ jsxRuntime.jsx(SIcon, { name: "caretDown", size: CARET_SIZE })
22613
22788
  ] }) }),
22614
- /* @__PURE__ */ jsxRuntime.jsx(RDropdown3__namespace.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxRuntime.jsxs(RDropdown3__namespace.Content, { sideOffset: 4, align: "start", className: menuClass, children: [
22789
+ /* @__PURE__ */ jsxRuntime.jsx(RDropdown5__namespace.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxRuntime.jsxs(RDropdown5__namespace.Content, { sideOffset: 4, align: "start", className: menuClass, children: [
22615
22790
  /* @__PURE__ */ jsxRuntime.jsxs(
22616
- RDropdown3__namespace.Item,
22791
+ RDropdown5__namespace.Item,
22617
22792
  {
22618
22793
  className: menuItemClass,
22619
22794
  onSelect: () => chain()?.toggleBulletList().run(),
@@ -22624,7 +22799,7 @@ function EditorToolbarBar({
22624
22799
  }
22625
22800
  ),
22626
22801
  /* @__PURE__ */ jsxRuntime.jsxs(
22627
- RDropdown3__namespace.Item,
22802
+ RDropdown5__namespace.Item,
22628
22803
  {
22629
22804
  className: menuItemClass,
22630
22805
  onSelect: () => chain()?.toggleOrderedList().run(),
@@ -22635,7 +22810,7 @@ function EditorToolbarBar({
22635
22810
  }
22636
22811
  ),
22637
22812
  /* @__PURE__ */ jsxRuntime.jsxs(
22638
- RDropdown3__namespace.Item,
22813
+ RDropdown5__namespace.Item,
22639
22814
  {
22640
22815
  className: menuItemClass,
22641
22816
  onSelect: () => chain()?.toggleTaskList().run(),
@@ -22739,17 +22914,17 @@ function EditorToolbarBar({
22739
22914
  );
22740
22915
  case "table":
22741
22916
  return /* @__PURE__ */ jsxRuntime.jsxs(
22742
- RDropdown3__namespace.Root,
22917
+ RDropdown5__namespace.Root,
22743
22918
  {
22744
22919
  open: tableOpen,
22745
22920
  onOpenChange: setTableOpen,
22746
22921
  modal: !insideModal,
22747
22922
  children: [
22748
- /* @__PURE__ */ jsxRuntime.jsx(RDropdown3__namespace.Trigger, { asChild: true, disabled: off, children: /* @__PURE__ */ jsxRuntime.jsxs(ToolbarButton, { label: "\uD45C", active: state2.inTable, disabled: off, className: "px-[6px]", children: [
22923
+ /* @__PURE__ */ jsxRuntime.jsx(RDropdown5__namespace.Trigger, { asChild: true, disabled: off, children: /* @__PURE__ */ jsxRuntime.jsxs(ToolbarButton, { label: "\uD45C", active: state2.inTable, disabled: off, className: "px-[6px]", children: [
22749
22924
  /* @__PURE__ */ jsxRuntime.jsx(IconTable, { size: ICON_SIZE }),
22750
22925
  /* @__PURE__ */ jsxRuntime.jsx(SIcon, { name: "caretDown", size: CARET_SIZE })
22751
22926
  ] }) }),
22752
- /* @__PURE__ */ jsxRuntime.jsx(RDropdown3__namespace.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxRuntime.jsxs(RDropdown3__namespace.Content, { sideOffset: 4, align: "start", className: menuClass, children: [
22927
+ /* @__PURE__ */ jsxRuntime.jsx(RDropdown5__namespace.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxRuntime.jsxs(RDropdown5__namespace.Content, { sideOffset: 4, align: "start", className: menuClass, children: [
22753
22928
  !state2.inTable && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
22754
22929
  /* @__PURE__ */ jsxRuntime.jsx(
22755
22930
  TableSizePicker,
@@ -22761,7 +22936,7 @@ function EditorToolbarBar({
22761
22936
  }
22762
22937
  }
22763
22938
  ),
22764
- /* @__PURE__ */ jsxRuntime.jsx(RDropdown3__namespace.Separator, { className: menuSeparatorClass })
22939
+ /* @__PURE__ */ jsxRuntime.jsx(RDropdown5__namespace.Separator, { className: menuSeparatorClass })
22765
22940
  ] }),
22766
22941
  /* @__PURE__ */ jsxRuntime.jsx(
22767
22942
  TableMenuItem,
@@ -22795,7 +22970,7 @@ function EditorToolbarBar({
22795
22970
  onSelect: () => chain()?.addColumnAfter().run()
22796
22971
  }
22797
22972
  ),
22798
- /* @__PURE__ */ jsxRuntime.jsx(RDropdown3__namespace.Separator, { className: menuSeparatorClass }),
22973
+ /* @__PURE__ */ jsxRuntime.jsx(RDropdown5__namespace.Separator, { className: menuSeparatorClass }),
22799
22974
  /* @__PURE__ */ jsxRuntime.jsx(
22800
22975
  TableMenuItem,
22801
22976
  {
@@ -22828,7 +23003,7 @@ function EditorToolbarBar({
22828
23003
  onSelect: () => chain()?.toggleHeaderColumn().run()
22829
23004
  }
22830
23005
  ),
22831
- /* @__PURE__ */ jsxRuntime.jsx(RDropdown3__namespace.Separator, { className: menuSeparatorClass }),
23006
+ /* @__PURE__ */ jsxRuntime.jsx(RDropdown5__namespace.Separator, { className: menuSeparatorClass }),
22832
23007
  /* @__PURE__ */ jsxRuntime.jsx(
22833
23008
  TableMenuItem,
22834
23009
  {
@@ -26900,6 +27075,7 @@ exports.SLoadingModal = SLoadingModal;
26900
27075
  exports.SLoadingViewport = SLoadingViewport;
26901
27076
  exports.SLoginCard = SLoginCard2;
26902
27077
  exports.SLogo = SLogo;
27078
+ exports.SMeatballButton = SMeatballButton2;
26903
27079
  exports.SModal = SModal;
26904
27080
  exports.SModalOutlet = SModalOutlet;
26905
27081
  exports.SNumberInput = SNumberInput;