sellmate-design-system-react 9.0.0-beta.60 → 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.
Files changed (43) hide show
  1. package/AGENTS.md +33 -10
  2. package/dist/components/SBadge/README.md +1 -0
  3. package/dist/components/SBadge/SBadge.d.ts +1 -1
  4. package/dist/components/SBarChart/README.md +15 -0
  5. package/dist/components/SBarChart/SBarChart.d.ts +15 -1
  6. package/dist/components/SBarChart/index.d.ts +1 -1
  7. package/dist/components/SCalendarBoard/README.md +2 -1
  8. package/dist/components/SCalendarBoard/calendarBoard.config.d.ts +2 -2
  9. package/dist/components/SCalendarBoard/types.d.ts +1 -1
  10. package/dist/components/SCallout/README.md +1 -0
  11. package/dist/components/SCallout/SCallout.d.ts +6 -1
  12. package/dist/components/SChip/README.md +25 -0
  13. package/dist/components/SChip/SChip.d.ts +8 -0
  14. package/dist/components/SChip/index.d.ts +1 -1
  15. package/dist/components/SDonutChart/README.md +91 -0
  16. package/dist/components/SDonutChart/SDonutChart.d.ts +70 -0
  17. package/dist/components/SDonutChart/index.d.ts +1 -0
  18. package/dist/components/SGhostButton/README.md +2 -0
  19. package/dist/components/SLineChart/README.md +15 -0
  20. package/dist/components/SLineChart/SLineChart.d.ts +15 -1
  21. package/dist/components/SLineChart/index.d.ts +1 -1
  22. package/dist/components/SLineChart/lineChart.config.d.ts +11 -7
  23. package/dist/components/SMeatballButton/README.md +67 -0
  24. package/dist/components/SMeatballButton/SMeatballButton.d.ts +36 -0
  25. package/dist/components/SMeatballButton/index.d.ts +1 -0
  26. package/dist/components/SPieChart/README.md +91 -0
  27. package/dist/components/SPieChart/SPieChart.d.ts +69 -0
  28. package/dist/components/SPieChart/index.d.ts +1 -0
  29. package/dist/index.cjs +702 -230
  30. package/dist/index.cjs.map +1 -1
  31. package/dist/index.d.ts +3 -0
  32. package/dist/index.js +698 -230
  33. package/dist/index.js.map +1 -1
  34. package/dist/lib/chart/cartesian.d.ts +2 -2
  35. package/dist/lib/chart/radial.d.ts +89 -0
  36. package/dist/lib/chart/tooltip.d.ts +18 -1
  37. package/dist/lib/dropdown-menu.d.ts +19 -0
  38. package/dist/llms-full.txt +361 -22
  39. package/dist/llms.txt +53 -23
  40. package/dist/styles.css +85 -0
  41. package/dist/theme.css +62 -0
  42. package/eslint/scale.gen.mjs +2 -2
  43. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -8,7 +8,7 @@ import { createPortal } from 'react-dom';
8
8
  import * as RCheckbox from '@radix-ui/react-checkbox';
9
9
  import { createRoot } from 'react-dom/client';
10
10
  import * as RTooltip from '@radix-ui/react-tooltip';
11
- import * as RDropdown3 from '@radix-ui/react-dropdown-menu';
11
+ import * as RDropdown5 from '@radix-ui/react-dropdown-menu';
12
12
  import * as RSwitch from '@radix-ui/react-switch';
13
13
  import * as RDialog from '@radix-ui/react-dialog';
14
14
  import * as Ariakit from '@ariakit/react';
@@ -3921,6 +3921,7 @@ var BADGE_COLORS = [
3921
3921
  "blue",
3922
3922
  "darkblue",
3923
3923
  "indigo",
3924
+ "purple",
3924
3925
  "grey"
3925
3926
  ];
