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.
Files changed (57) hide show
  1. package/AGENTS.md +28 -3
  2. package/dist/components/SBarChart/README.md +2 -0
  3. package/dist/components/SBarChart/SBarChart.d.ts +4 -0
  4. package/dist/components/SBarChart/barChart.config.d.ts +12 -5
  5. package/dist/components/SBarcodeInput/README.md +1 -0
  6. package/dist/components/SBarcodeInput/SBarcodeInput.d.ts +8 -1
  7. package/dist/components/SChipInput/README.md +1 -0
  8. package/dist/components/SChipInput/SChipInput.d.ts +8 -1
  9. package/dist/components/SContextAlert/README.md +51 -0
  10. package/dist/components/SContextAlert/SContextAlert.d.ts +38 -0
  11. package/dist/components/SContextAlert/contextAlert.config.d.ts +29 -0
  12. package/dist/components/SContextAlert/index.d.ts +2 -0
  13. package/dist/components/SDatePicker/README.md +1 -0
  14. package/dist/components/SDatePicker/SDatePicker.d.ts +9 -2
  15. package/dist/components/SDateRangePicker/README.md +1 -0
  16. package/dist/components/SDateRangePicker/SDateRangePicker.d.ts +9 -2
  17. package/dist/components/SDonutChart/README.md +2 -0
  18. package/dist/components/SDonutChart/SDonutChart.d.ts +4 -0
  19. package/dist/components/SEditor/README.md +1 -0
  20. package/dist/components/SEditor/SEditor.d.ts +8 -1
  21. package/dist/components/SField/README.md +7 -0
  22. package/dist/components/SField/SField.d.ts +13 -0
  23. package/dist/components/SField/index.d.ts +1 -1
  24. package/dist/components/SFilePicker/README.md +1 -0
  25. package/dist/components/SFilePicker/SFilePicker.d.ts +9 -2
  26. package/dist/components/SIcon/README.md +2 -0
  27. package/dist/components/SInput/README.md +1 -0
  28. package/dist/components/SInput/SInput.d.ts +3 -1
  29. package/dist/components/SLineChart/README.md +2 -0
  30. package/dist/components/SLineChart/SLineChart.d.ts +4 -0
  31. package/dist/components/SLineChart/lineChart.config.d.ts +42 -33
  32. package/dist/components/SNumberInput/README.md +1 -0
  33. package/dist/components/SNumberInput/SNumberInput.d.ts +8 -1
  34. package/dist/components/SPieChart/README.md +2 -0
  35. package/dist/components/SPieChart/SPieChart.d.ts +4 -0
  36. package/dist/components/SSelect/README.md +1 -0
  37. package/dist/components/SSelect/SSelect.d.ts +8 -1
  38. package/dist/components/STextarea/README.md +1 -0
  39. package/dist/components/STextarea/STextarea.d.ts +8 -1
  40. package/dist/components/STimePicker/README.md +1 -0
  41. package/dist/components/STimePicker/STimePicker.d.ts +9 -2
  42. package/dist/components/STimeRangePicker/README.md +1 -0
  43. package/dist/components/STimeRangePicker/STimeRangePicker.d.ts +9 -2
  44. package/dist/index.cjs +366 -168
  45. package/dist/index.cjs.map +1 -1
  46. package/dist/index.d.ts +1 -0
  47. package/dist/index.js +362 -169
  48. package/dist/index.js.map +1 -1
  49. package/dist/lib/chart/frame.d.ts +5 -1
  50. package/dist/lib/chart/palette.d.ts +12 -15
  51. package/dist/lib/chart/radial.d.ts +18 -10
  52. package/dist/llms-full.txt +106 -4
  53. package/dist/llms.txt +32 -6
  54. package/dist/styles.css +159 -15
  55. package/dist/theme.css +104 -6
  56. package/eslint/scale.gen.mjs +1 -1
  57. 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(--shadow-spread-md)]",
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("div", { className: "flex w-full items-start", children: [
4795
- label !== "" && /* @__PURE__ */ jsxs(
4796
- "div",
4797
- {
4798
- className: "flex shrink-0 items-center font-bold text-(--sys-color-field-text-default)",
4799
- style: {
4800
- height: cssLen(labelHeight) ?? s.height,
4801
- marginRight: s.fieldGap,
4802
- width: cssLen(labelWidth),
4803
- fontSize: s.fontSize,
4804
- lineHeight: `${s.lineHeight}px`
4805
- },
4806
- children: [
4807
- icon && /* @__PURE__ */ jsx(
4808
- SIcon,
4809
- {
4810
- name: icon,
4811
- size: s.icon,
4812
- color: iconColor,
4813
- style: { marginRight: s.labelGap }
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
- "data-focused": focused || void 0,
4861
- "data-hovered": hovered || void 0,
4862
- children: [
4863
- effectiveAddonLabel !== "" && /* @__PURE__ */ jsxs(
4864
- "div",
4865
- {
4866
- 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",
4867
- style: {
4868
- // 원본 sd-field: labelWidth가 addon 폭(--sd-field-addon-width)에도 적용됨
4869
- width: cssLen(labelWidth),
4870
- justifyContent: ALIGN[addonAlign],
4871
- background: "var(--cmp-field-addonLabel-bg)",
4872
- borderRightColor: disabled ? "var(--cmp-field-addonLabel-border-disabled)" : "var(--cmp-field-addonLabel-border-default)",
4873
- borderTopLeftRadius: s.radius - 1,
4874
- borderBottomLeftRadius: s.radius - 1
4875
- },
4876
- children: [
4877
- icon && !label && /* @__PURE__ */ jsx(SIcon, { name: icon, size: s.icon, color: iconColor }),
4878
- effectiveAddonLabel
4879
- ]
4880
- }
4881
- ),
4882
- /* @__PURE__ */ jsx("div", { className: cn("flex min-w-0 flex-1", multiline && "bg-inherit"), children })
4883
- ]
4884
- }
4885
- ),
4886
- 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
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-tree-item-arrow-icon))]"
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
- ) : /* @__PURE__ */ jsx("span", { className: "size-(--cmp-tree-item-arrow-icon) shrink-0", "aria-hidden": "true" }),
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-[12px] font-normal leading-[20px] text-[color:var(--cmp-modal-confirm-message-color)] w-full", children: [
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-[12px] font-normal leading-[20px] text-[color:var(--cmp-modal-loading-message-color)]",
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-floating",
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
  {
@@ -14733,6 +14849,7 @@ var SSelectImpl = /* @__PURE__ */ forwardRef(function SSelect({
14733
14849
  onSearchChange,
14734
14850
  searchDebounce = DEFAULT_SEARCH_DEBOUNCE,
14735
14851
  label,
14852
+ labelPosition,
14736
14853
  labelWidth,
14737
14854
  icon,
14738
14855
  iconColor,
@@ -15165,6 +15282,7 @@ var SSelectImpl = /* @__PURE__ */ forwardRef(function SSelect({
15165
15282
  SField,
15166
15283
  {
15167
15284
  label,
15285
+ labelPosition,
15168
15286
  labelWidth,
15169
15287
  icon,
15170
15288
  iconColor,
@@ -16895,6 +17013,7 @@ var SInput = /* @__PURE__ */ forwardRef(function SInput2({
16895
17013
  inputClassName,
16896
17014
  inputStyle,
16897
17015
  label,
17016
+ labelPosition,
16898
17017
  labelWidth,
16899
17018
  labelTooltip,
16900
17019
  labelTooltipProps,
@@ -16938,6 +17057,7 @@ var SInput = /* @__PURE__ */ forwardRef(function SInput2({
16938
17057
  SField,
16939
17058
  {
16940
17059
  label,
17060
+ labelPosition,
16941
17061
  labelWidth,
16942
17062
  labelTooltip,
16943
17063
  labelTooltipProps,
@@ -17128,6 +17248,7 @@ var SNumberInput = /* @__PURE__ */ forwardRef(function SNumberInput2({
17128
17248
  focused,
17129
17249
  hovered,
17130
17250
  label,
17251
+ labelPosition,
17131
17252
  labelWidth,
17132
17253
  icon,
17133
17254
  iconColor,
@@ -17297,6 +17418,7 @@ var SNumberInput = /* @__PURE__ */ forwardRef(function SNumberInput2({
17297
17418
  SField,
17298
17419
  {
17299
17420
  label,
17421
+ labelPosition,
17300
17422
  labelWidth,
17301
17423
  icon,
17302
17424
  iconColor,
@@ -17584,7 +17706,7 @@ function SCalendar({
17584
17706
  if (e !== "" && date > e) return true;
17585
17707
  return false;
17586
17708
  };
17587
- const pick = (date) => {
17709
+ const pick2 = (date) => {
17588
17710
  if (!isDisabled(date)) onValueChange?.(date);
17589
17711
  };
17590
17712
  return /* @__PURE__ */ jsxs(
@@ -17669,7 +17791,7 @@ function SCalendar({
17669
17791
  {
17670
17792
  type: "button",
17671
17793
  disabled: !cell.inCurrentMonth || disabled,
17672
- onClick: () => cell.inCurrentMonth && pick(cell.date),
17794
+ onClick: () => cell.inCurrentMonth && pick2(cell.date),
17673
17795
  className: cn(
17674
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",
17675
17797
  !cell.inCurrentMonth ? "invisible pointer-events-none" : disabled ? "cursor-not-allowed" : "cursor-pointer"
@@ -18015,6 +18137,7 @@ function SDatePicker({
18015
18137
  rules,
18016
18138
  status,
18017
18139
  label,
18140
+ labelPosition,
18018
18141
  labelWidth,
18019
18142
  icon,
18020
18143
  iconColor,
@@ -18087,6 +18210,7 @@ function SDatePicker({
18087
18210
  SField,
18088
18211
  {
18089
18212
  label,
18213
+ labelPosition,
18090
18214
  labelWidth,
18091
18215
  icon,
18092
18216
  iconColor,
@@ -18549,6 +18673,7 @@ function SDateRangePicker({
18549
18673
  rules,
18550
18674
  status,
18551
18675
  label,
18676
+ labelPosition,
18552
18677
  labelWidth,
18553
18678
  icon,
18554
18679
  iconColor,
@@ -18621,6 +18746,7 @@ function SDateRangePicker({
18621
18746
  SField,
18622
18747
  {
18623
18748
  label,
18749
+ labelPosition,
18624
18750
  labelWidth,
18625
18751
  icon,
18626
18752
  iconColor,
@@ -18925,6 +19051,7 @@ function SFilePicker({
18925
19051
  status,
18926
19052
  size = "sm",
18927
19053
  label,
19054
+ labelPosition,
18928
19055
  labelWidth,
18929
19056
  icon,
18930
19057
  iconColor,
@@ -19109,6 +19236,7 @@ function SFilePicker({
19109
19236
  {
19110
19237
  borderless: inline,
19111
19238
  label,
19239
+ labelPosition,
19112
19240
  labelWidth,
19113
19241
  icon,
19114
19242
  iconColor,
@@ -19374,7 +19502,7 @@ function ChartGrid({ scale, direction, width, height }) {
19374
19502
  return /* @__PURE__ */ jsx("g", { "aria-hidden": true, children: scale.ticks.map((tick) => {
19375
19503
  const ratio = ratioOf(tick, scale);
19376
19504
  const isBaseline = tick === 0;
19377
- const color = isBaseline ? "var(--cmp-chart-baseline-color)" : "var(--cmp-chart-grid-line-color)";
19505
+ const color = isBaseline ? "var(--cmp-chart-baseline-color)" : "var(--cmp-chart-gridline-color)";
19378
19506
  const position = vertical ? height - ratio * height : ratio * width;
19379
19507
  const extent = vertical ? height : width;
19380
19508
  const snapped = Math.min(Math.max(Math.round(position), 0), Math.max(0, extent - 1)) + 0.5;
@@ -19452,7 +19580,7 @@ function ChartAxisLabels({
19452
19580
  }
19453
19581
  );
19454
19582
  }
19455
- 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) {
19456
19584
  return /* @__PURE__ */ jsxs(
19457
19585
  "div",
19458
19586
  {
@@ -19465,6 +19593,14 @@ var ChartFrame = /* @__PURE__ */ forwardRef(function ChartFrame2({ legend, legen
19465
19593
  style,
19466
19594
  ...props,
19467
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
+ ] }),
19468
19604
  legend && legendPosition === "top" && legend,
19469
19605
  children,
19470
19606
  legend && legendPosition === "bottom" && legend
@@ -19515,46 +19651,57 @@ function ChartLegend({ items, align = "center", activeIndex, className }) {
19515
19651
 
19516
19652
  // src/lib/chart/palette.ts
19517
19653
  var V3 = (path) => `var(--cmp-chart-palette-${path})`;
19518
- var CHART_COLORS = {
19519
- positivePrimary: V3("variation-positivePrimary"),
19520
- positiveSecondary: V3("variation-positiveSecondary"),
19521
- negativePrimary: V3("variation-negativePrimary"),
19522
- negativeSecondary: V3("variation-negativeSecondary"),
19523
- neutralPrimary: V3("variation-neutralPrimary"),
19524
- neutralSecondary: V3("variation-neutralSecondary")
19525
- };
19526
- var CHART_PALETTES = {
19527
- default: [V3("single")],
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")],
19528
19665
  multi: [
19529
- V3("multi-blue"),
19530
- V3("multi-skyblue"),
19531
- V3("multi-yellow"),
19532
- V3("multi-olive"),
19533
- V3("multi-lightRed"),
19534
- V3("multi-warmBlue"),
19535
- V3("multi-orange"),
19536
- V3("multi-green"),
19537
- V3("multi-navy"),
19538
- V3("multi-grey"),
19539
- V3("multi-red")
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")
19540
19677
  ],
19541
19678
  gradation: [
19542
- V3("gradation-1"),
19543
- V3("gradation-2"),
19544
- V3("gradation-3"),
19545
- V3("gradation-4"),
19546
- V3("gradation-5"),
19547
- V3("gradation-6")
19679
+ v("gradation-1"),
19680
+ v("gradation-2"),
19681
+ v("gradation-3"),
19682
+ v("gradation-4"),
19683
+ v("gradation-5"),
19684
+ v("gradation-6")
19548
19685
  ]
19549
- };
19550
- function paletteColor(palette, index, colors) {
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) {
19551
19692
  if (palette === "custom") {
19552
- if (!colors?.length) return CHART_PALETTES.default[0];
19553
- return CHART_COLORS[colors[index % colors.length]];
19693
+ if (!colors?.length) return palettes.default[0];
19694
+ return names[colors[index % colors.length]];
19554
19695
  }
19555
- const list = CHART_PALETTES[palette] ?? CHART_PALETTES.default;
19696
+ const list = palettes[palette] ?? palettes.default;
19556
19697
  return list[index % list.length];
19557
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
+ }
19558
19705
  function useElementSize() {
19559
19706
  const ref = useRef(null);
19560
19707
  const [size, setSize] = useState({ width: 0, height: 0 });
@@ -19632,7 +19779,8 @@ function ChartTooltip({
19632
19779
  "pointer-events-none absolute top-0 left-0 z-10 w-max",
19633
19780
  "flex flex-col gap-(--cmp-chart-chartTooltip-gap)",
19634
19781
  "px-(--cmp-chart-chartTooltip-paddingX) py-(--cmp-chart-chartTooltip-paddingY)",
19635
- "rounded-(--cmp-chart-chartTooltip-radius) bg-(--cmp-chart-chartTooltip-bg) shadow-floating",
19782
+ "rounded-(--cmp-chart-chartTooltip-radius) bg-(--cmp-chart-chartTooltip-bg)",
19783
+ "shadow-(--cmp-chart-chartTooltip-shadow)",
19636
19784
  className
19637
19785
  ),
19638
19786
  style: {
@@ -19679,12 +19827,12 @@ var BAR_SIZE_MAX = 80;
19679
19827
  var BAR_GAP = 6;
19680
19828
  var GROUP_PADDING_MIN = 8;
19681
19829
  var GROUP_PADDING_MAX = 24;
19682
- var VALUE_LABEL_GAP = 6;
19830
+ var VALUE_LABEL_GAP = 4;
19683
19831
  var BAR_RADIUS = 8;
19684
- var BAR_OPACITY_DEFAULT = "var(--cmp-chart-bar-opacity-default)";
19832
+ var BAR_OPACITY_DEFAULT = "var(--cmp-chart-opacity-default)";
19685
19833
  var BAR_OPACITY_DIMMED = "var(--cmp-chart-bar-opacity-dimmed)";
19686
19834
  var BAR_OPACITY_HOVER = 1;
19687
- var BAR_DATA_LABEL_COLOR = "var(--cmp-chart-bar-dataLabel-color-default)";
19835
+ var BAR_DATA_LABEL_COLOR = "var(--cmp-chart-dataLabel-color-default)";
19688
19836
  var BAR_DATA_LABEL_TYPO = "typo-body-sm-medium";
19689
19837
  var BAR_DATA_LABEL_TYPO_HOVER = "typo-body-md-bold";
19690
19838
  var BAR_HOVER_TRANSITION = "transition-opacity duration-200 ease-out motion-reduce:transition-none";
@@ -19744,6 +19892,8 @@ function barPath(x, y, width, height, direction, negative) {
19744
19892
  var SBarChart = /* @__PURE__ */ forwardRef(function SBarChart2({
19745
19893
  categories,
19746
19894
  series,
19895
+ title,
19896
+ unit,
19747
19897
  direction = "vertical",
19748
19898
  stacked = false,
19749
19899
  palette = "default",
@@ -20209,6 +20359,8 @@ var SBarChart = /* @__PURE__ */ forwardRef(function SBarChart2({
20209
20359
  ChartFrame,
20210
20360
  {
20211
20361
  ref,
20362
+ title,
20363
+ unit,
20212
20364
  legend,
20213
20365
  legendPosition,
20214
20366
  className,
@@ -20249,18 +20401,18 @@ var SBarChart = /* @__PURE__ */ forwardRef(function SBarChart2({
20249
20401
  });
20250
20402
 
20251
20403
  // src/components/SLineChart/lineChart.config.ts
20252
- var LINE_WIDTH = 2;
20253
- var POINT_RADIUS = 4;
20254
- var POINT_HOVER_RADIUS = 9.5;
20255
- var POINT_HOVER_BORDER_WIDTH = 1;
20256
- var POINT_HOVER_INNER_RADIUS = 5;
20257
- var POINT_HOVER_BG = "var(--cmp-chart-bg)";
20258
- var POINT_HOVER_EXTENT = POINT_HOVER_RADIUS + POINT_HOVER_BORDER_WIDTH / 2;
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;
20259
20411
  var BAND_MIN = 40;
20260
- var VALUE_LABEL_GAP2 = 6;
20261
- var AREA_OPACITY_TOP = "30%";
20262
- var AREA_OPACITY_BOTTOM = "var(--opacity-005)";
20263
- var LINE_DATA_LABEL_COLOR = "var(--cmp-chart-bar-dataLabel-color-default)";
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)";
20264
20416
  var LINE_DATA_LABEL_TYPO = "typo-body-sm-medium";
20265
20417
  var LINE_DATA_LABEL_TYPO_HOVER = "typo-body-md-bold";
20266
20418
  var r = (value) => Math.round(value * 100) / 100;
@@ -20340,6 +20492,8 @@ function runsOf(row) {
20340
20492
  var SLineChart = /* @__PURE__ */ forwardRef(function SLineChart2({
20341
20493
  categories,
20342
20494
  series,
20495
+ title,
20496
+ unit,
20343
20497
  curve = "linear",
20344
20498
  area = false,
20345
20499
  stacked = false,
@@ -20369,6 +20523,10 @@ var SLineChart = /* @__PURE__ */ forwardRef(function SLineChart2({
20369
20523
  (seriesIndex) => paletteColor(palette, seriesIndex, customColors),
20370
20524
  [palette, customColors]
20371
20525
  );
20526
+ const dimmedColorAt = useCallback(
20527
+ (seriesIndex) => linePointDimmedColor(palette, seriesIndex, customColors),
20528
+ [palette, customColors]
20529
+ );
20372
20530
  const rows = useMemo(() => {
20373
20531
  const running = categories.map(() => 0);
20374
20532
  return series.map(
@@ -20540,10 +20698,13 @@ var SLineChart = /* @__PURE__ */ forwardRef(function SLineChart2({
20540
20698
  "aria-hidden": true,
20541
20699
  d,
20542
20700
  fill: "none",
20543
- strokeWidth: LINE_WIDTH,
20544
20701
  strokeLinecap: "round",
20545
20702
  strokeLinejoin: "round",
20546
- style: { stroke: colorAt(seriesIndex) }
20703
+ style: {
20704
+ stroke: colorAt(seriesIndex),
20705
+ strokeWidth: LINE_WIDTH,
20706
+ strokeOpacity: LINE_OPACITY
20707
+ }
20547
20708
  },
20548
20709
  `line-${seriesIndex}-${runIndex}`
20549
20710
  );
@@ -20560,6 +20721,7 @@ var SLineChart = /* @__PURE__ */ forwardRef(function SLineChart2({
20560
20721
  const hovered = hoveredCategory === categoryIndex;
20561
20722
  if (!showPoint && !hovered) return;
20562
20723
  const color = colorAt(seriesIndex);
20724
+ const dimmed = hoveredCategory != null && !hovered;
20563
20725
  const key = `${seriesIndex}-${categoryIndex}`;
20564
20726
  if (hovered) {
20565
20727
  halos.push(
@@ -20569,12 +20731,8 @@ var SLineChart = /* @__PURE__ */ forwardRef(function SLineChart2({
20569
20731
  "aria-hidden": true,
20570
20732
  cx: point.x,
20571
20733
  cy: point.y,
20572
- r: POINT_HOVER_RADIUS,
20573
- style: {
20574
- fill: POINT_HOVER_BG,
20575
- stroke: color,
20576
- strokeWidth: POINT_HOVER_BORDER_WIDTH
20577
- }
20734
+ r: POINT_HALO_RADIUS,
20735
+ style: { fill: color, fillOpacity: POINT_HALO_OPACITY }
20578
20736
  },
20579
20737
  `halo-${key}`
20580
20738
  )
@@ -20586,8 +20744,11 @@ var SLineChart = /* @__PURE__ */ forwardRef(function SLineChart2({
20586
20744
  {
20587
20745
  cx: point.x,
20588
20746
  cy: point.y,
20589
- r: hovered ? POINT_HOVER_INNER_RADIUS : POINT_RADIUS,
20590
- style: { fill: color, cursor: onPointClick ? "pointer" : void 0 },
20747
+ r: hovered ? POINT_HOVER_RADIUS : POINT_RADIUS,
20748
+ style: {
20749
+ fill: dimmed ? dimmedColorAt(seriesIndex) : color,
20750
+ cursor: onPointClick ? "pointer" : void 0
20751
+ },
20591
20752
  onClick: onPointClick ? () => onPointClick({ seriesIndex, categoryIndex, value: point.own }) : void 0,
20592
20753
  children: /* @__PURE__ */ jsx("title", { children: `${categories[categoryIndex]} ${series[seriesIndex]?.name ?? ""} ${formatValue(point.own)}` })
20593
20754
  },
@@ -20597,7 +20758,17 @@ var SLineChart = /* @__PURE__ */ forwardRef(function SLineChart2({
20597
20758
  });
20598
20759
  });
20599
20760
  return { pointHalos: halos, pointDots: dots };
20600
- }, [plotted, showPoint, hoveredCategory, colorAt, onPointClick, categories, series, formatValue]);
20761
+ }, [
20762
+ plotted,
20763
+ showPoint,
20764
+ hoveredCategory,
20765
+ colorAt,
20766
+ dimmedColorAt,
20767
+ onPointClick,
20768
+ categories,
20769
+ series,
20770
+ formatValue
20771
+ ]);
20601
20772
  const valueLabels = useMemo(
20602
20773
  () => showValueLabel ? plotted.flatMap(
20603
20774
  (row, seriesIndex) => row.map(
@@ -20623,6 +20794,8 @@ var SLineChart = /* @__PURE__ */ forwardRef(function SLineChart2({
20623
20794
  ChartFrame,
20624
20795
  {
20625
20796
  ref,
20797
+ title,
20798
+ unit,
20626
20799
  legend,
20627
20800
  legendPosition,
20628
20801
  className,
@@ -20758,8 +20931,9 @@ var LABEL_MIN_RATIO = 0.05;
20758
20931
  var PIE_LABEL_RADIUS_RATIO = 0.65;
20759
20932
  var HOVER_GROW = 4;
20760
20933
  var HOVER_CORNER = 2;
20761
- var OPACITY_DEFAULT = "var(--cmp-chart-bar-opacity-default)";
20762
- var OPACITY_DIMMED = "var(--cmp-chart-bar-opacity-dimmed)";
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)";
20763
20937
  var OPACITY_HOVER = 1;
20764
20938
  var defaultFormat3 = (value) => value.toLocaleString();
20765
20939
  function formatRatio(ratio) {
@@ -20809,6 +20983,8 @@ function slicePath(center, outer, inner, start, end, corner = 0) {
20809
20983
  }
20810
20984
  var RadialChart = /* @__PURE__ */ forwardRef(function RadialChart2({
20811
20985
  data,
20986
+ title,
20987
+ unit,
20812
20988
  palette = "multi",
20813
20989
  colors,
20814
20990
  showValueLabel = false,
@@ -20880,6 +21056,8 @@ var RadialChart = /* @__PURE__ */ forwardRef(function RadialChart2({
20880
21056
  ChartFrame,
20881
21057
  {
20882
21058
  ref,
21059
+ title,
21060
+ unit,
20883
21061
  legend,
20884
21062
  legendPosition,
20885
21063
  className,
@@ -20890,6 +21068,7 @@ var RadialChart = /* @__PURE__ */ forwardRef(function RadialChart2({
20890
21068
  {
20891
21069
  width: diameter,
20892
21070
  height: diameter,
21071
+ overflow: "visible",
20893
21072
  role: "img",
20894
21073
  "aria-label": `${arcs.length}\uAC1C \uD56D\uBAA9 ${kind}`,
20895
21074
  onMouseLeave: () => setHovered(null),
@@ -20902,7 +21081,7 @@ var RadialChart = /* @__PURE__ */ forwardRef(function RadialChart2({
20902
21081
  "aria-hidden": true,
20903
21082
  d: slicePath(center, outer, inner, 0, Math.PI * 2),
20904
21083
  fillRule: "evenodd",
20905
- style: { fill: "var(--cmp-chart-grid-line-color)" }
21084
+ style: { fill: "var(--cmp-chart-gridline-color)" }
20906
21085
  }
20907
21086
  )
20908
21087
  ) : arcs.map((arc2) => {
@@ -20916,6 +21095,10 @@ var RadialChart = /* @__PURE__ */ forwardRef(function RadialChart2({
20916
21095
  style: {
20917
21096
  fill: arc2.color,
20918
21097
  opacity,
21098
+ // 짚은 조각만 떠오른다. SVG 도형에는 box-shadow 가 걸리지 않아
21099
+ // 같은 토큰의 filter 형태를 쓴다 (drop-shadow 에는 spread 가 없다 —
21100
+ // 토큰의 음수 spread 만큼 설계보다 조금 넓게 깔린다).
21101
+ filter: hovered === arc2.index ? SLICE_HOVER_SHADOW : void 0,
20919
21102
  cursor: onSliceClick ? "pointer" : void 0
20920
21103
  },
20921
21104
  onMouseEnter: () => setHovered(arc2.index),
@@ -23486,6 +23669,7 @@ var SEditor = /* @__PURE__ */ forwardRef(function SEditor2({
23486
23669
  onFocus,
23487
23670
  onBlur,
23488
23671
  label,
23672
+ labelPosition,
23489
23673
  labelWidth,
23490
23674
  icon,
23491
23675
  iconColor,
@@ -23574,6 +23758,7 @@ var SEditor = /* @__PURE__ */ forwardRef(function SEditor2({
23574
23758
  {
23575
23759
  name,
23576
23760
  label,
23761
+ labelPosition,
23577
23762
  labelWidth,
23578
23763
  icon,
23579
23764
  iconColor,
@@ -25461,7 +25646,7 @@ function ListBox({
25461
25646
  "div",
25462
25647
  {
25463
25648
  className: cn(
25464
- "overflow-hidden border border-solid shadow-[var(--shadow-overlay)]",
25649
+ "overflow-hidden border border-solid shadow-[var(--cmp-chipFilter-listbox-shadow)]",
25465
25650
  maxHeight && "flex flex-col"
25466
25651
  ),
25467
25652
  style: {
@@ -25546,6 +25731,7 @@ var SChipInput = /* @__PURE__ */ forwardRef(function SChipInput2({
25546
25731
  loadingRecommendedItems = false,
25547
25732
  dropdownMinWidth = 200,
25548
25733
  label,
25734
+ labelPosition,
25549
25735
  labelWidth,
25550
25736
  hint,
25551
25737
  errorMessage,
@@ -25686,6 +25872,7 @@ var SChipInput = /* @__PURE__ */ forwardRef(function SChipInput2({
25686
25872
  SField,
25687
25873
  {
25688
25874
  label,
25875
+ labelPosition,
25689
25876
  labelWidth,
25690
25877
  labelHeight: `calc(var(--cmp-chipInput-${size}-minHeight) + 2px)`,
25691
25878
  icon,
@@ -26004,6 +26191,7 @@ var SBarcodeInput = /* @__PURE__ */ forwardRef(
26004
26191
  inputClassName,
26005
26192
  inputStyle,
26006
26193
  label,
26194
+ labelPosition,
26007
26195
  labelWidth,
26008
26196
  icon,
26009
26197
  iconColor,
@@ -26040,6 +26228,7 @@ var SBarcodeInput = /* @__PURE__ */ forwardRef(
26040
26228
  SField,
26041
26229
  {
26042
26230
  label,
26231
+ labelPosition,
26043
26232
  labelWidth,
26044
26233
  icon,
26045
26234
  iconColor,
@@ -26409,6 +26598,7 @@ function STimePicker({
26409
26598
  rules,
26410
26599
  status,
26411
26600
  label,
26601
+ labelPosition,
26412
26602
  labelWidth,
26413
26603
  icon,
26414
26604
  iconColor,
@@ -26463,6 +26653,7 @@ function STimePicker({
26463
26653
  SField,
26464
26654
  {
26465
26655
  label,
26656
+ labelPosition,
26466
26657
  labelWidth,
26467
26658
  icon,
26468
26659
  iconColor,
@@ -26875,6 +27066,7 @@ function STimeRangePicker({
26875
27066
  rules,
26876
27067
  status,
26877
27068
  label,
27069
+ labelPosition,
26878
27070
  labelWidth,
26879
27071
  icon,
26880
27072
  iconColor,
@@ -26931,6 +27123,7 @@ function STimeRangePicker({
26931
27123
  SField,
26932
27124
  {
26933
27125
  label,
27126
+ labelPosition,
26934
27127
  labelWidth,
26935
27128
  icon,
26936
27129
  iconColor,
@@ -27039,6 +27232,6 @@ function STimeRangePicker({
27039
27232
  );
27040
27233
  }
27041
27234
 
27042
- 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 };
27043
27236
  //# sourceMappingURL=index.js.map
27044
27237
  //# sourceMappingURL=index.js.map