sellmate-design-system-react 9.0.0-beta.66 → 9.0.0-beta.67

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -5,7 +5,7 @@ var clsx = require('clsx');
5
5
  var tailwindMerge = require('tailwind-merge');
6
6
  var react = require('react');
7
7
  var jsxRuntime = require('react/jsx-runtime');
8
- var RPopover12 = require('@radix-ui/react-popover');
8
+ var RPopover13 = require('@radix-ui/react-popover');
9
9
  var reactDom = require('react-dom');
10
10
  var RCheckbox = require('@radix-ui/react-checkbox');
11
11
  var client = require('react-dom/client');
@@ -33,7 +33,7 @@ function _interopNamespace(e) {
33
33
  return Object.freeze(n);
34
34
  }
35
35
 
36
- var RPopover12__namespace = /*#__PURE__*/_interopNamespace(RPopover12);
36
+ var RPopover13__namespace = /*#__PURE__*/_interopNamespace(RPopover13);
37
37
  var RCheckbox__namespace = /*#__PURE__*/_interopNamespace(RCheckbox);
38
38
  var RTooltip__namespace = /*#__PURE__*/_interopNamespace(RTooltip);
39
39
  var RDropdown5__namespace = /*#__PURE__*/_interopNamespace(RDropdown5);
@@ -3735,6 +3735,57 @@ var SIcon = /* @__PURE__ */ react.forwardRef(function SIcon2({ name, size = 24,
3735
3735
  }
3736
3736
  );
3737
3737
  });
3738
+
3739
+ // src/lib/display-name.ts
3740
+ function withDisplayName(component, name) {
3741
+ component.displayName = name;
3742
+ return component;
3743
+ }
3744
+
3745
+ // src/lib/floating-anim.ts
3746
+ var FLOATING_SLIDE_ANIM = [
3747
+ "data-[state=open]:data-[side=top]:animate-floating-in-top",
3748
+ "data-[state=delayed-open]:data-[side=top]:animate-floating-in-top",
3749
+ "data-[state=instant-open]:data-[side=top]:animate-floating-in-top",
3750
+ "data-[state=closed]:data-[side=top]:animate-floating-out-top",
3751
+ "data-[state=open]:data-[side=bottom]:animate-floating-in-bottom",
3752
+ "data-[state=delayed-open]:data-[side=bottom]:animate-floating-in-bottom",
3753
+ "data-[state=instant-open]:data-[side=bottom]:animate-floating-in-bottom",
3754
+ "data-[state=closed]:data-[side=bottom]:animate-floating-out-bottom",
3755
+ "data-[state=open]:data-[side=left]:animate-floating-in-left",
3756
+ "data-[state=delayed-open]:data-[side=left]:animate-floating-in-left",
3757
+ "data-[state=instant-open]:data-[side=left]:animate-floating-in-left",
3758
+ "data-[state=closed]:data-[side=left]:animate-floating-out-left",
3759
+ "data-[state=open]:data-[side=right]:animate-floating-in-right",
3760
+ "data-[state=delayed-open]:data-[side=right]:animate-floating-in-right",
3761
+ "data-[state=instant-open]:data-[side=right]:animate-floating-in-right",
3762
+ "data-[state=closed]:data-[side=right]:animate-floating-out-right"
3763
+ ].join(" ");
3764
+
3765
+ // src/lib/hover-preview.ts
3766
+ function hoverPreviewOrigin({
3767
+ anchor,
3768
+ size,
3769
+ viewportWidth,
3770
+ viewportHeight,
3771
+ padding = 8
3772
+ }) {
3773
+ const startX = anchor.left + anchor.width / 2;
3774
+ const startY = anchor.top + anchor.height / 2;
3775
+ const x = Math.max(padding, Math.min(startX, viewportWidth - size - padding));
3776
+ const y = Math.max(padding, Math.min(startY, viewportHeight - size - padding));
3777
+ return { x, y };
3778
+ }
3779
+ var PortalContainerContext = /* @__PURE__ */ react.createContext(null);
3780
+ var InsideModalContext = /* @__PURE__ */ react.createContext(false);
3781
+ var PortalContainerProvider = PortalContainerContext.Provider;
3782
+ var InsideModalProvider = InsideModalContext.Provider;
3783
+ function usePortalContainer() {
3784
+ return react.useContext(PortalContainerContext) ?? void 0;
3785
+ }
3786
+ function useInsideModal() {
3787
+ return react.useContext(InsideModalContext);
3788
+ }
3738
3789
  var VIEWBOX = 80;
3739
3790
  var RADIUS = 34;
3740
3791
  var STROKE = 12;
