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

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.
Files changed (48) hide show
  1. package/AGENTS.md +510 -136
  2. package/dist/components/SBarChart/README.md +15 -0
  3. package/dist/components/SBarChart/SBarChart.d.ts +15 -1
  4. package/dist/components/SBarChart/index.d.ts +1 -1
  5. package/dist/components/SCallout/README.md +1 -0
  6. package/dist/components/SCallout/SCallout.d.ts +6 -1
  7. package/dist/components/SDonutChart/README.md +2 -4
  8. package/dist/components/SDonutChart/SDonutChart.d.ts +9 -10
  9. package/dist/components/SGhostButton/README.md +2 -0
  10. package/dist/components/SLineChart/README.md +15 -0
  11. package/dist/components/SLineChart/SLineChart.d.ts +15 -1
  12. package/dist/components/SLineChart/index.d.ts +1 -1
  13. package/dist/components/SLineChart/lineChart.config.d.ts +8 -5
  14. package/dist/components/SMeatballButton/README.md +67 -0
  15. package/dist/components/SMeatballButton/SMeatballButton.d.ts +36 -0
  16. package/dist/components/SMeatballButton/index.d.ts +1 -0
  17. package/dist/components/SPage/README.md +19 -0
  18. package/dist/components/SPage/SPage.d.ts +11 -2
  19. package/dist/components/SPage/index.d.ts +1 -1
  20. package/dist/components/SPage/page.config.d.ts +8 -0
  21. package/dist/components/SPieChart/README.md +1 -0
  22. package/dist/components/SPieChart/SPieChart.d.ts +6 -1
  23. package/dist/docs/RecipeGallery.d.ts +13 -0
  24. package/dist/index.cjs +338 -154
  25. package/dist/index.cjs.map +1 -1
  26. package/dist/index.d.ts +1 -0
  27. package/dist/index.js +336 -154
  28. package/dist/index.js.map +1 -1
  29. package/dist/lib/chart/radial.d.ts +22 -11
  30. package/dist/lib/chart/tooltip.d.ts +18 -1
  31. package/dist/lib/dropdown-menu.d.ts +19 -0
  32. package/dist/llms-full.txt +628 -140
  33. package/dist/llms.txt +512 -138
  34. package/dist/recipes/AppShell.d.ts +21 -0
  35. package/dist/recipes/ExcelFilePopupPage.d.ts +5 -0
  36. package/dist/recipes/LoginPage.d.ts +6 -0
  37. package/dist/recipes/ProductCreatePage.d.ts +1 -0
  38. package/dist/recipes/ProductCreateSectionsPage.d.ts +5 -0
  39. package/dist/recipes/ProductDetailInlineEditPage.d.ts +9 -0
  40. package/dist/recipes/ProductDetailPage.d.ts +1 -0
  41. package/dist/recipes/ProductListChipFilterPage.d.ts +1 -0
  42. package/dist/recipes/ProductListPage.d.ts +1 -0
  43. package/dist/recipes/TransferOrderPopupPage.d.ts +2 -0
  44. package/dist/recipes/api.d.ts +91 -0
  45. package/dist/recipes/recipe-story.d.ts +33 -0
  46. package/dist/recipes/router.d.ts +9 -0
  47. package/dist/styles.css +21 -3
  48. package/package.json +3 -1
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;
@@ -12661,6 +12761,10 @@ var BACKGROUND_CLASS = {
12661
12761
  neutral: "bg-[var(--sys-color-bg-neutralLight)]",
12662
12762
  screen: "bg-[var(--sys-color-bg-screen)]"
12663
12763
  };
