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

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 (30) hide show
  1. package/AGENTS.md +125 -9
  2. package/dist/components/SBarChart/barChart.config.d.ts +0 -8
  3. package/dist/components/SCalendarBoard/CalendarDayCard.d.ts +7 -0
  4. package/dist/components/SCalendarBoard/CalendarEventButton.d.ts +3 -1
  5. package/dist/components/SCalendarBoard/CalendarMoreButton.d.ts +5 -0
  6. package/dist/components/SCalendarBoard/README.md +1 -0
  7. package/dist/components/SCalendarBoard/SCalendarBoard.d.ts +13 -1
  8. package/dist/components/SCalendarBoard/calendar-board-layout.d.ts +11 -1
  9. package/dist/components/SCalendarBoard/calendarBoard.config.d.ts +5 -0
  10. package/dist/components/SCard/README.md +1 -0
  11. package/dist/components/SCard/SCard.d.ts +10 -1
  12. package/dist/components/SFooter/README.md +16 -2
  13. package/dist/components/SFooter/SFooter.d.ts +13 -3
  14. package/dist/components/SFooter/index.d.ts +1 -1
  15. package/dist/components/SImage/README.md +3 -0
  16. package/dist/components/SImage/SImage.d.ts +9 -6
  17. package/dist/components/SLoadingContainer/index.d.ts +1 -1
  18. package/dist/components/SLoadingContainer/loading.d.ts +34 -15
  19. package/dist/components/SSectionHeaderCard/README.md +1 -0
  20. package/dist/components/SSectionHeaderCard/SSectionHeaderCard.d.ts +10 -1
  21. package/dist/index.cjs +373 -158
  22. package/dist/index.cjs.map +1 -1
  23. package/dist/index.js +374 -158
  24. package/dist/index.js.map +1 -1
  25. package/dist/lib/chart/hover-dim.d.ts +19 -0
  26. package/dist/lib/hover-preview.d.ts +32 -0
  27. package/dist/llms-full.txt +147 -11
  28. package/dist/llms.txt +125 -9
  29. package/dist/styles.css +3 -0
  30. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -1,9 +1,9 @@
1
1
  "use client";
2
2
  import { clsx } from 'clsx';
3
3
  import { extendTailwindMerge } from 'tailwind-merge';
4
- import { forwardRef, useState, useRef, useEffect, createContext, useCallback, useImperativeHandle, useLayoutEffect, useContext, useMemo, useId, Children, cloneElement, Fragment as Fragment$1, isValidElement, useSyncExternalStore, Component } from 'react';
4
+ import { forwardRef, createContext, useState, useRef, useEffect, useCallback, useImperativeHandle, useLayoutEffect, useContext, useMemo, useId, Children, cloneElement, Fragment as Fragment$1, isValidElement, useSyncExternalStore, Component } from 'react';
5
5
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
6
- import * as RPopover12 from '@radix-ui/react-popover';
6
+ import * as RPopover13 from '@radix-ui/react-popover';
7
7
  import { createPortal } from 'react-dom';
8
8
  import * as RCheckbox from '@radix-ui/react-checkbox';
9
9
  import { createRoot } from 'react-dom/client';
@@ -3707,6 +3707,57 @@ var SIcon = /* @__PURE__ */ forwardRef(function SIcon2({ name, size = 24, color,
3707
3707
  }
3708
3708
  );
3709
3709
  });
3710
+
3711
+ // src/lib/display-name.ts
3712
+ function withDisplayName(component, name) {
3713
+ component.displayName = name;
3714
+ return component;
3715
+ }
3716
+
3717
+ // src/lib/floating-anim.ts
3718
+ var FLOATING_SLIDE_ANIM = [
3719
+ "data-[state=open]:data-[side=top]:animate-floating-in-top",
3720
+ "data-[state=delayed-open]:data-[side=top]:animate-floating-in-top",
3721
+ "data-[state=instant-open]:data-[side=top]:animate-floating-in-top",
3722
+ "data-[state=closed]:data-[side=top]:animate-floating-out-top",
3723
+ "data-[state=open]:data-[side=bottom]:animate-floating-in-bottom",
3724
+ "data-[state=delayed-open]:data-[side=bottom]:animate-floating-in-bottom",
3725
+ "data-[state=instant-open]:data-[side=bottom]:animate-floating-in-bottom",
3726
+ "data-[state=closed]:data-[side=bottom]:animate-floating-out-bottom",
3727
+ "data-[state=open]:data-[side=left]:animate-floating-in-left",
3728
+ "data-[state=delayed-open]:data-[side=left]:animate-floating-in-left",
3729
+ "data-[state=instant-open]:data-[side=left]:animate-floating-in-left",
3730
+ "data-[state=closed]:data-[side=left]:animate-floating-out-left",
3731
+ "data-[state=open]:data-[side=right]:animate-floating-in-right",
3732
+ "data-[state=delayed-open]:data-[side=right]:animate-floating-in-right",
3733
+ "data-[state=instant-open]:data-[side=right]:animate-floating-in-right",
3734
+ "data-[state=closed]:data-[side=right]:animate-floating-out-right"
3735
+ ].join(" ");
3736
+
3737
+ // src/lib/hover-preview.ts
3738
+ function hoverPreviewOrigin({
3739
+ anchor,
3740
+ size,
3741
+ viewportWidth,
3742
+ viewportHeight,
3743
+ padding = 8
3744
+ }) {
3745
+ const startX = anchor.left + anchor.width / 2;
3746
+ const startY = anchor.top + anchor.height / 2;
3747
+ const x = Math.max(padding, Math.min(startX, viewportWidth - size - padding));
3748
+ const y = Math.max(padding, Math.min(startY, viewportHeight - size - padding));
3749
+ return { x, y };
3750
+ }
3751
+ var PortalContainerContext = /* @__PURE__ */ createContext(null);
3752
+ var InsideModalContext = /* @__PURE__ */ createContext(false);
3753
+ var PortalContainerProvider = PortalContainerContext.Provider;
3754
+ var InsideModalProvider = InsideModalContext.Provider;
3755
+ function usePortalContainer() {
3756
+ return useContext(PortalContainerContext) ?? void 0;
3757
+ }
3758
+ function useInsideModal() {
3759
+ return useContext(InsideModalContext);
3760
+ }
3710
3761
  var VIEWBOX = 80;
3711
3762
  var RADIUS = 34;
3712
3763
  var STROKE = 12;