3926
3927
  var SBadge = /* @__PURE__ */ forwardRef(function SBadge2({ color = "blue", className, ...rest }, ref) {
@@ -4247,7 +4248,7 @@ var TAG_SIZE_CONFIG = {
4247
4248
  radius: 6,
4248
4249
  iconSize: 16,
4249
4250
  fontSize: 12,
4250
- fontWeight: 700,
4251
+ fontWeight: 600,
4251
4252
  lineHeight: 20
4252
4253
  },
4253
4254
  md: {
@@ -8006,8 +8007,8 @@ function renderItems(message, depth = 1) {
8006
8007
  });
8007
8008
  return out;
8008
8009
  }
8009
- var SCallout = /* @__PURE__ */ forwardRef(function SCallout2({ type = "default", message = [], children, className, style }, ref) {
8010
- const isDanger = type === "danger";
8010
+ var SCallout = /* @__PURE__ */ forwardRef(function SCallout2({ type = "default", showTitle = true, message = [], children, className, style }, ref) {
8011
+ const hasDangerTitle = type === "danger" && showTitle;
8011
8012
  const surface = SURFACE[type];
8012
8013
  const vars = {
8013
8014
  "--co-bg": surface.bg,
@@ -8026,7 +8027,7 @@ var SCallout = /* @__PURE__ */ forwardRef(function SCallout2({ type = "default",
8026
8027
  ),
8027
8028
  style: { ...vars, ...style },
8028
8029
  children: [
8029
- isDanger && /* @__PURE__ */ jsxs(
8030
+ hasDangerTitle && /* @__PURE__ */ jsxs(
8030
8031
  "div",
8031
8032
  {
8032
8033
  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]",
@@ -8353,6 +8354,58 @@ function clampToAvailableWidth(value, availableWidth) {
8353
8354
  const css = typeof value === "number" ? `${value}px` : value;
8354
8355
  return `min(${css}, ${availableWidth})`;
8355
8356
  }
8357
+ var VIEWPORT_PADDING = 12;
8358
+ var itemClass = cn(
8359
+ "flex min-h-[28px] cursor-pointer select-none items-center gap-[8px] rounded-[2px] px-[12px] py-[4px] text-[12px] leading-[20px] outline-none",
8360
+ "text-[color:var(--sys-color-fg-secondary)]",
8361
+ "data-[disabled]:cursor-not-allowed data-[disabled]:text-[color:var(--cmp-button-text-disabled)]",
8362
+ "data-[highlighted]:bg-[var(--sys-color-bg-accent)] data-[highlighted]:text-[color:var(--sys-color-fg-inverse)]"
8363
+ );
8364
+ function DropdownMenuContent({
8365
+ items,
8366
+ onItemClick,
8367
+ align = "start",
8368
+ className,
8369
+ ...contentProps
8370
+ }) {
8371
+ const portalContainer = usePortalContainer();
8372
+ return /* @__PURE__ */ jsx(RDropdown5.Portal, { container: portalContainer, children: /* @__PURE__ */ jsx(
8373
+ RDropdown5.Content,
8374
+ {
8375
+ sideOffset: 4,
8376
+ align,
8377
+ collisionPadding: VIEWPORT_PADDING,
8378
+ className: cn(
8379
+ "z-50 overflow-hidden rounded-[var(--cmp-listBox-radius)] bg-[var(--cmp-listBox-bg)] shadow-normal-sm",
8380
+ // 창보다 넓은 메뉴는 창 폭에 맞춰 줄인다. 호출부가 하한(min-width)을 줄 때도 같은
8381
+ // 상한으로 감싸야 한다 — min-width 가 max-width 를 이기기 때문이다.
8382
+ "max-w-[var(--radix-dropdown-menu-content-available-width)]",
8383
+ FLOATING_SLIDE_ANIM,
8384
+ className
8385
+ ),
8386
+ ...contentProps,
8387
+ children: items.map((it) => /* @__PURE__ */ jsxs(
8388
+ RDropdown5.Item,
8389
+ {
8390
+ disabled: it.disabled,
8391
+ onSelect: () => onItemClick?.(it.value),
8392
+ className: itemClass,
8393
+ children: [
8394
+ it.icon && /* @__PURE__ */ jsx(SIcon, { name: it.icon, size: 12 }),
8395
+ /* @__PURE__ */ jsx(
8396
+ "span",
8397
+ {
8398
+ className: "min-w-0 break-words",
8399
+ dangerouslySetInnerHTML: { __html: sanitizeInlineHtml(it.label) }
8400
+ }
8401
+ )
8402
+ ]
8403
+ },
8404
+ it.value
8405
+ ))
8406
+ }
8407
+ ) });
8408
+ }
8356
8409
  var SIZE2 = {
8357
8410
  xs: { height: 24, paddingX: 8, gap: 6, arrow: 12, fontSize: 12, minWidth: 64, splitMinWidth: 72 },
8358
8411
  sm: {
@@ -8389,13 +8442,6 @@ function splitDivider(color, outline) {
8389
8442
  };
8390
8443
  return (outline ? outlined : solid)[color];
8391
8444
  }
8392
- var VIEWPORT_PADDING = 12;
8393
- var itemClass = cn(
8394
- "flex min-h-[28px] cursor-pointer select-none items-center gap-[8px] rounded-[2px] px-[12px] py-[4px] text-[12px] leading-[20px] outline-none",
8395
- "text-[color:var(--sys-color-fg-secondary)]",
8396
- "data-[disabled]:cursor-not-allowed data-[disabled]:text-[color:var(--cmp-button-text-disabled)]",
8397
- "data-[highlighted]:bg-[var(--sys-color-bg-accent)] data-[highlighted]:text-[color:var(--sys-color-fg-inverse)]"
8398
- );
8399
8445
  var SDropdownButtonImpl = /* @__PURE__ */ forwardRef(
8400
8446
  function SDropdownButton({
8401
8447
  color = "primary",
@@ -8411,7 +8457,6 @@ var SDropdownButtonImpl = /* @__PURE__ */ forwardRef(
8411
8457
  className,
8412
8458
  style
8413
8459
  }, ref) {
8414
- const portalContainer = usePortalContainer();
8415
8460
  const insideModal = useInsideModal();
8416
8461
  const [open, setOpen] = useState(false);
8417
8462
  const splitWrapRef = useRef(null);
@@ -8465,45 +8510,20 @@ var SDropdownButtonImpl = /* @__PURE__ */ forwardRef(
8465
8510
  "border-[color:var(--dd-border)] bg-[var(--dd-bg)] text-[color:var(--dd-text)]",
8466
8511
  disabled ? "cursor-not-allowed" : "cursor-pointer hover:bg-[var(--dd-bg-hover)]"
8467
8512
  );
8468
- const menu = /* @__PURE__ */ jsx(RDropdown3.Portal, { container: portalContainer, children: /* @__PURE__ */ jsx(
8469
- RDropdown3.Content,
8513
+ const menu = /* @__PURE__ */ jsx(
8514
+ DropdownMenuContent,
8470
8515
  {
8471
- sideOffset: 4,
8472
- align: "start",
8516
+ items,
8517
+ onItemClick,
8473
8518
  alignOffset: split ? splitAlignOffset : 0,
8474
- collisionPadding: VIEWPORT_PADDING,
8475
8519
  className: cn(
8476
- "z-50 overflow-hidden rounded-[var(--cmp-listBox-radius)] bg-[var(--cmp-listBox-bg)] shadow-normal-sm",
8477
- // 창보다 넓은 메뉴는 창 폭에 맞춰 줄인다. 트리거 너비를 따르는 하한도 같은 상한으로
8478
- // 감싸야 한다 — min-width 가 max-width 를 이기기 때문이다.
8479
- "max-w-[var(--radix-dropdown-menu-content-available-width)]",
8480
- !split && "min-w-[min(var(--radix-dropdown-menu-trigger-width),var(--radix-dropdown-menu-content-available-width))]",
8481
- FLOATING_SLIDE_ANIM
8520
+ !split && "min-w-[min(var(--radix-dropdown-menu-trigger-width),var(--radix-dropdown-menu-content-available-width))]"
8482
8521
  ),
8483
- style: split ? { minWidth: clampToAvailableWidth(splitWidth, DROPDOWN_AVAILABLE_WIDTH) } : void 0,
8484
- children: items.map((it) => /* @__PURE__ */ jsxs(
8485
- RDropdown3.Item,
8486
- {
8487
- disabled: it.disabled,
8488
- onSelect: () => onItemClick?.(it.value),
8489
- className: itemClass,
8490
- children: [
8491
- it.icon && /* @__PURE__ */ jsx(SIcon, { name: it.icon, size: 12 }),
8492
- /* @__PURE__ */ jsx(
8493
- "span",
8494
- {
8495
- className: "min-w-0 break-words",
8496
- dangerouslySetInnerHTML: { __html: sanitizeInlineHtml(it.label) }
8497
- }
8498
- )
8499
- ]
8500
- },
8501
- it.value
8502
- ))
8522
+ style: split ? { minWidth: clampToAvailableWidth(splitWidth, DROPDOWN_AVAILABLE_WIDTH) } : void 0
8503
8523
  }
8504
- ) });
8524
+ );
8505
8525
  return /* @__PURE__ */ jsxs(
8506
- RDropdown3.Root,
8526
+ RDropdown5.Root,
8507
8527
  {
8508
8528
  modal: !insideModal,
8509
8529
  open,
@@ -8535,7 +8555,7 @@ var SDropdownButtonImpl = /* @__PURE__ */ forwardRef(
8535
8555
  children: label
8536
8556
  }
8537
8557
  ),
8538
- /* @__PURE__ */ jsx(RDropdown3.Trigger, { asChild: true, children: /* @__PURE__ */ jsx(
8558
+ /* @__PURE__ */ jsx(RDropdown5.Trigger, { asChild: true, children: /* @__PURE__ */ jsx(
8539
8559
  "button",
8540
8560
  {
8541
8561
  ref: splitToggleRef,
@@ -8554,7 +8574,7 @@ var SDropdownButtonImpl = /* @__PURE__ */ forwardRef(
8554
8574
  ) })
8555
8575
  ]
8556
8576
  }
8557
- ) : /* @__PURE__ */ jsx(RDropdown3.Trigger, { asChild: true, children: /* @__PURE__ */ jsxs(
8577
+ ) : /* @__PURE__ */ jsx(RDropdown5.Trigger, { asChild: true, children: /* @__PURE__ */ jsxs(
8558
8578
  "button",
8559
8579
  {
8560
8580
  type: "button",
@@ -8582,6 +8602,87 @@ var SDropdownButtonImpl = /* @__PURE__ */ forwardRef(
8582
8602
  }
8583
8603
  );
8584
8604
  var SDropdownButton2 = /* @__PURE__ */ withDisplayName(SDropdownButtonImpl, "SDropdownButton");
8605
+ var DEFAULT_LABEL = "\uAE30\uB2A5 \uB354 \uBCF4\uAE30";
8606
+ var SMeatballButtonImpl = /* @__PURE__ */ forwardRef(
8607
+ function SMeatballButton({
8608
+ size = "sm",
8609
+ intent = "default",
8610
+ items = [],
8611
+ // 기본값을 리터럴로 둬야 README(docs:gen)에 실제 문구가 찍힌다
8612
+ tooltipText = "\uAE30\uB2A5 \uB354 \uBCF4\uAE30",
8613
+ ariaLabel,
8614
+ disabled = false,
8615
+ onItemClick,
8616
+ onOpenChange,
8617
+ className,
8618
+ style
8619
+ }, ref) {
8620
+ const insideModal = useInsideModal();
8621
+ const [open, setOpen] = useState(false);
8622
+ const buttonRef = useRef(null);
8623
+ const pointerRef = useRef(false);
8624
+ const setMenuOpen = (o) => {
8625
+ setOpen(o);
8626
+ onOpenChange?.(o);
8627
+ };
8628
+ useImperativeHandle(
8629
+ ref,
8630
+ () => ({
8631
+ open: () => setOpen(true),
8632
+ close: () => setOpen(false)
8633
+ }),
8634
+ []
8635
+ );
8636
+ const label = ariaLabel?.trim() || tooltipText.trim() || DEFAULT_LABEL;
8637
+ return /* @__PURE__ */ jsxs(
8638
+ RDropdown5.Root,
8639
+ {
8640
+ modal: !insideModal,
8641
+ open,
8642
+ onOpenChange: setMenuOpen,
8643
+ children: [
8644
+ /* @__PURE__ */ jsx(RDropdown5.Trigger, { asChild: true, disabled, children: /* @__PURE__ */ jsx(
8645
+ "span",
8646
+ {
8647
+ className: cn("inline-flex", className),
8648
+ style,
8649
+ onPointerDownCapture: () => pointerRef.current = true,
8650
+ onKeyDownCapture: () => pointerRef.current = false,
8651
+ children: /* @__PURE__ */ jsx(
8652
+ SGhostButton,
8653
+ {
8654
+ ref: buttonRef,
8655
+ icon: "etc",
8656
+ size,
8657
+ intent,
8658
+ tooltipText: open ? "" : tooltipText,
8659
+ ariaLabel: label,
8660
+ ariaExpanded: open,
8661
+ disabled
8662
+ }
8663
+ )
8664
+ }
8665
+ ) }),
8666
+ /* @__PURE__ */ jsx(
8667
+ DropdownMenuContent,
8668
+ {
8669
+ items,
8670
+ onItemClick,
8671
+ onPointerDown: () => pointerRef.current = true,
8672
+ onPointerDownOutside: () => pointerRef.current = true,
8673
+ onKeyDown: () => pointerRef.current = false,
8674
+ onCloseAutoFocus: (e) => {
8675
+ e.preventDefault();
8676
+ if (!pointerRef.current) buttonRef.current?.focus();
8677
+ }
8678
+ }
8679
+ )
8680
+ ]
8681
+ }
8682
+ );
8683
+ }
8684
+ );
8685
+ var SMeatballButton2 = /* @__PURE__ */ withDisplayName(SMeatballButtonImpl, "SMeatballButton");
8585
8686
  function SSwitch({
8586
8687
  value = false,
8587
8688
  leftLabel,
@@ -9557,7 +9658,7 @@ var SPopup = /* @__PURE__ */ forwardRef(function SPopup2({
9557
9658
  }
9558
9659
  );
9559
9660
  });
9560
- var DEFAULT_LABEL = { tip: "\uD65C\uC6A9 TIP", notion: "\uC0AC\uC6A9\uBC95 \uC548\uB0B4" };
9661
+ var DEFAULT_LABEL2 = { tip: "\uD65C\uC6A9 TIP", notion: "\uC0AC\uC6A9\uBC95 \uC548\uB0B4" };
9561
9662
  var ICON = { tip: "helpOutline", notion: "notion" };
9562
9663
  var VIEWPORT_GUTTER = 24;
9563
9664
  var CLOSE_INSET = 12;
@@ -9579,7 +9680,7 @@ function SGuide({
9579
9680
  const portalContainer = usePortalContainer();
9580
9681
  const isNotion = type === "notion";
9581
9682
  const isAutoWidth = popupWidth === "auto";
9582
- const defaultLabel = DEFAULT_LABEL[type];
9683
+ const defaultLabel = DEFAULT_LABEL2[type];
9583
9684
  const iconName = ICON[type];
9584
9685
  const messages = flattenMessages(message);
9585
9686
  const active = open;
@@ -13591,6 +13692,7 @@ var CALENDAR_BOARD_EVENT_COLORS = [
13591
13692
  "yellow",
13592
13693
  "orange",
13593
13694
  "red",
13695
+ "purple",
13594
13696
  "white"
13595
13697
  ];
13596
13698
  var BG = (name) => `var(--cmp-calendarBoard-eventButton-bg-${name})`;
@@ -13603,6 +13705,7 @@ var CALENDAR_BOARD_EVENT_PRESETS = {
13603
13705
  yellow: { bg: BG("yellow"), dot: "yellow" },
13604
13706
  orange: { bg: BG("orange"), dot: "orange" },
13605
13707
  red: { bg: BG("red"), dot: "red" },
13708
+ purple: { bg: BG("purple"), dot: "purple" },
13606
13709
  white: { bg: BG("white"), dot: "grey" }
13607
13710
  };
13608
13711
  var CALENDAR_BOARD_MAX_VISIBLE_EVENTS = 4;
@@ -15533,7 +15636,7 @@ var STable = /* @__PURE__ */ forwardRef(function STable2({
15533
15636
  useEffect(() => {
15534
15637
  setColumnWidths(visibleCols.map(colWidthFromDef));
15535
15638
  }, [colSignature]);
15536
- const selectedKeys = useMemo(() => new Set(selected.map((r2) => r2[rowKey])), [selected, rowKey]);
15639
+ const selectedKeys = useMemo(() => new Set(selected.map((r3) => r3[rowKey])), [selected, rowKey]);
15537
15640
  const rangeAnchorRef = useRef(null);
15538
15641
  const shiftPressedRef = useRef(false);
15539
15642
  const isRowSelected = useCallback(
@@ -15553,7 +15656,7 @@ var STable = /* @__PURE__ */ forwardRef(function STable2({
15553
15656
  const targets = rws.filter(canSelectRow);
15554
15657
  const total = targets.length;
15555
15658
  if (total === 0) return false;
15556
- const cnt = targets.filter((r2) => selectedKeys.has(r2[rowKey])).length;
15659
+ const cnt = targets.filter((r3) => selectedKeys.has(r3[rowKey])).length;
15557
15660
  if (cnt === 0) return false;
15558
15661
  if (cnt === total) return true;
15559
15662
  return null;
@@ -15757,16 +15860,16 @@ var STable = /* @__PURE__ */ forwardRef(function STable2({
15757
15860
  updateRowSelect: (row) => {
15758
15861
  if (!canSelectRow(row)) return;
15759
15862
  if (selectedKeys.has(row[rowKey]))
15760
- onSelectedChange?.(selected.filter((r2) => r2[rowKey] !== row[rowKey]));
15863
+ onSelectedChange?.(selected.filter((r3) => r3[rowKey] !== row[rowKey]));
15761
15864
  else onSelectedChange?.([...selected, row]);
15762
15865
  },
15763
15866
  toggleSelectAll: (checked, rws) => {
15764
15867
  if (checked) {
15765
- const add = rws.filter((r2) => canSelectRow(r2) && !selectedKeys.has(r2[rowKey]));
15868
+ const add = rws.filter((r3) => canSelectRow(r3) && !selectedKeys.has(r3[rowKey]));
15766
15869
  onSelectedChange?.([...selected, ...add]);
15767
15870
  } else {
15768
- const keys = new Set(rws.map((r2) => r2[rowKey]));
15769
- onSelectedChange?.(selected.filter((r2) => !keys.has(r2[rowKey])));
15871
+ const keys = new Set(rws.map((r3) => r3[rowKey]));
15872
+ onSelectedChange?.(selected.filter((r3) => !keys.has(r3[rowKey])));
15770
15873
  }
15771
15874
  }
15772
15875
  }),
@@ -15860,10 +15963,10 @@ var STable = /* @__PURE__ */ forwardRef(function STable2({
15860
15963
  const toggleAll = () => {
15861
15964
  rangeAnchorRef.current = null;
15862
15965
  if (headerCheck === true) {
15863
- const targetKeys = new Set(selectAllRows.map((r2) => r2[rowKey]));
15864
- onSelectedChange?.(selected.filter((r2) => !targetKeys.has(r2[rowKey])));
15966
+ const targetKeys = new Set(selectAllRows.map((r3) => r3[rowKey]));
15967
+ onSelectedChange?.(selected.filter((r3) => !targetKeys.has(r3[rowKey])));
15865
15968
  } else {
15866
- const add = selectAllRows.filter((r2) => canSelectRow(r2) && !selectedKeys.has(r2[rowKey]));
15969
+ const add = selectAllRows.filter((r3) => canSelectRow(r3) && !selectedKeys.has(r3[rowKey]));
15867
15970
  onSelectedChange?.([...selected, ...add]);
15868
15971
  }
15869
15972
  };
@@ -15876,17 +15979,17 @@ var STable = /* @__PURE__ */ forwardRef(function STable2({
15876
15979
  const shouldSelect = selectedKeys.has(anchor.key);
15877
15980
  const range = rows.slice(from, to + 1).filter(canSelectRow);
15878
15981
  if (shouldSelect) {
15879
- const add = range.filter((r2) => !selectedKeys.has(r2[rowKey]));
15982
+ const add = range.filter((r3) => !selectedKeys.has(r3[rowKey]));
15880
15983
  onSelectedChange?.([...selected, ...add]);
15881
15984
  } else {
15882
- const keys = new Set(range.map((r2) => r2[rowKey]));
15883
- onSelectedChange?.(selected.filter((r2) => !keys.has(r2[rowKey])));
15985
+ const keys = new Set(range.map((r3) => r3[rowKey]));
15986
+ onSelectedChange?.(selected.filter((r3) => !keys.has(r3[rowKey])));
15884
15987
  }
15885
15988
  return;
15886
15989
  }
15887
15990
  rangeAnchorRef.current = { index, key: row[rowKey] };
15888
15991
  if (selectedKeys.has(row[rowKey]))
15889
- onSelectedChange?.(selected.filter((r2) => r2[rowKey] !== row[rowKey]));
15992
+ onSelectedChange?.(selected.filter((r3) => r3[rowKey] !== row[rowKey]));
15890
15993
  else onSelectedChange?.([...selected, row]);
15891
15994
  };
15892
15995
  const isViewSelected = (row) => row != null && (dragPreviewKeys ?? selectedKeys).has(row[rowKey]);
@@ -15894,14 +15997,14 @@ var STable = /* @__PURE__ */ forwardRef(function STable2({
15894
15997
  const [a, b] = from <= to ? [from, to] : [to, from];
15895
15998
  return rows.slice(a, b + 1).filter(canSelectRow);
15896
15999
  };
15897
- const dragPreviewOf = (base, anchor, to) => /* @__PURE__ */ new Set([...base, ...dragRangeRows(anchor, to).map((r2) => r2[rowKey])]);
16000
+ const dragPreviewOf = (base, anchor, to) => /* @__PURE__ */ new Set([...base, ...dragRangeRows(anchor, to).map((r3) => r3[rowKey])]);
15898
16001
  const startDragSelect = (index, event) => {
15899
16002
  if (event.button !== 0) return;
15900
16003
  const target = event.target;
15901
16004
  if (target?.closest?.(ROW_INTERACTIVE_SELECTOR)) return;
15902
16005
  event.preventDefault();
15903
16006
  const baseRows = event.ctrlKey || event.metaKey ? selected : [];
15904
- const baseKeys = new Set(baseRows.map((r2) => r2[rowKey]));
16007
+ const baseKeys = new Set(baseRows.map((r3) => r3[rowKey]));
15905
16008
  dragRef.current = { anchor: index, last: index, baseKeys, baseRows };
15906
16009
  setDragPreviewKeys(dragPreviewOf(baseKeys, index, index));
15907
16010
  };
@@ -15918,7 +16021,7 @@ var STable = /* @__PURE__ */ forwardRef(function STable2({
15918
16021
  if (!d) return;
15919
16022
  dragRef.current = null;
15920
16023
  setDragPreviewKeys(null);
15921
- const add = dragRangeRows(d.anchor, d.last).filter((r2) => !d.baseKeys.has(r2[rowKey]));
16024
+ const add = dragRangeRows(d.anchor, d.last).filter((r3) => !d.baseKeys.has(r3[rowKey]));
15922
16025
  onSelectedChange?.([...d.baseRows, ...add]);
15923
16026
  };
15924
16027
  useEffect(() => {
@@ -16475,7 +16578,7 @@ var STable = /* @__PURE__ */ forwardRef(function STable2({
16475
16578
  ),
16476
16579
  contextMenuOn && typeof document !== "undefined" && createPortal(
16477
16580
  /* @__PURE__ */ jsxs(
16478
- RDropdown3.Root,
16581
+ RDropdown5.Root,
16479
16582
  {
16480
16583
  modal: false,
16481
16584
  open: contextMenuOpen,
@@ -16483,7 +16586,7 @@ var STable = /* @__PURE__ */ forwardRef(function STable2({
16483
16586
  if (!open) setContextMenu((m) => m == null ? null : { ...m, open: false });
16484
16587
  },
16485
16588
  children: [
16486
- /* @__PURE__ */ jsx(RDropdown3.Trigger, { asChild: true, children: /* @__PURE__ */ jsx(
16589
+ /* @__PURE__ */ jsx(RDropdown5.Trigger, { asChild: true, children: /* @__PURE__ */ jsx(
16487
16590
  "span",
16488
16591
  {
16489
16592
  "aria-hidden": true,
@@ -16492,7 +16595,7 @@ var STable = /* @__PURE__ */ forwardRef(function STable2({
16492
16595
  }
16493
16596
  ) }),
16494
16597
  /* @__PURE__ */ jsx(
16495
- RDropdown3.Content,
16598
+ RDropdown5.Content,
16496
16599
  {
16497
16600
  align: "start",
16498
16601
  side: "bottom",
@@ -16506,7 +16609,7 @@ var STable = /* @__PURE__ */ forwardRef(function STable2({
16506
16609
  FLOATING_SLIDE_ANIM
16507
16610
  ),
16508
16611
  children: contextMenuItems?.map((item4) => /* @__PURE__ */ jsxs(
16509
- RDropdown3.Item,
16612
+ RDropdown5.Item,
16510
16613
  {
16511
16614
  disabled: item4.disabled,
16512
16615
  onSelect: () => onContextMenuItemClick?.(item4.value, contextMenu?.rows ?? []),
@@ -18391,10 +18494,10 @@ function SDateRangePicker({
18391
18494
  lineHeight: 20,
18392
18495
  radius: 4
18393
18496
  };
18394
- const select = (r2) => {
18497
+ const select = (r3) => {
18395
18498
  setPendingStart(null);
18396
- onValueChange?.(r2);
18397
- if (rules && rules.length > 0) setRuleError(runRules(r2, rules));
18499
+ onValueChange?.(r3);
18500
+ if (rules && rules.length > 0) setRuleError(runRules(r3, rules));
18398
18501
  if (!showTimePicker) setOpen(false);
18399
18502
  };
18400
18503
  const clear = () => {
@@ -18530,7 +18633,19 @@ function SDateRangePicker({
18530
18633
  }
18531
18634
  );
18532
18635
  }
18636
+ var CHIP_COLORS = [
18637
+ "red",
18638
+ "orange",
18639
+ "yellow",
18640
+ "green",
18641
+ "blue",
18642
+ "darkblue",
18643
+ "indigo",
18644
+ "purple",
18645
+ "grey"
18646
+ ];
18533
18647
  var SChipImpl = /* @__PURE__ */ forwardRef(function SChip({
18648
+ color,
18534
18649
  name,
18535
18650
  value = "",
18536
18651
  error: errorProp = false,
@@ -18605,9 +18720,10 @@ var SChipImpl = /* @__PURE__ */ forwardRef(function SChip({
18605
18720
  cancel();
18606
18721
  }
18607
18722
  };
18608
- const bg = disabled ? "var(--cmp-chip-bg-disabled)" : error ? "var(--cmp-chip-bg-error)" : editing ? "var(--cmp-chip-bg-focus)" : "var(--cmp-chip-bg-default)";
18609
- const content = disabled ? "var(--cmp-chip-content-disabled)" : error ? "var(--cmp-chip-content-error)" : editing ? "var(--cmp-chip-content-focus)" : "var(--cmp-chip-content-default)";
18610
- const borderColor = editing && !error ? "var(--cmp-chip-border-focus)" : "transparent";
18723
+ const colored = color != null && !disabled && !error && !editing;
18724
+ const bg = disabled ? "var(--cmp-chip-bg-disabled)" : error ? "var(--cmp-chip-bg-error)" : editing ? "var(--cmp-chip-bg-focus)" : colored ? `var(--cmp-chip-chip-${color}-bg)` : "var(--cmp-chip-bg-default)";
18725
+ const content = disabled ? "var(--cmp-chip-content-disabled)" : error ? "var(--cmp-chip-content-error)" : editing ? "var(--cmp-chip-content-focus)" : colored ? `var(--cmp-chip-chip-${color}-content)` : "var(--cmp-chip-content-default)";
18726
+ const borderColor = editing && !error ? "var(--cmp-chip-border-focus)" : colored ? `var(--cmp-chip-chip-${color}-border)` : "transparent";
18611
18727
  return (
18612
18728
  // 외곽 span 은 비상호작용 컨테이너다. 편집 진입 트리거는 값 텍스트의 실제 <button>
18613
18729
  // 이 담당하고, remove 는 형제 <button> 으로 둔다 — role="button" 안에 버튼을 넣던
@@ -18963,8 +19079,8 @@ function SKeyValueTable({
18963
19079
  const isLabelCol = [];
18964
19080
  const labelColWidth = [];
18965
19081
  let maxCols = 0;
18966
- fields.forEach((row, r2) => {
18967
- const occupied = grid[r2];
19082
+ fields.forEach((row, r3) => {
19083
+ const occupied = grid[r3];
18968
19084
  let col = 0;
18969
19085
  const skipOccupied = () => {
18970
19086
  let sawThSupply = false;
@@ -18981,7 +19097,7 @@ function SKeyValueTable({
18981
19097
  const tdColSpan = f.tdColSpan && f.tdColSpan > 1 ? f.tdColSpan : 1;
18982
19098
  const thSuppliedAbove = skipOccupied();
18983
19099
  const showTh = !f.hideTh && !thSuppliedAbove;
18984
- showThAt[r2][i] = showTh;
19100
+ showThAt[r3][i] = showTh;
18985
19101
  if (showTh) {
18986
19102
  isLabelCol[col] = true;
18987
19103
  if (thColSpan === 1 && f.thWidth != null && labelColWidth[col] == null)
@@ -18989,7 +19105,7 @@ function SKeyValueTable({
18989
19105
  for (let dr = 1; dr < thRowSpan; dr++) {
18990
19106
  const kind = dr >= tdRowSpan ? "th-supply" : "blocked";
18991
19107
  for (let dc = 0; dc < thColSpan; dc++) {
18992
- const target = grid[r2 + dr];
19108
+ const target = grid[r3 + dr];
18993
19109
  if (target) target[col + dc] = kind;
18994
19110
  }
18995
19111
  }
@@ -18998,7 +19114,7 @@ function SKeyValueTable({
18998
19114
  skipOccupied();
18999
19115
  for (let dr = 1; dr < tdRowSpan; dr++) {
19000
19116
  for (let dc = 0; dc < tdColSpan; dc++) {
19001
- const target = grid[r2 + dr];
19117
+ const target = grid[r3 + dr];
19002
19118
  if (target) target[col + dc] = "blocked";
19003
19119
  }
19004
19120
  }
@@ -19023,10 +19139,10 @@ function SKeyValueTable({
19023
19139
  { length: maxCols },
19024
19140
  (_, i) => isLabelCol[i] ? /* @__PURE__ */ jsx("col", { style: { width: cssLen2(labelColWidth[i]) ?? "120px" } }, `col-${i}`) : /* @__PURE__ */ jsx("col", {}, `col-${i}`)
19025
19141
  ) }),
19026
- /* @__PURE__ */ jsx("tbody", { children: fields.map((row, r2) => {
19027
- const cellBorder = r2 === 0 ? "" : "border-t border-solid border-[color:var(--cmp-table-border-color)]";
19142
+ /* @__PURE__ */ jsx("tbody", { children: fields.map((row, r3) => {
19143
+ const cellBorder = r3 === 0 ? "" : "border-t border-solid border-[color:var(--cmp-table-border-color)]";
19028
19144
  return /* @__PURE__ */ jsx("tr", { children: row.map((f, c) => {
19029
- const showTh = showThAt[r2][c];
19145
+ const showTh = showThAt[r3][c];
19030
19146
  const isReadOnlyCell = f.render == null && (f.type == null || f.type === "text");
19031
19147
  return /* @__PURE__ */ jsxs(Fragment$1, { children: [
19032
19148
  showTh && /* @__PURE__ */ jsx(
@@ -19062,7 +19178,7 @@ function SKeyValueTable({
19062
19178
  )
19063
19179
  ] })
19064
19180
  },
19065
- `th-${r2}-${c}`
19181
+ `th-${r3}-${c}`
19066
19182
  ),
19067
19183
  /* @__PURE__ */ jsx(
19068
19184
  "td",
@@ -19079,10 +19195,10 @@ function SKeyValueTable({
19079
19195
  style: { height: cellHeight, paddingTop: cellPadY, paddingBottom: cellPadY },
19080
19196
  children: renderField(f)
19081
19197
  },
19082
- `td-${r2}-${c}`
19198
+ `td-${r3}-${c}`
19083
19199
  )
19084
- ] }, `${r2}-${c}`);
19085
- }) }, r2);
19200
+ ] }, `${r3}-${c}`);
19201
+ }) }, r3);
19086
19202
  }) })
19087
19203
  ]
19088
19204
  }
@@ -19388,6 +19504,7 @@ function ChartTooltip({
19388
19504
  anchor,
19389
19505
  bounds,
19390
19506
  gapX = DEFAULT_GAP_X,
19507
+ footer,
19391
19508
  className
19392
19509
  }) {
19393
19510
  const { ref, size } = useElementSize();
@@ -19438,7 +19555,8 @@ function ChartTooltip({
19438
19555
  ]
19439
19556
  },
19440
19557
  `${item4.label}-${index}`
19441
- ))
19558
+ )),
19559
+ footer != null && footer !== false && /* @__PURE__ */ jsx("div", { children: footer })
19442
19560
  ]
19443
19561
  }
19444
19562
  );
@@ -19493,23 +19611,23 @@ function barOpacity(hoveredCategory, categoryIndex) {
19493
19611
  return hoveredCategory === categoryIndex ? BAR_OPACITY_HOVER : BAR_OPACITY_DIMMED;
19494
19612
  }
19495
19613
  function barPath(x, y, width, height, direction, negative) {
19496
- const r2 = Math.max(0, Math.min(BAR_RADIUS, width / 2, height / 2));
19497
- if (r2 === 0) return `M${x} ${y}h${width}v${height}h${-width}Z`;
19614
+ const r3 = Math.max(0, Math.min(BAR_RADIUS, width / 2, height / 2));
19615
+ if (r3 === 0) return `M${x} ${y}h${width}v${height}h${-width}Z`;
19498
19616
  if (direction === "vertical") {
19499
19617
  return negative ? (
19500
19618
  // 아래로 자란다 — 아래쪽 두 모서리가 둥글다
19501
- `M${x} ${y}h${width}v${height - r2}a${r2} ${r2} 0 0 1 ${-r2} ${r2}h${-(width - 2 * r2)}a${r2} ${r2} 0 0 1 ${-r2} ${-r2}Z`
19619
+ `M${x} ${y}h${width}v${height - r3}a${r3} ${r3} 0 0 1 ${-r3} ${r3}h${-(width - 2 * r3)}a${r3} ${r3} 0 0 1 ${-r3} ${-r3}Z`
19502
19620
  ) : (
19503
19621
  // 위로 자란다 — 위쪽 두 모서리가 둥글다
19504
- `M${x} ${y + height}v${-(height - r2)}a${r2} ${r2} 0 0 1 ${r2} ${-r2}h${width - 2 * r2}a${r2} ${r2} 0 0 1 ${r2} ${r2}v${height - r2}Z`
19622
+ `M${x} ${y + height}v${-(height - r3)}a${r3} ${r3} 0 0 1 ${r3} ${-r3}h${width - 2 * r3}a${r3} ${r3} 0 0 1 ${r3} ${r3}v${height - r3}Z`
19505
19623
  );
19506
19624
  }
19507
19625
  return negative ? (
19508
19626
  // 왼쪽으로 자란다
19509
- `M${x + width} ${y}h${-(width - r2)}a${r2} ${r2} 0 0 0 ${-r2} ${r2}v${height - 2 * r2}a${r2} ${r2} 0 0 0 ${r2} ${r2}h${width - r2}Z`
19627
+ `M${x + width} ${y}h${-(width - r3)}a${r3} ${r3} 0 0 0 ${-r3} ${r3}v${height - 2 * r3}a${r3} ${r3} 0 0 0 ${r3} ${r3}h${width - r3}Z`
19510
19628
  ) : (
19511
19629
  // 오른쪽으로 자란다
19512
- `M${x} ${y}h${width - r2}a${r2} ${r2} 0 0 1 ${r2} ${r2}v${height - 2 * r2}a${r2} ${r2} 0 0 1 ${-r2} ${r2}h${-(width - r2)}Z`
19630
+ `M${x} ${y}h${width - r3}a${r3} ${r3} 0 0 1 ${r3} ${r3}v${height - 2 * r3}a${r3} ${r3} 0 0 1 ${-r3} ${r3}h${-(width - r3)}Z`
19513
19631
  );
19514
19632
  }
19515
19633
  var SBarChart = /* @__PURE__ */ forwardRef(function SBarChart2({
@@ -19529,6 +19647,7 @@ var SBarChart = /* @__PURE__ */ forwardRef(function SBarChart2({
19529
19647
  formatValue = defaultFormat,
19530
19648
  height,
19531
19649
  onBarClick,
19650
+ tooltipFooter,
19532
19651
  className,
19533
19652
  style
19534
19653
  }, ref) {
@@ -19957,7 +20076,16 @@ var SBarChart = /* @__PURE__ */ forwardRef(function SBarChart2({
19957
20076
  items: tooltipItems,
19958
20077
  anchor: tooltipAnchor,
19959
20078
  bounds: size,
19960
- gapX: tooltipGapX
20079
+ gapX: tooltipGapX,
20080
+ footer: tooltipFooter?.({
20081
+ categoryIndex: hoveredCategory,
20082
+ name: categories[hoveredCategory] ?? "",
20083
+ points: series.flatMap((s, seriesIndex) => {
20084
+ const value = s.data[hoveredCategory];
20085
+ if (value == null || !Number.isFinite(value)) return [];
20086
+ return [{ seriesIndex, categoryIndex: hoveredCategory, value }];
20087
+ })
20088
+ })
19961
20089
  }
19962
20090
  )
19963
20091
  ]
@@ -20019,7 +20147,8 @@ var POINT_HOVER_BG = "var(--cmp-chart-bg)";
20019
20147
  var POINT_HOVER_EXTENT = POINT_HOVER_RADIUS + POINT_HOVER_BORDER_WIDTH / 2;
20020
20148
  var BAND_MIN = 40;
20021
20149
  var VALUE_LABEL_GAP2 = 6;
20022
- var AREA_OPACITY = "var(--opacity-040)";
20150
+ var AREA_OPACITY_TOP = "30%";
20151
+ var AREA_OPACITY_BOTTOM = "var(--opacity-005)";
20023
20152
  var LINE_DATA_LABEL_COLOR = "var(--cmp-chart-bar-dataLabel-color-default)";
20024
20153
  var LINE_DATA_LABEL_TYPO = "typo-body-sm-medium";
20025
20154
  var LINE_DATA_LABEL_TYPO_HOVER = "typo-body-md-bold";
@@ -20115,6 +20244,7 @@ var SLineChart = /* @__PURE__ */ forwardRef(function SLineChart2({
20115
20244
  formatValue = defaultFormat2,
20116
20245
  height,
20117
20246
  onPointClick,
20247
+ tooltipFooter,
20118
20248
  className,
20119
20249
  style
20120
20250
  }, ref) {
@@ -20122,6 +20252,7 @@ var SLineChart = /* @__PURE__ */ forwardRef(function SLineChart2({
20122
20252
  const { ref: plotRef, size } = useElementSize();
20123
20253
  const { ref: axisTextRef, size: axisText } = useElementSize();
20124
20254
  const { ref: axisSampleRef, size: axisSample } = useElementSize();
20255
+ const gradientId = useId();
20125
20256
  const [hoveredCategory, setHoveredCategory] = useState(null);
20126
20257
  const colorAt = useCallback(
20127
20258
  (seriesIndex) => paletteColor(palette, seriesIndex, customColors),
@@ -20149,26 +20280,41 @@ var SLineChart = /* @__PURE__ */ forwardRef(function SLineChart2({
20149
20280
  ),
20150
20281
  [rows, tickCount, max]
20151
20282
  );
20152
- const band = categories.length > 0 ? Math.max(0, size.width - AXIS_EDGE_PADDING * 2) / categories.length : 0;
20153
- const minPlotWidth = categories.length * BAND_MIN + AXIS_EDGE_PADDING * 2;
20283
+ const count = categories.length;
20284
+ const step = count > 1 ? size.width / (count - 1) : 0;
20285
+ const xAt = useCallback(
20286
+ (index) => count > 1 ? index * step : size.width / 2,
20287
+ [count, step, size.width]
20288
+ );
20289
+ const cellOf = useCallback(
20290
+ (index) => count > 1 ? {
20291
+ left: Math.max(0, xAt(index) - step / 2),
20292
+ right: Math.min(size.width, xAt(index) + step / 2)
20293
+ } : { left: 0, right: size.width },
20294
+ [count, step, xAt, size.width]
20295
+ );
20296
+ const edgeOf = useCallback(
20297
+ (index) => count > 1 && index === 0 ? "start" : count > 1 && index === count - 1 ? "end" : null,
20298
+ [count]
20299
+ );
20300
+ const minPlotWidth = categories.length * BAND_MIN;
20154
20301
  const totalHeight = height ?? 320;
20155
20302
  const plotHeight = typeof totalHeight === "number" ? Math.max(0, totalHeight - axisText.height) : `calc(${totalHeight} - ${axisText.height}px)`;
20156
20303
  const plotted = useMemo(() => {
20157
20304
  if (size.width <= 0 || size.height <= 0) return [];
20158
- const xOf = (index) => AXIS_EDGE_PADDING + (index + 0.5) * band;
20159
20305
  const yOf = (value) => size.height - ratioOf(value, scale) * size.height;
20160
20306
  return rows.map(
20161
20307
  (row) => row.map(
20162
- (point, categoryIndex) => point == null ? null : { x: xOf(categoryIndex), y: yOf(point.value), baseY: yOf(point.base), own: point.own }
20308
+ (point, categoryIndex) => point == null ? null : { x: xAt(categoryIndex), y: yOf(point.value), baseY: yOf(point.base), own: point.own }
20163
20309
  )
20164
20310
  );
20165
- }, [rows, size.width, size.height, band, scale]);
20311
+ }, [rows, size.width, size.height, xAt, scale]);
20166
20312
  const legend = showLegend ? /* @__PURE__ */ jsx(ChartLegend, { items: series.map((s, i) => ({ name: s.name, color: colorAt(i) })) }) : null;
20167
20313
  const handleMove = (event) => {
20168
- if (!showTooltip || band <= 0 || series.length === 0) return;
20314
+ if (!showTooltip || count === 0 || size.width <= 0 || series.length === 0) return;
20169
20315
  const rect = event.currentTarget.getBoundingClientRect();
20170
- const along = event.clientX - rect.left - AXIS_EDGE_PADDING;
20171
- const category = Math.floor(along / band);
20316
+ const along = event.clientX - rect.left;
20317
+ const category = count > 1 ? Math.round(along / step) : 0;
20172
20318
  setHoveredCategory(category >= 0 && category < categories.length ? category : null);
20173
20319
  };
20174
20320
  const tooltipItems = hoveredCategory == null ? [] : rows.flatMap((row, seriesIndex) => {
@@ -20194,10 +20340,9 @@ var SLineChart = /* @__PURE__ */ forwardRef(function SLineChart2({
20194
20340
  const { ref: valueLabelRef, metrics: valueLabel } = useSvgTextMetrics();
20195
20341
  const tooltipAnchor = useMemo(() => {
20196
20342
  if (hoveredCategory == null || anchorTop == null) return null;
20197
- const left = AXIS_EDGE_PADDING + hoveredCategory * band;
20198
20343
  const top = showValueLabel ? anchorTop - POINT_RADIUS - VALUE_LABEL_GAP2 + valueLabel.top : anchorTop - POINT_HOVER_EXTENT;
20199
- return { left, right: left + band, top };
20200
- }, [hoveredCategory, anchorTop, band, showValueLabel, valueLabel.top]);
20344
+ return { ...cellOf(hoveredCategory), top };
20345
+ }, [hoveredCategory, anchorTop, cellOf, showValueLabel, valueLabel.top]);
20201
20346
  const categoryLabels = /* @__PURE__ */ jsxs(
20202
20347
  "div",
20203
20348
  {
@@ -20208,8 +20353,11 @@ var SLineChart = /* @__PURE__ */ forwardRef(function SLineChart2({
20208
20353
  categories.map((label, index) => /* @__PURE__ */ jsx(
20209
20354
  "span",
20210
20355
  {
20211
- className: "absolute top-0 -translate-x-1/2 whitespace-nowrap",
20212
- style: { left: AXIS_EDGE_PADDING + (index + 0.5) * band },
20356
+ className: cn(
20357
+ "absolute top-0 whitespace-nowrap",
20358
+ edgeOf(index) === "start" ? "translate-x-0" : edgeOf(index) === "end" ? "-translate-x-full" : "-translate-x-1/2"
20359
+ ),
20360
+ style: { left: xAt(index) },
20213
20361
  children: label
20214
20362
  },
20215
20363
  `${label}-${index}`
@@ -20233,13 +20381,43 @@ var SLineChart = /* @__PURE__ */ forwardRef(function SLineChart2({
20233
20381
  {
20234
20382
  "aria-hidden": true,
20235
20383
  d,
20236
- style: { fill: colorAt(seriesIndex), fillOpacity: AREA_OPACITY }
20384
+ style: { fill: `url(#${gradientId}-area-${seriesIndex})` }
20237
20385
  },
20238
20386
  `area-${seriesIndex}-${runIndex}`
20239
20387
  );
20240
20388
  })
20241
20389
  );
20242
- }, [area, plotted, smooth, colorAt]);
20390
+ }, [area, plotted, smooth, gradientId]);
20391
+ const areaGradients = useMemo(() => {
20392
+ if (!area) return null;
20393
+ return /* @__PURE__ */ jsx("defs", { children: plotted.map((_, seriesIndex) => /* @__PURE__ */ jsxs(
20394
+ "linearGradient",
20395
+ {
20396
+ id: `${gradientId}-area-${seriesIndex}`,
20397
+ x1: "0",
20398
+ y1: "0",
20399
+ x2: "0",
20400
+ y2: "1",
20401
+ children: [
20402
+ /* @__PURE__ */ jsx(
20403
+ "stop",
20404
+ {
20405
+ offset: "0",
20406
+ style: { stopColor: colorAt(seriesIndex), stopOpacity: AREA_OPACITY_TOP }
20407
+ }
20408
+ ),
20409
+ /* @__PURE__ */ jsx(
20410
+ "stop",
20411
+ {
20412
+ offset: "1",
20413
+ style: { stopColor: colorAt(seriesIndex), stopOpacity: AREA_OPACITY_BOTTOM }
20414
+ }
20415
+ )
20416
+ ]
20417
+ },
20418
+ `area-gradient-${seriesIndex}`
20419
+ )) });
20420
+ }, [area, plotted, colorAt, gradientId]);
20243
20421
  const lines = useMemo(
20244
20422
  () => plotted.flatMap(
20245
20423
  (row, seriesIndex) => runsOf(row).map((run, runIndex) => {
@@ -20319,7 +20497,7 @@ var SLineChart = /* @__PURE__ */ forwardRef(function SLineChart2({
20319
20497
  y: point.y - POINT_RADIUS - VALUE_LABEL_GAP2,
20320
20498
  className: hoveredCategory === categoryIndex ? LINE_DATA_LABEL_TYPO_HOVER : LINE_DATA_LABEL_TYPO,
20321
20499
  style: { fill: LINE_DATA_LABEL_COLOR },
20322
- textAnchor: "middle",
20500
+ textAnchor: edgeOf(categoryIndex) === "start" ? "start" : edgeOf(categoryIndex) === "end" ? "end" : "middle",
20323
20501
  dominantBaseline: "auto",
20324
20502
  children: formatValue(point.own)
20325
20503
  },
@@ -20327,7 +20505,7 @@ var SLineChart = /* @__PURE__ */ forwardRef(function SLineChart2({
20327
20505
  )
20328
20506
  )
20329
20507
  ) : [],
20330
- [showValueLabel, plotted, hoveredCategory, formatValue]
20508
+ [showValueLabel, plotted, hoveredCategory, formatValue, edgeOf]
20331
20509
  );
20332
20510
  const inset = { paddingTop: axisSample.height / 2, paddingBottom: axisSample.height / 2 };
20333
20511
  return /* @__PURE__ */ jsx(
@@ -20357,95 +20535,385 @@ var SLineChart = /* @__PURE__ */ forwardRef(function SLineChart2({
20357
20535
  sampleRef: axisSampleRef
20358
20536
  }
20359
20537
  ) }),
20360
- /* @__PURE__ */ jsxs("div", { className: "min-w-0 overflow-x-auto", children: [
20361
- /* @__PURE__ */ jsx(
20362
- "div",
20363
- {
20364
- className: "relative min-w-0",
20365
- style: { height: plotHeight, minWidth: minPlotWidth || void 0, ...inset },
20366
- children: /* @__PURE__ */ jsxs(
20538
+ /* @__PURE__ */ jsxs(
20539
+ "div",
20540
+ {
20541
+ className: "min-w-0 overflow-x-auto",
20542
+ style: { marginInline: -POINT_HOVER_EXTENT, paddingInline: POINT_HOVER_EXTENT },
20543
+ children: [
20544
+ /* @__PURE__ */ jsx(
20367
20545
  "div",
20368
20546
  {
20369
- ref: plotRef,
20370
- className: "relative h-full w-full",
20371
- onMouseMove: handleMove,
20372
- onMouseLeave: () => setHoveredCategory(null),
20373
- children: [
20374
- size.width > 0 && size.height > 0 && /* @__PURE__ */ jsxs(
20375
- "svg",
20376
- {
20377
- width: size.width,
20378
- height: size.height,
20379
- role: "img",
20380
- "aria-label": `${categories.length}\uAC1C \uD56D\uBAA9, ${series.length}\uAC1C \uACC4\uC5F4 ${stacked ? "\uB204\uC801 " : ""}\uAEBE\uC740\uC120 \uADF8\uB798\uD504`,
20381
- children: [
20382
- /* @__PURE__ */ jsx(
20383
- "text",
20384
- {
20385
- ref: valueLabelRef,
20386
- "aria-hidden": true,
20387
- x: 0,
20388
- y: 0,
20389
- className: LINE_DATA_LABEL_TYPO_HOVER,
20390
- dominantBaseline: "auto",
20391
- style: { visibility: "hidden" },
20392
- children: "0"
20393
- }
20394
- ),
20395
- /* @__PURE__ */ jsx(
20396
- ChartGrid,
20397
- {
20398
- scale,
20399
- direction: "vertical",
20400
- width: size.width,
20401
- height: size.height
20402
- }
20403
- ),
20404
- hoveredCategory != null && /* @__PURE__ */ jsx(
20405
- "rect",
20406
- {
20407
- "aria-hidden": true,
20408
- x: AXIS_EDGE_PADDING + hoveredCategory * band,
20409
- y: 0,
20410
- width: band,
20411
- height: size.height,
20412
- style: {
20413
- fill: "var(--cmp-chart-barContainer-hover-bg)",
20414
- fillOpacity: "var(--cmp-chart-barContainer-hover-opacity)"
20415
- }
20416
- }
20417
- ),
20418
- areas,
20419
- lines,
20420
- pointHalos,
20421
- pointDots,
20422
- valueLabels
20423
- ]
20424
- }
20425
- ),
20426
- showTooltip && hoveredCategory != null && tooltipAnchor != null && tooltipItems.length > 0 && /* @__PURE__ */ jsx(
20427
- ChartTooltip,
20428
- {
20429
- title: categories[hoveredCategory] ?? "",
20430
- items: tooltipItems,
20431
- anchor: tooltipAnchor,
20432
- bounds: size,
20433
- gapX: { after: -4, before: -4 }
20434
- }
20435
- )
20436
- ]
20547
+ className: "relative min-w-0",
20548
+ style: { height: plotHeight, minWidth: minPlotWidth || void 0, ...inset },
20549
+ children: /* @__PURE__ */ jsxs(
20550
+ "div",
20551
+ {
20552
+ ref: plotRef,
20553
+ className: "relative h-full w-full",
20554
+ onMouseMove: handleMove,
20555
+ onMouseLeave: () => setHoveredCategory(null),
20556
+ children: [
20557
+ size.width > 0 && size.height > 0 && /* @__PURE__ */ jsxs(
20558
+ "svg",
20559
+ {
20560
+ width: size.width,
20561
+ height: size.height,
20562
+ overflow: "visible",
20563
+ role: "img",
20564
+ "aria-label": `${categories.length}\uAC1C \uD56D\uBAA9, ${series.length}\uAC1C \uACC4\uC5F4 ${stacked ? "\uB204\uC801 " : ""}\uAEBE\uC740\uC120 \uADF8\uB798\uD504`,
20565
+ children: [
20566
+ /* @__PURE__ */ jsx(
20567
+ "text",
20568
+ {
20569
+ ref: valueLabelRef,
20570
+ "aria-hidden": true,
20571
+ x: 0,
20572
+ y: 0,
20573
+ className: LINE_DATA_LABEL_TYPO_HOVER,
20574
+ dominantBaseline: "auto",
20575
+ style: { visibility: "hidden" },
20576
+ children: "0"
20577
+ }
20578
+ ),
20579
+ /* @__PURE__ */ jsx(
20580
+ ChartGrid,
20581
+ {
20582
+ scale,
20583
+ direction: "vertical",
20584
+ width: size.width,
20585
+ height: size.height
20586
+ }
20587
+ ),
20588
+ hoveredCategory != null && /* @__PURE__ */ jsx(
20589
+ "rect",
20590
+ {
20591
+ "aria-hidden": true,
20592
+ x: cellOf(hoveredCategory).left,
20593
+ y: 0,
20594
+ width: cellOf(hoveredCategory).right - cellOf(hoveredCategory).left,
20595
+ height: size.height,
20596
+ style: {
20597
+ fill: "var(--cmp-chart-barContainer-hover-bg)",
20598
+ fillOpacity: "var(--cmp-chart-barContainer-hover-opacity)"
20599
+ }
20600
+ }
20601
+ ),
20602
+ areaGradients,
20603
+ areas,
20604
+ lines,
20605
+ pointHalos,
20606
+ pointDots,
20607
+ valueLabels
20608
+ ]
20609
+ }
20610
+ ),
20611
+ showTooltip && hoveredCategory != null && tooltipAnchor != null && tooltipItems.length > 0 && /* @__PURE__ */ jsx(
20612
+ ChartTooltip,
20613
+ {
20614
+ title: categories[hoveredCategory] ?? "",
20615
+ items: tooltipItems,
20616
+ anchor: tooltipAnchor,
20617
+ bounds: size,
20618
+ gapX: { after: -4, before: -4 },
20619
+ footer: tooltipFooter?.({
20620
+ categoryIndex: hoveredCategory,
20621
+ name: categories[hoveredCategory] ?? "",
20622
+ points: rows.flatMap((row, seriesIndex) => {
20623
+ const point = row[hoveredCategory];
20624
+ if (point == null) return [];
20625
+ return [{ seriesIndex, categoryIndex: hoveredCategory, value: point.own }];
20626
+ })
20627
+ })
20628
+ }
20629
+ )
20630
+ ]
20631
+ }
20632
+ )
20437
20633
  }
20438
- )
20439
- }
20440
- ),
20441
- /* @__PURE__ */ jsx("div", { ref: axisTextRef, children: categoryLabels })
20442
- ] })
20634
+ ),
20635
+ /* @__PURE__ */ jsx("div", { ref: axisTextRef, children: categoryLabels })
20636
+ ]
20637
+ }
20638
+ )
20443
20639
  ]
20444
20640
  }
20445
20641
  )
20446
20642
  }
20447
20643
  );
20448
20644
  });
20645
+ var DONUT_INNER_RATIO = 0.4;
20646
+ var LABEL_MIN_RATIO = 0.05;
20647
+ var PIE_LABEL_RADIUS_RATIO = 0.65;
20648
+ var HOVER_GROW = 4;
20649
+ var HOVER_CORNER = 2;
20650
+ var OPACITY_DEFAULT = "var(--cmp-chart-bar-opacity-default)";
20651
+ var OPACITY_DIMMED = "var(--cmp-chart-bar-opacity-dimmed)";
20652
+ var OPACITY_HOVER = 1;
20653
+ var defaultFormat3 = (value) => value.toLocaleString();
20654
+ function formatRatio(ratio) {
20655
+ if (ratio > 0 && ratio < 0.01) return "<1%";
20656
+ return `${Math.round(ratio * 100)}%`;
20657
+ }
20658
+ var r2 = (value) => Math.round(value * 100) / 100;
20659
+ function polar(center, radius, angle) {
20660
+ return { x: center + radius * Math.sin(angle), y: center - radius * Math.cos(angle) };
20661
+ }
20662
+ var arc = (radius, large, sweep, p) => `A${r2(radius)} ${r2(radius)} 0 ${large} ${sweep} ${r2(p.x)} ${r2(p.y)}`;
20663
+ function fitCorner(corner, outer, inner, span) {
20664
+ if (corner <= 0 || outer <= 0) return 0;
20665
+ let fitted = Math.min(corner, (outer - inner) / 2);
20666
+ if (span < Math.PI) {
20667
+ const half = Math.sin(span / 2);
20668
+ fitted = Math.min(fitted, outer * half / (1 + half));
20669
+ if (inner > 0) fitted = Math.min(fitted, inner * half / (1 - half));
20670
+ }
20671
+ return fitted >= 0.5 ? fitted : 0;
20672
+ }
20673
+ function slicePath(center, outer, inner, start, end, corner = 0) {
20674
+ if (end - start >= Math.PI * 2 - 1e-6) {
20675
+ 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`;
20676
+ return inner > 0 ? ring(outer) + ring(inner) : ring(outer);
20677
+ }
20678
+ const span = end - start;
20679
+ const round = fitCorner(corner, outer, inner, span);
20680
+ const outerLine = Math.sqrt(Math.max(outer * outer - 2 * outer * round, 0));
20681
+ const outerPhi = round > 0 ? Math.asin(round / (outer - round)) : 0;
20682
+ const outerLarge = span - 2 * outerPhi > Math.PI ? 1 : 0;
20683
+ const o0 = polar(center, outerLine, start);
20684
+ let d = `M${r2(o0.x)} ${r2(o0.y)}`;
20685
+ if (round > 0) d += arc(round, 0, 1, polar(center, outer, start + outerPhi));
20686
+ d += arc(outer, outerLarge, 1, polar(center, outer, end - outerPhi));
20687
+ if (round > 0) d += arc(round, 0, 1, polar(center, outerLine, end));
20688
+ if (inner <= 0) return `${d}L${r2(center)} ${r2(center)}Z`;
20689
+ const innerLine = Math.sqrt(inner * inner + 2 * inner * round);
20690
+ const innerPhi = round > 0 ? Math.asin(round / (inner + round)) : 0;
20691
+ const innerLarge = span - 2 * innerPhi > Math.PI ? 1 : 0;
20692
+ const i0 = polar(center, innerLine, end);
20693
+ d += `L${r2(i0.x)} ${r2(i0.y)}`;
20694
+ if (round > 0) d += arc(round, 0, 1, polar(center, inner, end - innerPhi));
20695
+ d += arc(inner, innerLarge, 0, polar(center, inner, start + innerPhi));
20696
+ if (round > 0) d += arc(round, 0, 1, polar(center, innerLine, start));
20697
+ return `${d}Z`;
20698
+ }
20699
+ var RadialChart = /* @__PURE__ */ forwardRef(function RadialChart2({
20700
+ data,
20701
+ palette = "multi",
20702
+ colors,
20703
+ showValueLabel = false,
20704
+ showLegend = true,
20705
+ legendPosition = "top",
20706
+ showTooltip = true,
20707
+ formatValue = defaultFormat3,
20708
+ onSliceClick,
20709
+ tooltipFooter,
20710
+ className,
20711
+ style,
20712
+ innerRatio,
20713
+ kind
20714
+ }, ref) {
20715
+ const { ref: plotRef, size } = useElementSize();
20716
+ const [hovered, setHovered] = useState(null);
20717
+ const arcs = useMemo(() => {
20718
+ const effective = palette === "custom" && !colors?.length ? "multi" : palette;
20719
+ const valid = data.map((slice2, index) => ({ ...slice2, index })).filter((slice2) => Number.isFinite(slice2.value) && slice2.value > 0);
20720
+ const sum = valid.reduce((acc, slice2) => acc + slice2.value, 0);
20721
+ let angle = 0;
20722
+ const list = valid.map((slice2) => {
20723
+ const ratio = slice2.value / sum;
20724
+ const start = angle;
20725
+ angle += ratio * Math.PI * 2;
20726
+ return {
20727
+ index: slice2.index,
20728
+ name: slice2.name,
20729
+ value: slice2.value,
20730
+ ratio,
20731
+ start,
20732
+ end: angle,
20733
+ color: paletteColor(effective, slice2.index, colors)
20734
+ };
20735
+ });
20736
+ return list;
20737
+ }, [data, palette, colors]);
20738
+ const diameter = size.width;
20739
+ const center = diameter / 2;
20740
+ const outer = Math.max(center - HOVER_GROW, 0);
20741
+ const inner = outer * innerRatio;
20742
+ const hoveredArc = arcs.find((arc2) => arc2.index === hovered) ?? null;
20743
+ const legend = showLegend ? /* @__PURE__ */ jsx(
20744
+ ChartLegend,
20745
+ {
20746
+ items: arcs.map((arc2) => ({ name: arc2.name, color: arc2.color })),
20747
+ activeIndex: hoveredArc ? arcs.indexOf(hoveredArc) : null
20748
+ }
20749
+ ) : null;
20750
+ const tooltipAnchor = useMemo(() => {
20751
+ if (!hoveredArc || diameter <= 0) return null;
20752
+ const mid = (hoveredArc.start + hoveredArc.end) / 2;
20753
+ const point = polar(center, (outer + inner) / 2, mid);
20754
+ return { left: point.x, right: point.x, top: point.y };
20755
+ }, [hoveredArc, diameter, center, outer, inner]);
20756
+ const labelRadius = inner > 0 ? (outer + inner) / 2 : outer * PIE_LABEL_RADIUS_RATIO;
20757
+ const slice = (target) => {
20758
+ const picked = hovered === target.index;
20759
+ return slicePath(
20760
+ center,
20761
+ picked ? outer + HOVER_GROW : outer,
20762
+ picked ? Math.max(inner - HOVER_GROW, 0) : inner,
20763
+ target.start,
20764
+ target.end,
20765
+ picked ? HOVER_CORNER : 0
20766
+ );
20767
+ };
20768
+ return /* @__PURE__ */ jsx(
20769
+ ChartFrame,
20770
+ {
20771
+ ref,
20772
+ legend,
20773
+ legendPosition,
20774
+ className,
20775
+ style,
20776
+ children: /* @__PURE__ */ jsxs("div", { ref: plotRef, className: "relative aspect-square w-full", children: [
20777
+ diameter > 0 && /* @__PURE__ */ jsxs(
20778
+ "svg",
20779
+ {
20780
+ width: diameter,
20781
+ height: diameter,
20782
+ role: "img",
20783
+ "aria-label": `${arcs.length}\uAC1C \uD56D\uBAA9 ${kind}`,
20784
+ onMouseLeave: () => setHovered(null),
20785
+ children: [
20786
+ arcs.length === 0 ? (
20787
+ // 그릴 값이 없어도 자리는 남긴다 — 차트가 사라지면 화면이 무너진 것처럼 보인다.
20788
+ /* @__PURE__ */ jsx(
20789
+ "path",
20790
+ {
20791
+ "aria-hidden": true,
20792
+ d: slicePath(center, outer, inner, 0, Math.PI * 2),
20793
+ fillRule: "evenodd",
20794
+ style: { fill: "var(--cmp-chart-grid-line-color)" }
20795
+ }
20796
+ )
20797
+ ) : arcs.map((arc2) => {
20798
+ const opacity = hovered == null ? OPACITY_DEFAULT : hovered === arc2.index ? OPACITY_HOVER : OPACITY_DIMMED;
20799
+ return /* @__PURE__ */ jsx(
20800
+ "path",
20801
+ {
20802
+ d: slice(arc2),
20803
+ fillRule: "evenodd",
20804
+ className: "transition-opacity duration-200 ease-out motion-reduce:transition-none",
20805
+ style: {
20806
+ fill: arc2.color,
20807
+ opacity,
20808
+ cursor: onSliceClick ? "pointer" : void 0
20809
+ },
20810
+ onMouseEnter: () => setHovered(arc2.index),
20811
+ onClick: onSliceClick ? () => onSliceClick({
20812
+ index: arc2.index,
20813
+ name: arc2.name,
20814
+ value: arc2.value,
20815
+ ratio: arc2.ratio
20816
+ }) : void 0,
20817
+ children: /* @__PURE__ */ jsx("title", { children: `${arc2.name} ${formatValue(arc2.value)} (${formatRatio(arc2.ratio)})` })
20818
+ },
20819
+ `slice-${arc2.index}`
20820
+ );
20821
+ }),
20822
+ showValueLabel && arcs.map((arc2) => {
20823
+ if (arc2.ratio < LABEL_MIN_RATIO) return null;
20824
+ const point = polar(center, labelRadius, (arc2.start + arc2.end) / 2);
20825
+ return /* @__PURE__ */ jsx(
20826
+ "text",
20827
+ {
20828
+ "aria-hidden": true,
20829
+ x: point.x,
20830
+ y: point.y,
20831
+ textAnchor: "middle",
20832
+ dominantBaseline: "central",
20833
+ className: "pointer-events-none typo-body-sm-bold transition-opacity duration-200 ease-out motion-reduce:transition-none",
20834
+ style: {
20835
+ fill: "var(--sys-color-fg-inverse)",
20836
+ opacity: hovered != null && hovered !== arc2.index ? OPACITY_DIMMED : void 0
20837
+ },
20838
+ children: formatRatio(arc2.ratio)
20839
+ },
20840
+ `label-${arc2.index}`
20841
+ );
20842
+ })
20843
+ ]
20844
+ }
20845
+ ),
20846
+ showTooltip && hoveredArc && tooltipAnchor && /* @__PURE__ */ jsx(
20847
+ ChartTooltip,
20848
+ {
20849
+ title: hoveredArc.name,
20850
+ items: [
20851
+ {
20852
+ color: hoveredArc.color,
20853
+ label: formatValue(hoveredArc.value),
20854
+ value: formatRatio(hoveredArc.ratio)
20855
+ }
20856
+ ],
20857
+ anchor: tooltipAnchor,
20858
+ bounds: size,
20859
+ footer: tooltipFooter?.({
20860
+ index: hoveredArc.index,
20861
+ name: hoveredArc.name,
20862
+ value: hoveredArc.value,
20863
+ ratio: hoveredArc.ratio
20864
+ })
20865
+ }
20866
+ )
20867
+ ] })
20868
+ }
20869
+ );
20870
+ });
20871
+ var SPieChart = /* @__PURE__ */ forwardRef(function SPieChart2({
20872
+ palette = "multi",
20873
+ showValueLabel = false,
20874
+ showLegend = true,
20875
+ legendPosition = "top",
20876
+ showTooltip = true,
20877
+ ...props
20878
+ }, ref) {
20879
+ return /* @__PURE__ */ jsx(
20880
+ RadialChart,
20881
+ {
20882
+ ref,
20883
+ ...props,
20884
+ palette,
20885
+ showValueLabel,
20886
+ showLegend,
20887
+ legendPosition,
20888
+ showTooltip,
20889
+ innerRatio: 0,
20890
+ kind: "\uD30C\uC774 \uADF8\uB798\uD504"
20891
+ }
20892
+ );
20893
+ });
20894
+ var SDonutChart = /* @__PURE__ */ forwardRef(function SDonutChart2({
20895
+ palette = "multi",
20896
+ showValueLabel = false,
20897
+ showLegend = true,
20898
+ legendPosition = "top",
20899
+ showTooltip = true,
20900
+ ...props
20901
+ }, ref) {
20902
+ return /* @__PURE__ */ jsx(
20903
+ RadialChart,
20904
+ {
20905
+ ref,
20906
+ ...props,
20907
+ palette,
20908
+ showValueLabel,
20909
+ showLegend,
20910
+ legendPosition,
20911
+ showTooltip,
20912
+ innerRatio: DONUT_INNER_RATIO,
20913
+ kind: "\uB3C4\uB11B \uADF8\uB798\uD504"
20914
+ }
20915
+ );
20916
+ });
20449
20917
  var BUTTON_STYLE = {
20450
20918
  default: { color: "secondary" },
20451
20919
  danger: { color: "danger", outline: true },
@@ -21728,7 +22196,7 @@ var PaletteItem = ({
21728
22196
  className,
21729
22197
  onSelect,
21730
22198
  children
21731
- }) => asMenu ? /* @__PURE__ */ jsx(RDropdown3.Item, { title: label, "aria-label": label, className, onSelect, children }) : /* @__PURE__ */ jsx("button", { type: "button", title: label, "aria-label": label, className, onClick: onSelect, children });
22199
+ }) => asMenu ? /* @__PURE__ */ jsx(RDropdown5.Item, { title: label, "aria-label": label, className, onSelect, children }) : /* @__PURE__ */ jsx("button", { type: "button", title: label, "aria-label": label, className, onClick: onSelect, children });
21732
22200
  var ColorPalette = ({
21733
22201
  colors,
21734
22202
  columns,
@@ -21814,14 +22282,14 @@ var TableSizePicker = ({
21814
22282
  onPick(size.rows, size.cols);
21815
22283
  }
21816
22284
  },
21817
- children: Array.from({ length: TABLE_PICKER_ROWS }, (_, r2) => /* @__PURE__ */ jsx("div", { role: "row", className: "flex", style: { gap: TABLE_PICKER_GAP }, children: Array.from({ length: TABLE_PICKER_COLS }, (_2, c) => {
21818
- const on = r2 < size.rows && c < size.cols;
22285
+ children: Array.from({ length: TABLE_PICKER_ROWS }, (_, r3) => /* @__PURE__ */ jsx("div", { role: "row", className: "flex", style: { gap: TABLE_PICKER_GAP }, children: Array.from({ length: TABLE_PICKER_COLS }, (_2, c) => {
22286
+ const on = r3 < size.rows && c < size.cols;
21819
22287
  return /* @__PURE__ */ jsx(
21820
22288
  "button",
21821
22289
  {
21822
22290
  type: "button",
21823
22291
  role: "gridcell",
21824
- "aria-label": `${r2 + 1}\uD589 ${c + 1}\uC5F4`,
22292
+ "aria-label": `${r3 + 1}\uD589 ${c + 1}\uC5F4`,
21825
22293
  "aria-selected": on,
21826
22294
  tabIndex: -1,
21827
22295
  className: "box-border cursor-pointer rounded-[3px] border border-solid p-0 outline-none",
@@ -21831,13 +22299,13 @@ var TableSizePicker = ({
21831
22299
  borderColor: on ? "var(--sys-color-bg-accent)" : "var(--sys-color-border-default)",
21832
22300
  background: on ? "var(--color-bg-accentFaint)" : "transparent"
21833
22301
  },
21834
- onMouseEnter: () => setSize({ rows: r2 + 1, cols: c + 1 }),
21835
- onFocus: () => setSize({ rows: r2 + 1, cols: c + 1 }),
21836
- onClick: () => onPick(r2 + 1, c + 1)
22302
+ onMouseEnter: () => setSize({ rows: r3 + 1, cols: c + 1 }),
22303
+ onFocus: () => setSize({ rows: r3 + 1, cols: c + 1 }),
22304
+ onClick: () => onPick(r3 + 1, c + 1)
21837
22305
  },
21838
22306
  c
21839
22307
  );
21840
- }) }, r2))
22308
+ }) }, r3))
21841
22309
  }
21842
22310
  ),
21843
22311
  /* @__PURE__ */ jsxs(
@@ -21860,7 +22328,7 @@ var TableMenuItem = ({
21860
22328
  disabled,
21861
22329
  onSelect
21862
22330
  }) => /* @__PURE__ */ jsx(
21863
- RDropdown3.Item,
22331
+ RDropdown5.Item,
21864
22332
  {
21865
22333
  className: cn(menuItemClass, menuItemDisabledClass),
21866
22334
  disabled,
@@ -22027,8 +22495,8 @@ function EditorToolbarBar({
22027
22495
  const node = (item4) => {
22028
22496
  switch (item4) {
22029
22497
  case "heading":
22030
- return /* @__PURE__ */ jsxs(RDropdown3.Root, { modal: !insideModal, children: [
22031
- /* @__PURE__ */ jsx(RDropdown3.Trigger, { asChild: true, disabled: off, children: /* @__PURE__ */ jsxs(
22498
+ return /* @__PURE__ */ jsxs(RDropdown5.Root, { modal: !insideModal, children: [
22499
+ /* @__PURE__ */ jsx(RDropdown5.Trigger, { asChild: true, disabled: off, children: /* @__PURE__ */ jsxs(
22032
22500
  ToolbarButton,
22033
22501
  {
22034
22502
  label: "\uC81C\uBAA9 \uB2E8\uACC4",
@@ -22041,9 +22509,9 @@ function EditorToolbarBar({
22041
22509
  ]
22042
22510
  }
22043
22511
  ) }),
22044
- /* @__PURE__ */ jsx(RDropdown3.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxs(RDropdown3.Content, { sideOffset: 4, align: "start", className: menuClass, children: [
22512
+ /* @__PURE__ */ jsx(RDropdown5.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxs(RDropdown5.Content, { sideOffset: 4, align: "start", className: menuClass, children: [
22045
22513
  /* @__PURE__ */ jsx(
22046
- RDropdown3.Item,
22514
+ RDropdown5.Item,
22047
22515
  {
22048
22516
  className: menuItemClass,
22049
22517
  onSelect: () => chain()?.setParagraph().run(),
@@ -22051,7 +22519,7 @@ function EditorToolbarBar({
22051
22519
  }
22052
22520
  ),
22053
22521
  SEDITOR_HEADING_LEVELS.map((level) => /* @__PURE__ */ jsx(
22054
- RDropdown3.Item,
22522
+ RDropdown5.Item,
22055
22523
  {
22056
22524
  className: menuItemClass,
22057
22525
  onSelect: () => chain()?.setHeading({ level }).run(),
@@ -22062,13 +22530,13 @@ function EditorToolbarBar({
22062
22530
  ] }) })
22063
22531
  ] }, item4);
22064
22532
  case "fontSize":
22065
- return /* @__PURE__ */ jsxs(RDropdown3.Root, { modal: !insideModal, children: [
22066
- /* @__PURE__ */ jsx(RDropdown3.Trigger, { asChild: true, disabled: off, children: /* @__PURE__ */ jsxs(ToolbarButton, { label: "\uAE00\uC790 \uD06C\uAE30", disabled: off, className: "px-[6px]", children: [
22533
+ return /* @__PURE__ */ jsxs(RDropdown5.Root, { modal: !insideModal, children: [
22534
+ /* @__PURE__ */ jsx(RDropdown5.Trigger, { asChild: true, disabled: off, children: /* @__PURE__ */ jsxs(ToolbarButton, { label: "\uAE00\uC790 \uD06C\uAE30", disabled: off, className: "px-[6px]", children: [
22067
22535
  /* @__PURE__ */ jsx("span", { className: "text-[12px] leading-[20px]", children: activeFontSize ?? FONT_SIZE_DEFAULT_LABEL }),
22068
22536
  /* @__PURE__ */ jsx(SIcon, { name: "caretDown", size: 12 })
22069
22537
  ] }) }),
22070
- /* @__PURE__ */ jsx(RDropdown3.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxs(
22071
- RDropdown3.Content,
22538
+ /* @__PURE__ */ jsx(RDropdown5.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxs(
22539
+ RDropdown5.Content,
22072
22540
  {
22073
22541
  sideOffset: 4,
22074
22542
  align: "start",
@@ -22076,7 +22544,7 @@ function EditorToolbarBar({
22076
22544
  style: { maxHeight: FONT_SIZE_MENU_MAX_HEIGHT },
22077
22545
  children: [
22078
22546
  /* @__PURE__ */ jsx(
22079
- RDropdown3.Item,
22547
+ RDropdown5.Item,
22080
22548
  {
22081
22549
  className: cn(menuItemClass, activeFontSize === null && menuItemSelectedClass),
22082
22550
  title: `${FONT_SIZE_DEFAULT_LABEL} (\uBCF8\uBB38 ${SEDITOR_DEFAULT_FONT_SIZE}px)`,
@@ -22085,7 +22553,7 @@ function EditorToolbarBar({
22085
22553
  }
22086
22554
  ),
22087
22555
  SEDITOR_FONT_SIZES.map((size) => /* @__PURE__ */ jsx(
22088
- RDropdown3.Item,
22556
+ RDropdown5.Item,
22089
22557
  {
22090
22558
  ref: activeFontSize === size ? (el) => {
22091
22559
  el?.scrollIntoView({ block: "nearest" });
@@ -22177,9 +22645,9 @@ function EditorToolbarBar({
22177
22645
  },
22178
22646
  item4
22179
22647
  );
22180
- return /* @__PURE__ */ jsxs(RDropdown3.Root, { modal: !insideModal, children: [
22181
- /* @__PURE__ */ jsx(RDropdown3.Trigger, { asChild: true, disabled: off, children: /* @__PURE__ */ jsx(ToolbarButton, { label: "\uAE00\uC790\uC0C9", disabled: off, children: /* @__PURE__ */ jsx(ColorIndicator, { color: off ? "currentColor" : activeColor, children: /* @__PURE__ */ jsx(IconTextColor, { size: ICON_SIZE }) }) }) }),
22182
- /* @__PURE__ */ jsx(RDropdown3.Portal, { container: portalContainer, children: /* @__PURE__ */ jsx(RDropdown3.Content, { sideOffset: 4, align: "start", className: menuClass, children: /* @__PURE__ */ jsx(
22648
+ return /* @__PURE__ */ jsxs(RDropdown5.Root, { modal: !insideModal, children: [
22649
+ /* @__PURE__ */ jsx(RDropdown5.Trigger, { asChild: true, disabled: off, children: /* @__PURE__ */ jsx(ToolbarButton, { label: "\uAE00\uC790\uC0C9", disabled: off, children: /* @__PURE__ */ jsx(ColorIndicator, { color: off ? "currentColor" : activeColor, children: /* @__PURE__ */ jsx(IconTextColor, { size: ICON_SIZE }) }) }) }),
22650
+ /* @__PURE__ */ jsx(RDropdown5.Portal, { container: portalContainer, children: /* @__PURE__ */ jsx(RDropdown5.Content, { sideOffset: 4, align: "start", className: menuClass, children: /* @__PURE__ */ jsx(
22183
22651
  ColorPalette,
22184
22652
  {
22185
22653
  asMenu: true,
@@ -22285,14 +22753,14 @@ function EditorToolbarBar({
22285
22753
  case "list": {
22286
22754
  const ListIcon = state2.orderedList ? IconOrderedList : state2.taskList ? IconTaskList : IconBulletList;
22287
22755
  const listActive = state2.bulletList || state2.orderedList || state2.taskList;
22288
- return /* @__PURE__ */ jsxs(RDropdown3.Root, { modal: !insideModal, children: [
22289
- /* @__PURE__ */ jsx(RDropdown3.Trigger, { asChild: true, disabled: off, children: /* @__PURE__ */ jsxs(ToolbarButton, { label: "\uBAA9\uB85D", active: listActive, disabled: off, className: "px-[4px]", children: [
22756
+ return /* @__PURE__ */ jsxs(RDropdown5.Root, { modal: !insideModal, children: [
22757
+ /* @__PURE__ */ jsx(RDropdown5.Trigger, { asChild: true, disabled: off, children: /* @__PURE__ */ jsxs(ToolbarButton, { label: "\uBAA9\uB85D", active: listActive, disabled: off, className: "px-[4px]", children: [
22290
22758
  /* @__PURE__ */ jsx(ListIcon, { size: ICON_SIZE }),
22291
22759
  /* @__PURE__ */ jsx(SIcon, { name: "caretDown", size: CARET_SIZE })
22292
22760
  ] }) }),
22293
- /* @__PURE__ */ jsx(RDropdown3.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxs(RDropdown3.Content, { sideOffset: 4, align: "start", className: menuClass, children: [
22761
+ /* @__PURE__ */ jsx(RDropdown5.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxs(RDropdown5.Content, { sideOffset: 4, align: "start", className: menuClass, children: [
22294
22762
  /* @__PURE__ */ jsxs(
22295
- RDropdown3.Item,
22763
+ RDropdown5.Item,
22296
22764
  {
22297
22765
  className: menuItemClass,
22298
22766
  onSelect: () => chain()?.toggleBulletList().run(),
@@ -22303,7 +22771,7 @@ function EditorToolbarBar({
22303
22771
  }
22304
22772
  ),
22305
22773
  /* @__PURE__ */ jsxs(
22306
- RDropdown3.Item,
22774
+ RDropdown5.Item,
22307
22775
  {
22308
22776
  className: menuItemClass,
22309
22777
  onSelect: () => chain()?.toggleOrderedList().run(),
@@ -22314,7 +22782,7 @@ function EditorToolbarBar({
22314
22782
  }
22315
22783
  ),
22316
22784
  /* @__PURE__ */ jsxs(
22317
- RDropdown3.Item,
22785
+ RDropdown5.Item,
22318
22786
  {
22319
22787
  className: menuItemClass,
22320
22788
  onSelect: () => chain()?.toggleTaskList().run(),
@@ -22418,17 +22886,17 @@ function EditorToolbarBar({
22418
22886
  );
22419
22887
  case "table":
22420
22888
  return /* @__PURE__ */ jsxs(
22421
- RDropdown3.Root,
22889
+ RDropdown5.Root,
22422
22890
  {
22423
22891
  open: tableOpen,
22424
22892
  onOpenChange: setTableOpen,
22425
22893
  modal: !insideModal,
22426
22894
  children: [
22427
- /* @__PURE__ */ jsx(RDropdown3.Trigger, { asChild: true, disabled: off, children: /* @__PURE__ */ jsxs(ToolbarButton, { label: "\uD45C", active: state2.inTable, disabled: off, className: "px-[6px]", children: [
22895
+ /* @__PURE__ */ jsx(RDropdown5.Trigger, { asChild: true, disabled: off, children: /* @__PURE__ */ jsxs(ToolbarButton, { label: "\uD45C", active: state2.inTable, disabled: off, className: "px-[6px]", children: [
22428
22896
  /* @__PURE__ */ jsx(IconTable, { size: ICON_SIZE }),
22429
22897
  /* @__PURE__ */ jsx(SIcon, { name: "caretDown", size: CARET_SIZE })
22430
22898
  ] }) }),
22431
- /* @__PURE__ */ jsx(RDropdown3.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxs(RDropdown3.Content, { sideOffset: 4, align: "start", className: menuClass, children: [
22899
+ /* @__PURE__ */ jsx(RDropdown5.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxs(RDropdown5.Content, { sideOffset: 4, align: "start", className: menuClass, children: [
22432
22900
  !state2.inTable && /* @__PURE__ */ jsxs(Fragment, { children: [
22433
22901
  /* @__PURE__ */ jsx(
22434
22902
  TableSizePicker,
@@ -22440,7 +22908,7 @@ function EditorToolbarBar({
22440
22908
  }
22441
22909
  }
22442
22910
  ),
22443
- /* @__PURE__ */ jsx(RDropdown3.Separator, { className: menuSeparatorClass })
22911
+ /* @__PURE__ */ jsx(RDropdown5.Separator, { className: menuSeparatorClass })
22444
22912
  ] }),
22445
22913
  /* @__PURE__ */ jsx(
22446
22914
  TableMenuItem,
@@ -22474,7 +22942,7 @@ function EditorToolbarBar({
22474
22942
  onSelect: () => chain()?.addColumnAfter().run()
22475
22943
  }
22476
22944
  ),
22477
- /* @__PURE__ */ jsx(RDropdown3.Separator, { className: menuSeparatorClass }),
22945
+ /* @__PURE__ */ jsx(RDropdown5.Separator, { className: menuSeparatorClass }),
22478
22946
  /* @__PURE__ */ jsx(
22479
22947
  TableMenuItem,
22480
22948
  {
@@ -22507,7 +22975,7 @@ function EditorToolbarBar({
22507
22975
  onSelect: () => chain()?.toggleHeaderColumn().run()
22508
22976
  }
22509
22977
  ),
22510
- /* @__PURE__ */ jsx(RDropdown3.Separator, { className: menuSeparatorClass }),
22978
+ /* @__PURE__ */ jsx(RDropdown5.Separator, { className: menuSeparatorClass }),
22511
22979
  /* @__PURE__ */ jsx(
22512
22980
  TableMenuItem,
22513
22981
  {
@@ -26460,6 +26928,6 @@ function STimeRangePicker({
26460
26928
  );
26461
26929
  }
26462
26930
 
26463
- export { ACCOUNT_LIST_BOX_ICONS, ACCOUNT_LIST_BOX_ITEM_TONES, ACCOUNT_LIST_BOX_LABELS, ACCOUNT_LIST_BOX_LAYOUT, ACCOUNT_LIST_BOX_TONE_CONFIG, BADGE_COLORS, BAR_GAP, BAR_SIZE_MAX, BAR_SIZE_MIN, BUTTON_COLORS, BUTTON_SIZES, CALENDAR_BOARD_DAY_BG, CALENDAR_BOARD_DAY_COLORS, CALENDAR_BOARD_EVENT_COLORS, CALENDAR_BOARD_EVENT_PRESETS, CALENDAR_BOARD_MAX_VISIBLE_EVENTS, CHAT_ATTACHED_FILE_CONFIG, CHAT_FILE_CONFIG, CHAT_MESSAGE_DIRECTIONS, CHAT_MESSAGE_READ_STATUSES, CHAT_MESSAGE_VARIANTS, COLOR_KEYS, FIELD_WIDTH_GRADES, GNB_COLORS, GNB_COMMON, GNB_FOLD_MS, GNB_FULL_LOGO_WIDTH, GNB_HEADER, GNB_MENU, GNB_MENU_WIDTH, GNB_RAIL, GNB_RAIL_WIDTH, GNB_SYSTEM_COLORS, GNB_SYSTEM_COLOR_CONFIG, GNB_SYSTEM_LAYOUT, GNB_SYSTEM_PLACEMENTS, GNB_SYSTEM_TOP_COLOR_CONFIG, ICONS, IMAGE_FITS, LAUNCHER_LIST_BOX_LAYOUT, LAUNCHER_LIST_BOX_LOGO_HEIGHT, LAUNCHER_LIST_BOX_LOGO_SERVICE_GAP, LAUNCHER_LIST_BOX_TRAILING_ICON, LAUNCHER_LIST_BOX_WIDTH, LAUNCHER_SERVICES, LAUNCHER_SERVICE_CATALOG, LOGO_DEFAULT_SIZE, LOGO_NAMES, PAGE_BACKGROUNDS, PAGE_CONTENT_HEIGHTS, PAGE_CONTENT_WIDTHS, PAGE_HEADER_VARIANTS, RangeCalendar, SAccountListBox, SActionModal, SBadge, SBarChart, SBarcodeInput, SButton, SCROLL_AREA_AXES, SCalendar, SCalendarBoard, SCallout, SCard, SChatAttachedFile2 as SChatAttachedFile, SChatFile2 as SChatFile, SChatInput2 as SChatInput, SChatMessage2 as SChatMessage, SChatSystemMessage2 as SChatSystemMessage, SCheckbox, SChip2 as SChip, SChipFilter, SChipInput, SCircleProgress, SConfirmModal, SDatePicker, SDatePickerMonthListbox, SDatePickerYearListbox, SDateRangePicker, SDivider, SDraggableGroup, SDraggableItem2 as SDraggableItem, SDraggableList, SDraggableProvider, SDrawer, SDropdownButton2 as SDropdownButton, SEDITOR_DEFAULT_FONT_SIZE, SEDITOR_HEADING_LABELS, SEDITOR_HEADING_LEVELS, SEditor, SExpansionItem, SExpansionList2 as SExpansionList, SField, SFilePicker, SForm, SGhostButton, SGnb, SGnbSystem, SGnbSystemContext, SGuide, SIcon, SImage, SInput, SKeyValueTable, SLAYOUT_MIN_WIDTH, SLauncherListBox, SLayout, SLayoutContext, SLineChart, SLinearProgress, SList2 as SList, SListItem2 as SListItem, SLoadingContainer, SLoadingModal, SLoadingViewport, SLoginCard2 as SLoginCard, SLogo, SModal, SModalOutlet, SNumberInput, SPage, SPageHeader, SPagination, SPopover, SPopup, SPortal, SRadio, SRadioButton, SRadioCard, SRadioCardGroup, SRadioGroup, SSPLITTER_UNITS, SScrollArea, SSearchInput, SSectionHeaderCard2 as SSectionHeaderCard, SSelect2 as SSelect, SSplitter2 as SSplitter, SStepper, SSwitch, SSystemActionButton, STEPPER_SIZES, STable, STableBar, STabs, STag, STextLink, STextarea, STimePicker, STimeRangePicker, SToast, SToastContainer, SToggle, STooltip2 as STooltip, STree2 as STree, STreeItem2 as STreeItem, SYSTEM_ACTION_BUTTON_COLORS, SYSTEM_ACTION_BUTTON_COLOR_CONFIG, SYSTEM_ACTION_BUTTON_LAYOUT, SYSTEM_ACTION_BUTTON_TYPES, SYSTEM_ACTION_BUTTON_TYPE_CONFIG, TAG_COLORS, TAG_SHAPES, TAG_SIZES, TIMEPICKER_SIZES, TIMEPICKER_SIZE_CONFIG, buttonPreset, cn, fieldWidthValue, fileExtension, findGnbAncestors, findGnbRailValue, formatFileSize, isColorKey, isFieldWidthGrade, loading, normalizeExtension, resolveColor, useSLayout };
26931
+ export { ACCOUNT_LIST_BOX_ICONS, ACCOUNT_LIST_BOX_ITEM_TONES, ACCOUNT_LIST_BOX_LABELS, ACCOUNT_LIST_BOX_LAYOUT, ACCOUNT_LIST_BOX_TONE_CONFIG, BADGE_COLORS, BAR_GAP, BAR_SIZE_MAX, BAR_SIZE_MIN, BUTTON_COLORS, BUTTON_SIZES, CALENDAR_BOARD_DAY_BG, CALENDAR_BOARD_DAY_COLORS, CALENDAR_BOARD_EVENT_COLORS, CALENDAR_BOARD_EVENT_PRESETS, CALENDAR_BOARD_MAX_VISIBLE_EVENTS, CHAT_ATTACHED_FILE_CONFIG, CHAT_FILE_CONFIG, CHAT_MESSAGE_DIRECTIONS, CHAT_MESSAGE_READ_STATUSES, CHAT_MESSAGE_VARIANTS, CHIP_COLORS, COLOR_KEYS, FIELD_WIDTH_GRADES, GNB_COLORS, GNB_COMMON, GNB_FOLD_MS, GNB_FULL_LOGO_WIDTH, GNB_HEADER, GNB_MENU, GNB_MENU_WIDTH, GNB_RAIL, GNB_RAIL_WIDTH, GNB_SYSTEM_COLORS, GNB_SYSTEM_COLOR_CONFIG, GNB_SYSTEM_LAYOUT, GNB_SYSTEM_PLACEMENTS, GNB_SYSTEM_TOP_COLOR_CONFIG, ICONS, IMAGE_FITS, LAUNCHER_LIST_BOX_LAYOUT, LAUNCHER_LIST_BOX_LOGO_HEIGHT, LAUNCHER_LIST_BOX_LOGO_SERVICE_GAP, LAUNCHER_LIST_BOX_TRAILING_ICON, LAUNCHER_LIST_BOX_WIDTH, LAUNCHER_SERVICES, LAUNCHER_SERVICE_CATALOG, LOGO_DEFAULT_SIZE, LOGO_NAMES, PAGE_BACKGROUNDS, PAGE_CONTENT_HEIGHTS, PAGE_CONTENT_WIDTHS, PAGE_HEADER_VARIANTS, RangeCalendar, SAccountListBox, SActionModal, SBadge, SBarChart, SBarcodeInput, SButton, SCROLL_AREA_AXES, SCalendar, SCalendarBoard, SCallout, SCard, SChatAttachedFile2 as SChatAttachedFile, SChatFile2 as SChatFile, SChatInput2 as SChatInput, SChatMessage2 as SChatMessage, SChatSystemMessage2 as SChatSystemMessage, SCheckbox, SChip2 as SChip, SChipFilter, SChipInput, SCircleProgress, SConfirmModal, SDatePicker, SDatePickerMonthListbox, SDatePickerYearListbox, SDateRangePicker, SDivider, SDonutChart, SDraggableGroup, SDraggableItem2 as SDraggableItem, SDraggableList, SDraggableProvider, SDrawer, SDropdownButton2 as SDropdownButton, SEDITOR_DEFAULT_FONT_SIZE, SEDITOR_HEADING_LABELS, SEDITOR_HEADING_LEVELS, SEditor, SExpansionItem, SExpansionList2 as SExpansionList, SField, SFilePicker, SForm, SGhostButton, SGnb, SGnbSystem, SGnbSystemContext, SGuide, SIcon, SImage, SInput, SKeyValueTable, SLAYOUT_MIN_WIDTH, SLauncherListBox, SLayout, SLayoutContext, SLineChart, SLinearProgress, SList2 as SList, SListItem2 as SListItem, SLoadingContainer, SLoadingModal, SLoadingViewport, SLoginCard2 as SLoginCard, SLogo, SMeatballButton2 as SMeatballButton, SModal, SModalOutlet, SNumberInput, SPage, SPageHeader, SPagination, SPieChart, SPopover, SPopup, SPortal, SRadio, SRadioButton, SRadioCard, SRadioCardGroup, SRadioGroup, SSPLITTER_UNITS, SScrollArea, SSearchInput, SSectionHeaderCard2 as SSectionHeaderCard, SSelect2 as SSelect, SSplitter2 as SSplitter, SStepper, SSwitch, SSystemActionButton, STEPPER_SIZES, STable, STableBar, STabs, STag, STextLink, STextarea, STimePicker, STimeRangePicker, SToast, SToastContainer, SToggle, STooltip2 as STooltip, STree2 as STree, STreeItem2 as STreeItem, SYSTEM_ACTION_BUTTON_COLORS, SYSTEM_ACTION_BUTTON_COLOR_CONFIG, SYSTEM_ACTION_BUTTON_LAYOUT, SYSTEM_ACTION_BUTTON_TYPES, SYSTEM_ACTION_BUTTON_TYPE_CONFIG, TAG_COLORS, TAG_SHAPES, TAG_SIZES, TIMEPICKER_SIZES, TIMEPICKER_SIZE_CONFIG, buttonPreset, cn, fieldWidthValue, fileExtension, findGnbAncestors, findGnbRailValue, formatFileSize, isColorKey, isFieldWidthGrade, loading, normalizeExtension, resolveColor, useSLayout };
26464
26932
  //# sourceMappingURL=index.js.map
26465
26933
  //# sourceMappingURL=index.js.map