12764
+ var PADDING_CLASS2 = {
12765
+ default: "p-[var(--cmp-pageBody-padding-default)]",
12766
+ none: "p-0"
12767
+ };
12664
12768
  var NATIVE_SCROLLBAR_BACKGROUND_CLASS = {
12665
12769
  frame: `${SCROLLBAR_TRACK_BORDER_CLASS} ${SCROLLBAR_TRACK_BG_CLASS}`,
12666
12770
  neutral: `${SCROLLBAR_TRACK_BORDER_CLASS} ${SCROLLBAR_TRACK_BG_WHITE_CLASS}`,
@@ -12676,6 +12780,7 @@ var setForwardedRef = (ref, node) => {
12676
12780
  var SPage = /* @__PURE__ */ react.forwardRef(function SPage2({
12677
12781
  background = "frame",
12678
12782
  scrollEndSpacing = false,
12783
+ padding = "default",
12679
12784
  overlayScrollbar = false,
12680
12785
  contentHeight = "auto",
12681
12786
  contentWidth = "full",
@@ -12714,7 +12819,8 @@ var SPage = /* @__PURE__ */ react.forwardRef(function SPage2({
12714
12819
  {
12715
12820
  ref: setMainRef,
12716
12821
  className: cn(
12717
- "box-border min-h-0 min-w-0 flex-1 overflow-auto p-[var(--cmp-pageBody-padding-default)]",
12822
+ "box-border min-h-0 min-w-0 flex-1 overflow-auto",
12823
+ PADDING_CLASS2[padding],
12718
12824
  overlayScrollbar && "h-full",
12719
12825
  !fill && scrollEndSpacing && "pb-[var(--cmp-pageBody-padding-scrollEnd)]",
12720
12826
  overlayScrollbar ? SCROLLBAR_HIDDEN_CLASS : `${SCROLLBAR_CLASS} ${NATIVE_SCROLLBAR_BACKGROUND_CLASS[background]}`,
@@ -12754,6 +12860,7 @@ var SPage = /* @__PURE__ */ react.forwardRef(function SPage2({
12754
12860
  // src/components/SPage/page.config.ts
12755
12861
  var PAGE_BACKGROUNDS = ["frame", "neutral", "screen"];
12756
12862
  var PAGE_CONTENT_HEIGHTS = ["auto", "fill"];
12863
+ var PAGE_PADDINGS = ["default", "none"];
12757
12864
  var PAGE_CONTENT_WIDTHS = ["full", "fixed", "fixedCenter"];
12758
12865
  var PAGE_HEADER_VARIANTS = ["plain", "bar"];
12759
12866
  var SPageHeader = /* @__PURE__ */ withDisplayName(
@@ -16506,7 +16613,7 @@ var STable = /* @__PURE__ */ react.forwardRef(function STable2({
16506
16613
  ),
16507
16614
  contextMenuOn && typeof document !== "undefined" && reactDom.createPortal(
16508
16615
  /* @__PURE__ */ jsxRuntime.jsxs(
16509
- RDropdown3__namespace.Root,
16616
+ RDropdown5__namespace.Root,
16510
16617
  {
16511
16618
  modal: false,
16512
16619
  open: contextMenuOpen,
@@ -16514,7 +16621,7 @@ var STable = /* @__PURE__ */ react.forwardRef(function STable2({
16514
16621
  if (!open) setContextMenu((m) => m == null ? null : { ...m, open: false });
16515
16622
  },
16516
16623
  children: [
16517
- /* @__PURE__ */ jsxRuntime.jsx(RDropdown3__namespace.Trigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
16624
+ /* @__PURE__ */ jsxRuntime.jsx(RDropdown5__namespace.Trigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
16518
16625
  "span",
16519
16626
  {
16520
16627
  "aria-hidden": true,
@@ -16523,7 +16630,7 @@ var STable = /* @__PURE__ */ react.forwardRef(function STable2({
16523
16630
  }
16524
16631
  ) }),
16525
16632
  /* @__PURE__ */ jsxRuntime.jsx(
16526
- RDropdown3__namespace.Content,
16633
+ RDropdown5__namespace.Content,
16527
16634
  {
16528
16635
  align: "start",
16529
16636
  side: "bottom",
@@ -16537,7 +16644,7 @@ var STable = /* @__PURE__ */ react.forwardRef(function STable2({
16537
16644
  FLOATING_SLIDE_ANIM
16538
16645
  ),
16539
16646
  children: contextMenuItems?.map((item4) => /* @__PURE__ */ jsxRuntime.jsxs(
16540
- RDropdown3__namespace.Item,
16647
+ RDropdown5__namespace.Item,
16541
16648
  {
16542
16649
  disabled: item4.disabled,
16543
16650
  onSelect: () => onContextMenuItemClick?.(item4.value, contextMenu?.rows ?? []),
@@ -19432,6 +19539,7 @@ function ChartTooltip({
19432
19539
  anchor,
19433
19540
  bounds,
19434
19541
  gapX = DEFAULT_GAP_X,
19542
+ footer,
19435
19543
  className
19436
19544
  }) {
19437
19545
  const { ref, size } = useElementSize();
@@ -19482,7 +19590,8 @@ function ChartTooltip({
19482
19590
  ]
19483
19591
  },
19484
19592
  `${item4.label}-${index}`
19485
- ))
19593
+ )),
19594
+ footer != null && footer !== false && /* @__PURE__ */ jsxRuntime.jsx("div", { children: footer })
19486
19595
  ]
19487
19596
  }
19488
19597
  );
@@ -19573,6 +19682,7 @@ var SBarChart = /* @__PURE__ */ react.forwardRef(function SBarChart2({
19573
19682
  formatValue = defaultFormat,
19574
19683
  height,
19575
19684
  onBarClick,
19685
+ tooltipFooter,
19576
19686
  className,
19577
19687
  style
19578
19688
  }, ref) {
@@ -20001,7 +20111,16 @@ var SBarChart = /* @__PURE__ */ react.forwardRef(function SBarChart2({
20001
20111
  items: tooltipItems,
20002
20112
  anchor: tooltipAnchor,
20003
20113
  bounds: size,
20004
- gapX: tooltipGapX
20114
+ gapX: tooltipGapX,
20115
+ footer: tooltipFooter?.({
20116
+ categoryIndex: hoveredCategory,
20117
+ name: categories[hoveredCategory] ?? "",
20118
+ points: series.flatMap((s, seriesIndex) => {
20119
+ const value = s.data[hoveredCategory];
20120
+ if (value == null || !Number.isFinite(value)) return [];
20121
+ return [{ seriesIndex, categoryIndex: hoveredCategory, value }];
20122
+ })
20123
+ })
20005
20124
  }
20006
20125
  )
20007
20126
  ]
@@ -20063,7 +20182,8 @@ var POINT_HOVER_BG = "var(--cmp-chart-bg)";
20063
20182
  var POINT_HOVER_EXTENT = POINT_HOVER_RADIUS + POINT_HOVER_BORDER_WIDTH / 2;
20064
20183
  var BAND_MIN = 40;
20065
20184
  var VALUE_LABEL_GAP2 = 6;
20066
- var AREA_OPACITY = "var(--opacity-040)";
20185
+ var AREA_OPACITY_TOP = "30%";
20186
+ var AREA_OPACITY_BOTTOM = "var(--opacity-005)";
20067
20187
  var LINE_DATA_LABEL_COLOR = "var(--cmp-chart-bar-dataLabel-color-default)";
20068
20188
  var LINE_DATA_LABEL_TYPO = "typo-body-sm-medium";
20069
20189
  var LINE_DATA_LABEL_TYPO_HOVER = "typo-body-md-bold";
@@ -20159,6 +20279,7 @@ var SLineChart = /* @__PURE__ */ react.forwardRef(function SLineChart2({
20159
20279
  formatValue = defaultFormat2,
20160
20280
  height,
20161
20281
  onPointClick,
20282
+ tooltipFooter,
20162
20283
  className,
20163
20284
  style
20164
20285
  }, ref) {
@@ -20166,6 +20287,7 @@ var SLineChart = /* @__PURE__ */ react.forwardRef(function SLineChart2({
20166
20287
  const { ref: plotRef, size } = useElementSize();
20167
20288
  const { ref: axisTextRef, size: axisText } = useElementSize();
20168
20289
  const { ref: axisSampleRef, size: axisSample } = useElementSize();
20290
+ const gradientId = react.useId();
20169
20291
  const [hoveredCategory, setHoveredCategory] = react.useState(null);
20170
20292
  const colorAt = react.useCallback(
20171
20293
  (seriesIndex) => paletteColor(palette, seriesIndex, customColors),
@@ -20294,13 +20416,43 @@ var SLineChart = /* @__PURE__ */ react.forwardRef(function SLineChart2({
20294
20416
  {
20295
20417
  "aria-hidden": true,
20296
20418
  d,
20297
- style: { fill: colorAt(seriesIndex), fillOpacity: AREA_OPACITY }
20419
+ style: { fill: `url(#${gradientId}-area-${seriesIndex})` }
20298
20420
  },
20299
20421
  `area-${seriesIndex}-${runIndex}`
20300
20422
  );
20301
20423
  })
20302
20424
  );
20303
- }, [area, plotted, smooth, colorAt]);
20425
+ }, [area, plotted, smooth, gradientId]);
20426
+ const areaGradients = react.useMemo(() => {
20427
+ if (!area) return null;
20428
+ return /* @__PURE__ */ jsxRuntime.jsx("defs", { children: plotted.map((_, seriesIndex) => /* @__PURE__ */ jsxRuntime.jsxs(
20429
+ "linearGradient",
20430
+ {
20431
+ id: `${gradientId}-area-${seriesIndex}`,
20432
+ x1: "0",
20433
+ y1: "0",
20434
+ x2: "0",
20435
+ y2: "1",
20436
+ children: [
20437
+ /* @__PURE__ */ jsxRuntime.jsx(
20438
+ "stop",
20439
+ {
20440
+ offset: "0",
20441
+ style: { stopColor: colorAt(seriesIndex), stopOpacity: AREA_OPACITY_TOP }
20442
+ }
20443
+ ),
20444
+ /* @__PURE__ */ jsxRuntime.jsx(
20445
+ "stop",
20446
+ {
20447
+ offset: "1",
20448
+ style: { stopColor: colorAt(seriesIndex), stopOpacity: AREA_OPACITY_BOTTOM }
20449
+ }
20450
+ )
20451
+ ]
20452
+ },
20453
+ `area-gradient-${seriesIndex}`
20454
+ )) });
20455
+ }, [area, plotted, colorAt, gradientId]);
20304
20456
  const lines = react.useMemo(
20305
20457
  () => plotted.flatMap(
20306
20458
  (row, seriesIndex) => runsOf(row).map((run, runIndex) => {
@@ -20482,6 +20634,7 @@ var SLineChart = /* @__PURE__ */ react.forwardRef(function SLineChart2({
20482
20634
  }
20483
20635
  }
20484
20636
  ),
20637
+ areaGradients,
20485
20638
  areas,
20486
20639
  lines,
20487
20640
  pointHalos,
@@ -20497,7 +20650,16 @@ var SLineChart = /* @__PURE__ */ react.forwardRef(function SLineChart2({
20497
20650
  items: tooltipItems,
20498
20651
  anchor: tooltipAnchor,
20499
20652
  bounds: size,
20500
- gapX: { after: -4, before: -4 }
20653
+ gapX: { after: -4, before: -4 },
20654
+ footer: tooltipFooter?.({
20655
+ categoryIndex: hoveredCategory,
20656
+ name: categories[hoveredCategory] ?? "",
20657
+ points: rows.flatMap((row, seriesIndex) => {
20658
+ const point = row[hoveredCategory];
20659
+ if (point == null) return [];
20660
+ return [{ seriesIndex, categoryIndex: hoveredCategory, value: point.own }];
20661
+ })
20662
+ })
20501
20663
  }
20502
20664
  )
20503
20665
  ]
@@ -20515,9 +20677,11 @@ var SLineChart = /* @__PURE__ */ react.forwardRef(function SLineChart2({
20515
20677
  }
20516
20678
  );
20517
20679
  });
20518
- var DONUT_INNER_RATIO = 0.6;
20680
+ var DONUT_INNER_RATIO = 0.4;
20519
20681
  var LABEL_MIN_RATIO = 0.05;
20520
20682
  var PIE_LABEL_RADIUS_RATIO = 0.65;
20683
+ var HOVER_GROW = 4;
20684
+ var HOVER_CORNER = 2;
20521
20685
  var OPACITY_DEFAULT = "var(--cmp-chart-bar-opacity-default)";
20522
20686
  var OPACITY_DIMMED = "var(--cmp-chart-bar-opacity-dimmed)";
20523
20687
  var OPACITY_HOVER = 1;
@@ -20530,19 +20694,42 @@ var r2 = (value) => Math.round(value * 100) / 100;
20530
20694
  function polar(center, radius, angle) {
20531
20695
  return { x: center + radius * Math.sin(angle), y: center - radius * Math.cos(angle) };
20532
20696
  }
20533
- function slicePath(center, outer, inner, start, end) {
20697
+ var arc = (radius, large, sweep, p) => `A${r2(radius)} ${r2(radius)} 0 ${large} ${sweep} ${r2(p.x)} ${r2(p.y)}`;
20698
+ function fitCorner(corner, outer, inner, span) {
20699
+ if (corner <= 0 || outer <= 0) return 0;
20700
+ let fitted = Math.min(corner, (outer - inner) / 2);
20701
+ if (span < Math.PI) {
20702
+ const half = Math.sin(span / 2);
20703
+ fitted = Math.min(fitted, outer * half / (1 + half));
20704
+ if (inner > 0) fitted = Math.min(fitted, inner * half / (1 - half));
20705
+ }
20706
+ return fitted >= 0.5 ? fitted : 0;
20707
+ }
20708
+ function slicePath(center, outer, inner, start, end, corner = 0) {
20534
20709
  if (end - start >= Math.PI * 2 - 1e-6) {
20535
20710
  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
20711
  return inner > 0 ? ring(outer) + ring(inner) : ring(outer);
20537
20712
  }
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`;
20713
+ const span = end - start;
20714
+ const round = fitCorner(corner, outer, inner, span);
20715
+ const outerLine = Math.sqrt(Math.max(outer * outer - 2 * outer * round, 0));
20716
+ const outerPhi = round > 0 ? Math.asin(round / (outer - round)) : 0;
20717
+ const outerLarge = span - 2 * outerPhi > Math.PI ? 1 : 0;
20718
+ const o0 = polar(center, outerLine, start);
20719
+ let d = `M${r2(o0.x)} ${r2(o0.y)}`;
20720
+ if (round > 0) d += arc(round, 0, 1, polar(center, outer, start + outerPhi));
20721
+ d += arc(outer, outerLarge, 1, polar(center, outer, end - outerPhi));
20722
+ if (round > 0) d += arc(round, 0, 1, polar(center, outerLine, end));
20723
+ if (inner <= 0) return `${d}L${r2(center)} ${r2(center)}Z`;
20724
+ const innerLine = Math.sqrt(inner * inner + 2 * inner * round);
20725
+ const innerPhi = round > 0 ? Math.asin(round / (inner + round)) : 0;
20726
+ const innerLarge = span - 2 * innerPhi > Math.PI ? 1 : 0;
20727
+ const i0 = polar(center, innerLine, end);
20728
+ d += `L${r2(i0.x)} ${r2(i0.y)}`;
20729
+ if (round > 0) d += arc(round, 0, 1, polar(center, inner, end - innerPhi));
20730
+ d += arc(inner, innerLarge, 0, polar(center, inner, start + innerPhi));
20731
+ if (round > 0) d += arc(round, 0, 1, polar(center, innerLine, start));
20732
+ return `${d}Z`;
20546
20733
  }
20547
20734
  var RadialChart = /* @__PURE__ */ react.forwardRef(function RadialChart2({
20548
20735
  data,
@@ -20554,44 +20741,44 @@ var RadialChart = /* @__PURE__ */ react.forwardRef(function RadialChart2({
20554
20741
  showTooltip = true,
20555
20742
  formatValue = defaultFormat3,
20556
20743
  onSliceClick,
20744
+ tooltipFooter,
20557
20745
  className,
20558
20746
  style,
20559
20747
  innerRatio,
20560
- renderCenter,
20561
20748
  kind
20562
20749
  }, ref) {
20563
20750
  const { ref: plotRef, size } = useElementSize();
20564
20751
  const [hovered, setHovered] = react.useState(null);
20565
- const { arcs, total } = react.useMemo(() => {
20752
+ const arcs = react.useMemo(() => {
20566
20753
  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);
20754
+ const valid = data.map((slice2, index) => ({ ...slice2, index })).filter((slice2) => Number.isFinite(slice2.value) && slice2.value > 0);
20755
+ const sum = valid.reduce((acc, slice2) => acc + slice2.value, 0);
20569
20756
  let angle = 0;
20570
- const list = valid.map((slice) => {
20571
- const ratio = slice.value / sum;
20757
+ const list = valid.map((slice2) => {
20758
+ const ratio = slice2.value / sum;
20572
20759
  const start = angle;
20573
20760
  angle += ratio * Math.PI * 2;
20574
20761
  return {
20575
- index: slice.index,
20576
- name: slice.name,
20577
- value: slice.value,
20762
+ index: slice2.index,
20763
+ name: slice2.name,
20764
+ value: slice2.value,
20578
20765
  ratio,
20579
20766
  start,
20580
20767
  end: angle,
20581
- color: paletteColor(effective, slice.index, colors)
20768
+ color: paletteColor(effective, slice2.index, colors)
20582
20769
  };
20583
20770
  });
20584
- return { arcs: list, total: sum };
20771
+ return list;
20585
20772
  }, [data, palette, colors]);
20586
20773
  const diameter = size.width;
20587
20774
  const center = diameter / 2;
20588
- const outer = center;
20775
+ const outer = Math.max(center - HOVER_GROW, 0);
20589
20776
  const inner = outer * innerRatio;
20590
- const hoveredArc = arcs.find((arc) => arc.index === hovered) ?? null;
20777
+ const hoveredArc = arcs.find((arc2) => arc2.index === hovered) ?? null;
20591
20778
  const legend = showLegend ? /* @__PURE__ */ jsxRuntime.jsx(
20592
20779
  ChartLegend,
20593
20780
  {
20594
- items: arcs.map((arc) => ({ name: arc.name, color: arc.color })),
20781
+ items: arcs.map((arc2) => ({ name: arc2.name, color: arc2.color })),
20595
20782
  activeIndex: hoveredArc ? arcs.indexOf(hoveredArc) : null
20596
20783
  }
20597
20784
  ) : null;
@@ -20602,6 +20789,17 @@ var RadialChart = /* @__PURE__ */ react.forwardRef(function RadialChart2({
20602
20789
  return { left: point.x, right: point.x, top: point.y };
20603
20790
  }, [hoveredArc, diameter, center, outer, inner]);
20604
20791
  const labelRadius = inner > 0 ? (outer + inner) / 2 : outer * PIE_LABEL_RADIUS_RATIO;
20792
+ const slice = (target) => {
20793
+ const picked = hovered === target.index;
20794
+ return slicePath(
20795
+ center,
20796
+ picked ? outer + HOVER_GROW : outer,
20797
+ picked ? Math.max(inner - HOVER_GROW, 0) : inner,
20798
+ target.start,
20799
+ target.end,
20800
+ picked ? HOVER_CORNER : 0
20801
+ );
20802
+ };
20605
20803
  return /* @__PURE__ */ jsxRuntime.jsx(
20606
20804
  ChartFrame,
20607
20805
  {
@@ -20631,34 +20829,34 @@ var RadialChart = /* @__PURE__ */ react.forwardRef(function RadialChart2({
20631
20829
  style: { fill: "var(--cmp-chart-grid-line-color)" }
20632
20830
  }
20633
20831
  )
20634
- ) : arcs.map((arc) => {
20635
- const opacity = hovered == null ? OPACITY_DEFAULT : hovered === arc.index ? OPACITY_HOVER : OPACITY_DIMMED;
20832
+ ) : arcs.map((arc2) => {
20833
+ const opacity = hovered == null ? OPACITY_DEFAULT : hovered === arc2.index ? OPACITY_HOVER : OPACITY_DIMMED;
20636
20834
  return /* @__PURE__ */ jsxRuntime.jsx(
20637
20835
  "path",
20638
20836
  {
20639
- d: slicePath(center, outer, inner, arc.start, arc.end),
20837
+ d: slice(arc2),
20640
20838
  fillRule: "evenodd",
20641
20839
  className: "transition-opacity duration-200 ease-out motion-reduce:transition-none",
20642
20840
  style: {
20643
- fill: arc.color,
20841
+ fill: arc2.color,
20644
20842
  opacity,
20645
20843
  cursor: onSliceClick ? "pointer" : void 0
20646
20844
  },
20647
- onMouseEnter: () => setHovered(arc.index),
20845
+ onMouseEnter: () => setHovered(arc2.index),
20648
20846
  onClick: onSliceClick ? () => onSliceClick({
20649
- index: arc.index,
20650
- name: arc.name,
20651
- value: arc.value,
20652
- ratio: arc.ratio
20847
+ index: arc2.index,
20848
+ name: arc2.name,
20849
+ value: arc2.value,
20850
+ ratio: arc2.ratio
20653
20851
  }) : void 0,
20654
- children: /* @__PURE__ */ jsxRuntime.jsx("title", { children: `${arc.name} ${formatValue(arc.value)} (${formatRatio(arc.ratio)})` })
20852
+ children: /* @__PURE__ */ jsxRuntime.jsx("title", { children: `${arc2.name} ${formatValue(arc2.value)} (${formatRatio(arc2.ratio)})` })
20655
20853
  },
20656
- `slice-${arc.index}`
20854
+ `slice-${arc2.index}`
20657
20855
  );
20658
20856
  }),
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);
20857
+ showValueLabel && arcs.map((arc2) => {
20858
+ if (arc2.ratio < LABEL_MIN_RATIO) return null;
20859
+ const point = polar(center, labelRadius, (arc2.start + arc2.end) / 2);
20662
20860
  return /* @__PURE__ */ jsxRuntime.jsx(
20663
20861
  "text",
20664
20862
  {
@@ -20670,25 +20868,16 @@ var RadialChart = /* @__PURE__ */ react.forwardRef(function RadialChart2({
20670
20868
  className: "pointer-events-none typo-body-sm-bold transition-opacity duration-200 ease-out motion-reduce:transition-none",
20671
20869
  style: {
20672
20870
  fill: "var(--sys-color-fg-inverse)",
20673
- opacity: hovered != null && hovered !== arc.index ? OPACITY_DIMMED : void 0
20871
+ opacity: hovered != null && hovered !== arc2.index ? OPACITY_DIMMED : void 0
20674
20872
  },
20675
- children: formatRatio(arc.ratio)
20873
+ children: formatRatio(arc2.ratio)
20676
20874
  },
20677
- `label-${arc.index}`
20875
+ `label-${arc2.index}`
20678
20876
  );
20679
20877
  })
20680
20878
  ]
20681
20879
  }
20682
20880
  ),
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
20881
  showTooltip && hoveredArc && tooltipAnchor && /* @__PURE__ */ jsxRuntime.jsx(
20693
20882
  ChartTooltip,
20694
20883
  {
@@ -20701,19 +20890,19 @@ var RadialChart = /* @__PURE__ */ react.forwardRef(function RadialChart2({
20701
20890
  }
20702
20891
  ],
20703
20892
  anchor: tooltipAnchor,
20704
- bounds: size
20893
+ bounds: size,
20894
+ footer: tooltipFooter?.({
20895
+ index: hoveredArc.index,
20896
+ name: hoveredArc.name,
20897
+ value: hoveredArc.value,
20898
+ ratio: hoveredArc.ratio
20899
+ })
20705
20900
  }
20706
20901
  )
20707
20902
  ] })
20708
20903
  }
20709
20904
  );
20710
20905
  });
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
20906
  var SPieChart = /* @__PURE__ */ react.forwardRef(function SPieChart2({
20718
20907
  palette = "multi",
20719
20908
  showValueLabel = false,
@@ -20737,17 +20926,12 @@ var SPieChart = /* @__PURE__ */ react.forwardRef(function SPieChart2({
20737
20926
  }
20738
20927
  );
20739
20928
  });
20740
- var defaultFormat4 = (value) => value.toLocaleString();
20741
20929
  var SDonutChart = /* @__PURE__ */ react.forwardRef(function SDonutChart2({
20742
- centerLabel,
20743
- centerValue,
20744
- hideCenter = false,
20745
20930
  palette = "multi",
20746
20931
  showValueLabel = false,
20747
20932
  showLegend = true,
20748
20933
  legendPosition = "top",
20749
20934
  showTooltip = true,
20750
- formatValue = defaultFormat4,
20751
20935
  ...props
20752
20936
  }, ref) {
20753
20937
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -20760,10 +20944,8 @@ var SDonutChart = /* @__PURE__ */ react.forwardRef(function SDonutChart2({
20760
20944
  showLegend,
20761
20945
  legendPosition,
20762
20946
  showTooltip,
20763
- formatValue,
20764
20947
  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) })
20948
+ kind: "\uB3C4\uB11B \uADF8\uB798\uD504"
20767
20949
  }
20768
20950
  );
20769
20951
  });
@@ -22049,7 +22231,7 @@ var PaletteItem = ({
22049
22231
  className,
22050
22232
  onSelect,
22051
22233
  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 });
22234
+ }) => 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
22235
  var ColorPalette = ({
22054
22236
  colors,
22055
22237
  columns,
@@ -22181,7 +22363,7 @@ var TableMenuItem = ({
22181
22363
  disabled,
22182
22364
  onSelect
22183
22365
  }) => /* @__PURE__ */ jsxRuntime.jsx(
22184
- RDropdown3__namespace.Item,
22366
+ RDropdown5__namespace.Item,
22185
22367
  {
22186
22368
  className: cn(menuItemClass, menuItemDisabledClass),
22187
22369
  disabled,
@@ -22348,8 +22530,8 @@ function EditorToolbarBar({
22348
22530
  const node = (item4) => {
22349
22531
  switch (item4) {
22350
22532
  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(
22533
+ return /* @__PURE__ */ jsxRuntime.jsxs(RDropdown5__namespace.Root, { modal: !insideModal, children: [
22534
+ /* @__PURE__ */ jsxRuntime.jsx(RDropdown5__namespace.Trigger, { asChild: true, disabled: off, children: /* @__PURE__ */ jsxRuntime.jsxs(
22353
22535
  ToolbarButton,
22354
22536
  {
22355
22537
  label: "\uC81C\uBAA9 \uB2E8\uACC4",
@@ -22362,9 +22544,9 @@ function EditorToolbarBar({
22362
22544
  ]
22363
22545
  }
22364
22546
  ) }),
22365
- /* @__PURE__ */ jsxRuntime.jsx(RDropdown3__namespace.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxRuntime.jsxs(RDropdown3__namespace.Content, { sideOffset: 4, align: "start", className: menuClass, children: [
22547
+ /* @__PURE__ */ jsxRuntime.jsx(RDropdown5__namespace.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxRuntime.jsxs(RDropdown5__namespace.Content, { sideOffset: 4, align: "start", className: menuClass, children: [
22366
22548
  /* @__PURE__ */ jsxRuntime.jsx(
22367
- RDropdown3__namespace.Item,
22549
+ RDropdown5__namespace.Item,
22368
22550
  {
22369
22551
  className: menuItemClass,
22370
22552
  onSelect: () => chain()?.setParagraph().run(),
@@ -22372,7 +22554,7 @@ function EditorToolbarBar({
22372
22554
  }
22373
22555
  ),
22374
22556
  SEDITOR_HEADING_LEVELS.map((level) => /* @__PURE__ */ jsxRuntime.jsx(
22375
- RDropdown3__namespace.Item,
22557
+ RDropdown5__namespace.Item,
22376
22558
  {
22377
22559
  className: menuItemClass,
22378
22560
  onSelect: () => chain()?.setHeading({ level }).run(),
@@ -22383,13 +22565,13 @@ function EditorToolbarBar({
22383
22565
  ] }) })
22384
22566
  ] }, item4);
22385
22567
  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: [
22568
+ return /* @__PURE__ */ jsxRuntime.jsxs(RDropdown5__namespace.Root, { modal: !insideModal, children: [
22569
+ /* @__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
22570
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[12px] leading-[20px]", children: activeFontSize ?? FONT_SIZE_DEFAULT_LABEL }),
22389
22571
  /* @__PURE__ */ jsxRuntime.jsx(SIcon, { name: "caretDown", size: 12 })
22390
22572
  ] }) }),
22391
- /* @__PURE__ */ jsxRuntime.jsx(RDropdown3__namespace.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxRuntime.jsxs(
22392
- RDropdown3__namespace.Content,
22573
+ /* @__PURE__ */ jsxRuntime.jsx(RDropdown5__namespace.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxRuntime.jsxs(
22574
+ RDropdown5__namespace.Content,
22393
22575
  {
22394
22576
  sideOffset: 4,
22395
22577
  align: "start",
@@ -22397,7 +22579,7 @@ function EditorToolbarBar({
22397
22579
  style: { maxHeight: FONT_SIZE_MENU_MAX_HEIGHT },
22398
22580
  children: [
22399
22581
  /* @__PURE__ */ jsxRuntime.jsx(
22400
- RDropdown3__namespace.Item,
22582
+ RDropdown5__namespace.Item,
22401
22583
  {
22402
22584
  className: cn(menuItemClass, activeFontSize === null && menuItemSelectedClass),
22403
22585
  title: `${FONT_SIZE_DEFAULT_LABEL} (\uBCF8\uBB38 ${SEDITOR_DEFAULT_FONT_SIZE}px)`,
@@ -22406,7 +22588,7 @@ function EditorToolbarBar({
22406
22588
  }
22407
22589
  ),
22408
22590
  SEDITOR_FONT_SIZES.map((size) => /* @__PURE__ */ jsxRuntime.jsx(
22409
- RDropdown3__namespace.Item,
22591
+ RDropdown5__namespace.Item,
22410
22592
  {
22411
22593
  ref: activeFontSize === size ? (el) => {
22412
22594
  el?.scrollIntoView({ block: "nearest" });
@@ -22498,9 +22680,9 @@ function EditorToolbarBar({
22498
22680
  },
22499
22681
  item4
22500
22682
  );
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(
22683
+ return /* @__PURE__ */ jsxRuntime.jsxs(RDropdown5__namespace.Root, { modal: !insideModal, children: [
22684
+ /* @__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 }) }) }) }),
22685
+ /* @__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
22686
  ColorPalette,
22505
22687
  {
22506
22688
  asMenu: true,
@@ -22606,14 +22788,14 @@ function EditorToolbarBar({
22606
22788
  case "list": {
22607
22789
  const ListIcon = state2.orderedList ? IconOrderedList : state2.taskList ? IconTaskList : IconBulletList;
22608
22790
  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: [
22791
+ return /* @__PURE__ */ jsxRuntime.jsxs(RDropdown5__namespace.Root, { modal: !insideModal, children: [
22792
+ /* @__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
22793
  /* @__PURE__ */ jsxRuntime.jsx(ListIcon, { size: ICON_SIZE }),
22612
22794
  /* @__PURE__ */ jsxRuntime.jsx(SIcon, { name: "caretDown", size: CARET_SIZE })
22613
22795
  ] }) }),
22614
- /* @__PURE__ */ jsxRuntime.jsx(RDropdown3__namespace.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxRuntime.jsxs(RDropdown3__namespace.Content, { sideOffset: 4, align: "start", className: menuClass, children: [
22796
+ /* @__PURE__ */ jsxRuntime.jsx(RDropdown5__namespace.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxRuntime.jsxs(RDropdown5__namespace.Content, { sideOffset: 4, align: "start", className: menuClass, children: [
22615
22797
  /* @__PURE__ */ jsxRuntime.jsxs(
22616
- RDropdown3__namespace.Item,
22798
+ RDropdown5__namespace.Item,
22617
22799
  {
22618
22800
  className: menuItemClass,
22619
22801
  onSelect: () => chain()?.toggleBulletList().run(),
@@ -22624,7 +22806,7 @@ function EditorToolbarBar({
22624
22806
  }
22625
22807
  ),
22626
22808
  /* @__PURE__ */ jsxRuntime.jsxs(
22627
- RDropdown3__namespace.Item,
22809
+ RDropdown5__namespace.Item,
22628
22810
  {
22629
22811
  className: menuItemClass,
22630
22812
  onSelect: () => chain()?.toggleOrderedList().run(),
@@ -22635,7 +22817,7 @@ function EditorToolbarBar({
22635
22817
  }
22636
22818
  ),
22637
22819
  /* @__PURE__ */ jsxRuntime.jsxs(
22638
- RDropdown3__namespace.Item,
22820
+ RDropdown5__namespace.Item,
22639
22821
  {
22640
22822
  className: menuItemClass,
22641
22823
  onSelect: () => chain()?.toggleTaskList().run(),
@@ -22739,17 +22921,17 @@ function EditorToolbarBar({
22739
22921
  );
22740
22922
  case "table":
22741
22923
  return /* @__PURE__ */ jsxRuntime.jsxs(
22742
- RDropdown3__namespace.Root,
22924
+ RDropdown5__namespace.Root,
22743
22925
  {
22744
22926
  open: tableOpen,
22745
22927
  onOpenChange: setTableOpen,
22746
22928
  modal: !insideModal,
22747
22929
  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: [
22930
+ /* @__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
22931
  /* @__PURE__ */ jsxRuntime.jsx(IconTable, { size: ICON_SIZE }),
22750
22932
  /* @__PURE__ */ jsxRuntime.jsx(SIcon, { name: "caretDown", size: CARET_SIZE })
22751
22933
  ] }) }),
22752
- /* @__PURE__ */ jsxRuntime.jsx(RDropdown3__namespace.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxRuntime.jsxs(RDropdown3__namespace.Content, { sideOffset: 4, align: "start", className: menuClass, children: [
22934
+ /* @__PURE__ */ jsxRuntime.jsx(RDropdown5__namespace.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxRuntime.jsxs(RDropdown5__namespace.Content, { sideOffset: 4, align: "start", className: menuClass, children: [
22753
22935
  !state2.inTable && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
22754
22936
  /* @__PURE__ */ jsxRuntime.jsx(
22755
22937
  TableSizePicker,
@@ -22761,7 +22943,7 @@ function EditorToolbarBar({
22761
22943
  }
22762
22944
  }
22763
22945
  ),
22764
- /* @__PURE__ */ jsxRuntime.jsx(RDropdown3__namespace.Separator, { className: menuSeparatorClass })
22946
+ /* @__PURE__ */ jsxRuntime.jsx(RDropdown5__namespace.Separator, { className: menuSeparatorClass })
22765
22947
  ] }),
22766
22948
  /* @__PURE__ */ jsxRuntime.jsx(
22767
22949
  TableMenuItem,
@@ -22795,7 +22977,7 @@ function EditorToolbarBar({
22795
22977
  onSelect: () => chain()?.addColumnAfter().run()
22796
22978
  }
22797
22979
  ),
22798
- /* @__PURE__ */ jsxRuntime.jsx(RDropdown3__namespace.Separator, { className: menuSeparatorClass }),
22980
+ /* @__PURE__ */ jsxRuntime.jsx(RDropdown5__namespace.Separator, { className: menuSeparatorClass }),
22799
22981
  /* @__PURE__ */ jsxRuntime.jsx(
22800
22982
  TableMenuItem,
22801
22983
  {
@@ -22828,7 +23010,7 @@ function EditorToolbarBar({
22828
23010
  onSelect: () => chain()?.toggleHeaderColumn().run()
22829
23011
  }
22830
23012
  ),
22831
- /* @__PURE__ */ jsxRuntime.jsx(RDropdown3__namespace.Separator, { className: menuSeparatorClass }),
23013
+ /* @__PURE__ */ jsxRuntime.jsx(RDropdown5__namespace.Separator, { className: menuSeparatorClass }),
22832
23014
  /* @__PURE__ */ jsxRuntime.jsx(
22833
23015
  TableMenuItem,
22834
23016
  {
@@ -26834,6 +27016,7 @@ exports.PAGE_BACKGROUNDS = PAGE_BACKGROUNDS;
26834
27016
  exports.PAGE_CONTENT_HEIGHTS = PAGE_CONTENT_HEIGHTS;
26835
27017
  exports.PAGE_CONTENT_WIDTHS = PAGE_CONTENT_WIDTHS;
26836
27018
  exports.PAGE_HEADER_VARIANTS = PAGE_HEADER_VARIANTS;
27019
+ exports.PAGE_PADDINGS = PAGE_PADDINGS;
26837
27020
  exports.RangeCalendar = RangeCalendar;
26838
27021
  exports.SAccountListBox = SAccountListBox;
26839
27022
  exports.SActionModal = SActionModal;
@@ -26900,6 +27083,7 @@ exports.SLoadingModal = SLoadingModal;
26900
27083
  exports.SLoadingViewport = SLoadingViewport;
26901
27084
  exports.SLoginCard = SLoginCard2;
26902
27085
  exports.SLogo = SLogo;
27086
+ exports.SMeatballButton = SMeatballButton2;
26903
27087
  exports.SModal = SModal;
26904
27088
  exports.SModalOutlet = SModalOutlet;
26905
27089
  exports.SNumberInput = SNumberInput;