@@ -3824,7 +3875,10 @@ var SCircleProgress = /* @__PURE__ */ forwardRef(
3824
3875
  var IMAGE_FITS = ["cover", "contain", "fill", "none", "scale-down"];
3825
3876
  var EMPTY_ICON_SIZE = "60cqh";
3826
3877
  var SPINNER_SIZE = "45cqh";
3827
- var SImage = /* @__PURE__ */ forwardRef(function SImage2({
3878
+ var PREVIEW_HIDE_DELAY_MS = 100;
3879
+ var PREVIEW_MAX_SIZE = 200;
3880
+ var PREVIEW_VIEWPORT_PADDING = 8;
3881
+ var SImageImpl = /* @__PURE__ */ forwardRef(function SImageImpl2({
3828
3882
  src,
3829
3883
  alt = "",
3830
3884
  ratio = 1,
@@ -3836,6 +3890,9 @@ var SImage = /* @__PURE__ */ forwardRef(function SImage2({
3836
3890
  loadingSlot,
3837
3891
  errorSlot,
3838
3892
  imgProps,
3893
+ previewOnHover = false,
3894
+ previewSrc,
3895
+ previewSize = PREVIEW_MAX_SIZE,
3839
3896
  onLoad,
3840
3897
  onError,
3841
3898
  className,
@@ -3866,16 +3923,94 @@ var SImage = /* @__PURE__ */ forwardRef(function SImage2({
3866
3923
  const timer = setTimeout(() => setSpinnerVisible(true), loadingShowDelay);
3867
3924
  return () => clearTimeout(timer);
3868
3925
  }, [status, loadingShowDelay, src]);
3926
+ const portalContainer = usePortalContainer();
3927
+ const [previewOpen, setPreviewOpen] = useState(false);
3928
+ const previewHideTimer = useRef(void 0);
3929
+ const boxRef = useRef(null);
3930
+ const previewSource = previewSrc ?? src;
3931
+ const previewEnabled = previewOnHover && !!previewSource;
3932
+ const previewBoxSize = Math.min(previewSize, PREVIEW_MAX_SIZE);
3933
+ const previewBoxSizeRef = useRef(previewBoxSize);
3934
+ previewBoxSizeRef.current = previewBoxSize;
3935
+ const previewAnchorRef = useRef(null);
3936
+ if (previewAnchorRef.current == null) {
3937
+ previewAnchorRef.current = {
3938
+ getBoundingClientRect: () => {
3939
+ const anchor = boxRef.current?.getBoundingClientRect();
3940
+ if (!anchor) return new DOMRect(0, 0, 0, 0);
3941
+ const { x, y } = hoverPreviewOrigin({
3942
+ anchor,
3943
+ size: previewBoxSizeRef.current,
3944
+ viewportWidth: window.innerWidth,
3945
+ viewportHeight: window.innerHeight,
3946
+ padding: PREVIEW_VIEWPORT_PADDING
3947
+ });
3948
+ return new DOMRect(x, y, 0, 0);
3949
+ },
3950
+ // autoUpdate 가 스크롤 조상을 찾는 기준 — 없으면 표 안에서 스크롤할 때 위치가 굳는다
3951
+ get contextElement() {
3952
+ return boxRef.current ?? void 0;
3953
+ }
3954
+ };
3955
+ }
3956
+ const cancelPreviewHide = useCallback(() => {
3957
+ if (previewHideTimer.current) {
3958
+ clearTimeout(previewHideTimer.current);
3959
+ previewHideTimer.current = void 0;
3960
+ }
3961
+ }, []);
3962
+ const openPreview = () => {
3963
+ cancelPreviewHide();
3964
+ setPreviewOpen(true);
3965
+ };
3966
+ const startPreviewHide = () => {
3967
+ cancelPreviewHide();
3968
+ previewHideTimer.current = setTimeout(() => setPreviewOpen(false), PREVIEW_HIDE_DELAY_MS);
3969
+ };
3970
+ useEffect(() => {
3971
+ if (!previewEnabled) {
3972
+ cancelPreviewHide();
3973
+ setPreviewOpen(false);
3974
+ }
3975
+ }, [previewEnabled, cancelPreviewHide]);
3976
+ useEffect(() => cancelPreviewHide, [cancelPreviewHide]);
3977
+ const previewContentRef = useCallback((node) => {
3978
+ node?.parentElement?.style.setProperty("pointer-events", "none");
3979
+ }, []);
3980
+ const previewHandlers = previewEnabled ? {
3981
+ onMouseEnter: (event) => {
3982
+ rest.onMouseEnter?.(event);
3983
+ openPreview();
3984
+ },
3985
+ onMouseLeave: (event) => {
3986
+ rest.onMouseLeave?.(event);
3987
+ startPreviewHide();
3988
+ },
3989
+ // 소비자가 tabIndex 를 준 썸네일에서는 키보드로도 열린다
3990
+ onFocus: (event) => {
3991
+ rest.onFocus?.(event);
3992
+ openPreview();
3993
+ },
3994
+ onBlur: (event) => {
3995
+ rest.onBlur?.(event);
3996
+ startPreviewHide();
3997
+ }
3998
+ } : void 0;
3869
3999
  const isEmpty = !src;
3870
4000
  const showFallback = isEmpty || status === "error";
3871
4001
  const spinnerShown = !isEmpty && status === "loading" && showSpinner && spinnerVisible;
3872
- return /* @__PURE__ */ jsxs(
4002
+ const box3 = /* @__PURE__ */ jsxs(
3873
4003
  "div",
3874
4004
  {
3875
- ref,
4005
+ ref: (node) => {
4006
+ boxRef.current = node;
4007
+ if (typeof ref === "function") ref(node);
4008
+ else if (ref) ref.current = node;
4009
+ },
3876
4010
  className: cn("relative overflow-hidden bg-(--cmp-image-bg)", className),
3877
4011
  style: { containerType: "size", aspectRatio: ratio, ...style },
3878
4012
  ...rest,
4013
+ ...previewHandlers,
3879
4014
  children: [
3880
4015
  !isEmpty && /* @__PURE__ */ jsx(
3881
4016
  "img",
@@ -3911,7 +4046,47 @@ var SImage = /* @__PURE__ */ forwardRef(function SImage2({
3911
4046
  ]
3912
4047
  }
3913
4048
  );
4049
+ if (!previewEnabled) return box3;
4050
+ return /* @__PURE__ */ jsxs(RPopover13.Root, { open: previewOpen, onOpenChange: setPreviewOpen, children: [
4051
+ box3,
4052
+ /* @__PURE__ */ jsx(RPopover13.Anchor, { virtualRef: previewAnchorRef }),
4053
+ /* @__PURE__ */ jsx(RPopover13.Portal, { container: portalContainer, children: /* @__PURE__ */ jsx(
4054
+ RPopover13.Content,
4055
+ {
4056
+ ref: previewContentRef,
4057
+ side: "bottom",
4058
+ align: "start",
4059
+ sideOffset: 0,
4060
+ alignOffset: 0,
4061
+ avoidCollisions: false,
4062
+ role: "presentation",
4063
+ "aria-hidden": true,
4064
+ className: cn(
4065
+ "z-50 overflow-hidden rounded-[6px] shadow-normal-sm",
4066
+ // 읽기 전용이라 호버 브릿지를 두지 않는다. 그 대신 마우스를 통과시켜,
4067
+ // 목록 위로 뜬 미리보기가 아래 행의 클릭을 가로채지 않게 한다.
4068
+ // (래퍼 쪽은 previewContentRef 가 함께 끈다 — 둘 다 꺼야 깜빡이지 않는다)
4069
+ "pointer-events-none",
4070
+ FLOATING_SLIDE_ANIM
4071
+ ),
4072
+ onOpenAutoFocus: (event) => event.preventDefault(),
4073
+ onCloseAutoFocus: (event) => event.preventDefault(),
4074
+ children: /* @__PURE__ */ jsx(
4075
+ SImage,
4076
+ {
4077
+ src: previewSource,
4078
+ alt: "",
4079
+ ratio: 1,
4080
+ fit: "contain",
4081
+ loading: "eager",
4082
+ style: { width: previewBoxSize }
4083
+ }
4084
+ )
4085
+ }
4086
+ ) })
4087
+ ] });
3914
4088
  });
4089
+ var SImage = /* @__PURE__ */ withDisplayName(SImageImpl, "SImage");
3915
4090
  var BADGE_COLORS = [
3916
4091
  "red",
3917
4092
  "orange",
@@ -4107,6 +4282,7 @@ var SButton = /* @__PURE__ */ forwardRef(function SButton2({
4107
4282
  });
4108
4283
  function SFooter({
4109
4284
  bg = "white",
4285
+ size = "md",
4110
4286
  left,
4111
4287
  button,
4112
4288
  children,
@@ -4143,7 +4319,7 @@ function SFooter({
4143
4319
  SButton,
4144
4320
  {
4145
4321
  ...button,
4146
- size: "md",
4322
+ size,
4147
4323
  color: button.color ?? "primary",
4148
4324
  label: button.label ?? "\uD655\uC778"
4149
4325
  }
@@ -4152,7 +4328,16 @@ function SFooter({
4152
4328
  }
4153
4329
  );
4154
4330
  }
4155
- var SCard = /* @__PURE__ */ forwardRef(function SCard2({ bordered = false, footerLeft, button, footerClassName, className, children, ...rest }, ref) {
4331
+ var SCard = /* @__PURE__ */ forwardRef(function SCard2({
4332
+ bordered = false,
4333
+ footerLeft,
4334
+ button,
4335
+ footerSize = "md",
4336
+ footerClassName,
4337
+ className,
4338
+ children,
4339
+ ...rest
4340
+ }, ref) {
4156
4341
  const hasFooter = footerLeft != null || button != null;
4157
4342
  return /* @__PURE__ */ jsxs(
4158
4343
  "div",
@@ -4170,6 +4355,7 @@ var SCard = /* @__PURE__ */ forwardRef(function SCard2({ bordered = false, foote
4170
4355
  SFooter,
4171
4356
  {
4172
4357
  bg: "grey",
4358
+ size: footerSize,
4173
4359
  left: footerLeft,
4174
4360
  button,
4175
4361
  className: cn("px-(--sys-space-panel-padding-default)", footerClassName)
@@ -4180,42 +4366,6 @@ var SCard = /* @__PURE__ */ forwardRef(function SCard2({ bordered = false, foote
4180
4366
  );
4181
4367
  });
4182
4368
 
4183
- // src/lib/display-name.ts
4184
- function withDisplayName(component, name) {
4185
- component.displayName = name;
4186
- return component;
4187
- }
4188
-
4189
- // src/lib/floating-anim.ts
4190
- var FLOATING_SLIDE_ANIM = [
4191
- "data-[state=open]:data-[side=top]:animate-floating-in-top",
4192
- "data-[state=delayed-open]:data-[side=top]:animate-floating-in-top",
4193
- "data-[state=instant-open]:data-[side=top]:animate-floating-in-top",
4194
- "data-[state=closed]:data-[side=top]:animate-floating-out-top",
4195
- "data-[state=open]:data-[side=bottom]:animate-floating-in-bottom",
4196
- "data-[state=delayed-open]:data-[side=bottom]:animate-floating-in-bottom",
4197
- "data-[state=instant-open]:data-[side=bottom]:animate-floating-in-bottom",
4198
- "data-[state=closed]:data-[side=bottom]:animate-floating-out-bottom",
4199
- "data-[state=open]:data-[side=left]:animate-floating-in-left",
4200
- "data-[state=delayed-open]:data-[side=left]:animate-floating-in-left",
4201
- "data-[state=instant-open]:data-[side=left]:animate-floating-in-left",
4202
- "data-[state=closed]:data-[side=left]:animate-floating-out-left",
4203
- "data-[state=open]:data-[side=right]:animate-floating-in-right",
4204
- "data-[state=delayed-open]:data-[side=right]:animate-floating-in-right",
4205
- "data-[state=instant-open]:data-[side=right]:animate-floating-in-right",
4206
- "data-[state=closed]:data-[side=right]:animate-floating-out-right"
4207
- ].join(" ");
4208
- var PortalContainerContext = /* @__PURE__ */ createContext(null);
4209
- var InsideModalContext = /* @__PURE__ */ createContext(false);
4210
- var PortalContainerProvider = PortalContainerContext.Provider;
4211
- var InsideModalProvider = InsideModalContext.Provider;
4212
- function usePortalContainer() {
4213
- return useContext(PortalContainerContext) ?? void 0;
4214
- }
4215
- function useInsideModal() {
4216
- return useContext(InsideModalContext);
4217
- }
4218
-
4219
4369
  // src/components/STag/tag.config.ts
4220
4370
  var TAG_SHAPES = ["square", "pill"];
4221
4371
  var TAG_SIZES = ["xs", "sm", "md"];
@@ -4403,8 +4553,8 @@ var SGhostButton = /* @__PURE__ */ forwardRef(function SGhostButton2({
4403
4553
  }
4404
4554
  );
4405
4555
  if (!hasTooltip) return btn2;
4406
- return /* @__PURE__ */ jsxs(RPopover12.Root, { open, onOpenChange: setOpen, children: [
4407
- /* @__PURE__ */ jsx(RPopover12.Anchor, { asChild: true, children: /* @__PURE__ */ jsx(
4556
+ return /* @__PURE__ */ jsxs(RPopover13.Root, { open, onOpenChange: setOpen, children: [
4557
+ /* @__PURE__ */ jsx(RPopover13.Anchor, { asChild: true, children: /* @__PURE__ */ jsx(
4408
4558
  "span",
4409
4559
  {
4410
4560
  className: cn("inline-flex", anchorClassName),
@@ -4416,8 +4566,8 @@ var SGhostButton = /* @__PURE__ */ forwardRef(function SGhostButton2({
4416
4566
  children: btn2
4417
4567
  }
4418
4568
  ) }),
4419
- /* @__PURE__ */ jsx(RPopover12.Portal, { container: portalContainer, children: /* @__PURE__ */ jsx(
4420
- RPopover12.Content,
4569
+ /* @__PURE__ */ jsx(RPopover13.Portal, { container: portalContainer, children: /* @__PURE__ */ jsx(
4570
+ RPopover13.Content,
4421
4571
  {
4422
4572
  side: "top",
4423
4573
  sideOffset: 4,
@@ -4606,14 +4756,14 @@ var STooltipImpl = /* @__PURE__ */ forwardRef(function STooltip({
4606
4756
  ...style,
4607
4757
  ...contentPropsStyle
4608
4758
  };
4609
- return /* @__PURE__ */ jsxs(RPopover12.Root, { open, onOpenChange: setOpenState, children: [
4759
+ return /* @__PURE__ */ jsxs(RPopover13.Root, { open, onOpenChange: setOpenState, children: [
4610
4760
  isNone ? (
4611
4761
  // 트리거 없음: children 을 래퍼 없이 그대로 앵커로 쓴다 (소비자 레이아웃 보존).
4612
4762
  // mouse/focus 핸들러가 없으므로 showClose 없이도 자동 닫힘이 발생하지 않는다.
4613
- /* @__PURE__ */ jsx(RPopover12.Anchor, { asChild: true, children: triggerNode })
4763
+ /* @__PURE__ */ jsx(RPopover13.Anchor, { asChild: true, children: triggerNode })
4614
4764
  ) : isHover ? (
4615
4765
  // hover: Anchor(위치 기준) + 직접 mouse 핸들러 — 클릭으로 토글되지 않도록 Trigger 미사용
4616
- /* @__PURE__ */ jsx(RPopover12.Anchor, { asChild: true, children: /* @__PURE__ */ jsx(
4766
+ /* @__PURE__ */ jsx(RPopover13.Anchor, { asChild: true, children: /* @__PURE__ */ jsx(
4617
4767
  "span",
4618
4768
  {
4619
4769
  className: "inline-flex",
@@ -4624,9 +4774,9 @@ var STooltipImpl = /* @__PURE__ */ forwardRef(function STooltip({
4624
4774
  children: triggerNode
4625
4775
  }
4626
4776
  ) })
4627
- ) : /* @__PURE__ */ jsx(RPopover12.Trigger, { asChild: true, children: triggerNode }),
4628
- /* @__PURE__ */ jsx(RPopover12.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxs(
4629
- RPopover12.Content,
4777
+ ) : /* @__PURE__ */ jsx(RPopover13.Trigger, { asChild: true, children: triggerNode }),
4778
+ /* @__PURE__ */ jsx(RPopover13.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxs(
4779
+ RPopover13.Content,
4630
4780
  {
4631
4781
  side: placement,
4632
4782
  sideOffset,
@@ -4660,7 +4810,7 @@ var STooltipImpl = /* @__PURE__ */ forwardRef(function STooltip({
4660
4810
  }
4661
4811
  )
4662
4812
  ] }),
4663
- /* @__PURE__ */ jsx(RPopover12.Arrow, { width: 16, height: 12, style: { fill: bg } })
4813
+ /* @__PURE__ */ jsx(RPopover13.Arrow, { width: 16, height: 12, style: { fill: bg } })
4664
4814
  ]
4665
4815
  }
4666
4816
  ) })
@@ -7493,6 +7643,7 @@ var SSectionHeaderCardRootImpl = /* @__PURE__ */ forwardRef(
7493
7643
  background,
7494
7644
  footerLeft,
7495
7645
  button,
7646
+ footerSize = "md",
7496
7647
  footerClassName,
7497
7648
  className,
7498
7649
  children,
@@ -7529,6 +7680,7 @@ var SSectionHeaderCardRootImpl = /* @__PURE__ */ forwardRef(
7529
7680
  SFooter,
7530
7681
  {
7531
7682
  bg: "grey",
7683
+ size: footerSize,
7532
7684
  left: footerLeft,
7533
7685
  button,
7534
7686
  className: cn("px-(--cmp-sectionHeaderCard-header-paddingX)", footerClassName)
@@ -8309,12 +8461,18 @@ var release = (id) => {
8309
8461
  entries = next;
8310
8462
  sync();
8311
8463
  };
8464
+ var updateEntry = (id, message) => {
8465
+ const index = entries.findIndex((e) => e.id === id);
8466
+ if (index === -1) return;
8467
+ entries = entries.map((e, i) => i === index ? { ...e, message } : e);
8468
+ sync();
8469
+ };
8312
8470
  var subscribe = (cb) => {
8313
8471
  listeners.add(cb);
8314
8472
  return () => listeners.delete(cb);
8315
8473
  };
8316
8474
  var getSnapshot = () => state;
8317
- function SLoadingViewport() {
8475
+ function LoadingViewport() {
8318
8476
  const s = useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
8319
8477
  return /* @__PURE__ */ jsx(SLoadingContainer, { open: s.open, message: s.message });
8320
8478
  }
@@ -8325,39 +8483,56 @@ function ensureMounted() {
8325
8483
  const host = document.createElement("div");
8326
8484
  host.setAttribute("data-sd-loading-root", "");
8327
8485
  document.body.appendChild(host);
8328
- createRoot(host).render(/* @__PURE__ */ jsx(SLoadingViewport, {}));
8486
+ createRoot(host).render(/* @__PURE__ */ jsx(LoadingViewport, {}));
8487
+ }
8488
+ function showEntry(options = {}) {
8489
+ ensureMounted();
8490
+ const id = ++seq;
8491
+ entries = [...entries, { id, message: options.message }];
8492
+ sync();
8493
+ let released = false;
8494
+ const handle = (() => {
8495
+ if (released) return;
8496
+ released = true;
8497
+ release(id);
8498
+ });
8499
+ handle.update = (next) => {
8500
+ if (released) return;
8501
+ updateEntry(id, next.message);
8502
+ };
8503
+ return handle;
8329
8504
  }
8330
8505
  var loading = {
8331
8506
  /**
8332
8507
  * 로딩 오버레이 표시. 겹쳐 부르면 그만큼 쌓이고 **마지막 하나가 걷힐 때** 닫힌다.
8333
- * 반환값은 이 호출 하나만 걷는 함수다(두 번 불러도 한 번만 걷힌다) — `hide()` 대신 이것을
8334
- * 쓰면 짝이 어긋나지 않는다.
8508
+ * 반환값은 이 호출 하나를 걷고 갱신하는 핸들이다(두 번 걷어도 한 번만 걷힌다).
8509
+ *
8510
+ * **걷는 것은 `finally` 에 둔다.** 빠뜨리면 그 즉시 화면이 갇히고, 정상 경로에서는 아무
8511
+ * 표시가 없다.
8335
8512
  *
8336
- * ⚠️ 메시지만 바꾸려면 `update()` 를 쓴다. `show()` 를 다시 부르면 하나 더 쌓여
8337
- * `hide()` 한 번으로는 닫히지 않는다.
8513
+ * ```ts
8514
+ * const done = loading.show({ message: '1/2 ...' });
8515
+ * try {
8516
+ * done.update({ message: '2/2 ...' }); // 이 호출의 메시지만 바뀐다
8517
+ * await api.submit(payload);
8518
+ * } finally {
8519
+ * done(); // 이 호출만 걷는다
8520
+ * }
8521
+ * ```
8522
+ *
8523
+ * ⚠️ **메시지를 바꾸려고 `show()` 를 다시 부르지 않는다.** 하나 더 쌓여 한 번 걷는 것으로는
8524
+ * 닫히지 않는다. 핸들의 `update()` 를 쓴다. (참조 카운트 이전에는 `show()` 를 다시 부르는
8525
+ * 것이 갱신이었다 — Quasar 도 같은 그룹에 다시 show 하면 갱신이다. 그 시절 관행대로 쓰인
8526
+ * 코드는 지금 오버레이를 하나 남긴다.)
8338
8527
  */
8339
8528
  show(options = {}) {
8340
- ensureMounted();
8341
- const id = ++seq;
8342
- entries = [...entries, { id, message: options.message }];
8343
- sync();
8344
- return () => release(id);
8345
- },
8346
- /** 표시 중인 메시지 갱신 — 쌓인 수는 그대로다 */
8347
- update(options) {
8348
- const top = entries[entries.length - 1];
8349
- if (!top) return;
8350
- entries = [...entries.slice(0, -1), { ...top, message: options.message }];
8351
- sync();
8352
- },
8353
- /** 가장 나중의 show 하나를 걷는다. 남은 것이 없을 때만 오버레이가 닫힌다 */
8354
- hide() {
8355
- const top = entries[entries.length - 1];
8356
- if (top) release(top.id);
8529
+ return showEntry(options);
8357
8530
  },
8358
8531
  /**
8359
- * 쌓인 것을 모두 걷고 즉시 닫는다. 화면 전환·에러 복구처럼 진행 중이던 작업의 짝을 더는
8360
- * 맞출 수 없을 때만 쓴다 — 평소에는 `hide()` 나 `show()` 가 준 함수로 하나씩 걷는다.
8532
+ * 쌓인 것을 모두 걷고 즉시 닫는다. **원본(Quasar)의 인자 없는 `hide()` 가 이것이다.**
8533
+ * 화면 전환·에러 복구처럼 진행 중이던 작업의 짝을 더는 맞출 수 없을 때만 쓴다 — 평소에는
8534
+ * `show()` 가 준 핸들로 걷는다.
8535
+ * 이걸로 걷힌 항목의 주인이 뒤늦게 자기 핸들을 불러도 아무 일도 일어나지 않는다.
8361
8536
  */
8362
8537
  hideAll() {
8363
8538
  if (entries.length === 0) return;
@@ -8879,7 +9054,7 @@ function SPortal({
8879
9054
  const portalContainer = usePortalContainer();
8880
9055
  const { minWidth: styleMinWidth, maxWidth: styleMaxWidth, ...restStyle } = style ?? {};
8881
9056
  return /* @__PURE__ */ jsxs(
8882
- RPopover12.Root,
9057
+ RPopover13.Root,
8883
9058
  {
8884
9059
  open,
8885
9060
  onOpenChange: (next) => {
@@ -8887,9 +9062,9 @@ function SPortal({
8887
9062
  if (!next) onClose?.();
8888
9063
  },
8889
9064
  children: [
8890
- /* @__PURE__ */ jsx(RPopover12.Anchor, { virtualRef: anchorRef }),
8891
- /* @__PURE__ */ jsx(RPopover12.Portal, { container: portalContainer, children: /* @__PURE__ */ jsx(
8892
- RPopover12.Content,
9065
+ /* @__PURE__ */ jsx(RPopover13.Anchor, { virtualRef: anchorRef }),
9066
+ /* @__PURE__ */ jsx(RPopover13.Portal, { container: portalContainer, children: /* @__PURE__ */ jsx(
9067
+ RPopover13.Content,
8893
9068
  {
8894
9069
  side: placement,
8895
9070
  align,
@@ -9640,10 +9815,10 @@ function SPopover({
9640
9815
  const descColor = type === "default" ? "var(--cmp-popover-default-description)" : "var(--cmp-popover-light-description)";
9641
9816
  const leftLinkLabelClass = type === "default" ? "text-[color:var(--cmp-popover-default-subAction)]" : "text-[color:var(--cmp-popover-light-subAction)]";
9642
9817
  const triggerNode = trigger ?? /* @__PURE__ */ jsx("span", { className: "inline-flex cursor-pointer", "aria-label": ariaLabel, children: /* @__PURE__ */ jsx(SIcon, { name: icon, size: iconSize, color }) });
9643
- return /* @__PURE__ */ jsxs(RPopover12.Root, { open: actualOpen, onOpenChange: setOpen, children: [
9644
- /* @__PURE__ */ jsx(RPopover12.Trigger, { asChild: true, children: triggerNode }),
9645
- /* @__PURE__ */ jsx(RPopover12.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxs(
9646
- RPopover12.Content,
9818
+ return /* @__PURE__ */ jsxs(RPopover13.Root, { open: actualOpen, onOpenChange: setOpen, children: [
9819
+ /* @__PURE__ */ jsx(RPopover13.Trigger, { asChild: true, children: triggerNode }),
9820
+ /* @__PURE__ */ jsx(RPopover13.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxs(
9821
+ RPopover13.Content,
9647
9822
  {
9648
9823
  side: placement,
9649
9824
  sideOffset: 8,
@@ -9709,7 +9884,7 @@ function SPopover({
9709
9884
  ]
9710
9885
  }
9711
9886
  ),
9712
- /* @__PURE__ */ jsx(RPopover12.Arrow, { width: 16, height: 12, style: { fill: bg } })
9887
+ /* @__PURE__ */ jsx(RPopover13.Arrow, { width: 16, height: 12, style: { fill: bg } })
9713
9888
  ]
9714
9889
  }
9715
9890
  ) })
@@ -9827,10 +10002,10 @@ function SGuide({
9827
10002
  );
9828
10003
  if (isNotion)
9829
10004
  return /* @__PURE__ */ jsx("span", { className, style, children: trigger });
9830
- return /* @__PURE__ */ jsxs(RPopover12.Root, { open, onOpenChange: setOpen, children: [
9831
- /* @__PURE__ */ jsx(RPopover12.Trigger, { asChild: true, children: trigger }),
9832
- /* @__PURE__ */ jsx(RPopover12.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxs(
9833
- RPopover12.Content,
10005
+ return /* @__PURE__ */ jsxs(RPopover13.Root, { open, onOpenChange: setOpen, children: [
10006
+ /* @__PURE__ */ jsx(RPopover13.Trigger, { asChild: true, children: trigger }),
10007
+ /* @__PURE__ */ jsx(RPopover13.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxs(
10008
+ RPopover13.Content,
9834
10009
  {
9835
10010
  side: "bottom",
9836
10011
  align: "start",
@@ -12323,10 +12498,10 @@ var SGnb = /* @__PURE__ */ forwardRef(function SGnb2({
12323
12498
  ),
12324
12499
  header === "fix" && menuResizeHandle,
12325
12500
  launcherListBox,
12326
- /* @__PURE__ */ jsxs(RPopover12.Root, { open: labelTip !== null, onOpenChange: (open) => !open && setLabelTip(null), children: [
12327
- /* @__PURE__ */ jsx(RPopover12.Anchor, { virtualRef: labelTipAnchorRef }),
12328
- /* @__PURE__ */ jsx(RPopover12.Portal, { container: portalContainer, children: /* @__PURE__ */ jsx(
12329
- RPopover12.Content,
12501
+ /* @__PURE__ */ jsxs(RPopover13.Root, { open: labelTip !== null, onOpenChange: (open) => !open && setLabelTip(null), children: [
12502
+ /* @__PURE__ */ jsx(RPopover13.Anchor, { virtualRef: labelTipAnchorRef }),
12503
+ /* @__PURE__ */ jsx(RPopover13.Portal, { container: portalContainer, children: /* @__PURE__ */ jsx(
12504
+ RPopover13.Content,
12330
12505
  {
12331
12506
  side: "right",
12332
12507
  sideOffset: 4,
@@ -13814,7 +13989,8 @@ function layoutCalendarBoard({
13814
13989
  cells,
13815
13990
  events,
13816
13991
  rowCapacity,
13817
- blockedDates
13992
+ blockedDates,
13993
+ focusedEventId
13818
13994
  }) {
13819
13995
  const count = cells.length;
13820
13996
  const weekCount = Math.ceil(count / 7);
@@ -13822,6 +13998,7 @@ function layoutCalendarBoard({
13822
13998
  const eventsByCell = Array.from({ length: count }, () => []);
13823
13999
  const hiddenCountByCell = new Array(count).fill(0);
13824
14000
  const moreLaneByWeek = new Array(weekCount).fill(-1);
14001
+ const moreReplacedByCell = new Array(count).fill(false);
13825
14002
  const runs = [];
13826
14003
  events.forEach((event, order) => {
13827
14004
  const start = event.date;
@@ -13879,9 +14056,15 @@ function layoutCalendarBoard({
13879
14056
  const week = Math.floor(run.startIndex / 7);
13880
14057
  const moreLane = moreLaneByWeek[week];
13881
14058
  const limit = moreLane < 0 ? rowCapacity : moreLane;
13882
- if (run.lane >= limit) {
13883
- for (let i = run.startIndex; i <= run.endIndex; i++) hiddenCountByCell[i] += 1;
13884
- continue;
14059
+ let lane = run.lane;
14060
+ if (lane >= limit) {
14061
+ const focused = focusedEventId != null && run.event.id === focusedEventId && moreLane >= 0;
14062
+ if (!focused) {
14063
+ for (let i = run.startIndex; i <= run.endIndex; i++) hiddenCountByCell[i] += 1;
14064
+ continue;
14065
+ }
14066
+ lane = moreLane;
14067
+ for (let i = run.startIndex; i <= run.endIndex; i++) moreReplacedByCell[i] = true;
13885
14068
  }
13886
14069
  const { event } = run;
13887
14070
  segmentsByCell[run.startIndex].push({
@@ -13889,12 +14072,18 @@ function layoutCalendarBoard({
13889
14072
  key: `${event.id ?? `${event.date}-${run.order}`}-${run.startIndex}`,
13890
14073
  startIndex: run.startIndex,
13891
14074
  span: run.endIndex - run.startIndex + 1,
13892
- lane: run.lane,
14075
+ lane,
13893
14076
  startsHere: cells[run.startIndex].date === event.date,
13894
14077
  endsHere: cells[run.endIndex].date === eventEndDate(event)
13895
14078
  });
13896
14079
  }
13897
- return { segmentsByCell, eventsByCell, hiddenCountByCell, moreLaneByWeek };
14080
+ return {
14081
+ segmentsByCell,
14082
+ eventsByCell,
14083
+ hiddenCountByCell,
14084
+ moreLaneByWeek,
14085
+ moreReplacedByCell
14086
+ };
13898
14087
  }
13899
14088
 
13900
14089
  // src/components/SCalendarBoard/calendarBoard.config.ts
@@ -13924,6 +14113,7 @@ var CALENDAR_BOARD_EVENT_PRESETS = {
13924
14113
  white: { bg: BG("white"), dot: "grey" }
13925
14114
  };
13926
14115
  var CALENDAR_BOARD_MAX_VISIBLE_EVENTS = 4;
14116
+ var CALENDAR_BOARD_DIM_OPACITY = 0.4;
13927
14117
  var CALENDAR_BOARD_DAY_COLORS = [
13928
14118
  "default",
13929
14119
  "danger",
@@ -13943,6 +14133,7 @@ function CalendarEventButton({
13943
14133
  onSelect,
13944
14134
  flatStart = false,
13945
14135
  flatEnd = false,
14136
+ dimmed = false,
13946
14137
  className,
13947
14138
  style
13948
14139
  }) {
@@ -13970,7 +14161,11 @@ function CalendarEventButton({
13970
14161
  disabled ? "cursor-not-allowed opacity-50" : "cursor-pointer",
13971
14162
  className
13972
14163
  ),
13973
- style: { ...style, "--ceb-bg": preset.bg },
14164
+ style: {
14165
+ ...style,
14166
+ "--ceb-bg": preset.bg,
14167
+ ...dimmed && { opacity: CALENDAR_BOARD_DIM_OPACITY }
14168
+ },
13974
14169
  onClick: (e) => {
13975
14170
  if (disabled) return;
13976
14171
  onSelect?.(event, e);
@@ -14014,7 +14209,7 @@ function CalendarEventButton({
14014
14209
  }
14015
14210
  );
14016
14211
  }
14017
- var CalendarMoreButton = /* @__PURE__ */ forwardRef(function CalendarMoreButton2({ count, label = "\uB354\uBCF4\uAE30", onClick, className, style }, ref) {
14212
+ var CalendarMoreButton = /* @__PURE__ */ forwardRef(function CalendarMoreButton2({ count, label = "\uB354\uBCF4\uAE30", dimmed = false, onClick, className, style }, ref) {
14018
14213
  return /* @__PURE__ */ jsxs(
14019
14214
  "button",
14020
14215
  {
@@ -14027,7 +14222,7 @@ var CalendarMoreButton = /* @__PURE__ */ forwardRef(function CalendarMoreButton2
14027
14222
  "bg-(--cmp-calendarBoard-moreButton-bg)",
14028
14223
  className
14029
14224
  ),
14030
- style,
14225
+ style: dimmed ? { ...style, opacity: CALENDAR_BOARD_DIM_OPACITY } : style,
14031
14226
  onClick,
14032
14227
  children: [
14033
14228
  /* @__PURE__ */ jsx(
@@ -14062,6 +14257,8 @@ var CalendarDayCard = /* @__PURE__ */ forwardRef(function CalendarDayCard2({
14062
14257
  body,
14063
14258
  hiddenCount,
14064
14259
  moreLane,
14260
+ moreReplaced,
14261
+ focusedEventId,
14065
14262
  isOpen,
14066
14263
  moreLabel,
14067
14264
  onDaySelect,
@@ -14069,6 +14266,7 @@ var CalendarDayCard = /* @__PURE__ */ forwardRef(function CalendarDayCard2({
14069
14266
  onOpenEvents,
14070
14267
  ...rest
14071
14268
  }, ref) {
14269
+ const focusing = focusedEventId != null;
14072
14270
  const hasEvents = dayEventCount > 0;
14073
14271
  const interactive = selectable || hasEvents;
14074
14272
  const activate = () => {
@@ -14130,6 +14328,7 @@ var CalendarDayCard = /* @__PURE__ */ forwardRef(function CalendarDayCard2({
14130
14328
  event: segment.event,
14131
14329
  flatStart: !segment.startsHere,
14132
14330
  flatEnd: !segment.endsHere,
14331
+ dimmed: focusing && segment.event.id !== focusedEventId,
14133
14332
  className: "absolute z-10",
14134
14333
  style: {
14135
14334
  top: laneTop(segment.lane),
@@ -14143,11 +14342,12 @@ var CalendarDayCard = /* @__PURE__ */ forwardRef(function CalendarDayCard2({
14143
14342
  },
14144
14343
  segment.key
14145
14344
  )),
14146
- body == null && hiddenCount > 0 && moreLane >= 0 && /* @__PURE__ */ jsx(
14345
+ body == null && hiddenCount > 0 && moreLane >= 0 && !moreReplaced && /* @__PURE__ */ jsx(
14147
14346
  CalendarMoreButton,
14148
14347
  {
14149
14348
  count: hiddenCount,
14150
14349
  label: moreLabel,
14350
+ dimmed: focusing,
14151
14351
  className: "absolute z-10",
14152
14352
  style: {
14153
14353
  top: laneTop(moreLane),
@@ -14245,6 +14445,7 @@ function SCalendarBoard({
14245
14445
  events,
14246
14446
  dayColors,
14247
14447
  dayContent,
14448
+ focusedEventId,
14248
14449
  onEventClick,
14249
14450
  onMoreClick,
14250
14451
  todayLabel = "\uC624\uB298",
@@ -14295,8 +14496,14 @@ function SCalendarBoard({
14295
14496
  const blockedDates = new Set(
14296
14497
  cells.filter((cell) => dayContent?.[cell.date] != null).map((cell) => cell.date)
14297
14498
  );
14298
- return layoutCalendarBoard({ cells, events: events ?? [], rowCapacity, blockedDates });
14299
- }, [cells, events, rowCapacity, dayContent]);
14499
+ return layoutCalendarBoard({
14500
+ cells,
14501
+ events: events ?? [],
14502
+ rowCapacity,
14503
+ blockedDates,
14504
+ focusedEventId
14505
+ });
14506
+ }, [cells, events, rowCapacity, dayContent, focusedEventId]);
14300
14507
  const openIndex = openDate == null ? -1 : cells.findIndex((cell) => cell.date === openDate);
14301
14508
  const openEvents = openIndex < 0 ? [] : layout.eventsByCell[openIndex];
14302
14509
  useLayoutEffect(() => {
@@ -14421,7 +14628,7 @@ function SCalendarBoard({
14421
14628
  }
14422
14629
  ),
14423
14630
  /* @__PURE__ */ jsxs(
14424
- RPopover12.Root,
14631
+ RPopover13.Root,
14425
14632
  {
14426
14633
  open: openDate !== null,
14427
14634
  onOpenChange: (open) => {
@@ -14457,6 +14664,8 @@ function SCalendarBoard({
14457
14664
  body: content,
14458
14665
  hiddenCount: layout.hiddenCountByCell[index],
14459
14666
  moreLane: layout.moreLaneByWeek[Math.floor(index / 7)],
14667
+ moreReplaced: layout.moreReplacedByCell[index],
14668
+ focusedEventId,
14460
14669
  isOpen: openDate === cell.date,
14461
14670
  moreLabel,
14462
14671
  onDaySelect: (date) => onValueChange?.(date, list),
@@ -14465,12 +14674,12 @@ function SCalendarBoard({
14465
14674
  },
14466
14675
  cell.date
14467
14676
  );
14468
- return cell.date === openDate ? /* @__PURE__ */ jsx(RPopover12.Anchor, { asChild: true, children: card }, cell.date) : card;
14677
+ return cell.date === openDate ? /* @__PURE__ */ jsx(RPopover13.Anchor, { asChild: true, children: card }, cell.date) : card;
14469
14678
  })
14470
14679
  }
14471
14680
  ),
14472
- /* @__PURE__ */ jsx(RPopover12.Portal, { container: portalContainer, children: /* @__PURE__ */ jsx(
14473
- RPopover12.Content,
14681
+ /* @__PURE__ */ jsx(RPopover13.Portal, { container: portalContainer, children: /* @__PURE__ */ jsx(
14682
+ RPopover13.Content,
14474
14683
  {
14475
14684
  onInteractOutside: (e) => {
14476
14685
  const target = e.detail.originalEvent.target;
@@ -16973,10 +17182,10 @@ function useTruncatedValueTooltip({
16973
17182
  valueRef: elRef,
16974
17183
  onMouseEnter: active ? onMouseEnter : cancelHide,
16975
17184
  onMouseLeave: active ? startHide : cancelHide,
16976
- tooltip: active ? /* @__PURE__ */ jsxs(RPopover12.Root, { open, onOpenChange: setOpen, children: [
16977
- /* @__PURE__ */ jsx(RPopover12.Anchor, { virtualRef: elRef }),
16978
- /* @__PURE__ */ jsx(RPopover12.Portal, { container: portalContainer, children: /* @__PURE__ */ jsx(
16979
- RPopover12.Content,
17185
+ tooltip: active ? /* @__PURE__ */ jsxs(RPopover13.Root, { open, onOpenChange: setOpen, children: [
17186
+ /* @__PURE__ */ jsx(RPopover13.Anchor, { virtualRef: elRef }),
17187
+ /* @__PURE__ */ jsx(RPopover13.Portal, { container: portalContainer, children: /* @__PURE__ */ jsx(
17188
+ RPopover13.Content,
16980
17189
  {
16981
17190
  side: "top",
16982
17191
  sideOffset: 4,
@@ -18230,8 +18439,8 @@ function SDatePicker({
18230
18439
  disabled,
18231
18440
  className,
18232
18441
  style,
18233
- children: /* @__PURE__ */ jsxs(RPopover12.Root, { open, onOpenChange: (o) => !disabled && setOpen(o), children: [
18234
- /* @__PURE__ */ jsx(RPopover12.Trigger, { asChild: true, children: /* @__PURE__ */ jsxs(
18442
+ children: /* @__PURE__ */ jsxs(RPopover13.Root, { open, onOpenChange: (o) => !disabled && setOpen(o), children: [
18443
+ /* @__PURE__ */ jsx(RPopover13.Trigger, { asChild: true, children: /* @__PURE__ */ jsxs(
18235
18444
  "div",
18236
18445
  {
18237
18446
  role: "button",
@@ -18290,8 +18499,8 @@ function SDatePicker({
18290
18499
  ]
18291
18500
  }
18292
18501
  ) }),
18293
- /* @__PURE__ */ jsx(RPopover12.Portal, { container: portalContainer, children: /* @__PURE__ */ jsx(
18294
- RPopover12.Content,
18502
+ /* @__PURE__ */ jsx(RPopover13.Portal, { container: portalContainer, children: /* @__PURE__ */ jsx(
18503
+ RPopover13.Content,
18295
18504
  {
18296
18505
  side: "bottom",
18297
18506
  align: mode === "date" ? "start" : "center",
@@ -18767,7 +18976,7 @@ function SDateRangePicker({
18767
18976
  className,
18768
18977
  style,
18769
18978
  children: /* @__PURE__ */ jsxs(
18770
- RPopover12.Root,
18979
+ RPopover13.Root,
18771
18980
  {
18772
18981
  open,
18773
18982
  onOpenChange: (o) => {
@@ -18776,7 +18985,7 @@ function SDateRangePicker({
18776
18985
  if (!o) setPendingStart(null);
18777
18986
  },
18778
18987
  children: [
18779
- /* @__PURE__ */ jsx(RPopover12.Trigger, { asChild: true, children: /* @__PURE__ */ jsxs(
18988
+ /* @__PURE__ */ jsx(RPopover13.Trigger, { asChild: true, children: /* @__PURE__ */ jsxs(
18780
18989
  "div",
18781
18990
  {
18782
18991
  role: "button",
@@ -18840,8 +19049,8 @@ function SDateRangePicker({
18840
19049
  ]
18841
19050
  }
18842
19051
  ) }),
18843
- /* @__PURE__ */ jsx(RPopover12.Portal, { container: portalContainer, children: /* @__PURE__ */ jsx(
18844
- RPopover12.Content,
19052
+ /* @__PURE__ */ jsx(RPopover13.Portal, { container: portalContainer, children: /* @__PURE__ */ jsx(
19053
+ RPopover13.Content,
18845
19054
  {
18846
19055
  side: "bottom",
18847
19056
  align: "start",
@@ -19608,6 +19817,10 @@ var ChartFrame = /* @__PURE__ */ forwardRef(function ChartFrame2({ title, unit,
19608
19817
  }
19609
19818
  );
19610
19819
  });
19820
+
19821
+ // src/lib/chart/hover-dim.ts
19822
+ var CHART_DIM_OPACITY_TRANSITION = "transition-opacity duration-200 ease-out motion-reduce:transition-none";
19823
+ var CHART_DIM_COLOR_TRANSITION = "transition-colors duration-200 ease-out motion-reduce:transition-none";
19611
19824
  var DOT_SIZE = 6;
19612
19825
  function ChartLegend({
19613
19826
  items,
@@ -19640,7 +19853,7 @@ function ChartLegend({
19640
19853
  "flex items-center gap-(--cmp-chart-legendItem-gap)",
19641
19854
  "py-(--cmp-chart-legendItem-paddingY)",
19642
19855
  "typo-body-sm-medium text-(--cmp-chart-legendItem-color)",
19643
- "transition-opacity duration-200 ease-out motion-reduce:transition-none",
19856
+ CHART_DIM_OPACITY_TRANSITION,
19644
19857
  activeIndex != null && activeIndex !== index && "opacity-(--opacity-060)"
19645
19858
  ),
19646
19859
  children: [
@@ -19671,7 +19884,7 @@ function ChartLegend({
19671
19884
  "flex items-center gap-(--cmp-chart-legendItem-gap)",
19672
19885
  "py-(--cmp-chart-legendItem-paddingY)",
19673
19886
  "typo-body-sm-medium text-(--cmp-chart-legendItem-color)",
19674
- "transition-opacity duration-200 ease-out motion-reduce:transition-none",
19887
+ CHART_DIM_OPACITY_TRANSITION,
19675
19888
  activeIndex != null && activeIndex !== index && "opacity-(--opacity-060)"
19676
19889
  ),
19677
19890
  children: [
@@ -19900,7 +20113,6 @@ var BAR_OPACITY_HOVER = 1;
19900
20113
  var BAR_DATA_LABEL_COLOR = "var(--cmp-chart-dataLabel-color-default)";
19901
20114
  var BAR_DATA_LABEL_TYPO = "typo-body-sm-medium";
19902
20115
  var BAR_DATA_LABEL_TYPO_HOVER = "typo-body-md-bold";
19903
- var BAR_HOVER_TRANSITION = "transition-opacity duration-200 ease-out motion-reduce:transition-none";
19904
20116
  function bandLayout(size, categoryCount, seriesCount, barSizeMax = BAR_SIZE_MAX) {
19905
20117
  const categories = Math.max(1, categoryCount);
19906
20118
  const series = Math.max(1, seriesCount);
@@ -20167,7 +20379,7 @@ var SBarChart = /* @__PURE__ */ forwardRef(function SBarChart2({
20167
20379
  "path",
20168
20380
  {
20169
20381
  d: barPath(x, y, width, barHeight, direction, negative),
20170
- className: BAR_HOVER_TRANSITION,
20382
+ className: CHART_DIM_OPACITY_TRANSITION,
20171
20383
  style: {
20172
20384
  fill: colorAt(seriesIndex, categoryIndex),
20173
20385
  opacity,
@@ -20184,7 +20396,7 @@ var SBarChart = /* @__PURE__ */ forwardRef(function SBarChart2({
20184
20396
  y: labelY,
20185
20397
  className: cn(
20186
20398
  hoveredCategory === categoryIndex ? BAR_DATA_LABEL_TYPO_HOVER : BAR_DATA_LABEL_TYPO,
20187
- BAR_HOVER_TRANSITION
20399
+ CHART_DIM_OPACITY_TRANSITION
20188
20400
  ),
20189
20401
  style: {
20190
20402
  fill: BAR_DATA_LABEL_COLOR,
@@ -20265,7 +20477,7 @@ var SBarChart = /* @__PURE__ */ forwardRef(function SBarChart2({
20265
20477
  width: box3.width,
20266
20478
  height: box3.height,
20267
20479
  clipPath: `url(#${segment.value < 0 ? negativeClip : positiveClip})`,
20268
- className: BAR_HOVER_TRANSITION,
20480
+ className: CHART_DIM_OPACITY_TRANSITION,
20269
20481
  style: {
20270
20482
  // 조각과 라벨에 따로 건다 — 묶음(<g>)에 걸면 호버가 없을 때의
20271
20483
  // 기본 흐림까지 합계 라벨에 묻어 숫자가 늘 옅어진다.
@@ -20290,7 +20502,7 @@ var SBarChart = /* @__PURE__ */ forwardRef(function SBarChart2({
20290
20502
  y: labelY,
20291
20503
  className: cn(
20292
20504
  hoveredCategory === categoryIndex ? BAR_DATA_LABEL_TYPO_HOVER : BAR_DATA_LABEL_TYPO,
20293
- BAR_HOVER_TRANSITION
20505
+ CHART_DIM_OPACITY_TRANSITION
20294
20506
  ),
20295
20507
  style: {
20296
20508
  fill: BAR_DATA_LABEL_COLOR,
@@ -20813,6 +21025,7 @@ var SLineChart = /* @__PURE__ */ forwardRef(function SLineChart2({
20813
21025
  cx: point.x,
20814
21026
  cy: point.y,
20815
21027
  r: hovered ? POINT_HOVER_RADIUS : POINT_RADIUS,
21028
+ className: CHART_DIM_COLOR_TRANSITION,
20816
21029
  style: {
20817
21030
  fill: dimmed ? dimmedColorAt(seriesIndex) : color,
20818
21031
  cursor: onPointClick ? "pointer" : void 0
@@ -21167,7 +21380,7 @@ var RadialChart = /* @__PURE__ */ forwardRef(function RadialChart2({
21167
21380
  {
21168
21381
  d: slice(arc2),
21169
21382
  fillRule: "evenodd",
21170
- className: "transition-opacity duration-200 ease-out motion-reduce:transition-none",
21383
+ className: CHART_DIM_OPACITY_TRANSITION,
21171
21384
  style: {
21172
21385
  fill: arc2.color,
21173
21386
  opacity,
@@ -21200,7 +21413,10 @@ var RadialChart = /* @__PURE__ */ forwardRef(function RadialChart2({
21200
21413
  y: point.y,
21201
21414
  textAnchor: "middle",
21202
21415
  dominantBaseline: "central",
21203
- className: "pointer-events-none typo-body-sm-bold transition-opacity duration-200 ease-out motion-reduce:transition-none",
21416
+ className: cn(
21417
+ "pointer-events-none typo-body-sm-bold",
21418
+ CHART_DIM_OPACITY_TRANSITION
21419
+ ),
21204
21420
  style: {
21205
21421
  fill: "var(--sys-color-fg-inverse)",
21206
21422
  opacity: hovered != null && hovered !== arc2.index ? OPACITY_DIMMED : void 0
@@ -23217,10 +23433,10 @@ function EditorToolbarBar({
23217
23433
  },
23218
23434
  item4
23219
23435
  );
23220
- return /* @__PURE__ */ jsxs(RPopover12.Root, { open: linkOpen, onOpenChange: setLinkOpen, children: [
23221
- /* @__PURE__ */ jsx(RPopover12.Trigger, { asChild: true, disabled: off, children: /* @__PURE__ */ jsx(ToolbarButton, { label: "\uB9C1\uD06C", active: state2.link, disabled: off, children: /* @__PURE__ */ jsx(IconLink, { size: ICON_SIZE }) }) }),
23222
- /* @__PURE__ */ jsx(RPopover12.Portal, { container: portalContainer, children: /* @__PURE__ */ jsx(
23223
- RPopover12.Content,
23436
+ return /* @__PURE__ */ jsxs(RPopover13.Root, { open: linkOpen, onOpenChange: setLinkOpen, children: [
23437
+ /* @__PURE__ */ jsx(RPopover13.Trigger, { asChild: true, disabled: off, children: /* @__PURE__ */ jsx(ToolbarButton, { label: "\uB9C1\uD06C", active: state2.link, disabled: off, children: /* @__PURE__ */ jsx(IconLink, { size: ICON_SIZE }) }) }),
23438
+ /* @__PURE__ */ jsx(RPopover13.Portal, { container: portalContainer, children: /* @__PURE__ */ jsx(
23439
+ RPopover13.Content,
23224
23440
  {
23225
23441
  sideOffset: 4,
23226
23442
  align: "start",
@@ -24613,8 +24829,8 @@ var SChipFilter = /* @__PURE__ */ forwardRef(function SChipFilter2({
24613
24829
  })(),
24614
24830
  hasRightActions && /* @__PURE__ */ jsxs(Fragment, { children: [
24615
24831
  /* @__PURE__ */ jsx(Divider, { inset: true }),
24616
- hasAddButton && /* @__PURE__ */ jsxs(RPopover12.Root, { open: addOpen, onOpenChange: setAddOpen, children: [
24617
- /* @__PURE__ */ jsx(RPopover12.Trigger, { asChild: true, children: /* @__PURE__ */ jsxs(
24832
+ hasAddButton && /* @__PURE__ */ jsxs(RPopover13.Root, { open: addOpen, onOpenChange: setAddOpen, children: [
24833
+ /* @__PURE__ */ jsx(RPopover13.Trigger, { asChild: true, children: /* @__PURE__ */ jsxs(
24618
24834
  "button",
24619
24835
  {
24620
24836
  type: "button",
@@ -24639,8 +24855,8 @@ var SChipFilter = /* @__PURE__ */ forwardRef(function SChipFilter2({
24639
24855
  ]
24640
24856
  }
24641
24857
  ) }),
24642
- /* @__PURE__ */ jsx(RPopover12.Portal, { container: portalContainer, children: /* @__PURE__ */ jsx(
24643
- RPopover12.Content,
24858
+ /* @__PURE__ */ jsx(RPopover13.Portal, { container: portalContainer, children: /* @__PURE__ */ jsx(
24859
+ RPopover13.Content,
24644
24860
  {
24645
24861
  side: "bottom",
24646
24862
  align: "start",
@@ -24675,17 +24891,17 @@ var SChipFilter = /* @__PURE__ */ forwardRef(function SChipFilter2({
24675
24891
  )
24676
24892
  ] })
24677
24893
  ] }),
24678
- /* @__PURE__ */ jsxs(RPopover12.Root, { open: openKey != null, onOpenChange: (next) => !next && setOpenKey(null), children: [
24894
+ /* @__PURE__ */ jsxs(RPopover13.Root, { open: openKey != null, onOpenChange: (next) => !next && setOpenKey(null), children: [
24679
24895
  /* @__PURE__ */ jsx(
24680
- RPopover12.Anchor,
24896
+ RPopover13.Anchor,
24681
24897
  {
24682
24898
  virtualRef: {
24683
24899
  current: openKey ? triggerRefs.current.get(openKey) : null
24684
24900
  }
24685
24901
  }
24686
24902
  ),
24687
- /* @__PURE__ */ jsx(RPopover12.Portal, { container: portalContainer, children: /* @__PURE__ */ jsx(
24688
- RPopover12.Content,
24903
+ /* @__PURE__ */ jsx(RPopover13.Portal, { container: portalContainer, children: /* @__PURE__ */ jsx(
24904
+ RPopover13.Content,
24689
24905
  {
24690
24906
  side: "bottom",
24691
24907
  align: "start",
@@ -25278,8 +25494,8 @@ function InlineDatePresetFilter({
25278
25494
  applied && (rangeValue ? (
25279
25495
  // 뱃지 모양은 그대로 두고, 눌렀을 때 캘린더가 열려 기간을 직접 다시 고를 수 있게 한다.
25280
25496
  // 직접 고르면 프리셋 선택은 해제된다.
25281
- /* @__PURE__ */ jsxs(RPopover12.Root, { open: pickerOpen, onOpenChange: setPickerOpen, children: [
25282
- /* @__PURE__ */ jsx(RPopover12.Trigger, { asChild: true, children: /* @__PURE__ */ jsx(
25497
+ /* @__PURE__ */ jsxs(RPopover13.Root, { open: pickerOpen, onOpenChange: setPickerOpen, children: [
25498
+ /* @__PURE__ */ jsx(RPopover13.Trigger, { asChild: true, children: /* @__PURE__ */ jsx(
25283
25499
  "button",
25284
25500
  {
25285
25501
  type: "button",
@@ -25288,8 +25504,8 @@ function InlineDatePresetFilter({
25288
25504
  children: badge
25289
25505
  }
25290
25506
  ) }),
25291
- /* @__PURE__ */ jsx(RPopover12.Portal, { container: portalContainer, children: /* @__PURE__ */ jsx(
25292
- RPopover12.Content,
25507
+ /* @__PURE__ */ jsx(RPopover13.Portal, { container: portalContainer, children: /* @__PURE__ */ jsx(
25508
+ RPopover13.Content,
25293
25509
  {
25294
25510
  side: "bottom",
25295
25511
  align: "start",
@@ -26751,8 +26967,8 @@ function STimePicker({
26751
26967
  disabled,
26752
26968
  className,
26753
26969
  style,
26754
- children: /* @__PURE__ */ jsxs(RPopover12.Root, { open, onOpenChange: commitOpen, children: [
26755
- /* @__PURE__ */ jsx(RPopover12.Trigger, { asChild: true, children: /* @__PURE__ */ jsxs(
26970
+ children: /* @__PURE__ */ jsxs(RPopover13.Root, { open, onOpenChange: commitOpen, children: [
26971
+ /* @__PURE__ */ jsx(RPopover13.Trigger, { asChild: true, children: /* @__PURE__ */ jsxs(
26756
26972
  "div",
26757
26973
  {
26758
26974
  ref: triggerRef,
@@ -26812,8 +27028,8 @@ function STimePicker({
26812
27028
  ]
26813
27029
  }
26814
27030
  ) }),
26815
- /* @__PURE__ */ jsx(RPopover12.Portal, { container: portalContainer, children: /* @__PURE__ */ jsx(
26816
- RPopover12.Content,
27031
+ /* @__PURE__ */ jsx(RPopover13.Portal, { container: portalContainer, children: /* @__PURE__ */ jsx(
27032
+ RPopover13.Content,
26817
27033
  {
26818
27034
  side: "bottom",
26819
27035
  align: "start",
@@ -27221,8 +27437,8 @@ function STimeRangePicker({
27221
27437
  disabled,
27222
27438
  className,
27223
27439
  style,
27224
- children: /* @__PURE__ */ jsxs(RPopover12.Root, { open, onOpenChange: commitOpen, children: [
27225
- /* @__PURE__ */ jsx(RPopover12.Trigger, { asChild: true, children: /* @__PURE__ */ jsxs(
27440
+ children: /* @__PURE__ */ jsxs(RPopover13.Root, { open, onOpenChange: commitOpen, children: [
27441
+ /* @__PURE__ */ jsx(RPopover13.Trigger, { asChild: true, children: /* @__PURE__ */ jsxs(
27226
27442
  "div",
27227
27443
  {
27228
27444
  ref: triggerRef,
@@ -27282,8 +27498,8 @@ function STimeRangePicker({
27282
27498
  ]
27283
27499
  }
27284
27500
  ) }),
27285
- /* @__PURE__ */ jsx(RPopover12.Portal, { container: portalContainer, children: /* @__PURE__ */ jsx(
27286
- RPopover12.Content,
27501
+ /* @__PURE__ */ jsx(RPopover13.Portal, { container: portalContainer, children: /* @__PURE__ */ jsx(
27502
+ RPopover13.Content,
27287
27503
  {
27288
27504
  side: "bottom",
27289
27505
  align: "start",
@@ -27310,6 +27526,6 @@ function STimeRangePicker({
27310
27526
  );
27311
27527
  }
27312
27528
 
27313
- 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, CONTEXT_ALERT_DEFAULT_ICON, CONTEXT_ALERT_ICON_COLOR, CONTEXT_ALERT_INTENTS, CONTEXT_ALERT_SURFACE, 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, PAGE_PADDINGS, 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, SContextAlert, 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 };
27529
+ 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, CONTEXT_ALERT_DEFAULT_ICON, CONTEXT_ALERT_ICON_COLOR, CONTEXT_ALERT_INTENTS, CONTEXT_ALERT_SURFACE, 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, PAGE_PADDINGS, 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, SContextAlert, 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, 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 };
27314
27530
  //# sourceMappingURL=index.js.map
27315
27531
  //# sourceMappingURL=index.js.map