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/AGENTS.md +89 -4
- package/dist/components/SBarChart/barChart.config.d.ts +0 -8
- package/dist/components/SImage/README.md +3 -0
- package/dist/components/SImage/SImage.d.ts +9 -6
- package/dist/components/SLoadingContainer/index.d.ts +1 -1
- package/dist/components/SLoadingContainer/loading.d.ts +34 -15
- package/dist/index.cjs +312 -144
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +313 -144
- package/dist/index.js.map +1 -1
- package/dist/lib/chart/hover-dim.d.ts +19 -0
- package/dist/lib/hover-preview.d.ts +32 -0
- package/dist/llms-full.txt +92 -4
- package/dist/llms.txt +89 -4
- package/package.json +1 -1
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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(
|
|
4435
|
-
/* @__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(
|
|
4448
|
-
|
|
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(
|
|
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(
|
|
4780
|
+
/* @__PURE__ */ jsxRuntime.jsx(RPopover13__namespace.Anchor, { asChild: true, children: triggerNode })
|
|
4642
4781
|
) : isHover ? (
|
|
4643
4782
|
// hover: Anchor(위치 기준) + 직접 mouse 핸들러 — 클릭으로 토글되지 않도록 Trigger 미사용
|
|
4644
|
-
/* @__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(
|
|
4656
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4657
|
-
|
|
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(
|
|
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
|
|
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(
|
|
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
|
-
* 반환값은 이 호출
|
|
8362
|
-
*
|
|
8523
|
+
* 반환값은 이 호출 하나를 걷고 갱신하는 핸들이다(두 번 걷어도 한 번만 걷힌다).
|
|
8524
|
+
*
|
|
8525
|
+
* **걷는 것은 `finally` 에 둔다.** 빠뜨리면 그 즉시 화면이 갇히고, 정상 경로에서는 아무
|
|
8526
|
+
* 표시가 없다.
|
|
8363
8527
|
*
|
|
8364
|
-
*
|
|
8365
|
-
*
|
|
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
|
-
|
|
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
|
-
*
|
|
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
|
-
|
|
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(
|
|
8919
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
8920
|
-
|
|
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(
|
|
9672
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
9673
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
9674
|
-
|
|
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(
|
|
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(
|
|
9859
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
9860
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
9861
|
-
|
|
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(
|
|
12355
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
12356
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
12357
|
-
|
|
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
|
-
|
|
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(
|
|
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(
|
|
14501
|
-
|
|
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(
|
|
17005
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
17006
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
17007
|
-
|
|
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(
|
|
18262
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
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(
|
|
18322
|
-
|
|
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
|
-
|
|
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(
|
|
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(
|
|
18872
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
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
|
-
|
|
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:
|
|
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
|
-
|
|
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:
|
|
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:
|
|
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(
|
|
23249
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
23250
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
23251
|
-
|
|
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(
|
|
24645
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
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(
|
|
24671
|
-
|
|
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(
|
|
24875
|
+
/* @__PURE__ */ jsxRuntime.jsxs(RPopover13__namespace.Root, { open: openKey != null, onOpenChange: (next) => !next && setOpenKey(null), children: [
|
|
24707
24876
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
24708
|
-
|
|
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(
|
|
24716
|
-
|
|
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(
|
|
25310
|
-
/* @__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(
|
|
25320
|
-
|
|
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(
|
|
26783
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
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(
|
|
26844
|
-
|
|
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(
|
|
27253
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
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(
|
|
27314
|
-
|
|
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;
|