sellmate-design-system-react 9.0.0-beta.63 → 9.0.0-beta.65
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 +31 -5
- package/dist/components/SBarChart/README.md +2 -0
- package/dist/components/SBarChart/SBarChart.d.ts +4 -0
- package/dist/components/SBarChart/barChart.config.d.ts +12 -5
- package/dist/components/SBarcodeInput/README.md +1 -0
- package/dist/components/SBarcodeInput/SBarcodeInput.d.ts +8 -1
- package/dist/components/SCalendarBoard/CalendarDayCard.d.ts +11 -3
- package/dist/components/SCalendarBoard/CalendarEventButton.d.ts +7 -2
- package/dist/components/SCalendarBoard/CalendarMoreButton.d.ts +2 -1
- package/dist/components/SCalendarBoard/README.md +11 -2
- package/dist/components/SCalendarBoard/SCalendarBoard.d.ts +4 -1
- package/dist/components/SCalendarBoard/calendar-board-layout.d.ts +49 -0
- package/dist/components/SCalendarBoard/types.d.ts +10 -1
- package/dist/components/SChipInput/README.md +1 -0
- package/dist/components/SChipInput/SChipInput.d.ts +8 -1
- package/dist/components/SContextAlert/README.md +51 -0
- package/dist/components/SContextAlert/SContextAlert.d.ts +38 -0
- package/dist/components/SContextAlert/contextAlert.config.d.ts +29 -0
- package/dist/components/SContextAlert/index.d.ts +2 -0
- package/dist/components/SDatePicker/README.md +1 -0
- package/dist/components/SDatePicker/SDatePicker.d.ts +9 -2
- package/dist/components/SDateRangePicker/README.md +1 -0
- package/dist/components/SDateRangePicker/SDateRangePicker.d.ts +9 -2
- package/dist/components/SDonutChart/README.md +2 -0
- package/dist/components/SDonutChart/SDonutChart.d.ts +4 -0
- package/dist/components/SEditor/README.md +1 -0
- package/dist/components/SEditor/SEditor.d.ts +8 -1
- package/dist/components/SField/README.md +7 -0
- package/dist/components/SField/SField.d.ts +13 -0
- package/dist/components/SField/index.d.ts +1 -1
- package/dist/components/SFilePicker/README.md +1 -0
- package/dist/components/SFilePicker/SFilePicker.d.ts +9 -2
- package/dist/components/SIcon/README.md +2 -0
- package/dist/components/SInput/README.md +1 -0
- package/dist/components/SInput/SInput.d.ts +3 -1
- package/dist/components/SLineChart/README.md +2 -0
- package/dist/components/SLineChart/SLineChart.d.ts +4 -0
- package/dist/components/SLineChart/lineChart.config.d.ts +42 -33
- package/dist/components/SNumberInput/README.md +1 -0
- package/dist/components/SNumberInput/SNumberInput.d.ts +8 -1
- package/dist/components/SPieChart/README.md +2 -0
- package/dist/components/SPieChart/SPieChart.d.ts +4 -0
- package/dist/components/SSelect/README.md +1 -0
- package/dist/components/SSelect/SSelect.d.ts +8 -1
- package/dist/components/STextarea/README.md +1 -0
- package/dist/components/STextarea/STextarea.d.ts +8 -1
- package/dist/components/STimePicker/README.md +1 -0
- package/dist/components/STimePicker/STimePicker.d.ts +9 -2
- package/dist/components/STimeRangePicker/README.md +1 -0
- package/dist/components/STimeRangePicker/STimeRangePicker.d.ts +9 -2
- package/dist/index.cjs +525 -223
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +521 -224
- package/dist/index.js.map +1 -1
- package/dist/lib/chart/frame.d.ts +5 -1
- package/dist/lib/chart/palette.d.ts +12 -15
- package/dist/lib/chart/radial.d.ts +18 -10
- package/dist/llms-full.txt +120 -8
- package/dist/llms.txt +35 -8
- package/dist/styles.css +170 -18
- package/dist/theme.css +104 -6
- package/eslint/scale.gen.mjs +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -4122,7 +4122,7 @@ function SFooter({
|
|
|
4122
4122
|
{
|
|
4123
4123
|
className: cn(
|
|
4124
4124
|
"relative flex w-full flex-shrink-0 items-center justify-end gap-[var(--cmp-overlay-footer-gap)] overflow-hidden px-[var(--cmp-overlay-footer-paddingX)] py-[var(--cmp-overlay-footer-paddingY)]",
|
|
4125
|
-
isGrey ? "bg-[var(--cmp-overlay-footer-bg-neutral)] border-t border-solid border-[color:var(--sys-color-border-default)]" : "bg-[var(--cmp-overlay-footer-bg-default)] shadow-[var(--
|
|
4125
|
+
isGrey ? "bg-[var(--cmp-overlay-footer-bg-neutral)] border-t border-solid border-[color:var(--sys-color-border-default)]" : "bg-[var(--cmp-overlay-footer-bg-default)] shadow-[var(--cmp-overlay-footer-shadow)]",
|
|
4126
4126
|
className
|
|
4127
4127
|
),
|
|
4128
4128
|
style,
|
|
@@ -4711,6 +4711,7 @@ var SField = /* @__PURE__ */ forwardRef(function SField2({
|
|
|
4711
4711
|
iconColor,
|
|
4712
4712
|
labelTooltip = "",
|
|
4713
4713
|
labelTooltipProps,
|
|
4714
|
+
labelPosition = "left",
|
|
4714
4715
|
labelWidth,
|
|
4715
4716
|
labelHeight,
|
|
4716
4717
|
size = "sm",
|
|
@@ -4753,6 +4754,7 @@ var SField = /* @__PURE__ */ forwardRef(function SField2({
|
|
|
4753
4754
|
[]
|
|
4754
4755
|
);
|
|
4755
4756
|
const s = FIELD_SIZE[size];
|
|
4757
|
+
const labelOnTop = labelPosition === "top";
|
|
4756
4758
|
if (label !== "" && addonLabel !== "" && typeof console !== "undefined") {
|
|
4757
4759
|
console.warn(
|
|
4758
4760
|
"[SField] label \uACFC addonLabel \uC740 \uD568\uAED8 \uC0AC\uC6A9\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. addonLabel \uC744 \uBB34\uC2DC\uD569\uB2C8\uB2E4."
|
|
@@ -4791,103 +4793,120 @@ var SField = /* @__PURE__ */ forwardRef(function SField2({
|
|
|
4791
4793
|
style,
|
|
4792
4794
|
onMouseEnter,
|
|
4793
4795
|
onMouseLeave,
|
|
4794
|
-
children: /* @__PURE__ */ jsxs(
|
|
4795
|
-
|
|
4796
|
-
|
|
4797
|
-
|
|
4798
|
-
|
|
4799
|
-
|
|
4800
|
-
|
|
4801
|
-
|
|
4802
|
-
|
|
4803
|
-
|
|
4804
|
-
|
|
4805
|
-
|
|
4806
|
-
|
|
4807
|
-
|
|
4808
|
-
|
|
4809
|
-
|
|
4810
|
-
|
|
4811
|
-
|
|
4812
|
-
|
|
4813
|
-
|
|
4814
|
-
}
|
|
4815
|
-
),
|
|
4816
|
-
/* @__PURE__ */ jsx("span", { className: "min-w-0 overflow-hidden text-ellipsis whitespace-nowrap", children: label }),
|
|
4817
|
-
(labelTooltip !== "" || labelTooltipProps) && /* @__PURE__ */ jsx("span", { className: "shrink-0 flex items-center", style: { marginLeft: s.labelGap }, children: /* @__PURE__ */ jsx(
|
|
4818
|
-
STooltip2,
|
|
4819
|
-
{
|
|
4820
|
-
message: labelTooltip !== "" ? [labelTooltip] : void 0,
|
|
4821
|
-
iconSize: s.icon,
|
|
4822
|
-
...labelTooltipProps
|
|
4823
|
-
}
|
|
4824
|
-
) })
|
|
4825
|
-
]
|
|
4826
|
-
}
|
|
4827
|
-
),
|
|
4828
|
-
/* @__PURE__ */ jsxs(
|
|
4829
|
-
"div",
|
|
4830
|
-
{
|
|
4831
|
-
className: cn("flex min-w-0 flex-col", !hug && !isPercentWidth && "flex-1"),
|
|
4832
|
-
style: {
|
|
4833
|
-
width: resolvedWidth,
|
|
4834
|
-
minWidth: fieldWidthValue(minWidth),
|
|
4835
|
-
maxWidth: resolvedMaxWidth
|
|
4836
|
-
},
|
|
4837
|
-
children: [
|
|
4838
|
-
/* @__PURE__ */ jsxs(
|
|
4839
|
-
"div",
|
|
4840
|
-
{
|
|
4841
|
-
className: cn(
|
|
4842
|
-
"relative box-border flex min-w-0 items-stretch border border-solid border-(--field-bc)",
|
|
4843
|
-
// 둘 다 넘친 것을 잘라 내지만 clip 은 스크롤 상자를 만들지 않는다. hidden 이면
|
|
4844
|
-
// 이 상자가 스크롤포트가 되어 안쪽의 position:sticky 가 페이지 스크롤을 따라가지
|
|
4845
|
-
// 못한다 (SEditor 의 고정 툴바). 여러 줄 필드에서만 바꿔 파급을 좁힌다.
|
|
4846
|
-
multiline ? "overflow-clip" : "overflow-hidden",
|
|
4847
|
-
interactive && !borderless && "hover:border-(--sys-color-field-border-focus) hover:shadow-[0px_0px_4px_0px_#0071ff66] focus-within:border-(--sys-color-field-border-focus) focus-within:shadow-[0px_0px_4px_0px_#0071ff66]",
|
|
4848
|
-
disabled && "cursor-not-allowed"
|
|
4849
|
-
),
|
|
4850
|
-
style: {
|
|
4851
|
-
// @ts-expect-error CSS 변수
|
|
4852
|
-
"--field-bc": borderColor,
|
|
4853
|
-
// focused/hovered prop이 명시된 경우 강조를 즉시 반영
|
|
4854
|
-
...interactive && !borderless && (focused || hovered) ? { boxShadow: FOCUS_RING_SHADOW } : {},
|
|
4855
|
-
...multiline ? { minHeight: s.height } : { height: s.height },
|
|
4856
|
-
"borderRadius": s.radius,
|
|
4857
|
-
"background": bgColor,
|
|
4858
|
-
"color": textColor
|
|
4796
|
+
children: /* @__PURE__ */ jsxs(
|
|
4797
|
+
"div",
|
|
4798
|
+
{
|
|
4799
|
+
className: cn(
|
|
4800
|
+
"flex w-full",
|
|
4801
|
+
labelOnTop ? "flex-col gap-(--sys-space-field-vertical-gap)" : "items-start"
|
|
4802
|
+
),
|
|
4803
|
+
children: [
|
|
4804
|
+
label !== "" && /* @__PURE__ */ jsxs(
|
|
4805
|
+
"div",
|
|
4806
|
+
{
|
|
4807
|
+
className: "flex shrink-0 items-center font-bold text-(--sys-color-field-text-default)",
|
|
4808
|
+
style: {
|
|
4809
|
+
// 위에 선 라벨은 제 글줄 높이만 차지한다 — 컨트롤 높이에 맞춰 늘리면
|
|
4810
|
+
// 라벨과 컨트롤 사이가 간격 토큰보다 넓어진다. 줄 세우기용 labelWidth 도
|
|
4811
|
+
// 뜻이 없다(아래에 컨트롤이 제 폭으로 선다).
|
|
4812
|
+
...labelOnTop ? {} : {
|
|
4813
|
+
height: cssLen(labelHeight) ?? s.height,
|
|
4814
|
+
marginRight: s.fieldGap,
|
|
4815
|
+
width: cssLen(labelWidth)
|
|
4859
4816
|
},
|
|
4860
|
-
|
|
4861
|
-
|
|
4862
|
-
|
|
4863
|
-
|
|
4864
|
-
|
|
4865
|
-
|
|
4866
|
-
|
|
4867
|
-
|
|
4868
|
-
|
|
4869
|
-
|
|
4870
|
-
|
|
4871
|
-
|
|
4872
|
-
|
|
4873
|
-
|
|
4874
|
-
|
|
4875
|
-
|
|
4876
|
-
|
|
4877
|
-
|
|
4878
|
-
|
|
4879
|
-
|
|
4880
|
-
|
|
4881
|
-
|
|
4882
|
-
|
|
4883
|
-
|
|
4884
|
-
|
|
4885
|
-
|
|
4886
|
-
|
|
4887
|
-
|
|
4888
|
-
|
|
4889
|
-
|
|
4890
|
-
|
|
4817
|
+
fontSize: s.fontSize,
|
|
4818
|
+
lineHeight: `${s.lineHeight}px`
|
|
4819
|
+
},
|
|
4820
|
+
children: [
|
|
4821
|
+
icon && /* @__PURE__ */ jsx(
|
|
4822
|
+
SIcon,
|
|
4823
|
+
{
|
|
4824
|
+
name: icon,
|
|
4825
|
+
size: s.icon,
|
|
4826
|
+
color: iconColor,
|
|
4827
|
+
style: { marginRight: s.labelGap }
|
|
4828
|
+
}
|
|
4829
|
+
),
|
|
4830
|
+
/* @__PURE__ */ jsx("span", { className: "min-w-0 overflow-hidden text-ellipsis whitespace-nowrap", children: label }),
|
|
4831
|
+
(labelTooltip !== "" || labelTooltipProps) && /* @__PURE__ */ jsx("span", { className: "shrink-0 flex items-center", style: { marginLeft: s.labelGap }, children: /* @__PURE__ */ jsx(
|
|
4832
|
+
STooltip2,
|
|
4833
|
+
{
|
|
4834
|
+
message: labelTooltip !== "" ? [labelTooltip] : void 0,
|
|
4835
|
+
iconSize: s.icon,
|
|
4836
|
+
...labelTooltipProps
|
|
4837
|
+
}
|
|
4838
|
+
) })
|
|
4839
|
+
]
|
|
4840
|
+
}
|
|
4841
|
+
),
|
|
4842
|
+
/* @__PURE__ */ jsxs(
|
|
4843
|
+
"div",
|
|
4844
|
+
{
|
|
4845
|
+
className: cn(
|
|
4846
|
+
"flex min-w-0 flex-col",
|
|
4847
|
+
!labelOnTop && !hug && !isPercentWidth && "flex-1"
|
|
4848
|
+
),
|
|
4849
|
+
style: {
|
|
4850
|
+
width: resolvedWidth,
|
|
4851
|
+
minWidth: fieldWidthValue(minWidth),
|
|
4852
|
+
maxWidth: resolvedMaxWidth
|
|
4853
|
+
},
|
|
4854
|
+
children: [
|
|
4855
|
+
/* @__PURE__ */ jsxs(
|
|
4856
|
+
"div",
|
|
4857
|
+
{
|
|
4858
|
+
className: cn(
|
|
4859
|
+
"relative box-border flex min-w-0 items-stretch border border-solid border-(--field-bc)",
|
|
4860
|
+
// 둘 다 넘친 것을 잘라 내지만 clip 은 스크롤 상자를 만들지 않는다. hidden 이면
|
|
4861
|
+
// 이 상자가 스크롤포트가 되어 안쪽의 position:sticky 가 페이지 스크롤을 따라가지
|
|
4862
|
+
// 못한다 (SEditor 의 고정 툴바). 여러 줄 필드에서만 바꿔 파급을 좁힌다.
|
|
4863
|
+
multiline ? "overflow-clip" : "overflow-hidden",
|
|
4864
|
+
interactive && !borderless && "hover:border-(--sys-color-field-border-focus) hover:shadow-[0px_0px_4px_0px_#0071ff66] focus-within:border-(--sys-color-field-border-focus) focus-within:shadow-[0px_0px_4px_0px_#0071ff66]",
|
|
4865
|
+
disabled && "cursor-not-allowed"
|
|
4866
|
+
),
|
|
4867
|
+
style: {
|
|
4868
|
+
// @ts-expect-error CSS 변수
|
|
4869
|
+
"--field-bc": borderColor,
|
|
4870
|
+
// focused/hovered prop이 명시된 경우 강조를 즉시 반영
|
|
4871
|
+
...interactive && !borderless && (focused || hovered) ? { boxShadow: FOCUS_RING_SHADOW } : {},
|
|
4872
|
+
...multiline ? { minHeight: s.height } : { height: s.height },
|
|
4873
|
+
"borderRadius": s.radius,
|
|
4874
|
+
"background": bgColor,
|
|
4875
|
+
"color": textColor
|
|
4876
|
+
},
|
|
4877
|
+
"data-focused": focused || void 0,
|
|
4878
|
+
"data-hovered": hovered || void 0,
|
|
4879
|
+
children: [
|
|
4880
|
+
effectiveAddonLabel !== "" && /* @__PURE__ */ jsxs(
|
|
4881
|
+
"div",
|
|
4882
|
+
{
|
|
4883
|
+
className: "flex shrink-0 items-center gap-(--cmp-field-addonLabel-gap) whitespace-nowrap border-r border-solid px-(--cmp-field-addonLabel-paddingX) text-12 font-medium leading-sd-20",
|
|
4884
|
+
style: {
|
|
4885
|
+
// 원본 sd-field: labelWidth가 addon 폭(--sd-field-addon-width)에도 적용됨
|
|
4886
|
+
width: cssLen(labelWidth),
|
|
4887
|
+
justifyContent: ALIGN[addonAlign],
|
|
4888
|
+
background: "var(--cmp-field-addonLabel-bg)",
|
|
4889
|
+
borderRightColor: disabled ? "var(--cmp-field-addonLabel-border-disabled)" : "var(--cmp-field-addonLabel-border-default)",
|
|
4890
|
+
borderTopLeftRadius: s.radius - 1,
|
|
4891
|
+
borderBottomLeftRadius: s.radius - 1
|
|
4892
|
+
},
|
|
4893
|
+
children: [
|
|
4894
|
+
icon && !label && /* @__PURE__ */ jsx(SIcon, { name: icon, size: s.icon, color: iconColor }),
|
|
4895
|
+
effectiveAddonLabel
|
|
4896
|
+
]
|
|
4897
|
+
}
|
|
4898
|
+
),
|
|
4899
|
+
/* @__PURE__ */ jsx("div", { className: cn("flex min-w-0 flex-1", multiline && "bg-inherit"), children })
|
|
4900
|
+
]
|
|
4901
|
+
}
|
|
4902
|
+
),
|
|
4903
|
+
showError ? /* @__PURE__ */ jsx("div", { className: "mt-(--cmp-field-contents-gap) px-(--cmp-field-message-paddingX) text-12 font-normal leading-sd-20 text-(--cmp-field-errorMessage-color)", children: errorMessage }) : hint !== "" ? /* @__PURE__ */ jsx("div", { className: "mt-(--cmp-field-contents-gap) px-(--cmp-field-message-paddingX) text-12 font-normal leading-sd-20 text-(--cmp-field-hint-color)", children: hint }) : null
|
|
4904
|
+
]
|
|
4905
|
+
}
|
|
4906
|
+
)
|
|
4907
|
+
]
|
|
4908
|
+
}
|
|
4909
|
+
)
|
|
4891
4910
|
}
|
|
4892
4911
|
);
|
|
4893
4912
|
});
|
|
@@ -4924,6 +4943,7 @@ var STextarea = /* @__PURE__ */ forwardRef(function STextarea2({
|
|
|
4924
4943
|
textareaClassName,
|
|
4925
4944
|
textareaStyle,
|
|
4926
4945
|
label,
|
|
4946
|
+
labelPosition,
|
|
4927
4947
|
labelWidth,
|
|
4928
4948
|
icon,
|
|
4929
4949
|
iconColor,
|
|
@@ -4983,6 +5003,7 @@ var STextarea = /* @__PURE__ */ forwardRef(function STextarea2({
|
|
|
4983
5003
|
SField,
|
|
4984
5004
|
{
|
|
4985
5005
|
label,
|
|
5006
|
+
labelPosition,
|
|
4986
5007
|
labelWidth,
|
|
4987
5008
|
icon,
|
|
4988
5009
|
iconColor,
|
|
@@ -6950,7 +6971,7 @@ function TreeConnector({
|
|
|
6950
6971
|
className: cn(
|
|
6951
6972
|
"absolute left-[6px] h-px bg-(--cmp-tree-connector-line-color)",
|
|
6952
6973
|
branchTop,
|
|
6953
|
-
hasChildren ? "w-[14px]" : "w-[calc(14px+var(--cmp-
|
|
6974
|
+
hasChildren ? "w-[14px]" : "w-[calc(14px+var(--cmp-ghostButton-xxs-size))]"
|
|
6954
6975
|
)
|
|
6955
6976
|
}
|
|
6956
6977
|
)
|
|
@@ -7103,7 +7124,12 @@ var STreeItemImpl = /* @__PURE__ */ forwardRef(function STreeItem({
|
|
|
7103
7124
|
onToggle?.(node, event);
|
|
7104
7125
|
}
|
|
7105
7126
|
}
|
|
7106
|
-
) :
|
|
7127
|
+
) : (
|
|
7128
|
+
// 자식이 없는 줄은 펼침 버튼 자리를 빈 칸으로 남겨 라벨의 시작점을 맞춘다.
|
|
7129
|
+
// 크기는 자리를 대신하는 그 버튼(`SGhostButton size="xxs"`)의 토큰을 그대로 쓴다 —
|
|
7130
|
+
// 버튼 크기가 바뀌면 빈 칸도 같이 따라가야 줄이 어긋나지 않는다.
|
|
7131
|
+
/* @__PURE__ */ jsx("span", { className: "size-(--cmp-ghostButton-xxs-size) shrink-0", "aria-hidden": "true" })
|
|
7132
|
+
),
|
|
7107
7133
|
leadingNode,
|
|
7108
7134
|
selectable && /* @__PURE__ */ jsx(
|
|
7109
7135
|
"span",
|
|
@@ -8046,6 +8072,96 @@ var SCallout = /* @__PURE__ */ forwardRef(function SCallout2({ type = "default",
|
|
|
8046
8072
|
}
|
|
8047
8073
|
);
|
|
8048
8074
|
});
|
|
8075
|
+
|
|
8076
|
+
// src/components/SContextAlert/contextAlert.config.ts
|
|
8077
|
+
var CONTEXT_ALERT_INTENTS = [
|
|
8078
|
+
"default",
|
|
8079
|
+
"danger",
|
|
8080
|
+
"warning",
|
|
8081
|
+
"success",
|
|
8082
|
+
"accent",
|
|
8083
|
+
"discovery"
|
|
8084
|
+
];
|
|
8085
|
+
var CONTEXT_ALERT_SURFACE = {
|
|
8086
|
+
default: {
|
|
8087
|
+
bg: "var(--cmp-contextAlert-default-bg)",
|
|
8088
|
+
border: "var(--cmp-contextAlert-default-border)"
|
|
8089
|
+
},
|
|
8090
|
+
danger: {
|
|
8091
|
+
bg: "var(--cmp-contextAlert-danger-bg)",
|
|
8092
|
+
border: "var(--cmp-contextAlert-danger-border)"
|
|
8093
|
+
},
|
|
8094
|
+
warning: {
|
|
8095
|
+
bg: "var(--cmp-contextAlert-warning-bg)",
|
|
8096
|
+
border: "var(--cmp-contextAlert-warning-border)"
|
|
8097
|
+
},
|
|
8098
|
+
success: {
|
|
8099
|
+
bg: "var(--cmp-contextAlert-success-bg)",
|
|
8100
|
+
border: "var(--cmp-contextAlert-success-border)"
|
|
8101
|
+
},
|
|
8102
|
+
accent: {
|
|
8103
|
+
bg: "var(--cmp-contextAlert-accent-bg)",
|
|
8104
|
+
border: "var(--cmp-contextAlert-accent-border)"
|
|
8105
|
+
},
|
|
8106
|
+
discovery: {
|
|
8107
|
+
bg: "var(--cmp-contextAlert-discovery-bg)",
|
|
8108
|
+
border: "var(--cmp-contextAlert-discovery-border)"
|
|
8109
|
+
}
|
|
8110
|
+
};
|
|
8111
|
+
var CONTEXT_ALERT_DEFAULT_ICON = "notificationOutline";
|
|
8112
|
+
var CONTEXT_ALERT_ICON_COLOR = "var(--sys-color-fg-tertiary)";
|
|
8113
|
+
var SContextAlert = /* @__PURE__ */ forwardRef(function SContextAlert2({
|
|
8114
|
+
intent = "default",
|
|
8115
|
+
messages = [],
|
|
8116
|
+
icon = CONTEXT_ALERT_DEFAULT_ICON,
|
|
8117
|
+
action: action2,
|
|
8118
|
+
className,
|
|
8119
|
+
style
|
|
8120
|
+
}, ref) {
|
|
8121
|
+
const surface = CONTEXT_ALERT_SURFACE[intent];
|
|
8122
|
+
const vars = {
|
|
8123
|
+
"--ca-bg": surface.bg,
|
|
8124
|
+
"--ca-border": surface.border
|
|
8125
|
+
};
|
|
8126
|
+
return /* @__PURE__ */ jsxs(
|
|
8127
|
+
"div",
|
|
8128
|
+
{
|
|
8129
|
+
ref,
|
|
8130
|
+
role: "note",
|
|
8131
|
+
className: cn(
|
|
8132
|
+
"flex w-full items-center gap-[var(--cmp-contextAlert-gap)]",
|
|
8133
|
+
"rounded-[var(--cmp-contextAlert-radius)] border-[length:var(--cmp-contextAlert-border-width)] border-solid",
|
|
8134
|
+
"px-[var(--cmp-contextAlert-paddingX)] py-[var(--cmp-contextAlert-paddingY)]",
|
|
8135
|
+
"border-[color:var(--ca-border)] bg-[var(--ca-bg)]",
|
|
8136
|
+
className
|
|
8137
|
+
),
|
|
8138
|
+
style: { ...vars, ...style },
|
|
8139
|
+
children: [
|
|
8140
|
+
/* @__PURE__ */ jsx(
|
|
8141
|
+
SIcon,
|
|
8142
|
+
{
|
|
8143
|
+
name: icon,
|
|
8144
|
+
size: "var(--cmp-contextAlert-icon)",
|
|
8145
|
+
color: CONTEXT_ALERT_ICON_COLOR,
|
|
8146
|
+
className: "shrink-0"
|
|
8147
|
+
}
|
|
8148
|
+
),
|
|
8149
|
+
/* @__PURE__ */ jsx("div", { className: "flex min-w-0 flex-1 flex-col text-[12px] font-normal leading-[20px] text-[color:var(--cmp-contextAlert-content)]", children: messages.map((m, i) => (
|
|
8150
|
+
// 메시지는 HTML 문자열을 허용하되, sanitizeInlineHtml 로 살균 후 innerHTML 렌더 (XSS 방어)
|
|
8151
|
+
/* @__PURE__ */ jsx(
|
|
8152
|
+
"p",
|
|
8153
|
+
{
|
|
8154
|
+
className: "m-0 break-keep break-words text-pretty",
|
|
8155
|
+
dangerouslySetInnerHTML: { __html: sanitizeInlineHtml(m) }
|
|
8156
|
+
},
|
|
8157
|
+
`${i}-${m}`
|
|
8158
|
+
)
|
|
8159
|
+
)) }),
|
|
8160
|
+
action2 != null && /* @__PURE__ */ jsx("div", { className: "flex shrink-0 items-center", children: action2 })
|
|
8161
|
+
]
|
|
8162
|
+
}
|
|
8163
|
+
);
|
|
8164
|
+
});
|
|
8049
8165
|
var FILL_COLOR = {
|
|
8050
8166
|
primary: "var(--cmp-progress-color-active)",
|
|
8051
8167
|
error: "var(--cmp-progress-color-error)",
|
|
@@ -10044,7 +10160,7 @@ function SConfirmModal({
|
|
|
10044
10160
|
}
|
|
10045
10161
|
)
|
|
10046
10162
|
] }),
|
|
10047
|
-
hasBody && /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center gap-[20px] text-center text-[
|
|
10163
|
+
hasBody && /* @__PURE__ */ jsxs("div", { className: "typo-feedback-md-regular flex w-full flex-col items-center gap-[20px] text-center text-[color:var(--cmp-modal-confirm-message-color)]", children: [
|
|
10048
10164
|
topMessage.length > 0 && /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-[2px]", children: topMessage.map((m, i) => /* @__PURE__ */ jsx(
|
|
10049
10165
|
"p",
|
|
10050
10166
|
{
|
|
@@ -10230,7 +10346,7 @@ function SLoadingModal({
|
|
|
10230
10346
|
lines.length > 0 && /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-[2px]", children: lines.map((m, i) => /* @__PURE__ */ jsx(
|
|
10231
10347
|
"p",
|
|
10232
10348
|
{
|
|
10233
|
-
className: "m-0 max-w-[400px] break-keep text-center text-[
|
|
10349
|
+
className: "typo-feedback-md-regular m-0 max-w-[400px] break-keep text-center text-[color:var(--cmp-modal-loading-message-color)]",
|
|
10234
10350
|
children: m
|
|
10235
10351
|
},
|
|
10236
10352
|
i
|
|
@@ -11985,7 +12101,7 @@ var SGnb = /* @__PURE__ */ forwardRef(function SGnb2({
|
|
|
11985
12101
|
viewportPadding: 8,
|
|
11986
12102
|
ariaLabel: GNB_LAUNCHER_LABEL,
|
|
11987
12103
|
onOpenAutoFocus: (event) => event.preventDefault(),
|
|
11988
|
-
className: "w-auto rounded-(--cmp-gnb-launcher-listBox-radius) bg-(--cmp-gnb-launcher-listBox-bg) shadow-
|
|
12104
|
+
className: "w-auto rounded-(--cmp-gnb-launcher-listBox-radius) bg-(--cmp-gnb-launcher-listBox-bg) shadow-(--cmp-gnb-launcher-listBox-shadow)",
|
|
11989
12105
|
children: /* @__PURE__ */ jsx(
|
|
11990
12106
|
SLauncherListBox,
|
|
11991
12107
|
{
|
|
@@ -13689,6 +13805,98 @@ function monthCells(year, month) {
|
|
|
13689
13805
|
}
|
|
13690
13806
|
var WEEK_LABELS = ["\uC77C", "\uC6D4", "\uD654", "\uC218", "\uBAA9", "\uAE08", "\uD1A0"];
|
|
13691
13807
|
|
|
13808
|
+
// src/components/SCalendarBoard/calendar-board-layout.ts
|
|
13809
|
+
function eventEndDate(event) {
|
|
13810
|
+
const end = event.endDate;
|
|
13811
|
+
return end != null && end > event.date ? end : event.date;
|
|
13812
|
+
}
|
|
13813
|
+
function layoutCalendarBoard({
|
|
13814
|
+
cells,
|
|
13815
|
+
events,
|
|
13816
|
+
rowCapacity,
|
|
13817
|
+
blockedDates
|
|
13818
|
+
}) {
|
|
13819
|
+
const count = cells.length;
|
|
13820
|
+
const weekCount = Math.ceil(count / 7);
|
|
13821
|
+
const segmentsByCell = Array.from({ length: count }, () => []);
|
|
13822
|
+
const eventsByCell = Array.from({ length: count }, () => []);
|
|
13823
|
+
const hiddenCountByCell = new Array(count).fill(0);
|
|
13824
|
+
const moreLaneByWeek = new Array(weekCount).fill(-1);
|
|
13825
|
+
const runs = [];
|
|
13826
|
+
events.forEach((event, order) => {
|
|
13827
|
+
const start = event.date;
|
|
13828
|
+
const end = eventEndDate(event);
|
|
13829
|
+
let from = -1;
|
|
13830
|
+
let to = -1;
|
|
13831
|
+
for (let i = 0; i < count; i++) {
|
|
13832
|
+
const { date } = cells[i];
|
|
13833
|
+
if (date < start || date > end) continue;
|
|
13834
|
+
if (from < 0) from = i;
|
|
13835
|
+
to = i;
|
|
13836
|
+
if (!blockedDates.has(date)) eventsByCell[i].push(event);
|
|
13837
|
+
}
|
|
13838
|
+
if (from < 0) return;
|
|
13839
|
+
let runStart = -1;
|
|
13840
|
+
const flush = (endIndex) => {
|
|
13841
|
+
if (runStart < 0) return;
|
|
13842
|
+
runs.push({ event, order, startIndex: runStart, endIndex, lane: -1 });
|
|
13843
|
+
runStart = -1;
|
|
13844
|
+
};
|
|
13845
|
+
for (let i = from; i <= to; i++) {
|
|
13846
|
+
if (blockedDates.has(cells[i].date)) {
|
|
13847
|
+
flush(i - 1);
|
|
13848
|
+
continue;
|
|
13849
|
+
}
|
|
13850
|
+
if (runStart >= 0 && i % 7 === 0) flush(i - 1);
|
|
13851
|
+
if (runStart < 0) runStart = i;
|
|
13852
|
+
}
|
|
13853
|
+
flush(to);
|
|
13854
|
+
});
|
|
13855
|
+
runs.sort(
|
|
13856
|
+
(a, b) => a.startIndex - b.startIndex || b.endIndex - b.startIndex - (a.endIndex - a.startIndex) || a.order - b.order
|
|
13857
|
+
);
|
|
13858
|
+
const weekLanes = Array.from({ length: weekCount }, () => []);
|
|
13859
|
+
for (const run of runs) {
|
|
13860
|
+
const week = Math.floor(run.startIndex / 7);
|
|
13861
|
+
const fromDay = run.startIndex % 7;
|
|
13862
|
+
const toDay = run.endIndex % 7;
|
|
13863
|
+
const lanes = weekLanes[week];
|
|
13864
|
+
let lane = 0;
|
|
13865
|
+
for (; ; ) {
|
|
13866
|
+
if (lanes[lane] == null) lanes[lane] = new Array(7).fill(false);
|
|
13867
|
+
let free = true;
|
|
13868
|
+
for (let d = fromDay; d <= toDay && free; d++) if (lanes[lane][d]) free = false;
|
|
13869
|
+
if (free) break;
|
|
13870
|
+
lane += 1;
|
|
13871
|
+
}
|
|
13872
|
+
for (let d = fromDay; d <= toDay; d++) lanes[lane][d] = true;
|
|
13873
|
+
run.lane = lane;
|
|
13874
|
+
}
|
|
13875
|
+
for (let week = 0; week < weekCount; week++) {
|
|
13876
|
+
if (weekLanes[week].length > rowCapacity) moreLaneByWeek[week] = rowCapacity - 1;
|
|
13877
|
+
}
|
|
13878
|
+
for (const run of runs) {
|
|
13879
|
+
const week = Math.floor(run.startIndex / 7);
|
|
13880
|
+
const moreLane = moreLaneByWeek[week];
|
|
13881
|
+
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;
|
|
13885
|
+
}
|
|
13886
|
+
const { event } = run;
|
|
13887
|
+
segmentsByCell[run.startIndex].push({
|
|
13888
|
+
event,
|
|
13889
|
+
key: `${event.id ?? `${event.date}-${run.order}`}-${run.startIndex}`,
|
|
13890
|
+
startIndex: run.startIndex,
|
|
13891
|
+
span: run.endIndex - run.startIndex + 1,
|
|
13892
|
+
lane: run.lane,
|
|
13893
|
+
startsHere: cells[run.startIndex].date === event.date,
|
|
13894
|
+
endsHere: cells[run.endIndex].date === eventEndDate(event)
|
|
13895
|
+
});
|
|
13896
|
+
}
|
|
13897
|
+
return { segmentsByCell, eventsByCell, hiddenCountByCell, moreLaneByWeek };
|
|
13898
|
+
}
|
|
13899
|
+
|
|
13692
13900
|
// src/components/SCalendarBoard/calendarBoard.config.ts
|
|
13693
13901
|
var CALENDAR_BOARD_EVENT_COLORS = [
|
|
13694
13902
|
"default",
|
|
@@ -13733,7 +13941,10 @@ var CALENDAR_BOARD_DAY_BG = {
|
|
|
13733
13941
|
function CalendarEventButton({
|
|
13734
13942
|
event,
|
|
13735
13943
|
onSelect,
|
|
13736
|
-
|
|
13944
|
+
flatStart = false,
|
|
13945
|
+
flatEnd = false,
|
|
13946
|
+
className,
|
|
13947
|
+
style
|
|
13737
13948
|
}) {
|
|
13738
13949
|
const preset = CALENDAR_BOARD_EVENT_PRESETS[event.color ?? "default"];
|
|
13739
13950
|
const dot = event.dotColor ?? preset.dot;
|
|
@@ -13753,10 +13964,13 @@ function CalendarEventButton({
|
|
|
13753
13964
|
"h-(--cmp-calendarBoard-item-height) shrink-0 rounded-(--cmp-calendarBoard-item-radius)",
|
|
13754
13965
|
"gap-(--cmp-calendarBoard-eventButton-inline-gap) px-(--cmp-calendarBoard-item-paddingX)",
|
|
13755
13966
|
"bg-(--ceb-bg) text-(--cmp-calendarBoard-eventButton-text-color-default)",
|
|
13967
|
+
// 잘린 쪽은 평평하게 — 다음 조각과 이어 보면 한 막대가 주 경계에서 나뉜 모양이 된다.
|
|
13968
|
+
flatStart && "rounded-s-none",
|
|
13969
|
+
flatEnd && "rounded-e-none",
|
|
13756
13970
|
disabled ? "cursor-not-allowed opacity-50" : "cursor-pointer",
|
|
13757
13971
|
className
|
|
13758
13972
|
),
|
|
13759
|
-
style: { "--ceb-bg": preset.bg },
|
|
13973
|
+
style: { ...style, "--ceb-bg": preset.bg },
|
|
13760
13974
|
onClick: (e) => {
|
|
13761
13975
|
if (disabled) return;
|
|
13762
13976
|
onSelect?.(event, e);
|
|
@@ -13766,7 +13980,7 @@ function CalendarEventButton({
|
|
|
13766
13980
|
"span",
|
|
13767
13981
|
{
|
|
13768
13982
|
"aria-hidden": true,
|
|
13769
|
-
className: "pointer-events-none absolute inset-0 rounded-
|
|
13983
|
+
className: "pointer-events-none absolute inset-0 rounded-[inherit] bg-(--cmp-calendarBoard-eventButton-hover-overlay-color) opacity-0 transition-opacity group-hover:opacity-(--cmp-calendarBoard-eventButton-hover-overlay-opacity)"
|
|
13770
13984
|
}
|
|
13771
13985
|
),
|
|
13772
13986
|
/* @__PURE__ */ jsx(SBadge, { "aria-hidden": true, color: dot, className: "shrink-0" }),
|
|
@@ -13800,7 +14014,7 @@ function CalendarEventButton({
|
|
|
13800
14014
|
}
|
|
13801
14015
|
);
|
|
13802
14016
|
}
|
|
13803
|
-
var CalendarMoreButton = /* @__PURE__ */ forwardRef(function CalendarMoreButton2({ count, label = "\uB354\uBCF4\uAE30", onClick, className }, ref) {
|
|
14017
|
+
var CalendarMoreButton = /* @__PURE__ */ forwardRef(function CalendarMoreButton2({ count, label = "\uB354\uBCF4\uAE30", onClick, className, style }, ref) {
|
|
13804
14018
|
return /* @__PURE__ */ jsxs(
|
|
13805
14019
|
"button",
|
|
13806
14020
|
{
|
|
@@ -13813,6 +14027,7 @@ var CalendarMoreButton = /* @__PURE__ */ forwardRef(function CalendarMoreButton2
|
|
|
13813
14027
|
"bg-(--cmp-calendarBoard-moreButton-bg)",
|
|
13814
14028
|
className
|
|
13815
14029
|
),
|
|
14030
|
+
style,
|
|
13816
14031
|
onClick,
|
|
13817
14032
|
children: [
|
|
13818
14033
|
/* @__PURE__ */ jsx(
|
|
@@ -13831,6 +14046,9 @@ var CalendarMoreButton = /* @__PURE__ */ forwardRef(function CalendarMoreButton2
|
|
|
13831
14046
|
}
|
|
13832
14047
|
);
|
|
13833
14048
|
});
|
|
14049
|
+
var HEADER_HEIGHT = "var(--cmp-calendarBoard-dayCard-header-paddingTop) + var(--cmp-calendarBoard-daySequence-size) + var(--cmp-calendarBoard-dayCard-header-paddingBottom)";
|
|
14050
|
+
var laneTop = (lane) => `calc(${HEADER_HEIGHT} + ${lane} * (var(--cmp-calendarBoard-item-height) + var(--cmp-calendarBoard-dayCard-grid-gap)))`;
|
|
14051
|
+
var spanWidth = (span) => `calc(${span} * 100% + ${span - 1}px - 2 * var(--cmp-calendarBoard-dayCard-paddingX))`;
|
|
13834
14052
|
var CalendarDayCard = /* @__PURE__ */ forwardRef(function CalendarDayCard2({
|
|
13835
14053
|
date,
|
|
13836
14054
|
day,
|
|
@@ -13839,9 +14057,11 @@ var CalendarDayCard = /* @__PURE__ */ forwardRef(function CalendarDayCard2({
|
|
|
13839
14057
|
isSelected,
|
|
13840
14058
|
selectable,
|
|
13841
14059
|
color,
|
|
13842
|
-
|
|
14060
|
+
segments,
|
|
14061
|
+
dayEventCount,
|
|
13843
14062
|
body,
|
|
13844
14063
|
hiddenCount,
|
|
14064
|
+
moreLane,
|
|
13845
14065
|
isOpen,
|
|
13846
14066
|
moreLabel,
|
|
13847
14067
|
onDaySelect,
|
|
@@ -13849,7 +14069,7 @@ var CalendarDayCard = /* @__PURE__ */ forwardRef(function CalendarDayCard2({
|
|
|
13849
14069
|
onOpenEvents,
|
|
13850
14070
|
...rest
|
|
13851
14071
|
}, ref) {
|
|
13852
|
-
const hasEvents =
|
|
14072
|
+
const hasEvents = dayEventCount > 0;
|
|
13853
14073
|
const interactive = selectable || hasEvents;
|
|
13854
14074
|
const activate = () => {
|
|
13855
14075
|
if (hasEvents) onOpenEvents?.();
|
|
@@ -13884,7 +14104,7 @@ var CalendarDayCard = /* @__PURE__ */ forwardRef(function CalendarDayCard2({
|
|
|
13884
14104
|
"span",
|
|
13885
14105
|
{
|
|
13886
14106
|
"aria-hidden": true,
|
|
13887
|
-
className: "pointer-events-none absolute inset-[1px] rounded-(--cmp-calendarBoard-dayCard-focus-border-radius) border-(length:--cmp-calendarBoard-dayCard-focus-border-width) border-solid border-(--cmp-calendarBoard-dayCard-focus-border-color)"
|
|
14107
|
+
className: "pointer-events-none absolute inset-[1px] z-20 rounded-(--cmp-calendarBoard-dayCard-focus-border-radius) border-(length:--cmp-calendarBoard-dayCard-focus-border-width) border-solid border-(--cmp-calendarBoard-dayCard-focus-border-color)"
|
|
13888
14108
|
}
|
|
13889
14109
|
),
|
|
13890
14110
|
/* @__PURE__ */ jsx("div", { className: "flex shrink-0 pt-(--cmp-calendarBoard-dayCard-header-paddingTop) pb-(--cmp-calendarBoard-dayCard-header-paddingBottom)", children: /* @__PURE__ */ jsx(
|
|
@@ -13903,39 +14123,41 @@ var CalendarDayCard = /* @__PURE__ */ forwardRef(function CalendarDayCard2({
|
|
|
13903
14123
|
children: day
|
|
13904
14124
|
}
|
|
13905
14125
|
) }),
|
|
13906
|
-
/* @__PURE__ */
|
|
13907
|
-
|
|
14126
|
+
body != null && /* @__PURE__ */ jsx("div", { className: "flex min-h-0 flex-1 flex-col pb-(--cmp-calendarBoard-dayCard-grid-paddingBottom)", children: body }),
|
|
14127
|
+
body == null && segments.map((segment) => /* @__PURE__ */ jsx(
|
|
14128
|
+
CalendarEventButton,
|
|
13908
14129
|
{
|
|
13909
|
-
|
|
13910
|
-
|
|
13911
|
-
|
|
13912
|
-
|
|
13913
|
-
|
|
13914
|
-
|
|
13915
|
-
|
|
13916
|
-
|
|
13917
|
-
|
|
13918
|
-
|
|
13919
|
-
|
|
13920
|
-
|
|
13921
|
-
|
|
13922
|
-
|
|
13923
|
-
|
|
13924
|
-
|
|
13925
|
-
|
|
13926
|
-
|
|
13927
|
-
|
|
13928
|
-
|
|
13929
|
-
|
|
13930
|
-
|
|
13931
|
-
|
|
13932
|
-
|
|
13933
|
-
|
|
13934
|
-
|
|
13935
|
-
|
|
13936
|
-
|
|
13937
|
-
)
|
|
13938
|
-
|
|
14130
|
+
event: segment.event,
|
|
14131
|
+
flatStart: !segment.startsHere,
|
|
14132
|
+
flatEnd: !segment.endsHere,
|
|
14133
|
+
className: "absolute z-10",
|
|
14134
|
+
style: {
|
|
14135
|
+
top: laneTop(segment.lane),
|
|
14136
|
+
left: "var(--cmp-calendarBoard-dayCard-paddingX)",
|
|
14137
|
+
width: spanWidth(segment.span)
|
|
14138
|
+
},
|
|
14139
|
+
onSelect: (ev, e) => {
|
|
14140
|
+
e.stopPropagation();
|
|
14141
|
+
onEventClick?.(ev, e);
|
|
14142
|
+
}
|
|
14143
|
+
},
|
|
14144
|
+
segment.key
|
|
14145
|
+
)),
|
|
14146
|
+
body == null && hiddenCount > 0 && moreLane >= 0 && /* @__PURE__ */ jsx(
|
|
14147
|
+
CalendarMoreButton,
|
|
14148
|
+
{
|
|
14149
|
+
count: hiddenCount,
|
|
14150
|
+
label: moreLabel,
|
|
14151
|
+
className: "absolute z-10",
|
|
14152
|
+
style: {
|
|
14153
|
+
top: laneTop(moreLane),
|
|
14154
|
+
left: "var(--cmp-calendarBoard-dayCard-paddingX)",
|
|
14155
|
+
width: spanWidth(1)
|
|
14156
|
+
},
|
|
14157
|
+
onClick: (e) => {
|
|
14158
|
+
e.stopPropagation();
|
|
14159
|
+
onOpenEvents?.();
|
|
14160
|
+
}
|
|
13939
14161
|
}
|
|
13940
14162
|
)
|
|
13941
14163
|
]
|
|
@@ -14069,16 +14291,14 @@ function SCalendarBoard({
|
|
|
14069
14291
|
observer.observe(cell);
|
|
14070
14292
|
return () => observer.disconnect();
|
|
14071
14293
|
}, [rowCount]);
|
|
14072
|
-
const
|
|
14073
|
-
const
|
|
14074
|
-
|
|
14075
|
-
|
|
14076
|
-
|
|
14077
|
-
|
|
14078
|
-
|
|
14079
|
-
|
|
14080
|
-
}, [events]);
|
|
14081
|
-
const openEvents = openDate ? eventMap.get(openDate) ?? [] : [];
|
|
14294
|
+
const layout = useMemo(() => {
|
|
14295
|
+
const blockedDates = new Set(
|
|
14296
|
+
cells.filter((cell) => dayContent?.[cell.date] != null).map((cell) => cell.date)
|
|
14297
|
+
);
|
|
14298
|
+
return layoutCalendarBoard({ cells, events: events ?? [], rowCapacity, blockedDates });
|
|
14299
|
+
}, [cells, events, rowCapacity, dayContent]);
|
|
14300
|
+
const openIndex = openDate == null ? -1 : cells.findIndex((cell) => cell.date === openDate);
|
|
14301
|
+
const openEvents = openIndex < 0 ? [] : layout.eventsByCell[openIndex];
|
|
14082
14302
|
useLayoutEffect(() => {
|
|
14083
14303
|
if (openDate == null || panelEl == null) return;
|
|
14084
14304
|
const cell = gridRef.current?.querySelector(`[data-date="${openDate}"]`);
|
|
@@ -14219,11 +14439,9 @@ function SCalendarBoard({
|
|
|
14219
14439
|
// 행은 판 높이를 균등하게 나눠 갖는다 — 일정이 많은 주만 길어지면 격자가 깨진다.
|
|
14220
14440
|
gridTemplateRows: `repeat(${rowCount}, minmax(var(--cmp-calendarBoard-dayCard-minHeight), 1fr))`
|
|
14221
14441
|
},
|
|
14222
|
-
children: cells.map((cell) => {
|
|
14442
|
+
children: cells.map((cell, index) => {
|
|
14223
14443
|
const content = dayContent?.[cell.date];
|
|
14224
|
-
const list =
|
|
14225
|
-
const folded = list.length > rowCapacity;
|
|
14226
|
-
const visible = folded ? list.slice(0, rowCapacity - 1) : list;
|
|
14444
|
+
const list = layout.eventsByCell[index];
|
|
14227
14445
|
const card = /* @__PURE__ */ jsx(
|
|
14228
14446
|
CalendarDayCard,
|
|
14229
14447
|
{
|
|
@@ -14234,9 +14452,11 @@ function SCalendarBoard({
|
|
|
14234
14452
|
isSelected: value != null && value === cell.date,
|
|
14235
14453
|
selectable,
|
|
14236
14454
|
color: dayColors?.[cell.date] ?? "default",
|
|
14237
|
-
|
|
14455
|
+
segments: layout.segmentsByCell[index],
|
|
14456
|
+
dayEventCount: list.length,
|
|
14238
14457
|
body: content,
|
|
14239
|
-
hiddenCount:
|
|
14458
|
+
hiddenCount: layout.hiddenCountByCell[index],
|
|
14459
|
+
moreLane: layout.moreLaneByWeek[Math.floor(index / 7)],
|
|
14240
14460
|
isOpen: openDate === cell.date,
|
|
14241
14461
|
moreLabel,
|
|
14242
14462
|
onDaySelect: (date) => onValueChange?.(date, list),
|
|
@@ -14629,6 +14849,7 @@ var SSelectImpl = /* @__PURE__ */ forwardRef(function SSelect({
|
|
|
14629
14849
|
onSearchChange,
|
|
14630
14850
|
searchDebounce = DEFAULT_SEARCH_DEBOUNCE,
|
|
14631
14851
|
label,
|
|
14852
|
+
labelPosition,
|
|
14632
14853
|
labelWidth,
|
|
14633
14854
|
icon,
|
|
14634
14855
|
iconColor,
|
|
@@ -15061,6 +15282,7 @@ var SSelectImpl = /* @__PURE__ */ forwardRef(function SSelect({
|
|
|
15061
15282
|
SField,
|
|
15062
15283
|
{
|
|
15063
15284
|
label,
|
|
15285
|
+
labelPosition,
|
|
15064
15286
|
labelWidth,
|
|
15065
15287
|
icon,
|
|
15066
15288
|
iconColor,
|
|
@@ -16791,6 +17013,7 @@ var SInput = /* @__PURE__ */ forwardRef(function SInput2({
|
|
|
16791
17013
|
inputClassName,
|
|
16792
17014
|
inputStyle,
|
|
16793
17015
|
label,
|
|
17016
|
+
labelPosition,
|
|
16794
17017
|
labelWidth,
|
|
16795
17018
|
labelTooltip,
|
|
16796
17019
|
labelTooltipProps,
|
|
@@ -16834,6 +17057,7 @@ var SInput = /* @__PURE__ */ forwardRef(function SInput2({
|
|
|
16834
17057
|
SField,
|
|
16835
17058
|
{
|
|
16836
17059
|
label,
|
|
17060
|
+
labelPosition,
|
|
16837
17061
|
labelWidth,
|
|
16838
17062
|
labelTooltip,
|
|
16839
17063
|
labelTooltipProps,
|
|
@@ -17024,6 +17248,7 @@ var SNumberInput = /* @__PURE__ */ forwardRef(function SNumberInput2({
|
|
|
17024
17248
|
focused,
|
|
17025
17249
|
hovered,
|
|
17026
17250
|
label,
|
|
17251
|
+
labelPosition,
|
|
17027
17252
|
labelWidth,
|
|
17028
17253
|
icon,
|
|
17029
17254
|
iconColor,
|
|
@@ -17193,6 +17418,7 @@ var SNumberInput = /* @__PURE__ */ forwardRef(function SNumberInput2({
|
|
|
17193
17418
|
SField,
|
|
17194
17419
|
{
|
|
17195
17420
|
label,
|
|
17421
|
+
labelPosition,
|
|
17196
17422
|
labelWidth,
|
|
17197
17423
|
icon,
|
|
17198
17424
|
iconColor,
|
|
@@ -17480,7 +17706,7 @@ function SCalendar({
|
|
|
17480
17706
|
if (e !== "" && date > e) return true;
|
|
17481
17707
|
return false;
|
|
17482
17708
|
};
|
|
17483
|
-
const
|
|
17709
|
+
const pick2 = (date) => {
|
|
17484
17710
|
if (!isDisabled(date)) onValueChange?.(date);
|
|
17485
17711
|
};
|
|
17486
17712
|
return /* @__PURE__ */ jsxs(
|
|
@@ -17565,7 +17791,7 @@ function SCalendar({
|
|
|
17565
17791
|
{
|
|
17566
17792
|
type: "button",
|
|
17567
17793
|
disabled: !cell.inCurrentMonth || disabled,
|
|
17568
|
-
onClick: () => cell.inCurrentMonth &&
|
|
17794
|
+
onClick: () => cell.inCurrentMonth && pick2(cell.date),
|
|
17569
17795
|
className: cn(
|
|
17570
17796
|
"flex min-h-[var(--cmp-datepicker-calendar-day-circle-size)] w-[var(--cmp-datepicker-calendar-day-width)] flex-col items-center justify-start border-none bg-transparent p-0",
|
|
17571
17797
|
!cell.inCurrentMonth ? "invisible pointer-events-none" : disabled ? "cursor-not-allowed" : "cursor-pointer"
|
|
@@ -17911,6 +18137,7 @@ function SDatePicker({
|
|
|
17911
18137
|
rules,
|
|
17912
18138
|
status,
|
|
17913
18139
|
label,
|
|
18140
|
+
labelPosition,
|
|
17914
18141
|
labelWidth,
|
|
17915
18142
|
icon,
|
|
17916
18143
|
iconColor,
|
|
@@ -17983,6 +18210,7 @@ function SDatePicker({
|
|
|
17983
18210
|
SField,
|
|
17984
18211
|
{
|
|
17985
18212
|
label,
|
|
18213
|
+
labelPosition,
|
|
17986
18214
|
labelWidth,
|
|
17987
18215
|
icon,
|
|
17988
18216
|
iconColor,
|
|
@@ -18445,6 +18673,7 @@ function SDateRangePicker({
|
|
|
18445
18673
|
rules,
|
|
18446
18674
|
status,
|
|
18447
18675
|
label,
|
|
18676
|
+
labelPosition,
|
|
18448
18677
|
labelWidth,
|
|
18449
18678
|
icon,
|
|
18450
18679
|
iconColor,
|
|
@@ -18517,6 +18746,7 @@ function SDateRangePicker({
|
|
|
18517
18746
|
SField,
|
|
18518
18747
|
{
|
|
18519
18748
|
label,
|
|
18749
|
+
labelPosition,
|
|
18520
18750
|
labelWidth,
|
|
18521
18751
|
icon,
|
|
18522
18752
|
iconColor,
|
|
@@ -18821,6 +19051,7 @@ function SFilePicker({
|
|
|
18821
19051
|
status,
|
|
18822
19052
|
size = "sm",
|
|
18823
19053
|
label,
|
|
19054
|
+
labelPosition,
|
|
18824
19055
|
labelWidth,
|
|
18825
19056
|
icon,
|
|
18826
19057
|
iconColor,
|
|
@@ -19005,6 +19236,7 @@ function SFilePicker({
|
|
|
19005
19236
|
{
|
|
19006
19237
|
borderless: inline,
|
|
19007
19238
|
label,
|
|
19239
|
+
labelPosition,
|
|
19008
19240
|
labelWidth,
|
|
19009
19241
|
icon,
|
|
19010
19242
|
iconColor,
|
|
@@ -19270,7 +19502,7 @@ function ChartGrid({ scale, direction, width, height }) {
|
|
|
19270
19502
|
return /* @__PURE__ */ jsx("g", { "aria-hidden": true, children: scale.ticks.map((tick) => {
|
|
19271
19503
|
const ratio = ratioOf(tick, scale);
|
|
19272
19504
|
const isBaseline = tick === 0;
|
|
19273
|
-
const color = isBaseline ? "var(--cmp-chart-baseline-color)" : "var(--cmp-chart-
|
|
19505
|
+
const color = isBaseline ? "var(--cmp-chart-baseline-color)" : "var(--cmp-chart-gridline-color)";
|
|
19274
19506
|
const position = vertical ? height - ratio * height : ratio * width;
|
|
19275
19507
|
const extent = vertical ? height : width;
|
|
19276
19508
|
const snapped = Math.min(Math.max(Math.round(position), 0), Math.max(0, extent - 1)) + 0.5;
|
|
@@ -19348,7 +19580,7 @@ function ChartAxisLabels({
|
|
|
19348
19580
|
}
|
|
19349
19581
|
);
|
|
19350
19582
|
}
|
|
19351
|
-
var ChartFrame = /* @__PURE__ */ forwardRef(function ChartFrame2({ legend, legendPosition = "top", children, className, style, ...props }, ref) {
|
|
19583
|
+
var ChartFrame = /* @__PURE__ */ forwardRef(function ChartFrame2({ title, unit, legend, legendPosition = "top", children, className, style, ...props }, ref) {
|
|
19352
19584
|
return /* @__PURE__ */ jsxs(
|
|
19353
19585
|
"div",
|
|
19354
19586
|
{
|
|
@@ -19361,6 +19593,14 @@ var ChartFrame = /* @__PURE__ */ forwardRef(function ChartFrame2({ legend, legen
|
|
|
19361
19593
|
style,
|
|
19362
19594
|
...props,
|
|
19363
19595
|
children: [
|
|
19596
|
+
(title || unit) && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-(--cmp-chart-gap)", children: [
|
|
19597
|
+
title && /* @__PURE__ */ jsx("span", { className: "typo-body-md-medium text-(--cmp-chart-title-color)", children: title }),
|
|
19598
|
+
unit && // ml-auto — title 유무와 관계없이 항상 오른쪽 끝에 붙는다.
|
|
19599
|
+
/* @__PURE__ */ jsxs("span", { className: "ml-auto whitespace-nowrap typo-body-sm-default text-(--cmp-chart-unit-color)", children: [
|
|
19600
|
+
"\uB2E8\uC704 : ",
|
|
19601
|
+
unit
|
|
19602
|
+
] })
|
|
19603
|
+
] }),
|
|
19364
19604
|
legend && legendPosition === "top" && legend,
|
|
19365
19605
|
children,
|
|
19366
19606
|
legend && legendPosition === "bottom" && legend
|
|
@@ -19411,46 +19651,57 @@ function ChartLegend({ items, align = "center", activeIndex, className }) {
|
|
|
19411
19651
|
|
|
19412
19652
|
// src/lib/chart/palette.ts
|
|
19413
19653
|
var V3 = (path) => `var(--cmp-chart-palette-${path})`;
|
|
19414
|
-
var
|
|
19415
|
-
|
|
19416
|
-
|
|
19417
|
-
|
|
19418
|
-
|
|
19419
|
-
|
|
19420
|
-
|
|
19421
|
-
|
|
19422
|
-
|
|
19423
|
-
|
|
19654
|
+
var DIMMED = (path) => `var(--cmp-chart-line-point-dimmed-palette-${path})`;
|
|
19655
|
+
var colorsOf = (v) => ({
|
|
19656
|
+
positivePrimary: v("variation-positivePrimary"),
|
|
19657
|
+
positiveSecondary: v("variation-positiveSecondary"),
|
|
19658
|
+
negativePrimary: v("variation-negativePrimary"),
|
|
19659
|
+
negativeSecondary: v("variation-negativeSecondary"),
|
|
19660
|
+
neutralPrimary: v("variation-neutralPrimary"),
|
|
19661
|
+
neutralSecondary: v("variation-neutralSecondary")
|
|
19662
|
+
});
|
|
19663
|
+
var palettesOf = (v) => ({
|
|
19664
|
+
default: [v("single")],
|
|
19424
19665
|
multi: [
|
|
19425
|
-
|
|
19426
|
-
|
|
19427
|
-
|
|
19428
|
-
|
|
19429
|
-
|
|
19430
|
-
|
|
19431
|
-
|
|
19432
|
-
|
|
19433
|
-
|
|
19434
|
-
|
|
19435
|
-
|
|
19666
|
+
v("multi-blue"),
|
|
19667
|
+
v("multi-skyblue"),
|
|
19668
|
+
v("multi-yellow"),
|
|
19669
|
+
v("multi-olive"),
|
|
19670
|
+
v("multi-lightRed"),
|
|
19671
|
+
v("multi-warmBlue"),
|
|
19672
|
+
v("multi-orange"),
|
|
19673
|
+
v("multi-green"),
|
|
19674
|
+
v("multi-navy"),
|
|
19675
|
+
v("multi-grey"),
|
|
19676
|
+
v("multi-red")
|
|
19436
19677
|
],
|
|
19437
19678
|
gradation: [
|
|
19438
|
-
|
|
19439
|
-
|
|
19440
|
-
|
|
19441
|
-
|
|
19442
|
-
|
|
19443
|
-
|
|
19679
|
+
v("gradation-1"),
|
|
19680
|
+
v("gradation-2"),
|
|
19681
|
+
v("gradation-3"),
|
|
19682
|
+
v("gradation-4"),
|
|
19683
|
+
v("gradation-5"),
|
|
19684
|
+
v("gradation-6")
|
|
19444
19685
|
]
|
|
19445
|
-
};
|
|
19446
|
-
|
|
19686
|
+
});
|
|
19687
|
+
var CHART_COLORS = colorsOf(V3);
|
|
19688
|
+
var CHART_PALETTES = palettesOf(V3);
|
|
19689
|
+
var DIMMED_COLORS = colorsOf(DIMMED);
|
|
19690
|
+
var DIMMED_PALETTES = palettesOf(DIMMED);
|
|
19691
|
+
function pick(names, palettes, palette, index, colors) {
|
|
19447
19692
|
if (palette === "custom") {
|
|
19448
|
-
if (!colors?.length) return
|
|
19449
|
-
return
|
|
19693
|
+
if (!colors?.length) return palettes.default[0];
|
|
19694
|
+
return names[colors[index % colors.length]];
|
|
19450
19695
|
}
|
|
19451
|
-
const list =
|
|
19696
|
+
const list = palettes[palette] ?? palettes.default;
|
|
19452
19697
|
return list[index % list.length];
|
|
19453
19698
|
}
|
|
19699
|
+
function paletteColor(palette, index, colors) {
|
|
19700
|
+
return pick(CHART_COLORS, CHART_PALETTES, palette, index, colors);
|
|
19701
|
+
}
|
|
19702
|
+
function linePointDimmedColor(palette, index, colors) {
|
|
19703
|
+
return pick(DIMMED_COLORS, DIMMED_PALETTES, palette, index, colors);
|
|
19704
|
+
}
|
|
19454
19705
|
function useElementSize() {
|
|
19455
19706
|
const ref = useRef(null);
|
|
19456
19707
|
const [size, setSize] = useState({ width: 0, height: 0 });
|
|
@@ -19528,7 +19779,8 @@ function ChartTooltip({
|
|
|
19528
19779
|
"pointer-events-none absolute top-0 left-0 z-10 w-max",
|
|
19529
19780
|
"flex flex-col gap-(--cmp-chart-chartTooltip-gap)",
|
|
19530
19781
|
"px-(--cmp-chart-chartTooltip-paddingX) py-(--cmp-chart-chartTooltip-paddingY)",
|
|
19531
|
-
"rounded-(--cmp-chart-chartTooltip-radius) bg-(--cmp-chart-chartTooltip-bg)
|
|
19782
|
+
"rounded-(--cmp-chart-chartTooltip-radius) bg-(--cmp-chart-chartTooltip-bg)",
|
|
19783
|
+
"shadow-(--cmp-chart-chartTooltip-shadow)",
|
|
19532
19784
|
className
|
|
19533
19785
|
),
|
|
19534
19786
|
style: {
|
|
@@ -19575,12 +19827,12 @@ var BAR_SIZE_MAX = 80;
|
|
|
19575
19827
|
var BAR_GAP = 6;
|
|
19576
19828
|
var GROUP_PADDING_MIN = 8;
|
|
19577
19829
|
var GROUP_PADDING_MAX = 24;
|
|
19578
|
-
var VALUE_LABEL_GAP =
|
|
19830
|
+
var VALUE_LABEL_GAP = 4;
|
|
19579
19831
|
var BAR_RADIUS = 8;
|
|
19580
|
-
var BAR_OPACITY_DEFAULT = "var(--cmp-chart-
|
|
19832
|
+
var BAR_OPACITY_DEFAULT = "var(--cmp-chart-opacity-default)";
|
|
19581
19833
|
var BAR_OPACITY_DIMMED = "var(--cmp-chart-bar-opacity-dimmed)";
|
|
19582
19834
|
var BAR_OPACITY_HOVER = 1;
|
|
19583
|
-
var BAR_DATA_LABEL_COLOR = "var(--cmp-chart-
|
|
19835
|
+
var BAR_DATA_LABEL_COLOR = "var(--cmp-chart-dataLabel-color-default)";
|
|
19584
19836
|
var BAR_DATA_LABEL_TYPO = "typo-body-sm-medium";
|
|
19585
19837
|
var BAR_DATA_LABEL_TYPO_HOVER = "typo-body-md-bold";
|
|
19586
19838
|
var BAR_HOVER_TRANSITION = "transition-opacity duration-200 ease-out motion-reduce:transition-none";
|
|
@@ -19640,6 +19892,8 @@ function barPath(x, y, width, height, direction, negative) {
|
|
|
19640
19892
|
var SBarChart = /* @__PURE__ */ forwardRef(function SBarChart2({
|
|
19641
19893
|
categories,
|
|
19642
19894
|
series,
|
|
19895
|
+
title,
|
|
19896
|
+
unit,
|
|
19643
19897
|
direction = "vertical",
|
|
19644
19898
|
stacked = false,
|
|
19645
19899
|
palette = "default",
|
|
@@ -20105,6 +20359,8 @@ var SBarChart = /* @__PURE__ */ forwardRef(function SBarChart2({
|
|
|
20105
20359
|
ChartFrame,
|
|
20106
20360
|
{
|
|
20107
20361
|
ref,
|
|
20362
|
+
title,
|
|
20363
|
+
unit,
|
|
20108
20364
|
legend,
|
|
20109
20365
|
legendPosition,
|
|
20110
20366
|
className,
|
|
@@ -20145,18 +20401,18 @@ var SBarChart = /* @__PURE__ */ forwardRef(function SBarChart2({
|
|
|
20145
20401
|
});
|
|
20146
20402
|
|
|
20147
20403
|
// src/components/SLineChart/lineChart.config.ts
|
|
20148
|
-
var LINE_WIDTH =
|
|
20149
|
-
var
|
|
20150
|
-
var
|
|
20151
|
-
var
|
|
20152
|
-
var
|
|
20153
|
-
var
|
|
20154
|
-
var POINT_HOVER_EXTENT =
|
|
20404
|
+
var LINE_WIDTH = "var(--cmp-chart-line-width)";
|
|
20405
|
+
var LINE_OPACITY = "var(--cmp-chart-line-opacity)";
|
|
20406
|
+
var POINT_RADIUS = 5;
|
|
20407
|
+
var POINT_HOVER_RADIUS = 6;
|
|
20408
|
+
var POINT_HALO_RADIUS = 12;
|
|
20409
|
+
var POINT_HALO_OPACITY = "var(--cmp-chart-line-point-opacity-bg)";
|
|
20410
|
+
var POINT_HOVER_EXTENT = POINT_HALO_RADIUS;
|
|
20155
20411
|
var BAND_MIN = 40;
|
|
20156
|
-
var VALUE_LABEL_GAP2 =
|
|
20157
|
-
var AREA_OPACITY_TOP = "
|
|
20158
|
-
var AREA_OPACITY_BOTTOM = "var(--
|
|
20159
|
-
var LINE_DATA_LABEL_COLOR = "var(--cmp-chart-
|
|
20412
|
+
var VALUE_LABEL_GAP2 = 4;
|
|
20413
|
+
var AREA_OPACITY_TOP = "var(--cmp-chart-line-area-gradation-start)";
|
|
20414
|
+
var AREA_OPACITY_BOTTOM = "var(--cmp-chart-line-area-gradation-end)";
|
|
20415
|
+
var LINE_DATA_LABEL_COLOR = "var(--cmp-chart-dataLabel-color-default)";
|
|
20160
20416
|
var LINE_DATA_LABEL_TYPO = "typo-body-sm-medium";
|
|
20161
20417
|
var LINE_DATA_LABEL_TYPO_HOVER = "typo-body-md-bold";
|
|
20162
20418
|
var r = (value) => Math.round(value * 100) / 100;
|
|
@@ -20236,6 +20492,8 @@ function runsOf(row) {
|
|
|
20236
20492
|
var SLineChart = /* @__PURE__ */ forwardRef(function SLineChart2({
|
|
20237
20493
|
categories,
|
|
20238
20494
|
series,
|
|
20495
|
+
title,
|
|
20496
|
+
unit,
|
|
20239
20497
|
curve = "linear",
|
|
20240
20498
|
area = false,
|
|
20241
20499
|
stacked = false,
|
|
@@ -20265,6 +20523,10 @@ var SLineChart = /* @__PURE__ */ forwardRef(function SLineChart2({
|
|
|
20265
20523
|
(seriesIndex) => paletteColor(palette, seriesIndex, customColors),
|
|
20266
20524
|
[palette, customColors]
|
|
20267
20525
|
);
|
|
20526
|
+
const dimmedColorAt = useCallback(
|
|
20527
|
+
(seriesIndex) => linePointDimmedColor(palette, seriesIndex, customColors),
|
|
20528
|
+
[palette, customColors]
|
|
20529
|
+
);
|
|
20268
20530
|
const rows = useMemo(() => {
|
|
20269
20531
|
const running = categories.map(() => 0);
|
|
20270
20532
|
return series.map(
|
|
@@ -20436,10 +20698,13 @@ var SLineChart = /* @__PURE__ */ forwardRef(function SLineChart2({
|
|
|
20436
20698
|
"aria-hidden": true,
|
|
20437
20699
|
d,
|
|
20438
20700
|
fill: "none",
|
|
20439
|
-
strokeWidth: LINE_WIDTH,
|
|
20440
20701
|
strokeLinecap: "round",
|
|
20441
20702
|
strokeLinejoin: "round",
|
|
20442
|
-
style: {
|
|
20703
|
+
style: {
|
|
20704
|
+
stroke: colorAt(seriesIndex),
|
|
20705
|
+
strokeWidth: LINE_WIDTH,
|
|
20706
|
+
strokeOpacity: LINE_OPACITY
|
|
20707
|
+
}
|
|
20443
20708
|
},
|
|
20444
20709
|
`line-${seriesIndex}-${runIndex}`
|
|
20445
20710
|
);
|
|
@@ -20456,6 +20721,7 @@ var SLineChart = /* @__PURE__ */ forwardRef(function SLineChart2({
|
|
|
20456
20721
|
const hovered = hoveredCategory === categoryIndex;
|
|
20457
20722
|
if (!showPoint && !hovered) return;
|
|
20458
20723
|
const color = colorAt(seriesIndex);
|
|
20724
|
+
const dimmed = hoveredCategory != null && !hovered;
|
|
20459
20725
|
const key = `${seriesIndex}-${categoryIndex}`;
|
|
20460
20726
|
if (hovered) {
|
|
20461
20727
|
halos.push(
|
|
@@ -20465,12 +20731,8 @@ var SLineChart = /* @__PURE__ */ forwardRef(function SLineChart2({
|
|
|
20465
20731
|
"aria-hidden": true,
|
|
20466
20732
|
cx: point.x,
|
|
20467
20733
|
cy: point.y,
|
|
20468
|
-
r:
|
|
20469
|
-
style: {
|
|
20470
|
-
fill: POINT_HOVER_BG,
|
|
20471
|
-
stroke: color,
|
|
20472
|
-
strokeWidth: POINT_HOVER_BORDER_WIDTH
|
|
20473
|
-
}
|
|
20734
|
+
r: POINT_HALO_RADIUS,
|
|
20735
|
+
style: { fill: color, fillOpacity: POINT_HALO_OPACITY }
|
|
20474
20736
|
},
|
|
20475
20737
|
`halo-${key}`
|
|
20476
20738
|
)
|
|
@@ -20482,8 +20744,11 @@ var SLineChart = /* @__PURE__ */ forwardRef(function SLineChart2({
|
|
|
20482
20744
|
{
|
|
20483
20745
|
cx: point.x,
|
|
20484
20746
|
cy: point.y,
|
|
20485
|
-
r: hovered ?
|
|
20486
|
-
style: {
|
|
20747
|
+
r: hovered ? POINT_HOVER_RADIUS : POINT_RADIUS,
|
|
20748
|
+
style: {
|
|
20749
|
+
fill: dimmed ? dimmedColorAt(seriesIndex) : color,
|
|
20750
|
+
cursor: onPointClick ? "pointer" : void 0
|
|
20751
|
+
},
|
|
20487
20752
|
onClick: onPointClick ? () => onPointClick({ seriesIndex, categoryIndex, value: point.own }) : void 0,
|
|
20488
20753
|
children: /* @__PURE__ */ jsx("title", { children: `${categories[categoryIndex]} ${series[seriesIndex]?.name ?? ""} ${formatValue(point.own)}` })
|
|
20489
20754
|
},
|
|
@@ -20493,7 +20758,17 @@ var SLineChart = /* @__PURE__ */ forwardRef(function SLineChart2({
|
|
|
20493
20758
|
});
|
|
20494
20759
|
});
|
|
20495
20760
|
return { pointHalos: halos, pointDots: dots };
|
|
20496
|
-
}, [
|
|
20761
|
+
}, [
|
|
20762
|
+
plotted,
|
|
20763
|
+
showPoint,
|
|
20764
|
+
hoveredCategory,
|
|
20765
|
+
colorAt,
|
|
20766
|
+
dimmedColorAt,
|
|
20767
|
+
onPointClick,
|
|
20768
|
+
categories,
|
|
20769
|
+
series,
|
|
20770
|
+
formatValue
|
|
20771
|
+
]);
|
|
20497
20772
|
const valueLabels = useMemo(
|
|
20498
20773
|
() => showValueLabel ? plotted.flatMap(
|
|
20499
20774
|
(row, seriesIndex) => row.map(
|
|
@@ -20519,6 +20794,8 @@ var SLineChart = /* @__PURE__ */ forwardRef(function SLineChart2({
|
|
|
20519
20794
|
ChartFrame,
|
|
20520
20795
|
{
|
|
20521
20796
|
ref,
|
|
20797
|
+
title,
|
|
20798
|
+
unit,
|
|
20522
20799
|
legend,
|
|
20523
20800
|
legendPosition,
|
|
20524
20801
|
className,
|
|
@@ -20654,8 +20931,9 @@ var LABEL_MIN_RATIO = 0.05;
|
|
|
20654
20931
|
var PIE_LABEL_RADIUS_RATIO = 0.65;
|
|
20655
20932
|
var HOVER_GROW = 4;
|
|
20656
20933
|
var HOVER_CORNER = 2;
|
|
20657
|
-
var OPACITY_DEFAULT = "var(--cmp-chart-
|
|
20658
|
-
var OPACITY_DIMMED = "var(--cmp-chart-
|
|
20934
|
+
var OPACITY_DEFAULT = "var(--cmp-chart-opacity-default)";
|
|
20935
|
+
var OPACITY_DIMMED = "var(--cmp-chart-doughnut-opacity-dimmed)";
|
|
20936
|
+
var SLICE_HOVER_SHADOW = "var(--cmp-chart-doughnut-shadow-hover-filter)";
|
|
20659
20937
|
var OPACITY_HOVER = 1;
|
|
20660
20938
|
var defaultFormat3 = (value) => value.toLocaleString();
|
|
20661
20939
|
function formatRatio(ratio) {
|
|
@@ -20705,6 +20983,8 @@ function slicePath(center, outer, inner, start, end, corner = 0) {
|
|
|
20705
20983
|
}
|
|
20706
20984
|
var RadialChart = /* @__PURE__ */ forwardRef(function RadialChart2({
|
|
20707
20985
|
data,
|
|
20986
|
+
title,
|
|
20987
|
+
unit,
|
|
20708
20988
|
palette = "multi",
|
|
20709
20989
|
colors,
|
|
20710
20990
|
showValueLabel = false,
|
|
@@ -20776,6 +21056,8 @@ var RadialChart = /* @__PURE__ */ forwardRef(function RadialChart2({
|
|
|
20776
21056
|
ChartFrame,
|
|
20777
21057
|
{
|
|
20778
21058
|
ref,
|
|
21059
|
+
title,
|
|
21060
|
+
unit,
|
|
20779
21061
|
legend,
|
|
20780
21062
|
legendPosition,
|
|
20781
21063
|
className,
|
|
@@ -20786,6 +21068,7 @@ var RadialChart = /* @__PURE__ */ forwardRef(function RadialChart2({
|
|
|
20786
21068
|
{
|
|
20787
21069
|
width: diameter,
|
|
20788
21070
|
height: diameter,
|
|
21071
|
+
overflow: "visible",
|
|
20789
21072
|
role: "img",
|
|
20790
21073
|
"aria-label": `${arcs.length}\uAC1C \uD56D\uBAA9 ${kind}`,
|
|
20791
21074
|
onMouseLeave: () => setHovered(null),
|
|
@@ -20798,7 +21081,7 @@ var RadialChart = /* @__PURE__ */ forwardRef(function RadialChart2({
|
|
|
20798
21081
|
"aria-hidden": true,
|
|
20799
21082
|
d: slicePath(center, outer, inner, 0, Math.PI * 2),
|
|
20800
21083
|
fillRule: "evenodd",
|
|
20801
|
-
style: { fill: "var(--cmp-chart-
|
|
21084
|
+
style: { fill: "var(--cmp-chart-gridline-color)" }
|
|
20802
21085
|
}
|
|
20803
21086
|
)
|
|
20804
21087
|
) : arcs.map((arc2) => {
|
|
@@ -20812,6 +21095,10 @@ var RadialChart = /* @__PURE__ */ forwardRef(function RadialChart2({
|
|
|
20812
21095
|
style: {
|
|
20813
21096
|
fill: arc2.color,
|
|
20814
21097
|
opacity,
|
|
21098
|
+
// 짚은 조각만 떠오른다. SVG 도형에는 box-shadow 가 걸리지 않아
|
|
21099
|
+
// 같은 토큰의 filter 형태를 쓴다 (drop-shadow 에는 spread 가 없다 —
|
|
21100
|
+
// 토큰의 음수 spread 만큼 설계보다 조금 넓게 깔린다).
|
|
21101
|
+
filter: hovered === arc2.index ? SLICE_HOVER_SHADOW : void 0,
|
|
20815
21102
|
cursor: onSliceClick ? "pointer" : void 0
|
|
20816
21103
|
},
|
|
20817
21104
|
onMouseEnter: () => setHovered(arc2.index),
|
|
@@ -23382,6 +23669,7 @@ var SEditor = /* @__PURE__ */ forwardRef(function SEditor2({
|
|
|
23382
23669
|
onFocus,
|
|
23383
23670
|
onBlur,
|
|
23384
23671
|
label,
|
|
23672
|
+
labelPosition,
|
|
23385
23673
|
labelWidth,
|
|
23386
23674
|
icon,
|
|
23387
23675
|
iconColor,
|
|
@@ -23470,6 +23758,7 @@ var SEditor = /* @__PURE__ */ forwardRef(function SEditor2({
|
|
|
23470
23758
|
{
|
|
23471
23759
|
name,
|
|
23472
23760
|
label,
|
|
23761
|
+
labelPosition,
|
|
23473
23762
|
labelWidth,
|
|
23474
23763
|
icon,
|
|
23475
23764
|
iconColor,
|
|
@@ -25357,7 +25646,7 @@ function ListBox({
|
|
|
25357
25646
|
"div",
|
|
25358
25647
|
{
|
|
25359
25648
|
className: cn(
|
|
25360
|
-
"overflow-hidden border border-solid shadow-[var(--shadow
|
|
25649
|
+
"overflow-hidden border border-solid shadow-[var(--cmp-chipFilter-listbox-shadow)]",
|
|
25361
25650
|
maxHeight && "flex flex-col"
|
|
25362
25651
|
),
|
|
25363
25652
|
style: {
|
|
@@ -25442,6 +25731,7 @@ var SChipInput = /* @__PURE__ */ forwardRef(function SChipInput2({
|
|
|
25442
25731
|
loadingRecommendedItems = false,
|
|
25443
25732
|
dropdownMinWidth = 200,
|
|
25444
25733
|
label,
|
|
25734
|
+
labelPosition,
|
|
25445
25735
|
labelWidth,
|
|
25446
25736
|
hint,
|
|
25447
25737
|
errorMessage,
|
|
@@ -25582,6 +25872,7 @@ var SChipInput = /* @__PURE__ */ forwardRef(function SChipInput2({
|
|
|
25582
25872
|
SField,
|
|
25583
25873
|
{
|
|
25584
25874
|
label,
|
|
25875
|
+
labelPosition,
|
|
25585
25876
|
labelWidth,
|
|
25586
25877
|
labelHeight: `calc(var(--cmp-chipInput-${size}-minHeight) + 2px)`,
|
|
25587
25878
|
icon,
|
|
@@ -25900,6 +26191,7 @@ var SBarcodeInput = /* @__PURE__ */ forwardRef(
|
|
|
25900
26191
|
inputClassName,
|
|
25901
26192
|
inputStyle,
|
|
25902
26193
|
label,
|
|
26194
|
+
labelPosition,
|
|
25903
26195
|
labelWidth,
|
|
25904
26196
|
icon,
|
|
25905
26197
|
iconColor,
|
|
@@ -25936,6 +26228,7 @@ var SBarcodeInput = /* @__PURE__ */ forwardRef(
|
|
|
25936
26228
|
SField,
|
|
25937
26229
|
{
|
|
25938
26230
|
label,
|
|
26231
|
+
labelPosition,
|
|
25939
26232
|
labelWidth,
|
|
25940
26233
|
icon,
|
|
25941
26234
|
iconColor,
|
|
@@ -26305,6 +26598,7 @@ function STimePicker({
|
|
|
26305
26598
|
rules,
|
|
26306
26599
|
status,
|
|
26307
26600
|
label,
|
|
26601
|
+
labelPosition,
|
|
26308
26602
|
labelWidth,
|
|
26309
26603
|
icon,
|
|
26310
26604
|
iconColor,
|
|
@@ -26359,6 +26653,7 @@ function STimePicker({
|
|
|
26359
26653
|
SField,
|
|
26360
26654
|
{
|
|
26361
26655
|
label,
|
|
26656
|
+
labelPosition,
|
|
26362
26657
|
labelWidth,
|
|
26363
26658
|
icon,
|
|
26364
26659
|
iconColor,
|
|
@@ -26771,6 +27066,7 @@ function STimeRangePicker({
|
|
|
26771
27066
|
rules,
|
|
26772
27067
|
status,
|
|
26773
27068
|
label,
|
|
27069
|
+
labelPosition,
|
|
26774
27070
|
labelWidth,
|
|
26775
27071
|
icon,
|
|
26776
27072
|
iconColor,
|
|
@@ -26827,6 +27123,7 @@ function STimeRangePicker({
|
|
|
26827
27123
|
SField,
|
|
26828
27124
|
{
|
|
26829
27125
|
label,
|
|
27126
|
+
labelPosition,
|
|
26830
27127
|
labelWidth,
|
|
26831
27128
|
icon,
|
|
26832
27129
|
iconColor,
|
|
@@ -26935,6 +27232,6 @@ function STimeRangePicker({
|
|
|
26935
27232
|
);
|
|
26936
27233
|
}
|
|
26937
27234
|
|
|
26938
|
-
export { ACCOUNT_LIST_BOX_ICONS, ACCOUNT_LIST_BOX_ITEM_TONES, ACCOUNT_LIST_BOX_LABELS, ACCOUNT_LIST_BOX_LAYOUT, ACCOUNT_LIST_BOX_TONE_CONFIG, BADGE_COLORS, BAR_GAP, BAR_SIZE_MAX, BAR_SIZE_MIN, BUTTON_COLORS, BUTTON_SIZES, CALENDAR_BOARD_DAY_BG, CALENDAR_BOARD_DAY_COLORS, CALENDAR_BOARD_EVENT_COLORS, CALENDAR_BOARD_EVENT_PRESETS, CALENDAR_BOARD_MAX_VISIBLE_EVENTS, CHAT_ATTACHED_FILE_CONFIG, CHAT_FILE_CONFIG, CHAT_MESSAGE_DIRECTIONS, CHAT_MESSAGE_READ_STATUSES, CHAT_MESSAGE_VARIANTS, CHIP_COLORS, COLOR_KEYS, FIELD_WIDTH_GRADES, GNB_COLORS, GNB_COMMON, GNB_FOLD_MS, GNB_FULL_LOGO_WIDTH, GNB_HEADER, GNB_MENU, GNB_MENU_WIDTH, GNB_RAIL, GNB_RAIL_WIDTH, GNB_SYSTEM_COLORS, GNB_SYSTEM_COLOR_CONFIG, GNB_SYSTEM_LAYOUT, GNB_SYSTEM_PLACEMENTS, GNB_SYSTEM_TOP_COLOR_CONFIG, ICONS, IMAGE_FITS, LAUNCHER_LIST_BOX_LAYOUT, LAUNCHER_LIST_BOX_LOGO_HEIGHT, LAUNCHER_LIST_BOX_LOGO_SERVICE_GAP, LAUNCHER_LIST_BOX_TRAILING_ICON, LAUNCHER_LIST_BOX_WIDTH, LAUNCHER_SERVICES, LAUNCHER_SERVICE_CATALOG, LOGO_DEFAULT_SIZE, LOGO_NAMES, PAGE_BACKGROUNDS, PAGE_CONTENT_HEIGHTS, PAGE_CONTENT_WIDTHS, PAGE_HEADER_VARIANTS, 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, 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 };
|
|
27235
|
+
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 };
|
|
26939
27236
|
//# sourceMappingURL=index.js.map
|
|
26940
27237
|
//# sourceMappingURL=index.js.map
|