@@ -3852,7 +3903,10 @@ var SCircleProgress = /* @__PURE__ */ react.forwardRef(
3852
3903
  var IMAGE_FITS = ["cover", "contain", "fill", "none", "scale-down"];
3853
3904
  var EMPTY_ICON_SIZE = "60cqh";
3854
3905
  var SPINNER_SIZE = "45cqh";
3855
- var SImage = /* @__PURE__ */ react.forwardRef(function SImage2({
3906
+ var PREVIEW_HIDE_DELAY_MS = 100;
3907
+ var PREVIEW_MAX_SIZE = 200;
3908
+ var PREVIEW_VIEWPORT_PADDING = 8;
3909
+ var SImageImpl = /* @__PURE__ */ react.forwardRef(function SImageImpl2({
3856
3910
  src,
3857
3911
  alt = "",
3858
3912
  ratio = 1,
@@ -3864,6 +3918,9 @@ var SImage = /* @__PURE__ */ react.forwardRef(function SImage2({
3864
3918
  loadingSlot,
3865
3919
  errorSlot,
3866
3920
  imgProps,
3921
+ previewOnHover = false,
3922
+ previewSrc,
3923
+ previewSize = PREVIEW_MAX_SIZE,
3867
3924
  onLoad,
3868
3925
  onError,
3869
3926
  className,
@@ -3894,16 +3951,94 @@ var SImage = /* @__PURE__ */ react.forwardRef(function SImage2({
3894
3951
  const timer = setTimeout(() => setSpinnerVisible(true), loadingShowDelay);
3895
3952
  return () => clearTimeout(timer);
3896
3953
  }, [status, loadingShowDelay, src]);
3954
+ const portalContainer = usePortalContainer();
3955
+ const [previewOpen, setPreviewOpen] = react.useState(false);
3956
+ const previewHideTimer = react.useRef(void 0);
3957
+ const boxRef = react.useRef(null);
3958
+ const previewSource = previewSrc ?? src;
3959
+ const previewEnabled = previewOnHover && !!previewSource;
3960
+ const previewBoxSize = Math.min(previewSize, PREVIEW_MAX_SIZE);
3961
+ const previewBoxSizeRef = react.useRef(previewBoxSize);
3962
+ previewBoxSizeRef.current = previewBoxSize;
3963
+ const previewAnchorRef = react.useRef(null);
3964
+ if (previewAnchorRef.current == null) {
3965
+ previewAnchorRef.current = {
3966
+ getBoundingClientRect: () => {
3967
+ const anchor = boxRef.current?.getBoundingClientRect();
3968
+ if (!anchor) return new DOMRect(0, 0, 0, 0);
3969
+ const { x, y } = hoverPreviewOrigin({
3970
+ anchor,
3971
+ size: previewBoxSizeRef.current,
3972
+ viewportWidth: window.innerWidth,
3973
+ viewportHeight: window.innerHeight,
3974
+ padding: PREVIEW_VIEWPORT_PADDING
3975
+ });
3976
+ return new DOMRect(x, y, 0, 0);
3977
+ },
3978
+ // autoUpdate 가 스크롤 조상을 찾는 기준 — 없으면 표 안에서 스크롤할 때 위치가 굳는다
3979
+ get contextElement() {
3980
+ return boxRef.current ?? void 0;
3981
+ }
3982
+ };
3983
+ }
3984
+ const cancelPreviewHide = react.useCallback(() => {
3985
+ if (previewHideTimer.current) {
3986
+ clearTimeout(previewHideTimer.current);
3987
+ previewHideTimer.current = void 0;
3988
+ }
3989
+ }, []);
3990
+ const openPreview = () => {
3991
+ cancelPreviewHide();
3992
+ setPreviewOpen(true);
3993
+ };
3994
+ const startPreviewHide = () => {
3995
+ cancelPreviewHide();
3996
+ previewHideTimer.current = setTimeout(() => setPreviewOpen(false), PREVIEW_HIDE_DELAY_MS);
3997
+ };
3998
+ react.useEffect(() => {
3999
+ if (!previewEnabled) {
4000
+ cancelPreviewHide();
4001
+ setPreviewOpen(false);
4002
+ }
4003
+ }, [previewEnabled, cancelPreviewHide]);
4004
+ react.useEffect(() => cancelPreviewHide, [cancelPreviewHide]);
4005
+ const previewContentRef = react.useCallback((node) => {
4006
+ node?.parentElement?.style.setProperty("pointer-events", "none");
4007
+ }, []);
4008
+ const previewHandlers = previewEnabled ? {
4009
+ onMouseEnter: (event) => {
4010
+ rest.onMouseEnter?.(event);
4011
+ openPreview();
4012
+ },
4013
+ onMouseLeave: (event) => {
4014
+ rest.onMouseLeave?.(event);
4015
+ startPreviewHide();
4016
+ },
4017
+ // 소비자가 tabIndex 를 준 썸네일에서는 키보드로도 열린다
4018
+ onFocus: (event) => {
4019
+ rest.onFocus?.(event);
4020
+ openPreview();
4021
+ },
4022
+ onBlur: (event) => {
4023
+ rest.onBlur?.(event);
4024
+ startPreviewHide();
4025
+ }
4026
+ } : void 0;
3897
4027
  const isEmpty = !src;
3898
4028
  const showFallback = isEmpty || status === "error";
3899
4029
  const spinnerShown = !isEmpty && status === "loading" && showSpinner && spinnerVisible;
3900
- return /* @__PURE__ */ jsxRuntime.jsxs(
4030
+ const box3 = /* @__PURE__ */ jsxRuntime.jsxs(
3901
4031
  "div",
3902
4032
  {
3903
- ref,
4033
+ ref: (node) => {
4034
+ boxRef.current = node;
4035
+ if (typeof ref === "function") ref(node);
4036
+ else if (ref) ref.current = node;
4037
+ },
3904
4038
  className: cn("relative overflow-hidden bg-(--cmp-image-bg)", className),
3905
4039
  style: { containerType: "size", aspectRatio: ratio, ...style },
3906
4040
  ...rest,
4041
+ ...previewHandlers,
3907
4042
  children: [
3908
4043
  !isEmpty && /* @__PURE__ */ jsxRuntime.jsx(
3909
4044
  "img",
@@ -3939,7 +4074,47 @@ var SImage = /* @__PURE__ */ react.forwardRef(function SImage2({
3939
4074
  ]
3940
4075
  }
3941
4076
  );
4077
+ if (!previewEnabled) return box3;
4078
+ return /* @__PURE__ */ jsxRuntime.jsxs(RPopover13__namespace.Root, { open: previewOpen, onOpenChange: setPreviewOpen, children: [
4079
+ box3,
4080
+ /* @__PURE__ */ jsxRuntime.jsx(RPopover13__namespace.Anchor, { virtualRef: previewAnchorRef }),
4081
+ /* @__PURE__ */ jsxRuntime.jsx(RPopover13__namespace.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxRuntime.jsx(
4082
+ RPopover13__namespace.Content,
4083
+ {
4084
+ ref: previewContentRef,
4085
+ side: "bottom",
4086
+ align: "start",
4087
+ sideOffset: 0,
4088
+ alignOffset: 0,
4089
+ avoidCollisions: false,
4090
+ role: "presentation",
4091
+ "aria-hidden": true,
4092
+ className: cn(
4093
+ "z-50 overflow-hidden rounded-[6px] shadow-normal-sm",
4094
+ // 읽기 전용이라 호버 브릿지를 두지 않는다. 그 대신 마우스를 통과시켜,
4095
+ // 목록 위로 뜬 미리보기가 아래 행의 클릭을 가로채지 않게 한다.
4096
+ // (래퍼 쪽은 previewContentRef 가 함께 끈다 — 둘 다 꺼야 깜빡이지 않는다)
4097
+ "pointer-events-none",
4098
+ FLOATING_SLIDE_ANIM
4099
+ ),
4100
+ onOpenAutoFocus: (event) => event.preventDefault(),
4101
+ onCloseAutoFocus: (event) => event.preventDefault(),
4102
+ children: /* @__PURE__ */ jsxRuntime.jsx(
4103
+ SImage,
4104
+ {
4105
+ src: previewSource,
4106
+ alt: "",
4107
+ ratio: 1,
4108
+ fit: "contain",
4109
+ loading: "eager",
4110
+ style: { width: previewBoxSize }
4111
+ }
4112
+ )
4113
+ }
4114
+ ) })
4115
+ ] });
3942
4116
  });
4117
+ var SImage = /* @__PURE__ */ withDisplayName(SImageImpl, "SImage");
3943
4118
  var BADGE_COLORS = [
3944
4119
  "red",
3945
4120
  "orange",
@@ -4208,42 +4383,6 @@ var SCard = /* @__PURE__ */ react.forwardRef(function SCard2({ bordered = false,
4208
4383
  );
4209
4384
  });
4210
4385
 
4211
- // src/lib/display-name.ts
4212
- function withDisplayName(component, name) {
4213
- component.displayName = name;
4214
- return component;
4215
- }
4216
-
4217
- // src/lib/floating-anim.ts
4218
- var FLOATING_SLIDE_ANIM = [
4219
- "data-[state=open]:data-[side=top]:animate-floating-in-top",
4220
- "data-[state=delayed-open]:data-[side=top]:animate-floating-in-top",
4221
- "data-[state=instant-open]:data-[side=top]:animate-floating-in-top",
4222
- "data-[state=closed]:data-[side=top]:animate-floating-out-top",
4223
- "data-[state=open]:data-[side=bottom]:animate-floating-in-bottom",
4224
- "data-[state=delayed-open]:data-[side=bottom]:animate-floating-in-bottom",
4225
- "data-[state=instant-open]:data-[side=bottom]:animate-floating-in-bottom",
4226
- "data-[state=closed]:data-[side=bottom]:animate-floating-out-bottom",
4227
- "data-[state=open]:data-[side=left]:animate-floating-in-left",
4228
- "data-[state=delayed-open]:data-[side=left]:animate-floating-in-left",
4229
- "data-[state=instant-open]:data-[side=left]:animate-floating-in-left",
4230
- "data-[state=closed]:data-[side=left]:animate-floating-out-left",
4231
- "data-[state=open]:data-[side=right]:animate-floating-in-right",
4232
- "data-[state=delayed-open]:data-[side=right]:animate-floating-in-right",
4233
- "data-[state=instant-open]:data-[side=right]:animate-floating-in-right",
4234
- "data-[state=closed]:data-[side=right]:animate-floating-out-right"
4235
- ].join(" ");
4236
- var PortalContainerContext = /* @__PURE__ */ react.createContext(null);
4237
- var InsideModalContext = /* @__PURE__ */ react.createContext(false);
4238
- var PortalContainerProvider = PortalContainerContext.Provider;
4239
- var InsideModalProvider = InsideModalContext.Provider;
4240
- function usePortalContainer() {
4241
- return react.useContext(PortalContainerContext) ?? void 0;
4242
- }
4243
- function useInsideModal() {
4244
- return react.useContext(InsideModalContext);
4245
- }
4246
-
4247
4386
  // src/components/STag/tag.config.ts
4248
4387
  var TAG_SHAPES = ["square", "pill"];
4249
4388
  var TAG_SIZES = ["xs", "sm", "md"];
@@ -4431,8 +4570,8 @@ var SGhostButton = /* @__PURE__ */ react.forwardRef(function SGhostButton2({
4431
4570
  }
4432
4571
  );
4433
4572
  if (!hasTooltip) return btn2;
4434
- return /* @__PURE__ */ jsxRuntime.jsxs(RPopover12__namespace.Root, { open, onOpenChange: setOpen, children: [
4435
- /* @__PURE__ */ jsxRuntime.jsx(RPopover12__namespace.Anchor, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
4573
+ return /* @__PURE__ */ jsxRuntime.jsxs(RPopover13__namespace.Root, { open, onOpenChange: setOpen, children: [
4574
+ /* @__PURE__ */ jsxRuntime.jsx(RPopover13__namespace.Anchor, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
4436
4575
  "span",
4437
4576
  {
4438
4577
  className: cn("inline-flex", anchorClassName),
@@ -4444,8 +4583,8 @@ var SGhostButton = /* @__PURE__ */ react.forwardRef(function SGhostButton2({
4444
4583
  children: btn2
4445
4584
  }
4446
4585
  ) }),
4447
- /* @__PURE__ */ jsxRuntime.jsx(RPopover12__namespace.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxRuntime.jsx(
4448
- RPopover12__namespace.Content,
4586
+ /* @__PURE__ */ jsxRuntime.jsx(RPopover13__namespace.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxRuntime.jsx(
4587
+ RPopover13__namespace.Content,
4449
4588
  {
4450
4589
  side: "top",
4451
4590
  sideOffset: 4,
@@ -4634,14 +4773,14 @@ var STooltipImpl = /* @__PURE__ */ react.forwardRef(function STooltip({
4634
4773
  ...style,
4635
4774
  ...contentPropsStyle
4636
4775
  };
4637
- return /* @__PURE__ */ jsxRuntime.jsxs(RPopover12__namespace.Root, { open, onOpenChange: setOpenState, children: [
4776
+ return /* @__PURE__ */ jsxRuntime.jsxs(RPopover13__namespace.Root, { open, onOpenChange: setOpenState, children: [
4638
4777
  isNone ? (
4639
4778
  // 트리거 없음: children 을 래퍼 없이 그대로 앵커로 쓴다 (소비자 레이아웃 보존).
4640
4779
  // mouse/focus 핸들러가 없으므로 showClose 없이도 자동 닫힘이 발생하지 않는다.
4641
- /* @__PURE__ */ jsxRuntime.jsx(RPopover12__namespace.Anchor, { asChild: true, children: triggerNode })
4780
+ /* @__PURE__ */ jsxRuntime.jsx(RPopover13__namespace.Anchor, { asChild: true, children: triggerNode })
4642
4781
  ) : isHover ? (
4643
4782
  // hover: Anchor(위치 기준) + 직접 mouse 핸들러 — 클릭으로 토글되지 않도록 Trigger 미사용
4644
- /* @__PURE__ */ jsxRuntime.jsx(RPopover12__namespace.Anchor, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
4783
+ /* @__PURE__ */ jsxRuntime.jsx(RPopover13__namespace.Anchor, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
4645
4784
  "span",
4646
4785
  {
4647
4786
  className: "inline-flex",
@@ -4652,9 +4791,9 @@ var STooltipImpl = /* @__PURE__ */ react.forwardRef(function STooltip({
4652
4791
  children: triggerNode
4653
4792
  }
4654
4793
  ) })
4655
- ) : /* @__PURE__ */ jsxRuntime.jsx(RPopover12__namespace.Trigger, { asChild: true, children: triggerNode }),
4656
- /* @__PURE__ */ jsxRuntime.jsx(RPopover12__namespace.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxRuntime.jsxs(
4657
- RPopover12__namespace.Content,
4794
+ ) : /* @__PURE__ */ jsxRuntime.jsx(RPopover13__namespace.Trigger, { asChild: true, children: triggerNode }),
4795
+ /* @__PURE__ */ jsxRuntime.jsx(RPopover13__namespace.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxRuntime.jsxs(
4796
+ RPopover13__namespace.Content,
4658
4797
  {
4659
4798
  side: placement,
4660
4799
  sideOffset,
@@ -4688,7 +4827,7 @@ var STooltipImpl = /* @__PURE__ */ react.forwardRef(function STooltip({
4688
4827
  }
4689
4828
  )
4690
4829
  ] }),
4691
- /* @__PURE__ */ jsxRuntime.jsx(RPopover12__namespace.Arrow, { width: 16, height: 12, style: { fill: bg } })
4830
+ /* @__PURE__ */ jsxRuntime.jsx(RPopover13__namespace.Arrow, { width: 16, height: 12, style: { fill: bg } })
4692
4831
  ]
4693
4832
  }
4694
4833
  ) })
@@ -8337,12 +8476,18 @@ var release = (id) => {
8337
8476
  entries = next;
8338
8477
  sync();
8339
8478
  };
8479
+ var updateEntry = (id, message) => {
8480
+ const index = entries.findIndex((e) => e.id === id);
8481
+ if (index === -1) return;
8482
+ entries = entries.map((e, i) => i === index ? { ...e, message } : e);
8483
+ sync();
8484
+ };
8340
8485
  var subscribe = (cb) => {
8341
8486
  listeners.add(cb);
8342
8487
  return () => listeners.delete(cb);
8343
8488
  };
8344
8489
  var getSnapshot = () => state;
8345
- function SLoadingViewport() {
8490
+ function LoadingViewport() {
8346
8491
  const s = react.useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
8347
8492
  return /* @__PURE__ */ jsxRuntime.jsx(SLoadingContainer, { open: s.open, message: s.message });
8348
8493
  }
@@ -8353,39 +8498,56 @@ function ensureMounted() {
8353
8498
  const host = document.createElement("div");
8354
8499
  host.setAttribute("data-sd-loading-root", "");
8355
8500
  document.body.appendChild(host);
8356
- client.createRoot(host).render(/* @__PURE__ */ jsxRuntime.jsx(SLoadingViewport, {}));
8501
+ client.createRoot(host).render(/* @__PURE__ */ jsxRuntime.jsx(LoadingViewport, {}));
8502
+ }
8503
+ function showEntry(options = {}) {
8504
+ ensureMounted();
8505
+ const id = ++seq;
8506
+ entries = [...entries, { id, message: options.message }];
8507
+ sync();
8508
+ let released = false;
8509
+ const handle = (() => {
8510
+ if (released) return;
8511
+ released = true;
8512
+ release(id);
8513
+ });
8514
+ handle.update = (next) => {
8515
+ if (released) return;
8516
+ updateEntry(id, next.message);
8517
+ };
8518
+ return handle;
8357
8519
  }
8358
8520
  var loading = {
8359
8521
  /**
8360
8522
  * 로딩 오버레이 표시. 겹쳐 부르면 그만큼 쌓이고 **마지막 하나가 걷힐 때** 닫힌다.
8361
- * 반환값은 이 호출 하나만 걷는 함수다(두 번 불러도 한 번만 걷힌다) — `hide()` 대신 이것을
8362
- * 쓰면 짝이 어긋나지 않는다.
8523
+ * 반환값은 이 호출 하나를 걷고 갱신하는 핸들이다(두 번 걷어도 한 번만 걷힌다).
8524
+ *
8525
+ * **걷는 것은 `finally` 에 둔다.** 빠뜨리면 그 즉시 화면이 갇히고, 정상 경로에서는 아무
8526
+ * 표시가 없다.
8363
8527
  *
8364
- * ⚠️ 메시지만 바꾸려면 `update()` 를 쓴다. `show()` 를 다시 부르면 하나 더 쌓여
8365
- * `hide()` 한 번으로는 닫히지 않는다.
8528
+ * ```ts
8529
+ * const done = loading.show({ message: '1/2 ...' });
8530
+ * try {
8531
+ * done.update({ message: '2/2 ...' }); // 이 호출의 메시지만 바뀐다
8532
+ * await api.submit(payload);
8533
+ * } finally {
8534
+ * done(); // 이 호출만 걷는다
8535
+ * }
8536
+ * ```
8537
+ *
8538
+ * ⚠️ **메시지를 바꾸려고 `show()` 를 다시 부르지 않는다.** 하나 더 쌓여 한 번 걷는 것으로는
8539
+ * 닫히지 않는다. 핸들의 `update()` 를 쓴다. (참조 카운트 이전에는 `show()` 를 다시 부르는
8540
+ * 것이 갱신이었다 — Quasar 도 같은 그룹에 다시 show 하면 갱신이다. 그 시절 관행대로 쓰인
8541
+ * 코드는 지금 오버레이를 하나 남긴다.)
8366
8542
  */
8367
8543
  show(options = {}) {
8368
- ensureMounted();
8369
- const id = ++seq;
8370
- entries = [...entries, { id, message: options.message }];
8371
- sync();
8372
- return () => release(id);
8373
- },
8374
- /** 표시 중인 메시지 갱신 — 쌓인 수는 그대로다 */
8375
- update(options) {
8376
- const top = entries[entries.length - 1];
8377
- if (!top) return;
8378
- entries = [...entries.slice(0, -1), { ...top, message: options.message }];
8379
- sync();
8380
- },
8381
- /** 가장 나중의 show 하나를 걷는다. 남은 것이 없을 때만 오버레이가 닫힌다 */
8382
- hide() {
8383
- const top = entries[entries.length - 1];
8384
- if (top) release(top.id);
8544
+ return showEntry(options);
8385
8545
  },
8386
8546
  /**
8387
- * 쌓인 것을 모두 걷고 즉시 닫는다. 화면 전환·에러 복구처럼 진행 중이던 작업의 짝을 더는
8388
- * 맞출 수 없을 때만 쓴다 — 평소에는 `hide()` 나 `show()` 가 준 함수로 하나씩 걷는다.
8547
+ * 쌓인 것을 모두 걷고 즉시 닫는다. **원본(Quasar)의 인자 없는 `hide()` 가 이것이다.**
8548
+ * 화면 전환·에러 복구처럼 진행 중이던 작업의 짝을 더는 맞출 수 없을 때만 쓴다 — 평소에는
8549
+ * `show()` 가 준 핸들로 걷는다.
8550
+ * 이걸로 걷힌 항목의 주인이 뒤늦게 자기 핸들을 불러도 아무 일도 일어나지 않는다.
8389
8551
  */
8390
8552
  hideAll() {
8391
8553
  if (entries.length === 0) return;
@@ -8907,7 +9069,7 @@ function SPortal({
8907
9069
  const portalContainer = usePortalContainer();
8908
9070
  const { minWidth: styleMinWidth, maxWidth: styleMaxWidth, ...restStyle } = style ?? {};
8909
9071
  return /* @__PURE__ */ jsxRuntime.jsxs(
8910
- RPopover12__namespace.Root,
9072
+ RPopover13__namespace.Root,
8911
9073
  {
8912
9074
  open,
8913
9075
  onOpenChange: (next) => {
@@ -8915,9 +9077,9 @@ function SPortal({
8915
9077
  if (!next) onClose?.();
8916
9078
  },
8917
9079
  children: [
8918
- /* @__PURE__ */ jsxRuntime.jsx(RPopover12__namespace.Anchor, { virtualRef: anchorRef }),
8919
- /* @__PURE__ */ jsxRuntime.jsx(RPopover12__namespace.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxRuntime.jsx(
8920
- RPopover12__namespace.Content,
9080
+ /* @__PURE__ */ jsxRuntime.jsx(RPopover13__namespace.Anchor, { virtualRef: anchorRef }),
9081
+ /* @__PURE__ */ jsxRuntime.jsx(RPopover13__namespace.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxRuntime.jsx(
9082
+ RPopover13__namespace.Content,
8921
9083
  {
8922
9084
  side: placement,
8923
9085
  align,
@@ -9668,10 +9830,10 @@ function SPopover({
9668
9830
  const descColor = type === "default" ? "var(--cmp-popover-default-description)" : "var(--cmp-popover-light-description)";
9669
9831
  const leftLinkLabelClass = type === "default" ? "text-[color:var(--cmp-popover-default-subAction)]" : "text-[color:var(--cmp-popover-light-subAction)]";
9670
9832
  const triggerNode = trigger ?? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "inline-flex cursor-pointer", "aria-label": ariaLabel, children: /* @__PURE__ */ jsxRuntime.jsx(SIcon, { name: icon, size: iconSize, color }) });
9671
- return /* @__PURE__ */ jsxRuntime.jsxs(RPopover12__namespace.Root, { open: actualOpen, onOpenChange: setOpen, children: [
9672
- /* @__PURE__ */ jsxRuntime.jsx(RPopover12__namespace.Trigger, { asChild: true, children: triggerNode }),
9673
- /* @__PURE__ */ jsxRuntime.jsx(RPopover12__namespace.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxRuntime.jsxs(
9674
- RPopover12__namespace.Content,
9833
+ return /* @__PURE__ */ jsxRuntime.jsxs(RPopover13__namespace.Root, { open: actualOpen, onOpenChange: setOpen, children: [
9834
+ /* @__PURE__ */ jsxRuntime.jsx(RPopover13__namespace.Trigger, { asChild: true, children: triggerNode }),
9835
+ /* @__PURE__ */ jsxRuntime.jsx(RPopover13__namespace.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxRuntime.jsxs(
9836
+ RPopover13__namespace.Content,
9675
9837
  {
9676
9838
  side: placement,
9677
9839
  sideOffset: 8,
@@ -9737,7 +9899,7 @@ function SPopover({
9737
9899
  ]
9738
9900
  }
9739
9901
  ),
9740
- /* @__PURE__ */ jsxRuntime.jsx(RPopover12__namespace.Arrow, { width: 16, height: 12, style: { fill: bg } })
9902
+ /* @__PURE__ */ jsxRuntime.jsx(RPopover13__namespace.Arrow, { width: 16, height: 12, style: { fill: bg } })
9741
9903
  ]
9742
9904
  }
9743
9905
  ) })
@@ -9855,10 +10017,10 @@ function SGuide({
9855
10017
  );
9856
10018
  if (isNotion)
9857
10019
  return /* @__PURE__ */ jsxRuntime.jsx("span", { className, style, children: trigger });
9858
- return /* @__PURE__ */ jsxRuntime.jsxs(RPopover12__namespace.Root, { open, onOpenChange: setOpen, children: [
9859
- /* @__PURE__ */ jsxRuntime.jsx(RPopover12__namespace.Trigger, { asChild: true, children: trigger }),
9860
- /* @__PURE__ */ jsxRuntime.jsx(RPopover12__namespace.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxRuntime.jsxs(
9861
- RPopover12__namespace.Content,
10020
+ return /* @__PURE__ */ jsxRuntime.jsxs(RPopover13__namespace.Root, { open, onOpenChange: setOpen, children: [
10021
+ /* @__PURE__ */ jsxRuntime.jsx(RPopover13__namespace.Trigger, { asChild: true, children: trigger }),
10022
+ /* @__PURE__ */ jsxRuntime.jsx(RPopover13__namespace.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxRuntime.jsxs(
10023
+ RPopover13__namespace.Content,
9862
10024
  {
9863
10025
  side: "bottom",
9864
10026
  align: "start",
@@ -12351,10 +12513,10 @@ var SGnb = /* @__PURE__ */ react.forwardRef(function SGnb2({
12351
12513
  ),
12352
12514
  header === "fix" && menuResizeHandle,
12353
12515
  launcherListBox,
12354
- /* @__PURE__ */ jsxRuntime.jsxs(RPopover12__namespace.Root, { open: labelTip !== null, onOpenChange: (open) => !open && setLabelTip(null), children: [
12355
- /* @__PURE__ */ jsxRuntime.jsx(RPopover12__namespace.Anchor, { virtualRef: labelTipAnchorRef }),
12356
- /* @__PURE__ */ jsxRuntime.jsx(RPopover12__namespace.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxRuntime.jsx(
12357
- RPopover12__namespace.Content,
12516
+ /* @__PURE__ */ jsxRuntime.jsxs(RPopover13__namespace.Root, { open: labelTip !== null, onOpenChange: (open) => !open && setLabelTip(null), children: [
12517
+ /* @__PURE__ */ jsxRuntime.jsx(RPopover13__namespace.Anchor, { virtualRef: labelTipAnchorRef }),
12518
+ /* @__PURE__ */ jsxRuntime.jsx(RPopover13__namespace.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxRuntime.jsx(
12519
+ RPopover13__namespace.Content,
12358
12520
  {
12359
12521
  side: "right",
12360
12522
  sideOffset: 4,
@@ -14449,7 +14611,7 @@ function SCalendarBoard({
14449
14611
  }
14450
14612
  ),
14451
14613
  /* @__PURE__ */ jsxRuntime.jsxs(
14452
- RPopover12__namespace.Root,
14614
+ RPopover13__namespace.Root,
14453
14615
  {
14454
14616
  open: openDate !== null,
14455
14617
  onOpenChange: (open) => {
@@ -14493,12 +14655,12 @@ function SCalendarBoard({
14493
14655
  },
14494
14656
  cell.date
14495
14657
  );
14496
- return cell.date === openDate ? /* @__PURE__ */ jsxRuntime.jsx(RPopover12__namespace.Anchor, { asChild: true, children: card }, cell.date) : card;
14658
+ return cell.date === openDate ? /* @__PURE__ */ jsxRuntime.jsx(RPopover13__namespace.Anchor, { asChild: true, children: card }, cell.date) : card;
14497
14659
  })
14498
14660
  }
14499
14661
  ),
14500
- /* @__PURE__ */ jsxRuntime.jsx(RPopover12__namespace.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxRuntime.jsx(
14501
- RPopover12__namespace.Content,
14662
+ /* @__PURE__ */ jsxRuntime.jsx(RPopover13__namespace.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxRuntime.jsx(
14663
+ RPopover13__namespace.Content,
14502
14664
  {
14503
14665
  onInteractOutside: (e) => {
14504
14666
  const target = e.detail.originalEvent.target;
@@ -17001,10 +17163,10 @@ function useTruncatedValueTooltip({
17001
17163
  valueRef: elRef,
17002
17164
  onMouseEnter: active ? onMouseEnter : cancelHide,
17003
17165
  onMouseLeave: active ? startHide : cancelHide,
17004
- tooltip: active ? /* @__PURE__ */ jsxRuntime.jsxs(RPopover12__namespace.Root, { open, onOpenChange: setOpen, children: [
17005
- /* @__PURE__ */ jsxRuntime.jsx(RPopover12__namespace.Anchor, { virtualRef: elRef }),
17006
- /* @__PURE__ */ jsxRuntime.jsx(RPopover12__namespace.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxRuntime.jsx(
17007
- RPopover12__namespace.Content,
17166
+ tooltip: active ? /* @__PURE__ */ jsxRuntime.jsxs(RPopover13__namespace.Root, { open, onOpenChange: setOpen, children: [
17167
+ /* @__PURE__ */ jsxRuntime.jsx(RPopover13__namespace.Anchor, { virtualRef: elRef }),
17168
+ /* @__PURE__ */ jsxRuntime.jsx(RPopover13__namespace.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxRuntime.jsx(
17169
+ RPopover13__namespace.Content,
17008
17170
  {
17009
17171
  side: "top",
17010
17172
  sideOffset: 4,
@@ -18258,8 +18420,8 @@ function SDatePicker({
18258
18420
  disabled,
18259
18421
  className,
18260
18422
  style,
18261
- children: /* @__PURE__ */ jsxRuntime.jsxs(RPopover12__namespace.Root, { open, onOpenChange: (o) => !disabled && setOpen(o), children: [
18262
- /* @__PURE__ */ jsxRuntime.jsx(RPopover12__namespace.Trigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs(
18423
+ children: /* @__PURE__ */ jsxRuntime.jsxs(RPopover13__namespace.Root, { open, onOpenChange: (o) => !disabled && setOpen(o), children: [
18424
+ /* @__PURE__ */ jsxRuntime.jsx(RPopover13__namespace.Trigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs(
18263
18425
  "div",
18264
18426
  {
18265
18427
  role: "button",
@@ -18318,8 +18480,8 @@ function SDatePicker({
18318
18480
  ]
18319
18481
  }
18320
18482
  ) }),
18321
- /* @__PURE__ */ jsxRuntime.jsx(RPopover12__namespace.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxRuntime.jsx(
18322
- RPopover12__namespace.Content,
18483
+ /* @__PURE__ */ jsxRuntime.jsx(RPopover13__namespace.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxRuntime.jsx(
18484
+ RPopover13__namespace.Content,
18323
18485
  {
18324
18486
  side: "bottom",
18325
18487
  align: mode === "date" ? "start" : "center",
@@ -18795,7 +18957,7 @@ function SDateRangePicker({
18795
18957
  className,
18796
18958
  style,
18797
18959
  children: /* @__PURE__ */ jsxRuntime.jsxs(
18798
- RPopover12__namespace.Root,
18960
+ RPopover13__namespace.Root,
18799
18961
  {
18800
18962
  open,
18801
18963
  onOpenChange: (o) => {
@@ -18804,7 +18966,7 @@ function SDateRangePicker({
18804
18966
  if (!o) setPendingStart(null);
18805
18967
  },
18806
18968
  children: [
18807
- /* @__PURE__ */ jsxRuntime.jsx(RPopover12__namespace.Trigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs(
18969
+ /* @__PURE__ */ jsxRuntime.jsx(RPopover13__namespace.Trigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs(
18808
18970
  "div",
18809
18971
  {
18810
18972
  role: "button",
@@ -18868,8 +19030,8 @@ function SDateRangePicker({
18868
19030
  ]
18869
19031
  }
18870
19032
  ) }),
18871
- /* @__PURE__ */ jsxRuntime.jsx(RPopover12__namespace.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxRuntime.jsx(
18872
- RPopover12__namespace.Content,
19033
+ /* @__PURE__ */ jsxRuntime.jsx(RPopover13__namespace.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxRuntime.jsx(
19034
+ RPopover13__namespace.Content,
18873
19035
  {
18874
19036
  side: "bottom",
18875
19037
  align: "start",
@@ -19636,6 +19798,10 @@ var ChartFrame = /* @__PURE__ */ react.forwardRef(function ChartFrame2({ title,
19636
19798
  }
19637
19799
  );
19638
19800
  });
19801
+
19802
+ // src/lib/chart/hover-dim.ts
19803
+ var CHART_DIM_OPACITY_TRANSITION = "transition-opacity duration-200 ease-out motion-reduce:transition-none";
19804
+ var CHART_DIM_COLOR_TRANSITION = "transition-colors duration-200 ease-out motion-reduce:transition-none";
19639
19805
  var DOT_SIZE = 6;
19640
19806
  function ChartLegend({
19641
19807
  items,
@@ -19668,7 +19834,7 @@ function ChartLegend({
19668
19834
  "flex items-center gap-(--cmp-chart-legendItem-gap)",
19669
19835
  "py-(--cmp-chart-legendItem-paddingY)",
19670
19836
  "typo-body-sm-medium text-(--cmp-chart-legendItem-color)",
19671
- "transition-opacity duration-200 ease-out motion-reduce:transition-none",
19837
+ CHART_DIM_OPACITY_TRANSITION,
19672
19838
  activeIndex != null && activeIndex !== index && "opacity-(--opacity-060)"
19673
19839
  ),
19674
19840
  children: [
@@ -19699,7 +19865,7 @@ function ChartLegend({
19699
19865
  "flex items-center gap-(--cmp-chart-legendItem-gap)",
19700
19866
  "py-(--cmp-chart-legendItem-paddingY)",
19701
19867
  "typo-body-sm-medium text-(--cmp-chart-legendItem-color)",
19702
- "transition-opacity duration-200 ease-out motion-reduce:transition-none",
19868
+ CHART_DIM_OPACITY_TRANSITION,
19703
19869
  activeIndex != null && activeIndex !== index && "opacity-(--opacity-060)"
19704
19870
  ),
19705
19871
  children: [
@@ -19928,7 +20094,6 @@ var BAR_OPACITY_HOVER = 1;
19928
20094
  var BAR_DATA_LABEL_COLOR = "var(--cmp-chart-dataLabel-color-default)";
19929
20095
  var BAR_DATA_LABEL_TYPO = "typo-body-sm-medium";
19930
20096
  var BAR_DATA_LABEL_TYPO_HOVER = "typo-body-md-bold";
19931
- var BAR_HOVER_TRANSITION = "transition-opacity duration-200 ease-out motion-reduce:transition-none";
19932
20097
  function bandLayout(size, categoryCount, seriesCount, barSizeMax = BAR_SIZE_MAX) {
19933
20098
  const categories = Math.max(1, categoryCount);
19934
20099
  const series = Math.max(1, seriesCount);
@@ -20195,7 +20360,7 @@ var SBarChart = /* @__PURE__ */ react.forwardRef(function SBarChart2({
20195
20360
  "path",
20196
20361
  {
20197
20362
  d: barPath(x, y, width, barHeight, direction, negative),
20198
- className: BAR_HOVER_TRANSITION,
20363
+ className: CHART_DIM_OPACITY_TRANSITION,
20199
20364
  style: {
20200
20365
  fill: colorAt(seriesIndex, categoryIndex),
20201
20366
  opacity,
@@ -20212,7 +20377,7 @@ var SBarChart = /* @__PURE__ */ react.forwardRef(function SBarChart2({
20212
20377
  y: labelY,
20213
20378
  className: cn(
20214
20379
  hoveredCategory === categoryIndex ? BAR_DATA_LABEL_TYPO_HOVER : BAR_DATA_LABEL_TYPO,
20215
- BAR_HOVER_TRANSITION
20380
+ CHART_DIM_OPACITY_TRANSITION
20216
20381
  ),
20217
20382
  style: {
20218
20383
  fill: BAR_DATA_LABEL_COLOR,
@@ -20293,7 +20458,7 @@ var SBarChart = /* @__PURE__ */ react.forwardRef(function SBarChart2({
20293
20458
  width: box3.width,
20294
20459
  height: box3.height,
20295
20460
  clipPath: `url(#${segment.value < 0 ? negativeClip : positiveClip})`,
20296
- className: BAR_HOVER_TRANSITION,
20461
+ className: CHART_DIM_OPACITY_TRANSITION,
20297
20462
  style: {
20298
20463
  // 조각과 라벨에 따로 건다 — 묶음(<g>)에 걸면 호버가 없을 때의
20299
20464
  // 기본 흐림까지 합계 라벨에 묻어 숫자가 늘 옅어진다.
@@ -20318,7 +20483,7 @@ var SBarChart = /* @__PURE__ */ react.forwardRef(function SBarChart2({
20318
20483
  y: labelY,
20319
20484
  className: cn(
20320
20485
  hoveredCategory === categoryIndex ? BAR_DATA_LABEL_TYPO_HOVER : BAR_DATA_LABEL_TYPO,
20321
- BAR_HOVER_TRANSITION
20486
+ CHART_DIM_OPACITY_TRANSITION
20322
20487
  ),
20323
20488
  style: {
20324
20489
  fill: BAR_DATA_LABEL_COLOR,
@@ -20841,6 +21006,7 @@ var SLineChart = /* @__PURE__ */ react.forwardRef(function SLineChart2({
20841
21006
  cx: point.x,
20842
21007
  cy: point.y,
20843
21008
  r: hovered ? POINT_HOVER_RADIUS : POINT_RADIUS,
21009
+ className: CHART_DIM_COLOR_TRANSITION,
20844
21010
  style: {
20845
21011
  fill: dimmed ? dimmedColorAt(seriesIndex) : color,
20846
21012
  cursor: onPointClick ? "pointer" : void 0
@@ -21195,7 +21361,7 @@ var RadialChart = /* @__PURE__ */ react.forwardRef(function RadialChart2({
21195
21361
  {
21196
21362
  d: slice(arc2),
21197
21363
  fillRule: "evenodd",
21198
- className: "transition-opacity duration-200 ease-out motion-reduce:transition-none",
21364
+ className: CHART_DIM_OPACITY_TRANSITION,
21199
21365
  style: {
21200
21366
  fill: arc2.color,
21201
21367
  opacity,
@@ -21228,7 +21394,10 @@ var RadialChart = /* @__PURE__ */ react.forwardRef(function RadialChart2({
21228
21394
  y: point.y,
21229
21395
  textAnchor: "middle",
21230
21396
  dominantBaseline: "central",
21231
- className: "pointer-events-none typo-body-sm-bold transition-opacity duration-200 ease-out motion-reduce:transition-none",
21397
+ className: cn(
21398
+ "pointer-events-none typo-body-sm-bold",
21399
+ CHART_DIM_OPACITY_TRANSITION
21400
+ ),
21232
21401
  style: {
21233
21402
  fill: "var(--sys-color-fg-inverse)",
21234
21403
  opacity: hovered != null && hovered !== arc2.index ? OPACITY_DIMMED : void 0
@@ -23245,10 +23414,10 @@ function EditorToolbarBar({
23245
23414
  },
23246
23415
  item4
23247
23416
  );
23248
- return /* @__PURE__ */ jsxRuntime.jsxs(RPopover12__namespace.Root, { open: linkOpen, onOpenChange: setLinkOpen, children: [
23249
- /* @__PURE__ */ jsxRuntime.jsx(RPopover12__namespace.Trigger, { asChild: true, disabled: off, children: /* @__PURE__ */ jsxRuntime.jsx(ToolbarButton, { label: "\uB9C1\uD06C", active: state2.link, disabled: off, children: /* @__PURE__ */ jsxRuntime.jsx(IconLink, { size: ICON_SIZE }) }) }),
23250
- /* @__PURE__ */ jsxRuntime.jsx(RPopover12__namespace.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxRuntime.jsx(
23251
- RPopover12__namespace.Content,
23417
+ return /* @__PURE__ */ jsxRuntime.jsxs(RPopover13__namespace.Root, { open: linkOpen, onOpenChange: setLinkOpen, children: [
23418
+ /* @__PURE__ */ jsxRuntime.jsx(RPopover13__namespace.Trigger, { asChild: true, disabled: off, children: /* @__PURE__ */ jsxRuntime.jsx(ToolbarButton, { label: "\uB9C1\uD06C", active: state2.link, disabled: off, children: /* @__PURE__ */ jsxRuntime.jsx(IconLink, { size: ICON_SIZE }) }) }),
23419
+ /* @__PURE__ */ jsxRuntime.jsx(RPopover13__namespace.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxRuntime.jsx(
23420
+ RPopover13__namespace.Content,
23252
23421
  {
23253
23422
  sideOffset: 4,
23254
23423
  align: "start",
@@ -24641,8 +24810,8 @@ var SChipFilter = /* @__PURE__ */ react.forwardRef(function SChipFilter2({
24641
24810
  })(),
24642
24811
  hasRightActions && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
24643
24812
  /* @__PURE__ */ jsxRuntime.jsx(Divider, { inset: true }),
24644
- hasAddButton && /* @__PURE__ */ jsxRuntime.jsxs(RPopover12__namespace.Root, { open: addOpen, onOpenChange: setAddOpen, children: [
24645
- /* @__PURE__ */ jsxRuntime.jsx(RPopover12__namespace.Trigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs(
24813
+ hasAddButton && /* @__PURE__ */ jsxRuntime.jsxs(RPopover13__namespace.Root, { open: addOpen, onOpenChange: setAddOpen, children: [
24814
+ /* @__PURE__ */ jsxRuntime.jsx(RPopover13__namespace.Trigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs(
24646
24815
  "button",
24647
24816
  {
24648
24817
  type: "button",
@@ -24667,8 +24836,8 @@ var SChipFilter = /* @__PURE__ */ react.forwardRef(function SChipFilter2({
24667
24836
  ]
24668
24837
  }
24669
24838
  ) }),
24670
- /* @__PURE__ */ jsxRuntime.jsx(RPopover12__namespace.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxRuntime.jsx(
24671
- RPopover12__namespace.Content,
24839
+ /* @__PURE__ */ jsxRuntime.jsx(RPopover13__namespace.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxRuntime.jsx(
24840
+ RPopover13__namespace.Content,
24672
24841
  {
24673
24842
  side: "bottom",
24674
24843
  align: "start",
@@ -24703,17 +24872,17 @@ var SChipFilter = /* @__PURE__ */ react.forwardRef(function SChipFilter2({
24703
24872
  )
24704
24873
  ] })
24705
24874
  ] }),
24706
- /* @__PURE__ */ jsxRuntime.jsxs(RPopover12__namespace.Root, { open: openKey != null, onOpenChange: (next) => !next && setOpenKey(null), children: [
24875
+ /* @__PURE__ */ jsxRuntime.jsxs(RPopover13__namespace.Root, { open: openKey != null, onOpenChange: (next) => !next && setOpenKey(null), children: [
24707
24876
  /* @__PURE__ */ jsxRuntime.jsx(
24708
- RPopover12__namespace.Anchor,
24877
+ RPopover13__namespace.Anchor,
24709
24878
  {
24710
24879
  virtualRef: {
24711
24880
  current: openKey ? triggerRefs.current.get(openKey) : null
24712
24881
  }
24713
24882
  }
24714
24883
  ),
24715
- /* @__PURE__ */ jsxRuntime.jsx(RPopover12__namespace.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxRuntime.jsx(
24716
- RPopover12__namespace.Content,
24884
+ /* @__PURE__ */ jsxRuntime.jsx(RPopover13__namespace.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxRuntime.jsx(
24885
+ RPopover13__namespace.Content,
24717
24886
  {
24718
24887
  side: "bottom",
24719
24888
  align: "start",
@@ -25306,8 +25475,8 @@ function InlineDatePresetFilter({
25306
25475
  applied && (rangeValue ? (
25307
25476
  // 뱃지 모양은 그대로 두고, 눌렀을 때 캘린더가 열려 기간을 직접 다시 고를 수 있게 한다.
25308
25477
  // 직접 고르면 프리셋 선택은 해제된다.
25309
- /* @__PURE__ */ jsxRuntime.jsxs(RPopover12__namespace.Root, { open: pickerOpen, onOpenChange: setPickerOpen, children: [
25310
- /* @__PURE__ */ jsxRuntime.jsx(RPopover12__namespace.Trigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
25478
+ /* @__PURE__ */ jsxRuntime.jsxs(RPopover13__namespace.Root, { open: pickerOpen, onOpenChange: setPickerOpen, children: [
25479
+ /* @__PURE__ */ jsxRuntime.jsx(RPopover13__namespace.Trigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
25311
25480
  "button",
25312
25481
  {
25313
25482
  type: "button",
@@ -25316,8 +25485,8 @@ function InlineDatePresetFilter({
25316
25485
  children: badge
25317
25486
  }
25318
25487
  ) }),
25319
- /* @__PURE__ */ jsxRuntime.jsx(RPopover12__namespace.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxRuntime.jsx(
25320
- RPopover12__namespace.Content,
25488
+ /* @__PURE__ */ jsxRuntime.jsx(RPopover13__namespace.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxRuntime.jsx(
25489
+ RPopover13__namespace.Content,
25321
25490
  {
25322
25491
  side: "bottom",
25323
25492
  align: "start",
@@ -26779,8 +26948,8 @@ function STimePicker({
26779
26948
  disabled,
26780
26949
  className,
26781
26950
  style,
26782
- children: /* @__PURE__ */ jsxRuntime.jsxs(RPopover12__namespace.Root, { open, onOpenChange: commitOpen, children: [
26783
- /* @__PURE__ */ jsxRuntime.jsx(RPopover12__namespace.Trigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs(
26951
+ children: /* @__PURE__ */ jsxRuntime.jsxs(RPopover13__namespace.Root, { open, onOpenChange: commitOpen, children: [
26952
+ /* @__PURE__ */ jsxRuntime.jsx(RPopover13__namespace.Trigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs(
26784
26953
  "div",
26785
26954
  {
26786
26955
  ref: triggerRef,
@@ -26840,8 +27009,8 @@ function STimePicker({
26840
27009
  ]
26841
27010
  }
26842
27011
  ) }),
26843
- /* @__PURE__ */ jsxRuntime.jsx(RPopover12__namespace.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxRuntime.jsx(
26844
- RPopover12__namespace.Content,
27012
+ /* @__PURE__ */ jsxRuntime.jsx(RPopover13__namespace.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxRuntime.jsx(
27013
+ RPopover13__namespace.Content,
26845
27014
  {
26846
27015
  side: "bottom",
26847
27016
  align: "start",
@@ -27249,8 +27418,8 @@ function STimeRangePicker({
27249
27418
  disabled,
27250
27419
  className,
27251
27420
  style,
27252
- children: /* @__PURE__ */ jsxRuntime.jsxs(RPopover12__namespace.Root, { open, onOpenChange: commitOpen, children: [
27253
- /* @__PURE__ */ jsxRuntime.jsx(RPopover12__namespace.Trigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs(
27421
+ children: /* @__PURE__ */ jsxRuntime.jsxs(RPopover13__namespace.Root, { open, onOpenChange: commitOpen, children: [
27422
+ /* @__PURE__ */ jsxRuntime.jsx(RPopover13__namespace.Trigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs(
27254
27423
  "div",
27255
27424
  {
27256
27425
  ref: triggerRef,
@@ -27310,8 +27479,8 @@ function STimeRangePicker({
27310
27479
  ]
27311
27480
  }
27312
27481
  ) }),
27313
- /* @__PURE__ */ jsxRuntime.jsx(RPopover12__namespace.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxRuntime.jsx(
27314
- RPopover12__namespace.Content,
27482
+ /* @__PURE__ */ jsxRuntime.jsx(RPopover13__namespace.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxRuntime.jsx(
27483
+ RPopover13__namespace.Content,
27315
27484
  {
27316
27485
  side: "bottom",
27317
27486
  align: "start",
@@ -27460,7 +27629,6 @@ exports.SList = SList2;
27460
27629
  exports.SListItem = SListItem2;
27461
27630
  exports.SLoadingContainer = SLoadingContainer;
27462
27631
  exports.SLoadingModal = SLoadingModal;
27463
- exports.SLoadingViewport = SLoadingViewport;
27464
27632
  exports.SLoginCard = SLoginCard2;
27465
27633
  exports.SLogo = SLogo;
27466
27634
  exports.SMeatballButton = SMeatballButton2;