sellmate-design-system-react 9.0.0-beta.64 → 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 +28 -3
- 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/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 +366 -168
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +362 -169
- 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 +106 -4
- package/dist/llms.txt +32 -6
- package/dist/styles.css +159 -15
- package/dist/theme.css +104 -6
- package/eslint/scale.gen.mjs +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -4150,7 +4150,7 @@ function SFooter({
|
|
|
4150
4150
|
{
|
|
4151
4151
|
className: cn(
|
|
4152
4152
|
"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)]",
|
|
4153
|
-
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(--
|
|
4153
|
+
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)]",
|
|
4154
4154
|
className
|
|
4155
4155
|
),
|
|
4156
4156
|
style,
|
|
@@ -4739,6 +4739,7 @@ var SField = /* @__PURE__ */ react.forwardRef(function SField2({
|
|
|
4739
4739
|
iconColor,
|
|
4740
4740
|
labelTooltip = "",
|
|
4741
4741
|
labelTooltipProps,
|
|
4742
|
+
labelPosition = "left",
|
|
4742
4743
|
labelWidth,
|
|
4743
4744
|
labelHeight,
|
|
4744
4745
|
size = "sm",
|
|
@@ -4781,6 +4782,7 @@ var SField = /* @__PURE__ */ react.forwardRef(function SField2({
|
|
|
4781
4782
|
[]
|
|
4782
4783
|
);
|
|
4783
4784
|
const s = FIELD_SIZE[size];
|
|
4785
|
+
const labelOnTop = labelPosition === "top";
|
|
4784
4786
|
if (label !== "" && addonLabel !== "" && typeof console !== "undefined") {
|
|
4785
4787
|
console.warn(
|
|
4786
4788
|
"[SField] label \uACFC addonLabel \uC740 \uD568\uAED8 \uC0AC\uC6A9\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. addonLabel \uC744 \uBB34\uC2DC\uD569\uB2C8\uB2E4."
|
|
@@ -4819,103 +4821,120 @@ var SField = /* @__PURE__ */ react.forwardRef(function SField2({
|
|
|
4819
4821
|
style,
|
|
4820
4822
|
onMouseEnter,
|
|
4821
4823
|
onMouseLeave,
|
|
4822
|
-
children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
4823
|
-
|
|
4824
|
-
|
|
4825
|
-
|
|
4826
|
-
|
|
4827
|
-
|
|
4828
|
-
|
|
4829
|
-
|
|
4830
|
-
|
|
4831
|
-
|
|
4832
|
-
|
|
4833
|
-
|
|
4834
|
-
|
|
4835
|
-
|
|
4836
|
-
|
|
4837
|
-
|
|
4838
|
-
|
|
4839
|
-
|
|
4840
|
-
|
|
4841
|
-
|
|
4842
|
-
}
|
|
4843
|
-
),
|
|
4844
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "min-w-0 overflow-hidden text-ellipsis whitespace-nowrap", children: label }),
|
|
4845
|
-
(labelTooltip !== "" || labelTooltipProps) && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0 flex items-center", style: { marginLeft: s.labelGap }, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
4846
|
-
STooltip2,
|
|
4847
|
-
{
|
|
4848
|
-
message: labelTooltip !== "" ? [labelTooltip] : void 0,
|
|
4849
|
-
iconSize: s.icon,
|
|
4850
|
-
...labelTooltipProps
|
|
4851
|
-
}
|
|
4852
|
-
) })
|
|
4853
|
-
]
|
|
4854
|
-
}
|
|
4855
|
-
),
|
|
4856
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
4857
|
-
"div",
|
|
4858
|
-
{
|
|
4859
|
-
className: cn("flex min-w-0 flex-col", !hug && !isPercentWidth && "flex-1"),
|
|
4860
|
-
style: {
|
|
4861
|
-
width: resolvedWidth,
|
|
4862
|
-
minWidth: fieldWidthValue(minWidth),
|
|
4863
|
-
maxWidth: resolvedMaxWidth
|
|
4864
|
-
},
|
|
4865
|
-
children: [
|
|
4866
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
4867
|
-
"div",
|
|
4868
|
-
{
|
|
4869
|
-
className: cn(
|
|
4870
|
-
"relative box-border flex min-w-0 items-stretch border border-solid border-(--field-bc)",
|
|
4871
|
-
// 둘 다 넘친 것을 잘라 내지만 clip 은 스크롤 상자를 만들지 않는다. hidden 이면
|
|
4872
|
-
// 이 상자가 스크롤포트가 되어 안쪽의 position:sticky 가 페이지 스크롤을 따라가지
|
|
4873
|
-
// 못한다 (SEditor 의 고정 툴바). 여러 줄 필드에서만 바꿔 파급을 좁힌다.
|
|
4874
|
-
multiline ? "overflow-clip" : "overflow-hidden",
|
|
4875
|
-
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]",
|
|
4876
|
-
disabled && "cursor-not-allowed"
|
|
4877
|
-
),
|
|
4878
|
-
style: {
|
|
4879
|
-
// @ts-expect-error CSS 변수
|
|
4880
|
-
"--field-bc": borderColor,
|
|
4881
|
-
// focused/hovered prop이 명시된 경우 강조를 즉시 반영
|
|
4882
|
-
...interactive && !borderless && (focused || hovered) ? { boxShadow: FOCUS_RING_SHADOW } : {},
|
|
4883
|
-
...multiline ? { minHeight: s.height } : { height: s.height },
|
|
4884
|
-
"borderRadius": s.radius,
|
|
4885
|
-
"background": bgColor,
|
|
4886
|
-
"color": textColor
|
|
4824
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
4825
|
+
"div",
|
|
4826
|
+
{
|
|
4827
|
+
className: cn(
|
|
4828
|
+
"flex w-full",
|
|
4829
|
+
labelOnTop ? "flex-col gap-(--sys-space-field-vertical-gap)" : "items-start"
|
|
4830
|
+
),
|
|
4831
|
+
children: [
|
|
4832
|
+
label !== "" && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
4833
|
+
"div",
|
|
4834
|
+
{
|
|
4835
|
+
className: "flex shrink-0 items-center font-bold text-(--sys-color-field-text-default)",
|
|
4836
|
+
style: {
|
|
4837
|
+
// 위에 선 라벨은 제 글줄 높이만 차지한다 — 컨트롤 높이에 맞춰 늘리면
|
|
4838
|
+
// 라벨과 컨트롤 사이가 간격 토큰보다 넓어진다. 줄 세우기용 labelWidth 도
|
|
4839
|
+
// 뜻이 없다(아래에 컨트롤이 제 폭으로 선다).
|
|
4840
|
+
...labelOnTop ? {} : {
|
|
4841
|
+
height: cssLen(labelHeight) ?? s.height,
|
|
4842
|
+
marginRight: s.fieldGap,
|
|
4843
|
+
width: cssLen(labelWidth)
|
|
4887
4844
|
},
|
|
4888
|
-
|
|
4889
|
-
|
|
4890
|
-
|
|
4891
|
-
|
|
4892
|
-
|
|
4893
|
-
|
|
4894
|
-
|
|
4895
|
-
|
|
4896
|
-
|
|
4897
|
-
|
|
4898
|
-
|
|
4899
|
-
|
|
4900
|
-
|
|
4901
|
-
|
|
4902
|
-
|
|
4903
|
-
|
|
4904
|
-
|
|
4905
|
-
|
|
4906
|
-
|
|
4907
|
-
|
|
4908
|
-
|
|
4909
|
-
|
|
4910
|
-
|
|
4911
|
-
|
|
4912
|
-
|
|
4913
|
-
|
|
4914
|
-
|
|
4915
|
-
|
|
4916
|
-
|
|
4917
|
-
|
|
4918
|
-
|
|
4845
|
+
fontSize: s.fontSize,
|
|
4846
|
+
lineHeight: `${s.lineHeight}px`
|
|
4847
|
+
},
|
|
4848
|
+
children: [
|
|
4849
|
+
icon && /* @__PURE__ */ jsxRuntime.jsx(
|
|
4850
|
+
SIcon,
|
|
4851
|
+
{
|
|
4852
|
+
name: icon,
|
|
4853
|
+
size: s.icon,
|
|
4854
|
+
color: iconColor,
|
|
4855
|
+
style: { marginRight: s.labelGap }
|
|
4856
|
+
}
|
|
4857
|
+
),
|
|
4858
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "min-w-0 overflow-hidden text-ellipsis whitespace-nowrap", children: label }),
|
|
4859
|
+
(labelTooltip !== "" || labelTooltipProps) && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0 flex items-center", style: { marginLeft: s.labelGap }, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
4860
|
+
STooltip2,
|
|
4861
|
+
{
|
|
4862
|
+
message: labelTooltip !== "" ? [labelTooltip] : void 0,
|
|
4863
|
+
iconSize: s.icon,
|
|
4864
|
+
...labelTooltipProps
|
|
4865
|
+
}
|
|
4866
|
+
) })
|
|
4867
|
+
]
|
|
4868
|
+
}
|
|
4869
|
+
),
|
|
4870
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
4871
|
+
"div",
|
|
4872
|
+
{
|
|
4873
|
+
className: cn(
|
|
4874
|
+
"flex min-w-0 flex-col",
|
|
4875
|
+
!labelOnTop && !hug && !isPercentWidth && "flex-1"
|
|
4876
|
+
),
|
|
4877
|
+
style: {
|
|
4878
|
+
width: resolvedWidth,
|
|
4879
|
+
minWidth: fieldWidthValue(minWidth),
|
|
4880
|
+
maxWidth: resolvedMaxWidth
|
|
4881
|
+
},
|
|
4882
|
+
children: [
|
|
4883
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
4884
|
+
"div",
|
|
4885
|
+
{
|
|
4886
|
+
className: cn(
|
|
4887
|
+
"relative box-border flex min-w-0 items-stretch border border-solid border-(--field-bc)",
|
|
4888
|
+
// 둘 다 넘친 것을 잘라 내지만 clip 은 스크롤 상자를 만들지 않는다. hidden 이면
|
|
4889
|
+
// 이 상자가 스크롤포트가 되어 안쪽의 position:sticky 가 페이지 스크롤을 따라가지
|
|
4890
|
+
// 못한다 (SEditor 의 고정 툴바). 여러 줄 필드에서만 바꿔 파급을 좁힌다.
|
|
4891
|
+
multiline ? "overflow-clip" : "overflow-hidden",
|
|
4892
|
+
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]",
|
|
4893
|
+
disabled && "cursor-not-allowed"
|
|
4894
|
+
),
|
|
4895
|
+
style: {
|
|
4896
|
+
// @ts-expect-error CSS 변수
|
|
4897
|
+
"--field-bc": borderColor,
|
|
4898
|
+
// focused/hovered prop이 명시된 경우 강조를 즉시 반영
|
|
4899
|
+
...interactive && !borderless && (focused || hovered) ? { boxShadow: FOCUS_RING_SHADOW } : {},
|
|
4900
|
+
...multiline ? { minHeight: s.height } : { height: s.height },
|
|
4901
|
+
"borderRadius": s.radius,
|
|
4902
|
+
"background": bgColor,
|
|
4903
|
+
"color": textColor
|
|
4904
|
+
},
|
|
4905
|
+
"data-focused": focused || void 0,
|
|
4906
|
+
"data-hovered": hovered || void 0,
|
|
4907
|
+
children: [
|
|
4908
|
+
effectiveAddonLabel !== "" && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
4909
|
+
"div",
|
|
4910
|
+
{
|
|
4911
|
+
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",
|
|
4912
|
+
style: {
|
|
4913
|
+
// 원본 sd-field: labelWidth가 addon 폭(--sd-field-addon-width)에도 적용됨
|
|
4914
|
+
width: cssLen(labelWidth),
|
|
4915
|
+
justifyContent: ALIGN[addonAlign],
|
|
4916
|
+
background: "var(--cmp-field-addonLabel-bg)",
|
|
4917
|
+
borderRightColor: disabled ? "var(--cmp-field-addonLabel-border-disabled)" : "var(--cmp-field-addonLabel-border-default)",
|
|
4918
|
+
borderTopLeftRadius: s.radius - 1,
|
|
4919
|
+
borderBottomLeftRadius: s.radius - 1
|
|
4920
|
+
},
|
|
4921
|
+
children: [
|
|
4922
|
+
icon && !label && /* @__PURE__ */ jsxRuntime.jsx(SIcon, { name: icon, size: s.icon, color: iconColor }),
|
|
4923
|
+
effectiveAddonLabel
|
|
4924
|
+
]
|
|
4925
|
+
}
|
|
4926
|
+
),
|
|
4927
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("flex min-w-0 flex-1", multiline && "bg-inherit"), children })
|
|
4928
|
+
]
|
|
4929
|
+
}
|
|
4930
|
+
),
|
|
4931
|
+
showError ? /* @__PURE__ */ jsxRuntime.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__ */ jsxRuntime.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
|
|
4932
|
+
]
|
|
4933
|
+
}
|
|
4934
|
+
)
|
|
4935
|
+
]
|
|
4936
|
+
}
|
|
4937
|
+
)
|
|
4919
4938
|
}
|
|
4920
4939
|
);
|
|
4921
4940
|
});
|
|
@@ -4952,6 +4971,7 @@ var STextarea = /* @__PURE__ */ react.forwardRef(function STextarea2({
|
|
|
4952
4971
|
textareaClassName,
|
|
4953
4972
|
textareaStyle,
|
|
4954
4973
|
label,
|
|
4974
|
+
labelPosition,
|
|
4955
4975
|
labelWidth,
|
|
4956
4976
|
icon,
|
|
4957
4977
|
iconColor,
|
|
@@ -5011,6 +5031,7 @@ var STextarea = /* @__PURE__ */ react.forwardRef(function STextarea2({
|
|
|
5011
5031
|
SField,
|
|
5012
5032
|
{
|
|
5013
5033
|
label,
|
|
5034
|
+
labelPosition,
|
|
5014
5035
|
labelWidth,
|
|
5015
5036
|
icon,
|
|
5016
5037
|
iconColor,
|
|
@@ -6978,7 +6999,7 @@ function TreeConnector({
|
|
|
6978
6999
|
className: cn(
|
|
6979
7000
|
"absolute left-[6px] h-px bg-(--cmp-tree-connector-line-color)",
|
|
6980
7001
|
branchTop,
|
|
6981
|
-
hasChildren ? "w-[14px]" : "w-[calc(14px+var(--cmp-
|
|
7002
|
+
hasChildren ? "w-[14px]" : "w-[calc(14px+var(--cmp-ghostButton-xxs-size))]"
|
|
6982
7003
|
)
|
|
6983
7004
|
}
|
|
6984
7005
|
)
|
|
@@ -7131,7 +7152,12 @@ var STreeItemImpl = /* @__PURE__ */ react.forwardRef(function STreeItem({
|
|
|
7131
7152
|
onToggle?.(node, event);
|
|
7132
7153
|
}
|
|
7133
7154
|
}
|
|
7134
|
-
) :
|
|
7155
|
+
) : (
|
|
7156
|
+
// 자식이 없는 줄은 펼침 버튼 자리를 빈 칸으로 남겨 라벨의 시작점을 맞춘다.
|
|
7157
|
+
// 크기는 자리를 대신하는 그 버튼(`SGhostButton size="xxs"`)의 토큰을 그대로 쓴다 —
|
|
7158
|
+
// 버튼 크기가 바뀌면 빈 칸도 같이 따라가야 줄이 어긋나지 않는다.
|
|
7159
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "size-(--cmp-ghostButton-xxs-size) shrink-0", "aria-hidden": "true" })
|
|
7160
|
+
),
|
|
7135
7161
|
leadingNode,
|
|
7136
7162
|
selectable && /* @__PURE__ */ jsxRuntime.jsx(
|
|
7137
7163
|
"span",
|
|
@@ -8074,6 +8100,96 @@ var SCallout = /* @__PURE__ */ react.forwardRef(function SCallout2({ type = "def
|
|
|
8074
8100
|
}
|
|
8075
8101
|
);
|
|
8076
8102
|
});
|
|
8103
|
+
|
|
8104
|
+
// src/components/SContextAlert/contextAlert.config.ts
|
|
8105
|
+
var CONTEXT_ALERT_INTENTS = [
|
|
8106
|
+
"default",
|
|
8107
|
+
"danger",
|
|
8108
|
+
"warning",
|
|
8109
|
+
"success",
|
|
8110
|
+
"accent",
|
|
8111
|
+
"discovery"
|
|
8112
|
+
];
|
|
8113
|
+
var CONTEXT_ALERT_SURFACE = {
|
|
8114
|
+
default: {
|
|
8115
|
+
bg: "var(--cmp-contextAlert-default-bg)",
|
|
8116
|
+
border: "var(--cmp-contextAlert-default-border)"
|
|
8117
|
+
},
|
|
8118
|
+
danger: {
|
|
8119
|
+
bg: "var(--cmp-contextAlert-danger-bg)",
|
|
8120
|
+
border: "var(--cmp-contextAlert-danger-border)"
|
|
8121
|
+
},
|
|
8122
|
+
warning: {
|
|
8123
|
+
bg: "var(--cmp-contextAlert-warning-bg)",
|
|
8124
|
+
border: "var(--cmp-contextAlert-warning-border)"
|
|
8125
|
+
},
|
|
8126
|
+
success: {
|
|
8127
|
+
bg: "var(--cmp-contextAlert-success-bg)",
|
|
8128
|
+
border: "var(--cmp-contextAlert-success-border)"
|
|
8129
|
+
},
|
|
8130
|
+
accent: {
|
|
8131
|
+
bg: "var(--cmp-contextAlert-accent-bg)",
|
|
8132
|
+
border: "var(--cmp-contextAlert-accent-border)"
|
|
8133
|
+
},
|
|
8134
|
+
discovery: {
|
|
8135
|
+
bg: "var(--cmp-contextAlert-discovery-bg)",
|
|
8136
|
+
border: "var(--cmp-contextAlert-discovery-border)"
|
|
8137
|
+
}
|
|
8138
|
+
};
|
|
8139
|
+
var CONTEXT_ALERT_DEFAULT_ICON = "notificationOutline";
|
|
8140
|
+
var CONTEXT_ALERT_ICON_COLOR = "var(--sys-color-fg-tertiary)";
|
|
8141
|
+
var SContextAlert = /* @__PURE__ */ react.forwardRef(function SContextAlert2({
|
|
8142
|
+
intent = "default",
|
|
8143
|
+
messages = [],
|
|
8144
|
+
icon = CONTEXT_ALERT_DEFAULT_ICON,
|
|
8145
|
+
action: action2,
|
|
8146
|
+
className,
|
|
8147
|
+
style
|
|
8148
|
+
}, ref) {
|
|
8149
|
+
const surface = CONTEXT_ALERT_SURFACE[intent];
|
|
8150
|
+
const vars = {
|
|
8151
|
+
"--ca-bg": surface.bg,
|
|
8152
|
+
"--ca-border": surface.border
|
|
8153
|
+
};
|
|
8154
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
8155
|
+
"div",
|
|
8156
|
+
{
|
|
8157
|
+
ref,
|
|
8158
|
+
role: "note",
|
|
8159
|
+
className: cn(
|
|
8160
|
+
"flex w-full items-center gap-[var(--cmp-contextAlert-gap)]",
|
|
8161
|
+
"rounded-[var(--cmp-contextAlert-radius)] border-[length:var(--cmp-contextAlert-border-width)] border-solid",
|
|
8162
|
+
"px-[var(--cmp-contextAlert-paddingX)] py-[var(--cmp-contextAlert-paddingY)]",
|
|
8163
|
+
"border-[color:var(--ca-border)] bg-[var(--ca-bg)]",
|
|
8164
|
+
className
|
|
8165
|
+
),
|
|
8166
|
+
style: { ...vars, ...style },
|
|
8167
|
+
children: [
|
|
8168
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
8169
|
+
SIcon,
|
|
8170
|
+
{
|
|
8171
|
+
name: icon,
|
|
8172
|
+
size: "var(--cmp-contextAlert-icon)",
|
|
8173
|
+
color: CONTEXT_ALERT_ICON_COLOR,
|
|
8174
|
+
className: "shrink-0"
|
|
8175
|
+
}
|
|
8176
|
+
),
|
|
8177
|
+
/* @__PURE__ */ jsxRuntime.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) => (
|
|
8178
|
+
// 메시지는 HTML 문자열을 허용하되, sanitizeInlineHtml 로 살균 후 innerHTML 렌더 (XSS 방어)
|
|
8179
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
8180
|
+
"p",
|
|
8181
|
+
{
|
|
8182
|
+
className: "m-0 break-keep break-words text-pretty",
|
|
8183
|
+
dangerouslySetInnerHTML: { __html: sanitizeInlineHtml(m) }
|
|
8184
|
+
},
|
|
8185
|
+
`${i}-${m}`
|
|
8186
|
+
)
|
|
8187
|
+
)) }),
|
|
8188
|
+
action2 != null && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex shrink-0 items-center", children: action2 })
|
|
8189
|
+
]
|
|
8190
|
+
}
|
|
8191
|
+
);
|
|
8192
|
+
});
|
|
8077
8193
|
var FILL_COLOR = {
|
|
8078
8194
|
primary: "var(--cmp-progress-color-active)",
|
|
8079
8195
|
error: "var(--cmp-progress-color-error)",
|
|
@@ -10072,7 +10188,7 @@ function SConfirmModal({
|
|
|
10072
10188
|
}
|
|
10073
10189
|
)
|
|
10074
10190
|
] }),
|
|
10075
|
-
hasBody && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center gap-[20px] text-center text-[
|
|
10191
|
+
hasBody && /* @__PURE__ */ jsxRuntime.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: [
|
|
10076
10192
|
topMessage.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col gap-[2px]", children: topMessage.map((m, i) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
10077
10193
|
"p",
|
|
10078
10194
|
{
|
|
@@ -10258,7 +10374,7 @@ function SLoadingModal({
|
|
|
10258
10374
|
lines.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col gap-[2px]", children: lines.map((m, i) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
10259
10375
|
"p",
|
|
10260
10376
|
{
|
|
10261
|
-
className: "m-0 max-w-[400px] break-keep text-center text-[
|
|
10377
|
+
className: "typo-feedback-md-regular m-0 max-w-[400px] break-keep text-center text-[color:var(--cmp-modal-loading-message-color)]",
|
|
10262
10378
|
children: m
|
|
10263
10379
|
},
|
|
10264
10380
|
i
|
|
@@ -12013,7 +12129,7 @@ var SGnb = /* @__PURE__ */ react.forwardRef(function SGnb2({
|
|
|
12013
12129
|
viewportPadding: 8,
|
|
12014
12130
|
ariaLabel: GNB_LAUNCHER_LABEL,
|
|
12015
12131
|
onOpenAutoFocus: (event) => event.preventDefault(),
|
|
12016
|
-
className: "w-auto rounded-(--cmp-gnb-launcher-listBox-radius) bg-(--cmp-gnb-launcher-listBox-bg) shadow-
|
|
12132
|
+
className: "w-auto rounded-(--cmp-gnb-launcher-listBox-radius) bg-(--cmp-gnb-launcher-listBox-bg) shadow-(--cmp-gnb-launcher-listBox-shadow)",
|
|
12017
12133
|
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
12018
12134
|
SLauncherListBox,
|
|
12019
12135
|
{
|
|
@@ -14761,6 +14877,7 @@ var SSelectImpl = /* @__PURE__ */ react.forwardRef(function SSelect({
|
|
|
14761
14877
|
onSearchChange,
|
|
14762
14878
|
searchDebounce = DEFAULT_SEARCH_DEBOUNCE,
|
|
14763
14879
|
label,
|
|
14880
|
+
labelPosition,
|
|
14764
14881
|
labelWidth,
|
|
14765
14882
|
icon,
|
|
14766
14883
|
iconColor,
|
|
@@ -15193,6 +15310,7 @@ var SSelectImpl = /* @__PURE__ */ react.forwardRef(function SSelect({
|
|
|
15193
15310
|
SField,
|
|
15194
15311
|
{
|
|
15195
15312
|
label,
|
|
15313
|
+
labelPosition,
|
|
15196
15314
|
labelWidth,
|
|
15197
15315
|
icon,
|
|
15198
15316
|
iconColor,
|
|
@@ -16923,6 +17041,7 @@ var SInput = /* @__PURE__ */ react.forwardRef(function SInput2({
|
|
|
16923
17041
|
inputClassName,
|
|
16924
17042
|
inputStyle,
|
|
16925
17043
|
label,
|
|
17044
|
+
labelPosition,
|
|
16926
17045
|
labelWidth,
|
|
16927
17046
|
labelTooltip,
|
|
16928
17047
|
labelTooltipProps,
|
|
@@ -16966,6 +17085,7 @@ var SInput = /* @__PURE__ */ react.forwardRef(function SInput2({
|
|
|
16966
17085
|
SField,
|
|
16967
17086
|
{
|
|
16968
17087
|
label,
|
|
17088
|
+
labelPosition,
|
|
16969
17089
|
labelWidth,
|
|
16970
17090
|
labelTooltip,
|
|
16971
17091
|
labelTooltipProps,
|
|
@@ -17156,6 +17276,7 @@ var SNumberInput = /* @__PURE__ */ react.forwardRef(function SNumberInput2({
|
|
|
17156
17276
|
focused,
|
|
17157
17277
|
hovered,
|
|
17158
17278
|
label,
|
|
17279
|
+
labelPosition,
|
|
17159
17280
|
labelWidth,
|
|
17160
17281
|
icon,
|
|
17161
17282
|
iconColor,
|
|
@@ -17325,6 +17446,7 @@ var SNumberInput = /* @__PURE__ */ react.forwardRef(function SNumberInput2({
|
|
|
17325
17446
|
SField,
|
|
17326
17447
|
{
|
|
17327
17448
|
label,
|
|
17449
|
+
labelPosition,
|
|
17328
17450
|
labelWidth,
|
|
17329
17451
|
icon,
|
|
17330
17452
|
iconColor,
|
|
@@ -17612,7 +17734,7 @@ function SCalendar({
|
|
|
17612
17734
|
if (e !== "" && date > e) return true;
|
|
17613
17735
|
return false;
|
|
17614
17736
|
};
|
|
17615
|
-
const
|
|
17737
|
+
const pick2 = (date) => {
|
|
17616
17738
|
if (!isDisabled(date)) onValueChange?.(date);
|
|
17617
17739
|
};
|
|
17618
17740
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
@@ -17697,7 +17819,7 @@ function SCalendar({
|
|
|
17697
17819
|
{
|
|
17698
17820
|
type: "button",
|
|
17699
17821
|
disabled: !cell.inCurrentMonth || disabled,
|
|
17700
|
-
onClick: () => cell.inCurrentMonth &&
|
|
17822
|
+
onClick: () => cell.inCurrentMonth && pick2(cell.date),
|
|
17701
17823
|
className: cn(
|
|
17702
17824
|
"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",
|
|
17703
17825
|
!cell.inCurrentMonth ? "invisible pointer-events-none" : disabled ? "cursor-not-allowed" : "cursor-pointer"
|
|
@@ -18043,6 +18165,7 @@ function SDatePicker({
|
|
|
18043
18165
|
rules,
|
|
18044
18166
|
status,
|
|
18045
18167
|
label,
|
|
18168
|
+
labelPosition,
|
|
18046
18169
|
labelWidth,
|
|
18047
18170
|
icon,
|
|
18048
18171
|
iconColor,
|
|
@@ -18115,6 +18238,7 @@ function SDatePicker({
|
|
|
18115
18238
|
SField,
|
|
18116
18239
|
{
|
|
18117
18240
|
label,
|
|
18241
|
+
labelPosition,
|
|
18118
18242
|
labelWidth,
|
|
18119
18243
|
icon,
|
|
18120
18244
|
iconColor,
|
|
@@ -18577,6 +18701,7 @@ function SDateRangePicker({
|
|
|
18577
18701
|
rules,
|
|
18578
18702
|
status,
|
|
18579
18703
|
label,
|
|
18704
|
+
labelPosition,
|
|
18580
18705
|
labelWidth,
|
|
18581
18706
|
icon,
|
|
18582
18707
|
iconColor,
|
|
@@ -18649,6 +18774,7 @@ function SDateRangePicker({
|
|
|
18649
18774
|
SField,
|
|
18650
18775
|
{
|
|
18651
18776
|
label,
|
|
18777
|
+
labelPosition,
|
|
18652
18778
|
labelWidth,
|
|
18653
18779
|
icon,
|
|
18654
18780
|
iconColor,
|
|
@@ -18953,6 +19079,7 @@ function SFilePicker({
|
|
|
18953
19079
|
status,
|
|
18954
19080
|
size = "sm",
|
|
18955
19081
|
label,
|
|
19082
|
+
labelPosition,
|
|
18956
19083
|
labelWidth,
|
|
18957
19084
|
icon,
|
|
18958
19085
|
iconColor,
|
|
@@ -19137,6 +19264,7 @@ function SFilePicker({
|
|
|
19137
19264
|
{
|
|
19138
19265
|
borderless: inline,
|
|
19139
19266
|
label,
|
|
19267
|
+
labelPosition,
|
|
19140
19268
|
labelWidth,
|
|
19141
19269
|
icon,
|
|
19142
19270
|
iconColor,
|
|
@@ -19402,7 +19530,7 @@ function ChartGrid({ scale, direction, width, height }) {
|
|
|
19402
19530
|
return /* @__PURE__ */ jsxRuntime.jsx("g", { "aria-hidden": true, children: scale.ticks.map((tick) => {
|
|
19403
19531
|
const ratio = ratioOf(tick, scale);
|
|
19404
19532
|
const isBaseline = tick === 0;
|
|
19405
|
-
const color = isBaseline ? "var(--cmp-chart-baseline-color)" : "var(--cmp-chart-
|
|
19533
|
+
const color = isBaseline ? "var(--cmp-chart-baseline-color)" : "var(--cmp-chart-gridline-color)";
|
|
19406
19534
|
const position = vertical ? height - ratio * height : ratio * width;
|
|
19407
19535
|
const extent = vertical ? height : width;
|
|
19408
19536
|
const snapped = Math.min(Math.max(Math.round(position), 0), Math.max(0, extent - 1)) + 0.5;
|
|
@@ -19480,7 +19608,7 @@ function ChartAxisLabels({
|
|
|
19480
19608
|
}
|
|
19481
19609
|
);
|
|
19482
19610
|
}
|
|
19483
|
-
var ChartFrame = /* @__PURE__ */ react.forwardRef(function ChartFrame2({ legend, legendPosition = "top", children, className, style, ...props }, ref) {
|
|
19611
|
+
var ChartFrame = /* @__PURE__ */ react.forwardRef(function ChartFrame2({ title, unit, legend, legendPosition = "top", children, className, style, ...props }, ref) {
|
|
19484
19612
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
19485
19613
|
"div",
|
|
19486
19614
|
{
|
|
@@ -19493,6 +19621,14 @@ var ChartFrame = /* @__PURE__ */ react.forwardRef(function ChartFrame2({ legend,
|
|
|
19493
19621
|
style,
|
|
19494
19622
|
...props,
|
|
19495
19623
|
children: [
|
|
19624
|
+
(title || unit) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-(--cmp-chart-gap)", children: [
|
|
19625
|
+
title && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "typo-body-md-medium text-(--cmp-chart-title-color)", children: title }),
|
|
19626
|
+
unit && // ml-auto — title 유무와 관계없이 항상 오른쪽 끝에 붙는다.
|
|
19627
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "ml-auto whitespace-nowrap typo-body-sm-default text-(--cmp-chart-unit-color)", children: [
|
|
19628
|
+
"\uB2E8\uC704 : ",
|
|
19629
|
+
unit
|
|
19630
|
+
] })
|
|
19631
|
+
] }),
|
|
19496
19632
|
legend && legendPosition === "top" && legend,
|
|
19497
19633
|
children,
|
|
19498
19634
|
legend && legendPosition === "bottom" && legend
|
|
@@ -19543,46 +19679,57 @@ function ChartLegend({ items, align = "center", activeIndex, className }) {
|
|
|
19543
19679
|
|
|
19544
19680
|
// src/lib/chart/palette.ts
|
|
19545
19681
|
var V3 = (path) => `var(--cmp-chart-palette-${path})`;
|
|
19546
|
-
var
|
|
19547
|
-
|
|
19548
|
-
|
|
19549
|
-
|
|
19550
|
-
|
|
19551
|
-
|
|
19552
|
-
|
|
19553
|
-
|
|
19554
|
-
|
|
19555
|
-
|
|
19682
|
+
var DIMMED = (path) => `var(--cmp-chart-line-point-dimmed-palette-${path})`;
|
|
19683
|
+
var colorsOf = (v) => ({
|
|
19684
|
+
positivePrimary: v("variation-positivePrimary"),
|
|
19685
|
+
positiveSecondary: v("variation-positiveSecondary"),
|
|
19686
|
+
negativePrimary: v("variation-negativePrimary"),
|
|
19687
|
+
negativeSecondary: v("variation-negativeSecondary"),
|
|
19688
|
+
neutralPrimary: v("variation-neutralPrimary"),
|
|
19689
|
+
neutralSecondary: v("variation-neutralSecondary")
|
|
19690
|
+
});
|
|
19691
|
+
var palettesOf = (v) => ({
|
|
19692
|
+
default: [v("single")],
|
|
19556
19693
|
multi: [
|
|
19557
|
-
|
|
19558
|
-
|
|
19559
|
-
|
|
19560
|
-
|
|
19561
|
-
|
|
19562
|
-
|
|
19563
|
-
|
|
19564
|
-
|
|
19565
|
-
|
|
19566
|
-
|
|
19567
|
-
|
|
19694
|
+
v("multi-blue"),
|
|
19695
|
+
v("multi-skyblue"),
|
|
19696
|
+
v("multi-yellow"),
|
|
19697
|
+
v("multi-olive"),
|
|
19698
|
+
v("multi-lightRed"),
|
|
19699
|
+
v("multi-warmBlue"),
|
|
19700
|
+
v("multi-orange"),
|
|
19701
|
+
v("multi-green"),
|
|
19702
|
+
v("multi-navy"),
|
|
19703
|
+
v("multi-grey"),
|
|
19704
|
+
v("multi-red")
|
|
19568
19705
|
],
|
|
19569
19706
|
gradation: [
|
|
19570
|
-
|
|
19571
|
-
|
|
19572
|
-
|
|
19573
|
-
|
|
19574
|
-
|
|
19575
|
-
|
|
19707
|
+
v("gradation-1"),
|
|
19708
|
+
v("gradation-2"),
|
|
19709
|
+
v("gradation-3"),
|
|
19710
|
+
v("gradation-4"),
|
|
19711
|
+
v("gradation-5"),
|
|
19712
|
+
v("gradation-6")
|
|
19576
19713
|
]
|
|
19577
|
-
};
|
|
19578
|
-
|
|
19714
|
+
});
|
|
19715
|
+
var CHART_COLORS = colorsOf(V3);
|
|
19716
|
+
var CHART_PALETTES = palettesOf(V3);
|
|
19717
|
+
var DIMMED_COLORS = colorsOf(DIMMED);
|
|
19718
|
+
var DIMMED_PALETTES = palettesOf(DIMMED);
|
|
19719
|
+
function pick(names, palettes, palette, index, colors) {
|
|
19579
19720
|
if (palette === "custom") {
|
|
19580
|
-
if (!colors?.length) return
|
|
19581
|
-
return
|
|
19721
|
+
if (!colors?.length) return palettes.default[0];
|
|
19722
|
+
return names[colors[index % colors.length]];
|
|
19582
19723
|
}
|
|
19583
|
-
const list =
|
|
19724
|
+
const list = palettes[palette] ?? palettes.default;
|
|
19584
19725
|
return list[index % list.length];
|
|
19585
19726
|
}
|
|
19727
|
+
function paletteColor(palette, index, colors) {
|
|
19728
|
+
return pick(CHART_COLORS, CHART_PALETTES, palette, index, colors);
|
|
19729
|
+
}
|
|
19730
|
+
function linePointDimmedColor(palette, index, colors) {
|
|
19731
|
+
return pick(DIMMED_COLORS, DIMMED_PALETTES, palette, index, colors);
|
|
19732
|
+
}
|
|
19586
19733
|
function useElementSize() {
|
|
19587
19734
|
const ref = react.useRef(null);
|
|
19588
19735
|
const [size, setSize] = react.useState({ width: 0, height: 0 });
|
|
@@ -19660,7 +19807,8 @@ function ChartTooltip({
|
|
|
19660
19807
|
"pointer-events-none absolute top-0 left-0 z-10 w-max",
|
|
19661
19808
|
"flex flex-col gap-(--cmp-chart-chartTooltip-gap)",
|
|
19662
19809
|
"px-(--cmp-chart-chartTooltip-paddingX) py-(--cmp-chart-chartTooltip-paddingY)",
|
|
19663
|
-
"rounded-(--cmp-chart-chartTooltip-radius) bg-(--cmp-chart-chartTooltip-bg)
|
|
19810
|
+
"rounded-(--cmp-chart-chartTooltip-radius) bg-(--cmp-chart-chartTooltip-bg)",
|
|
19811
|
+
"shadow-(--cmp-chart-chartTooltip-shadow)",
|
|
19664
19812
|
className
|
|
19665
19813
|
),
|
|
19666
19814
|
style: {
|
|
@@ -19707,12 +19855,12 @@ var BAR_SIZE_MAX = 80;
|
|
|
19707
19855
|
var BAR_GAP = 6;
|
|
19708
19856
|
var GROUP_PADDING_MIN = 8;
|
|
19709
19857
|
var GROUP_PADDING_MAX = 24;
|
|
19710
|
-
var VALUE_LABEL_GAP =
|
|
19858
|
+
var VALUE_LABEL_GAP = 4;
|
|
19711
19859
|
var BAR_RADIUS = 8;
|
|
19712
|
-
var BAR_OPACITY_DEFAULT = "var(--cmp-chart-
|
|
19860
|
+
var BAR_OPACITY_DEFAULT = "var(--cmp-chart-opacity-default)";
|
|
19713
19861
|
var BAR_OPACITY_DIMMED = "var(--cmp-chart-bar-opacity-dimmed)";
|
|
19714
19862
|
var BAR_OPACITY_HOVER = 1;
|
|
19715
|
-
var BAR_DATA_LABEL_COLOR = "var(--cmp-chart-
|
|
19863
|
+
var BAR_DATA_LABEL_COLOR = "var(--cmp-chart-dataLabel-color-default)";
|
|
19716
19864
|
var BAR_DATA_LABEL_TYPO = "typo-body-sm-medium";
|
|
19717
19865
|
var BAR_DATA_LABEL_TYPO_HOVER = "typo-body-md-bold";
|
|
19718
19866
|
var BAR_HOVER_TRANSITION = "transition-opacity duration-200 ease-out motion-reduce:transition-none";
|
|
@@ -19772,6 +19920,8 @@ function barPath(x, y, width, height, direction, negative) {
|
|
|
19772
19920
|
var SBarChart = /* @__PURE__ */ react.forwardRef(function SBarChart2({
|
|
19773
19921
|
categories,
|
|
19774
19922
|
series,
|
|
19923
|
+
title,
|
|
19924
|
+
unit,
|
|
19775
19925
|
direction = "vertical",
|
|
19776
19926
|
stacked = false,
|
|
19777
19927
|
palette = "default",
|
|
@@ -20237,6 +20387,8 @@ var SBarChart = /* @__PURE__ */ react.forwardRef(function SBarChart2({
|
|
|
20237
20387
|
ChartFrame,
|
|
20238
20388
|
{
|
|
20239
20389
|
ref,
|
|
20390
|
+
title,
|
|
20391
|
+
unit,
|
|
20240
20392
|
legend,
|
|
20241
20393
|
legendPosition,
|
|
20242
20394
|
className,
|
|
@@ -20277,18 +20429,18 @@ var SBarChart = /* @__PURE__ */ react.forwardRef(function SBarChart2({
|
|
|
20277
20429
|
});
|
|
20278
20430
|
|
|
20279
20431
|
// src/components/SLineChart/lineChart.config.ts
|
|
20280
|
-
var LINE_WIDTH =
|
|
20281
|
-
var
|
|
20282
|
-
var
|
|
20283
|
-
var
|
|
20284
|
-
var
|
|
20285
|
-
var
|
|
20286
|
-
var POINT_HOVER_EXTENT =
|
|
20432
|
+
var LINE_WIDTH = "var(--cmp-chart-line-width)";
|
|
20433
|
+
var LINE_OPACITY = "var(--cmp-chart-line-opacity)";
|
|
20434
|
+
var POINT_RADIUS = 5;
|
|
20435
|
+
var POINT_HOVER_RADIUS = 6;
|
|
20436
|
+
var POINT_HALO_RADIUS = 12;
|
|
20437
|
+
var POINT_HALO_OPACITY = "var(--cmp-chart-line-point-opacity-bg)";
|
|
20438
|
+
var POINT_HOVER_EXTENT = POINT_HALO_RADIUS;
|
|
20287
20439
|
var BAND_MIN = 40;
|
|
20288
|
-
var VALUE_LABEL_GAP2 =
|
|
20289
|
-
var AREA_OPACITY_TOP = "
|
|
20290
|
-
var AREA_OPACITY_BOTTOM = "var(--
|
|
20291
|
-
var LINE_DATA_LABEL_COLOR = "var(--cmp-chart-
|
|
20440
|
+
var VALUE_LABEL_GAP2 = 4;
|
|
20441
|
+
var AREA_OPACITY_TOP = "var(--cmp-chart-line-area-gradation-start)";
|
|
20442
|
+
var AREA_OPACITY_BOTTOM = "var(--cmp-chart-line-area-gradation-end)";
|
|
20443
|
+
var LINE_DATA_LABEL_COLOR = "var(--cmp-chart-dataLabel-color-default)";
|
|
20292
20444
|
var LINE_DATA_LABEL_TYPO = "typo-body-sm-medium";
|
|
20293
20445
|
var LINE_DATA_LABEL_TYPO_HOVER = "typo-body-md-bold";
|
|
20294
20446
|
var r = (value) => Math.round(value * 100) / 100;
|
|
@@ -20368,6 +20520,8 @@ function runsOf(row) {
|
|
|
20368
20520
|
var SLineChart = /* @__PURE__ */ react.forwardRef(function SLineChart2({
|
|
20369
20521
|
categories,
|
|
20370
20522
|
series,
|
|
20523
|
+
title,
|
|
20524
|
+
unit,
|
|
20371
20525
|
curve = "linear",
|
|
20372
20526
|
area = false,
|
|
20373
20527
|
stacked = false,
|
|
@@ -20397,6 +20551,10 @@ var SLineChart = /* @__PURE__ */ react.forwardRef(function SLineChart2({
|
|
|
20397
20551
|
(seriesIndex) => paletteColor(palette, seriesIndex, customColors),
|
|
20398
20552
|
[palette, customColors]
|
|
20399
20553
|
);
|
|
20554
|
+
const dimmedColorAt = react.useCallback(
|
|
20555
|
+
(seriesIndex) => linePointDimmedColor(palette, seriesIndex, customColors),
|
|
20556
|
+
[palette, customColors]
|
|
20557
|
+
);
|
|
20400
20558
|
const rows = react.useMemo(() => {
|
|
20401
20559
|
const running = categories.map(() => 0);
|
|
20402
20560
|
return series.map(
|
|
@@ -20568,10 +20726,13 @@ var SLineChart = /* @__PURE__ */ react.forwardRef(function SLineChart2({
|
|
|
20568
20726
|
"aria-hidden": true,
|
|
20569
20727
|
d,
|
|
20570
20728
|
fill: "none",
|
|
20571
|
-
strokeWidth: LINE_WIDTH,
|
|
20572
20729
|
strokeLinecap: "round",
|
|
20573
20730
|
strokeLinejoin: "round",
|
|
20574
|
-
style: {
|
|
20731
|
+
style: {
|
|
20732
|
+
stroke: colorAt(seriesIndex),
|
|
20733
|
+
strokeWidth: LINE_WIDTH,
|
|
20734
|
+
strokeOpacity: LINE_OPACITY
|
|
20735
|
+
}
|
|
20575
20736
|
},
|
|
20576
20737
|
`line-${seriesIndex}-${runIndex}`
|
|
20577
20738
|
);
|
|
@@ -20588,6 +20749,7 @@ var SLineChart = /* @__PURE__ */ react.forwardRef(function SLineChart2({
|
|
|
20588
20749
|
const hovered = hoveredCategory === categoryIndex;
|
|
20589
20750
|
if (!showPoint && !hovered) return;
|
|
20590
20751
|
const color = colorAt(seriesIndex);
|
|
20752
|
+
const dimmed = hoveredCategory != null && !hovered;
|
|
20591
20753
|
const key = `${seriesIndex}-${categoryIndex}`;
|
|
20592
20754
|
if (hovered) {
|
|
20593
20755
|
halos.push(
|
|
@@ -20597,12 +20759,8 @@ var SLineChart = /* @__PURE__ */ react.forwardRef(function SLineChart2({
|
|
|
20597
20759
|
"aria-hidden": true,
|
|
20598
20760
|
cx: point.x,
|
|
20599
20761
|
cy: point.y,
|
|
20600
|
-
r:
|
|
20601
|
-
style: {
|
|
20602
|
-
fill: POINT_HOVER_BG,
|
|
20603
|
-
stroke: color,
|
|
20604
|
-
strokeWidth: POINT_HOVER_BORDER_WIDTH
|
|
20605
|
-
}
|
|
20762
|
+
r: POINT_HALO_RADIUS,
|
|
20763
|
+
style: { fill: color, fillOpacity: POINT_HALO_OPACITY }
|
|
20606
20764
|
},
|
|
20607
20765
|
`halo-${key}`
|
|
20608
20766
|
)
|
|
@@ -20614,8 +20772,11 @@ var SLineChart = /* @__PURE__ */ react.forwardRef(function SLineChart2({
|
|
|
20614
20772
|
{
|
|
20615
20773
|
cx: point.x,
|
|
20616
20774
|
cy: point.y,
|
|
20617
|
-
r: hovered ?
|
|
20618
|
-
style: {
|
|
20775
|
+
r: hovered ? POINT_HOVER_RADIUS : POINT_RADIUS,
|
|
20776
|
+
style: {
|
|
20777
|
+
fill: dimmed ? dimmedColorAt(seriesIndex) : color,
|
|
20778
|
+
cursor: onPointClick ? "pointer" : void 0
|
|
20779
|
+
},
|
|
20619
20780
|
onClick: onPointClick ? () => onPointClick({ seriesIndex, categoryIndex, value: point.own }) : void 0,
|
|
20620
20781
|
children: /* @__PURE__ */ jsxRuntime.jsx("title", { children: `${categories[categoryIndex]} ${series[seriesIndex]?.name ?? ""} ${formatValue(point.own)}` })
|
|
20621
20782
|
},
|
|
@@ -20625,7 +20786,17 @@ var SLineChart = /* @__PURE__ */ react.forwardRef(function SLineChart2({
|
|
|
20625
20786
|
});
|
|
20626
20787
|
});
|
|
20627
20788
|
return { pointHalos: halos, pointDots: dots };
|
|
20628
|
-
}, [
|
|
20789
|
+
}, [
|
|
20790
|
+
plotted,
|
|
20791
|
+
showPoint,
|
|
20792
|
+
hoveredCategory,
|
|
20793
|
+
colorAt,
|
|
20794
|
+
dimmedColorAt,
|
|
20795
|
+
onPointClick,
|
|
20796
|
+
categories,
|
|
20797
|
+
series,
|
|
20798
|
+
formatValue
|
|
20799
|
+
]);
|
|
20629
20800
|
const valueLabels = react.useMemo(
|
|
20630
20801
|
() => showValueLabel ? plotted.flatMap(
|
|
20631
20802
|
(row, seriesIndex) => row.map(
|
|
@@ -20651,6 +20822,8 @@ var SLineChart = /* @__PURE__ */ react.forwardRef(function SLineChart2({
|
|
|
20651
20822
|
ChartFrame,
|
|
20652
20823
|
{
|
|
20653
20824
|
ref,
|
|
20825
|
+
title,
|
|
20826
|
+
unit,
|
|
20654
20827
|
legend,
|
|
20655
20828
|
legendPosition,
|
|
20656
20829
|
className,
|
|
@@ -20786,8 +20959,9 @@ var LABEL_MIN_RATIO = 0.05;
|
|
|
20786
20959
|
var PIE_LABEL_RADIUS_RATIO = 0.65;
|
|
20787
20960
|
var HOVER_GROW = 4;
|
|
20788
20961
|
var HOVER_CORNER = 2;
|
|
20789
|
-
var OPACITY_DEFAULT = "var(--cmp-chart-
|
|
20790
|
-
var OPACITY_DIMMED = "var(--cmp-chart-
|
|
20962
|
+
var OPACITY_DEFAULT = "var(--cmp-chart-opacity-default)";
|
|
20963
|
+
var OPACITY_DIMMED = "var(--cmp-chart-doughnut-opacity-dimmed)";
|
|
20964
|
+
var SLICE_HOVER_SHADOW = "var(--cmp-chart-doughnut-shadow-hover-filter)";
|
|
20791
20965
|
var OPACITY_HOVER = 1;
|
|
20792
20966
|
var defaultFormat3 = (value) => value.toLocaleString();
|
|
20793
20967
|
function formatRatio(ratio) {
|
|
@@ -20837,6 +21011,8 @@ function slicePath(center, outer, inner, start, end, corner = 0) {
|
|
|
20837
21011
|
}
|
|
20838
21012
|
var RadialChart = /* @__PURE__ */ react.forwardRef(function RadialChart2({
|
|
20839
21013
|
data,
|
|
21014
|
+
title,
|
|
21015
|
+
unit,
|
|
20840
21016
|
palette = "multi",
|
|
20841
21017
|
colors,
|
|
20842
21018
|
showValueLabel = false,
|
|
@@ -20908,6 +21084,8 @@ var RadialChart = /* @__PURE__ */ react.forwardRef(function RadialChart2({
|
|
|
20908
21084
|
ChartFrame,
|
|
20909
21085
|
{
|
|
20910
21086
|
ref,
|
|
21087
|
+
title,
|
|
21088
|
+
unit,
|
|
20911
21089
|
legend,
|
|
20912
21090
|
legendPosition,
|
|
20913
21091
|
className,
|
|
@@ -20918,6 +21096,7 @@ var RadialChart = /* @__PURE__ */ react.forwardRef(function RadialChart2({
|
|
|
20918
21096
|
{
|
|
20919
21097
|
width: diameter,
|
|
20920
21098
|
height: diameter,
|
|
21099
|
+
overflow: "visible",
|
|
20921
21100
|
role: "img",
|
|
20922
21101
|
"aria-label": `${arcs.length}\uAC1C \uD56D\uBAA9 ${kind}`,
|
|
20923
21102
|
onMouseLeave: () => setHovered(null),
|
|
@@ -20930,7 +21109,7 @@ var RadialChart = /* @__PURE__ */ react.forwardRef(function RadialChart2({
|
|
|
20930
21109
|
"aria-hidden": true,
|
|
20931
21110
|
d: slicePath(center, outer, inner, 0, Math.PI * 2),
|
|
20932
21111
|
fillRule: "evenodd",
|
|
20933
|
-
style: { fill: "var(--cmp-chart-
|
|
21112
|
+
style: { fill: "var(--cmp-chart-gridline-color)" }
|
|
20934
21113
|
}
|
|
20935
21114
|
)
|
|
20936
21115
|
) : arcs.map((arc2) => {
|
|
@@ -20944,6 +21123,10 @@ var RadialChart = /* @__PURE__ */ react.forwardRef(function RadialChart2({
|
|
|
20944
21123
|
style: {
|
|
20945
21124
|
fill: arc2.color,
|
|
20946
21125
|
opacity,
|
|
21126
|
+
// 짚은 조각만 떠오른다. SVG 도형에는 box-shadow 가 걸리지 않아
|
|
21127
|
+
// 같은 토큰의 filter 형태를 쓴다 (drop-shadow 에는 spread 가 없다 —
|
|
21128
|
+
// 토큰의 음수 spread 만큼 설계보다 조금 넓게 깔린다).
|
|
21129
|
+
filter: hovered === arc2.index ? SLICE_HOVER_SHADOW : void 0,
|
|
20947
21130
|
cursor: onSliceClick ? "pointer" : void 0
|
|
20948
21131
|
},
|
|
20949
21132
|
onMouseEnter: () => setHovered(arc2.index),
|
|
@@ -23514,6 +23697,7 @@ var SEditor = /* @__PURE__ */ react.forwardRef(function SEditor2({
|
|
|
23514
23697
|
onFocus,
|
|
23515
23698
|
onBlur,
|
|
23516
23699
|
label,
|
|
23700
|
+
labelPosition,
|
|
23517
23701
|
labelWidth,
|
|
23518
23702
|
icon,
|
|
23519
23703
|
iconColor,
|
|
@@ -23602,6 +23786,7 @@ var SEditor = /* @__PURE__ */ react.forwardRef(function SEditor2({
|
|
|
23602
23786
|
{
|
|
23603
23787
|
name,
|
|
23604
23788
|
label,
|
|
23789
|
+
labelPosition,
|
|
23605
23790
|
labelWidth,
|
|
23606
23791
|
icon,
|
|
23607
23792
|
iconColor,
|
|
@@ -25489,7 +25674,7 @@ function ListBox({
|
|
|
25489
25674
|
"div",
|
|
25490
25675
|
{
|
|
25491
25676
|
className: cn(
|
|
25492
|
-
"overflow-hidden border border-solid shadow-[var(--shadow
|
|
25677
|
+
"overflow-hidden border border-solid shadow-[var(--cmp-chipFilter-listbox-shadow)]",
|
|
25493
25678
|
maxHeight && "flex flex-col"
|
|
25494
25679
|
),
|
|
25495
25680
|
style: {
|
|
@@ -25574,6 +25759,7 @@ var SChipInput = /* @__PURE__ */ react.forwardRef(function SChipInput2({
|
|
|
25574
25759
|
loadingRecommendedItems = false,
|
|
25575
25760
|
dropdownMinWidth = 200,
|
|
25576
25761
|
label,
|
|
25762
|
+
labelPosition,
|
|
25577
25763
|
labelWidth,
|
|
25578
25764
|
hint,
|
|
25579
25765
|
errorMessage,
|
|
@@ -25714,6 +25900,7 @@ var SChipInput = /* @__PURE__ */ react.forwardRef(function SChipInput2({
|
|
|
25714
25900
|
SField,
|
|
25715
25901
|
{
|
|
25716
25902
|
label,
|
|
25903
|
+
labelPosition,
|
|
25717
25904
|
labelWidth,
|
|
25718
25905
|
labelHeight: `calc(var(--cmp-chipInput-${size}-minHeight) + 2px)`,
|
|
25719
25906
|
icon,
|
|
@@ -26032,6 +26219,7 @@ var SBarcodeInput = /* @__PURE__ */ react.forwardRef(
|
|
|
26032
26219
|
inputClassName,
|
|
26033
26220
|
inputStyle,
|
|
26034
26221
|
label,
|
|
26222
|
+
labelPosition,
|
|
26035
26223
|
labelWidth,
|
|
26036
26224
|
icon,
|
|
26037
26225
|
iconColor,
|
|
@@ -26068,6 +26256,7 @@ var SBarcodeInput = /* @__PURE__ */ react.forwardRef(
|
|
|
26068
26256
|
SField,
|
|
26069
26257
|
{
|
|
26070
26258
|
label,
|
|
26259
|
+
labelPosition,
|
|
26071
26260
|
labelWidth,
|
|
26072
26261
|
icon,
|
|
26073
26262
|
iconColor,
|
|
@@ -26437,6 +26626,7 @@ function STimePicker({
|
|
|
26437
26626
|
rules,
|
|
26438
26627
|
status,
|
|
26439
26628
|
label,
|
|
26629
|
+
labelPosition,
|
|
26440
26630
|
labelWidth,
|
|
26441
26631
|
icon,
|
|
26442
26632
|
iconColor,
|
|
@@ -26491,6 +26681,7 @@ function STimePicker({
|
|
|
26491
26681
|
SField,
|
|
26492
26682
|
{
|
|
26493
26683
|
label,
|
|
26684
|
+
labelPosition,
|
|
26494
26685
|
labelWidth,
|
|
26495
26686
|
icon,
|
|
26496
26687
|
iconColor,
|
|
@@ -26903,6 +27094,7 @@ function STimeRangePicker({
|
|
|
26903
27094
|
rules,
|
|
26904
27095
|
status,
|
|
26905
27096
|
label,
|
|
27097
|
+
labelPosition,
|
|
26906
27098
|
labelWidth,
|
|
26907
27099
|
icon,
|
|
26908
27100
|
iconColor,
|
|
@@ -26959,6 +27151,7 @@ function STimeRangePicker({
|
|
|
26959
27151
|
SField,
|
|
26960
27152
|
{
|
|
26961
27153
|
label,
|
|
27154
|
+
labelPosition,
|
|
26962
27155
|
labelWidth,
|
|
26963
27156
|
icon,
|
|
26964
27157
|
iconColor,
|
|
@@ -27090,6 +27283,10 @@ exports.CHAT_MESSAGE_READ_STATUSES = CHAT_MESSAGE_READ_STATUSES;
|
|
|
27090
27283
|
exports.CHAT_MESSAGE_VARIANTS = CHAT_MESSAGE_VARIANTS;
|
|
27091
27284
|
exports.CHIP_COLORS = CHIP_COLORS;
|
|
27092
27285
|
exports.COLOR_KEYS = COLOR_KEYS;
|
|
27286
|
+
exports.CONTEXT_ALERT_DEFAULT_ICON = CONTEXT_ALERT_DEFAULT_ICON;
|
|
27287
|
+
exports.CONTEXT_ALERT_ICON_COLOR = CONTEXT_ALERT_ICON_COLOR;
|
|
27288
|
+
exports.CONTEXT_ALERT_INTENTS = CONTEXT_ALERT_INTENTS;
|
|
27289
|
+
exports.CONTEXT_ALERT_SURFACE = CONTEXT_ALERT_SURFACE;
|
|
27093
27290
|
exports.FIELD_WIDTH_GRADES = FIELD_WIDTH_GRADES;
|
|
27094
27291
|
exports.GNB_COLORS = GNB_COLORS;
|
|
27095
27292
|
exports.GNB_COMMON = GNB_COMMON;
|
|
@@ -27144,6 +27341,7 @@ exports.SChipFilter = SChipFilter;
|
|
|
27144
27341
|
exports.SChipInput = SChipInput;
|
|
27145
27342
|
exports.SCircleProgress = SCircleProgress;
|
|
27146
27343
|
exports.SConfirmModal = SConfirmModal;
|
|
27344
|
+
exports.SContextAlert = SContextAlert;
|
|
27147
27345
|
exports.SDatePicker = SDatePicker;
|
|
27148
27346
|
exports.SDatePickerMonthListbox = SDatePickerMonthListbox;
|
|
27149
27347
|
exports.SDatePickerYearListbox = SDatePickerYearListbox;
|