sellmate-design-system-react 9.0.0-beta.63 → 9.0.0-beta.65

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/AGENTS.md +31 -5
  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/SCalendarBoard/CalendarDayCard.d.ts +11 -3
  8. package/dist/components/SCalendarBoard/CalendarEventButton.d.ts +7 -2
  9. package/dist/components/SCalendarBoard/CalendarMoreButton.d.ts +2 -1
  10. package/dist/components/SCalendarBoard/README.md +11 -2
  11. package/dist/components/SCalendarBoard/SCalendarBoard.d.ts +4 -1
  12. package/dist/components/SCalendarBoard/calendar-board-layout.d.ts +49 -0
  13. package/dist/components/SCalendarBoard/types.d.ts +10 -1
  14. package/dist/components/SChipInput/README.md +1 -0
  15. package/dist/components/SChipInput/SChipInput.d.ts +8 -1
  16. package/dist/components/SContextAlert/README.md +51 -0
  17. package/dist/components/SContextAlert/SContextAlert.d.ts +38 -0
  18. package/dist/components/SContextAlert/contextAlert.config.d.ts +29 -0
  19. package/dist/components/SContextAlert/index.d.ts +2 -0
  20. package/dist/components/SDatePicker/README.md +1 -0
  21. package/dist/components/SDatePicker/SDatePicker.d.ts +9 -2
  22. package/dist/components/SDateRangePicker/README.md +1 -0
  23. package/dist/components/SDateRangePicker/SDateRangePicker.d.ts +9 -2
  24. package/dist/components/SDonutChart/README.md +2 -0
  25. package/dist/components/SDonutChart/SDonutChart.d.ts +4 -0
  26. package/dist/components/SEditor/README.md +1 -0
  27. package/dist/components/SEditor/SEditor.d.ts +8 -1
  28. package/dist/components/SField/README.md +7 -0
  29. package/dist/components/SField/SField.d.ts +13 -0
  30. package/dist/components/SField/index.d.ts +1 -1
  31. package/dist/components/SFilePicker/README.md +1 -0
  32. package/dist/components/SFilePicker/SFilePicker.d.ts +9 -2
  33. package/dist/components/SIcon/README.md +2 -0
  34. package/dist/components/SInput/README.md +1 -0
  35. package/dist/components/SInput/SInput.d.ts +3 -1
  36. package/dist/components/SLineChart/README.md +2 -0
  37. package/dist/components/SLineChart/SLineChart.d.ts +4 -0
  38. package/dist/components/SLineChart/lineChart.config.d.ts +42 -33
  39. package/dist/components/SNumberInput/README.md +1 -0
  40. package/dist/components/SNumberInput/SNumberInput.d.ts +8 -1
  41. package/dist/components/SPieChart/README.md +2 -0
  42. package/dist/components/SPieChart/SPieChart.d.ts +4 -0
  43. package/dist/components/SSelect/README.md +1 -0
  44. package/dist/components/SSelect/SSelect.d.ts +8 -1
  45. package/dist/components/STextarea/README.md +1 -0
  46. package/dist/components/STextarea/STextarea.d.ts +8 -1
  47. package/dist/components/STimePicker/README.md +1 -0
  48. package/dist/components/STimePicker/STimePicker.d.ts +9 -2
  49. package/dist/components/STimeRangePicker/README.md +1 -0
  50. package/dist/components/STimeRangePicker/STimeRangePicker.d.ts +9 -2
  51. package/dist/index.cjs +525 -223
  52. package/dist/index.cjs.map +1 -1
  53. package/dist/index.d.ts +1 -0
  54. package/dist/index.js +521 -224
  55. package/dist/index.js.map +1 -1
  56. package/dist/lib/chart/frame.d.ts +5 -1
  57. package/dist/lib/chart/palette.d.ts +12 -15
  58. package/dist/lib/chart/radial.d.ts +18 -10
  59. package/dist/llms-full.txt +120 -8
  60. package/dist/llms.txt +35 -8
  61. package/dist/styles.css +170 -18
  62. package/dist/theme.css +104 -6
  63. package/eslint/scale.gen.mjs +1 -1
  64. 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
  {
@@ -13689,6 +13805,98 @@ function monthCells(year, month) {
13689
13805
  }
13690
13806
  var WEEK_LABELS = ["\uC77C", "\uC6D4", "\uD654", "\uC218", "\uBAA9", "\uAE08", "\uD1A0"];
13691
13807
 
13808
+ // src/components/SCalendarBoard/calendar-board-layout.ts
13809
+ function eventEndDate(event) {
13810
+ const end = event.endDate;
13811
+ return end != null && end > event.date ? end : event.date;
13812
+ }
13813
+ function layoutCalendarBoard({
13814
+ cells,
13815
+ events,
13816
+ rowCapacity,
13817
+ blockedDates
13818
+ }) {
13819
+ const count = cells.length;
13820
+ const weekCount = Math.ceil(count / 7);
13821
+ const segmentsByCell = Array.from({ length: count }, () => []);
13822
+ const eventsByCell = Array.from({ length: count }, () => []);
13823
+ const hiddenCountByCell = new Array(count).fill(0);
13824
+ const moreLaneByWeek = new Array(weekCount).fill(-1);
13825
+ const runs = [];
13826
+ events.forEach((event, order) => {
13827
+ const start = event.date;
13828
+ const end = eventEndDate(event);
13829
+ let from = -1;
13830
+ let to = -1;
13831
+ for (let i = 0; i < count; i++) {
13832
+ const { date } = cells[i];
13833
+ if (date < start || date > end) continue;
13834
+ if (from < 0) from = i;
13835
+ to = i;
13836
+ if (!blockedDates.has(date)) eventsByCell[i].push(event);
13837
+ }
13838
+ if (from < 0) return;
13839
+ let runStart = -1;
13840
+ const flush = (endIndex) => {
13841
+ if (runStart < 0) return;
13842
+ runs.push({ event, order, startIndex: runStart, endIndex, lane: -1 });
13843
+ runStart = -1;
13844
+ };
13845
+ for (let i = from; i <= to; i++) {
13846
+ if (blockedDates.has(cells[i].date)) {
13847
+ flush(i - 1);
13848
+ continue;
13849
+ }
13850
+ if (runStart >= 0 && i % 7 === 0) flush(i - 1);
13851
+ if (runStart < 0) runStart = i;
13852
+ }
13853
+ flush(to);
13854
+ });
13855
+ runs.sort(
13856
+ (a, b) => a.startIndex - b.startIndex || b.endIndex - b.startIndex - (a.endIndex - a.startIndex) || a.order - b.order
13857
+ );
13858
+ const weekLanes = Array.from({ length: weekCount }, () => []);
13859
+ for (const run of runs) {
13860
+ const week = Math.floor(run.startIndex / 7);
13861
+ const fromDay = run.startIndex % 7;
13862
+ const toDay = run.endIndex % 7;
13863
+ const lanes = weekLanes[week];
13864
+ let lane = 0;
13865
+ for (; ; ) {
13866
+ if (lanes[lane] == null) lanes[lane] = new Array(7).fill(false);
13867
+ let free = true;
13868
+ for (let d = fromDay; d <= toDay && free; d++) if (lanes[lane][d]) free = false;
13869
+ if (free) break;
13870
+ lane += 1;
13871
+ }
13872
+ for (let d = fromDay; d <= toDay; d++) lanes[lane][d] = true;
13873
+ run.lane = lane;
13874
+ }
13875
+ for (let week = 0; week < weekCount; week++) {
13876
+ if (weekLanes[week].length > rowCapacity) moreLaneByWeek[week] = rowCapacity - 1;
13877
+ }
13878
+ for (const run of runs) {
13879
+ const week = Math.floor(run.startIndex / 7);
13880
+ const moreLane = moreLaneByWeek[week];
13881
+ const limit = moreLane < 0 ? rowCapacity : moreLane;
13882
+ if (run.lane >= limit) {
13883
+ for (let i = run.startIndex; i <= run.endIndex; i++) hiddenCountByCell[i] += 1;
13884
+ continue;
13885
+ }
13886
+ const { event } = run;
13887
+ segmentsByCell[run.startIndex].push({
13888
+ event,
13889
+ key: `${event.id ?? `${event.date}-${run.order}`}-${run.startIndex}`,
13890
+ startIndex: run.startIndex,
13891
+ span: run.endIndex - run.startIndex + 1,
13892
+ lane: run.lane,
13893
+ startsHere: cells[run.startIndex].date === event.date,
13894
+ endsHere: cells[run.endIndex].date === eventEndDate(event)
13895
+ });
13896
+ }
13897
+ return { segmentsByCell, eventsByCell, hiddenCountByCell, moreLaneByWeek };
13898
+ }
13899
+
13692
13900
  // src/components/SCalendarBoard/calendarBoard.config.ts
13693
13901
  var CALENDAR_BOARD_EVENT_COLORS = [
13694
13902
  "default",
@@ -13733,7 +13941,10 @@ var CALENDAR_BOARD_DAY_BG = {
13733
13941
  function CalendarEventButton({
13734
13942
  event,
13735
13943
  onSelect,
13736
- className
13944
+ flatStart = false,
13945
+ flatEnd = false,
13946
+ className,
13947
+ style
13737
13948
  }) {
13738
13949
  const preset = CALENDAR_BOARD_EVENT_PRESETS[event.color ?? "default"];
13739
13950
  const dot = event.dotColor ?? preset.dot;
@@ -13753,10 +13964,13 @@ function CalendarEventButton({
13753
13964
  "h-(--cmp-calendarBoard-item-height) shrink-0 rounded-(--cmp-calendarBoard-item-radius)",
13754
13965
  "gap-(--cmp-calendarBoard-eventButton-inline-gap) px-(--cmp-calendarBoard-item-paddingX)",
13755
13966
  "bg-(--ceb-bg) text-(--cmp-calendarBoard-eventButton-text-color-default)",
13967
+ // 잘린 쪽은 평평하게 — 다음 조각과 이어 보면 한 막대가 주 경계에서 나뉜 모양이 된다.
13968
+ flatStart && "rounded-s-none",
13969
+ flatEnd && "rounded-e-none",
13756
13970
  disabled ? "cursor-not-allowed opacity-50" : "cursor-pointer",
13757
13971
  className
13758
13972
  ),
13759
- style: { "--ceb-bg": preset.bg },
13973
+ style: { ...style, "--ceb-bg": preset.bg },
13760
13974
  onClick: (e) => {
13761
13975
  if (disabled) return;
13762
13976
  onSelect?.(event, e);
@@ -13766,7 +13980,7 @@ function CalendarEventButton({
13766
13980
  "span",
13767
13981
  {
13768
13982
  "aria-hidden": true,
13769
- className: "pointer-events-none absolute inset-0 rounded-(--cmp-calendarBoard-item-radius) bg-(--cmp-calendarBoard-eventButton-hover-overlay-color) opacity-0 transition-opacity group-hover:opacity-(--cmp-calendarBoard-eventButton-hover-overlay-opacity)"
13983
+ className: "pointer-events-none absolute inset-0 rounded-[inherit] bg-(--cmp-calendarBoard-eventButton-hover-overlay-color) opacity-0 transition-opacity group-hover:opacity-(--cmp-calendarBoard-eventButton-hover-overlay-opacity)"
13770
13984
  }
13771
13985
  ),
13772
13986
  /* @__PURE__ */ jsx(SBadge, { "aria-hidden": true, color: dot, className: "shrink-0" }),
@@ -13800,7 +14014,7 @@ function CalendarEventButton({
13800
14014
  }
13801
14015
  );
13802
14016
  }
13803
- var CalendarMoreButton = /* @__PURE__ */ forwardRef(function CalendarMoreButton2({ count, label = "\uB354\uBCF4\uAE30", onClick, className }, ref) {
14017
+ var CalendarMoreButton = /* @__PURE__ */ forwardRef(function CalendarMoreButton2({ count, label = "\uB354\uBCF4\uAE30", onClick, className, style }, ref) {
13804
14018
  return /* @__PURE__ */ jsxs(
13805
14019
  "button",
13806
14020
  {
@@ -13813,6 +14027,7 @@ var CalendarMoreButton = /* @__PURE__ */ forwardRef(function CalendarMoreButton2
13813
14027
  "bg-(--cmp-calendarBoard-moreButton-bg)",
13814
14028
  className
13815
14029
  ),
14030
+ style,
13816
14031
  onClick,
13817
14032
  children: [
13818
14033
  /* @__PURE__ */ jsx(
@@ -13831,6 +14046,9 @@ var CalendarMoreButton = /* @__PURE__ */ forwardRef(function CalendarMoreButton2
13831
14046
  }
13832
14047
  );
13833
14048
  });
14049
+ var HEADER_HEIGHT = "var(--cmp-calendarBoard-dayCard-header-paddingTop) + var(--cmp-calendarBoard-daySequence-size) + var(--cmp-calendarBoard-dayCard-header-paddingBottom)";
14050
+ var laneTop = (lane) => `calc(${HEADER_HEIGHT} + ${lane} * (var(--cmp-calendarBoard-item-height) + var(--cmp-calendarBoard-dayCard-grid-gap)))`;
14051
+ var spanWidth = (span) => `calc(${span} * 100% + ${span - 1}px - 2 * var(--cmp-calendarBoard-dayCard-paddingX))`;
13834
14052
  var CalendarDayCard = /* @__PURE__ */ forwardRef(function CalendarDayCard2({
13835
14053
  date,
13836
14054
  day,
@@ -13839,9 +14057,11 @@ var CalendarDayCard = /* @__PURE__ */ forwardRef(function CalendarDayCard2({
13839
14057
  isSelected,
13840
14058
  selectable,
13841
14059
  color,
13842
- events,
14060
+ segments,
14061
+ dayEventCount,
13843
14062
  body,
13844
14063
  hiddenCount,
14064
+ moreLane,
13845
14065
  isOpen,
13846
14066
  moreLabel,
13847
14067
  onDaySelect,
@@ -13849,7 +14069,7 @@ var CalendarDayCard = /* @__PURE__ */ forwardRef(function CalendarDayCard2({
13849
14069
  onOpenEvents,
13850
14070
  ...rest
13851
14071
  }, ref) {
13852
- const hasEvents = events.length + hiddenCount > 0;
14072
+ const hasEvents = dayEventCount > 0;
13853
14073
  const interactive = selectable || hasEvents;
13854
14074
  const activate = () => {
13855
14075
  if (hasEvents) onOpenEvents?.();
@@ -13884,7 +14104,7 @@ var CalendarDayCard = /* @__PURE__ */ forwardRef(function CalendarDayCard2({
13884
14104
  "span",
13885
14105
  {
13886
14106
  "aria-hidden": true,
13887
- className: "pointer-events-none absolute inset-[1px] rounded-(--cmp-calendarBoard-dayCard-focus-border-radius) border-(length:--cmp-calendarBoard-dayCard-focus-border-width) border-solid border-(--cmp-calendarBoard-dayCard-focus-border-color)"
14107
+ className: "pointer-events-none absolute inset-[1px] z-20 rounded-(--cmp-calendarBoard-dayCard-focus-border-radius) border-(length:--cmp-calendarBoard-dayCard-focus-border-width) border-solid border-(--cmp-calendarBoard-dayCard-focus-border-color)"
13888
14108
  }
13889
14109
  ),
13890
14110
  /* @__PURE__ */ jsx("div", { className: "flex shrink-0 pt-(--cmp-calendarBoard-dayCard-header-paddingTop) pb-(--cmp-calendarBoard-dayCard-header-paddingBottom)", children: /* @__PURE__ */ jsx(
@@ -13903,39 +14123,41 @@ var CalendarDayCard = /* @__PURE__ */ forwardRef(function CalendarDayCard2({
13903
14123
  children: day
13904
14124
  }
13905
14125
  ) }),
13906
- /* @__PURE__ */ jsxs(
13907
- "div",
14126
+ body != null && /* @__PURE__ */ jsx("div", { className: "flex min-h-0 flex-1 flex-col pb-(--cmp-calendarBoard-dayCard-grid-paddingBottom)", children: body }),
14127
+ body == null && segments.map((segment) => /* @__PURE__ */ jsx(
14128
+ CalendarEventButton,
13908
14129
  {
13909
- className: cn(
13910
- "flex min-h-0 flex-col gap-(--cmp-calendarBoard-dayCard-grid-gap) pb-(--cmp-calendarBoard-dayCard-grid-paddingBottom)",
13911
- // 슬롯은 남는 세로를 다 갖는다 — 안에서 h-full 로 칸을 채울 수 있어야 한다.
13912
- body != null && "flex-1"
13913
- ),
13914
- children: [
13915
- body,
13916
- body == null && events.map((event, i) => /* @__PURE__ */ jsx(
13917
- CalendarEventButton,
13918
- {
13919
- event,
13920
- onSelect: (ev, e) => {
13921
- e.stopPropagation();
13922
- onEventClick?.(ev, e);
13923
- }
13924
- },
13925
- event.id ?? `${event.date}-${i}`
13926
- )),
13927
- hiddenCount > 0 && /* @__PURE__ */ jsx(
13928
- CalendarMoreButton,
13929
- {
13930
- count: hiddenCount,
13931
- label: moreLabel,
13932
- onClick: (e) => {
13933
- e.stopPropagation();
13934
- onOpenEvents?.();
13935
- }
13936
- }
13937
- )
13938
- ]
14130
+ event: segment.event,
14131
+ flatStart: !segment.startsHere,
14132
+ flatEnd: !segment.endsHere,
14133
+ className: "absolute z-10",
14134
+ style: {
14135
+ top: laneTop(segment.lane),
14136
+ left: "var(--cmp-calendarBoard-dayCard-paddingX)",
14137
+ width: spanWidth(segment.span)
14138
+ },
14139
+ onSelect: (ev, e) => {
14140
+ e.stopPropagation();
14141
+ onEventClick?.(ev, e);
14142
+ }
14143
+ },
14144
+ segment.key
14145
+ )),
14146
+ body == null && hiddenCount > 0 && moreLane >= 0 && /* @__PURE__ */ jsx(
14147
+ CalendarMoreButton,
14148
+ {
14149
+ count: hiddenCount,
14150
+ label: moreLabel,
14151
+ className: "absolute z-10",
14152
+ style: {
14153
+ top: laneTop(moreLane),
14154
+ left: "var(--cmp-calendarBoard-dayCard-paddingX)",
14155
+ width: spanWidth(1)
14156
+ },
14157
+ onClick: (e) => {
14158
+ e.stopPropagation();
14159
+ onOpenEvents?.();
14160
+ }
13939
14161
  }
13940
14162
  )
13941
14163
  ]
@@ -14069,16 +14291,14 @@ function SCalendarBoard({
14069
14291
  observer.observe(cell);
14070
14292
  return () => observer.disconnect();
14071
14293
  }, [rowCount]);
14072
- const eventMap = useMemo(() => {
14073
- const map = /* @__PURE__ */ new Map();
14074
- (events ?? []).forEach((event) => {
14075
- const list = map.get(event.date);
14076
- if (list) list.push(event);
14077
- else map.set(event.date, [event]);
14078
- });
14079
- return map;
14080
- }, [events]);
14081
- const openEvents = openDate ? eventMap.get(openDate) ?? [] : [];
14294
+ const layout = useMemo(() => {
14295
+ const blockedDates = new Set(
14296
+ cells.filter((cell) => dayContent?.[cell.date] != null).map((cell) => cell.date)
14297
+ );
14298
+ return layoutCalendarBoard({ cells, events: events ?? [], rowCapacity, blockedDates });
14299
+ }, [cells, events, rowCapacity, dayContent]);
14300
+ const openIndex = openDate == null ? -1 : cells.findIndex((cell) => cell.date === openDate);
14301
+ const openEvents = openIndex < 0 ? [] : layout.eventsByCell[openIndex];
14082
14302
  useLayoutEffect(() => {
14083
14303
  if (openDate == null || panelEl == null) return;
14084
14304
  const cell = gridRef.current?.querySelector(`[data-date="${openDate}"]`);
@@ -14219,11 +14439,9 @@ function SCalendarBoard({
14219
14439
  // 행은 판 높이를 균등하게 나눠 갖는다 — 일정이 많은 주만 길어지면 격자가 깨진다.
14220
14440
  gridTemplateRows: `repeat(${rowCount}, minmax(var(--cmp-calendarBoard-dayCard-minHeight), 1fr))`
14221
14441
  },
14222
- children: cells.map((cell) => {
14442
+ children: cells.map((cell, index) => {
14223
14443
  const content = dayContent?.[cell.date];
14224
- const list = content == null ? eventMap.get(cell.date) ?? [] : [];
14225
- const folded = list.length > rowCapacity;
14226
- const visible = folded ? list.slice(0, rowCapacity - 1) : list;
14444
+ const list = layout.eventsByCell[index];
14227
14445
  const card = /* @__PURE__ */ jsx(
14228
14446
  CalendarDayCard,
14229
14447
  {
@@ -14234,9 +14452,11 @@ function SCalendarBoard({
14234
14452
  isSelected: value != null && value === cell.date,
14235
14453
  selectable,
14236
14454
  color: dayColors?.[cell.date] ?? "default",
14237
- events: visible,
14455
+ segments: layout.segmentsByCell[index],
14456
+ dayEventCount: list.length,
14238
14457
  body: content,
14239
- hiddenCount: folded ? list.length - (rowCapacity - 1) : 0,
14458
+ hiddenCount: layout.hiddenCountByCell[index],
14459
+ moreLane: layout.moreLaneByWeek[Math.floor(index / 7)],
14240
14460
  isOpen: openDate === cell.date,
14241
14461
  moreLabel,
14242
14462
  onDaySelect: (date) => onValueChange?.(date, list),
@@ -14629,6 +14849,7 @@ var SSelectImpl = /* @__PURE__ */ forwardRef(function SSelect({
14629
14849
  onSearchChange,
14630
14850
  searchDebounce = DEFAULT_SEARCH_DEBOUNCE,
14631
14851
  label,
14852
+ labelPosition,
14632
14853
  labelWidth,
14633
14854
  icon,
14634
14855
  iconColor,
@@ -15061,6 +15282,7 @@ var SSelectImpl = /* @__PURE__ */ forwardRef(function SSelect({
15061
15282
  SField,
15062
15283
  {
15063
15284
  label,
15285
+ labelPosition,
15064
15286
  labelWidth,
15065
15287
  icon,
15066
15288
  iconColor,
@@ -16791,6 +17013,7 @@ var SInput = /* @__PURE__ */ forwardRef(function SInput2({
16791
17013
  inputClassName,
16792
17014
  inputStyle,
16793
17015
  label,
17016
+ labelPosition,
16794
17017
  labelWidth,
16795
17018
  labelTooltip,
16796
17019
  labelTooltipProps,
@@ -16834,6 +17057,7 @@ var SInput = /* @__PURE__ */ forwardRef(function SInput2({
16834
17057
  SField,
16835
17058
  {
16836
17059
  label,
17060
+ labelPosition,
16837
17061
  labelWidth,
16838
17062
  labelTooltip,
16839
17063
  labelTooltipProps,
@@ -17024,6 +17248,7 @@ var SNumberInput = /* @__PURE__ */ forwardRef(function SNumberInput2({
17024
17248
  focused,
17025
17249
  hovered,
17026
17250
  label,
17251
+ labelPosition,
17027
17252
  labelWidth,
17028
17253
  icon,
17029
17254
  iconColor,
@@ -17193,6 +17418,7 @@ var SNumberInput = /* @__PURE__ */ forwardRef(function SNumberInput2({
17193
17418
  SField,
17194
17419
  {
17195
17420
  label,
17421
+ labelPosition,
17196
17422
  labelWidth,
17197
17423
  icon,
17198
17424
  iconColor,
@@ -17480,7 +17706,7 @@ function SCalendar({
17480
17706
  if (e !== "" && date > e) return true;
17481
17707
  return false;
17482
17708
  };
17483
- const pick = (date) => {
17709
+ const pick2 = (date) => {
17484
17710
  if (!isDisabled(date)) onValueChange?.(date);
17485
17711
  };
17486
17712
  return /* @__PURE__ */ jsxs(
@@ -17565,7 +17791,7 @@ function SCalendar({
17565
17791
  {
17566
17792
  type: "button",
17567
17793
  disabled: !cell.inCurrentMonth || disabled,
17568
- onClick: () => cell.inCurrentMonth && pick(cell.date),
17794
+ onClick: () => cell.inCurrentMonth && pick2(cell.date),
17569
17795
  className: cn(
17570
17796
  "flex min-h-[var(--cmp-datepicker-calendar-day-circle-size)] w-[var(--cmp-datepicker-calendar-day-width)] flex-col items-center justify-start border-none bg-transparent p-0",
17571
17797
  !cell.inCurrentMonth ? "invisible pointer-events-none" : disabled ? "cursor-not-allowed" : "cursor-pointer"
@@ -17911,6 +18137,7 @@ function SDatePicker({
17911
18137
  rules,
17912
18138
  status,
17913
18139
  label,
18140
+ labelPosition,
17914
18141
  labelWidth,
17915
18142
  icon,
17916
18143
  iconColor,
@@ -17983,6 +18210,7 @@ function SDatePicker({
17983
18210
  SField,
17984
18211
  {
17985
18212
  label,
18213
+ labelPosition,
17986
18214
  labelWidth,
17987
18215
  icon,
17988
18216
  iconColor,
@@ -18445,6 +18673,7 @@ function SDateRangePicker({
18445
18673
  rules,
18446
18674
  status,
18447
18675
  label,
18676
+ labelPosition,
18448
18677
  labelWidth,
18449
18678
  icon,
18450
18679
  iconColor,
@@ -18517,6 +18746,7 @@ function SDateRangePicker({
18517
18746
  SField,
18518
18747
  {
18519
18748
  label,
18749
+ labelPosition,
18520
18750
  labelWidth,
18521
18751
  icon,
18522
18752
  iconColor,
@@ -18821,6 +19051,7 @@ function SFilePicker({
18821
19051
  status,
18822
19052
  size = "sm",
18823
19053
  label,
19054
+ labelPosition,
18824
19055
  labelWidth,
18825
19056
  icon,
18826
19057
  iconColor,
@@ -19005,6 +19236,7 @@ function SFilePicker({
19005
19236
  {
19006
19237
  borderless: inline,
19007
19238
  label,
19239
+ labelPosition,
19008
19240
  labelWidth,
19009
19241
  icon,
19010
19242
  iconColor,
@@ -19270,7 +19502,7 @@ function ChartGrid({ scale, direction, width, height }) {
19270
19502
  return /* @__PURE__ */ jsx("g", { "aria-hidden": true, children: scale.ticks.map((tick) => {
19271
19503
  const ratio = ratioOf(tick, scale);
19272
19504
  const isBaseline = tick === 0;
19273
- const color = isBaseline ? "var(--cmp-chart-baseline-color)" : "var(--cmp-chart-grid-line-color)";
19505
+ const color = isBaseline ? "var(--cmp-chart-baseline-color)" : "var(--cmp-chart-gridline-color)";
19274
19506
  const position = vertical ? height - ratio * height : ratio * width;
19275
19507
  const extent = vertical ? height : width;
19276
19508
  const snapped = Math.min(Math.max(Math.round(position), 0), Math.max(0, extent - 1)) + 0.5;
@@ -19348,7 +19580,7 @@ function ChartAxisLabels({
19348
19580
  }
19349
19581
  );
19350
19582
  }
19351
- var ChartFrame = /* @__PURE__ */ forwardRef(function ChartFrame2({ legend, legendPosition = "top", children, className, style, ...props }, ref) {
19583
+ var ChartFrame = /* @__PURE__ */ forwardRef(function ChartFrame2({ title, unit, legend, legendPosition = "top", children, className, style, ...props }, ref) {
19352
19584
  return /* @__PURE__ */ jsxs(
19353
19585
  "div",
19354
19586
  {
@@ -19361,6 +19593,14 @@ var ChartFrame = /* @__PURE__ */ forwardRef(function ChartFrame2({ legend, legen
19361
19593
  style,
19362
19594
  ...props,
19363
19595
  children: [
19596
+ (title || unit) && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-(--cmp-chart-gap)", children: [
19597
+ title && /* @__PURE__ */ jsx("span", { className: "typo-body-md-medium text-(--cmp-chart-title-color)", children: title }),
19598
+ unit && // ml-auto — title 유무와 관계없이 항상 오른쪽 끝에 붙는다.
19599
+ /* @__PURE__ */ jsxs("span", { className: "ml-auto whitespace-nowrap typo-body-sm-default text-(--cmp-chart-unit-color)", children: [
19600
+ "\uB2E8\uC704 : ",
19601
+ unit
19602
+ ] })
19603
+ ] }),
19364
19604
  legend && legendPosition === "top" && legend,
19365
19605
  children,
19366
19606
  legend && legendPosition === "bottom" && legend
@@ -19411,46 +19651,57 @@ function ChartLegend({ items, align = "center", activeIndex, className }) {
19411
19651
 
19412
19652
  // src/lib/chart/palette.ts
19413
19653
  var V3 = (path) => `var(--cmp-chart-palette-${path})`;
19414
- var CHART_COLORS = {
19415
- positivePrimary: V3("variation-positivePrimary"),
19416
- positiveSecondary: V3("variation-positiveSecondary"),
19417
- negativePrimary: V3("variation-negativePrimary"),
19418
- negativeSecondary: V3("variation-negativeSecondary"),
19419
- neutralPrimary: V3("variation-neutralPrimary"),
19420
- neutralSecondary: V3("variation-neutralSecondary")
19421
- };
19422
- var CHART_PALETTES = {
19423
- 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")],
19424
19665
  multi: [
19425
- V3("multi-blue"),
19426
- V3("multi-skyblue"),
19427
- V3("multi-yellow"),
19428
- V3("multi-olive"),
19429
- V3("multi-lightRed"),
19430
- V3("multi-warmBlue"),
19431
- V3("multi-orange"),
19432
- V3("multi-green"),
19433
- V3("multi-navy"),
19434
- V3("multi-grey"),
19435
- 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")
19436
19677
  ],
19437
19678
  gradation: [
19438
- V3("gradation-1"),
19439
- V3("gradation-2"),
19440
- V3("gradation-3"),
19441
- V3("gradation-4"),
19442
- V3("gradation-5"),
19443
- 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")
19444
19685
  ]
19445
- };
19446
- 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) {
19447
19692
  if (palette === "custom") {
19448
- if (!colors?.length) return CHART_PALETTES.default[0];
19449
- return CHART_COLORS[colors[index % colors.length]];
19693
+ if (!colors?.length) return palettes.default[0];
19694
+ return names[colors[index % colors.length]];
19450
19695
  }
19451
- const list = CHART_PALETTES[palette] ?? CHART_PALETTES.default;
19696
+ const list = palettes[palette] ?? palettes.default;
19452
19697
  return list[index % list.length];
19453
19698
  }
19699
+ function paletteColor(palette, index, colors) {
19700
+ return pick(CHART_COLORS, CHART_PALETTES, palette, index, colors);
19701
+ }
19702
+ function linePointDimmedColor(palette, index, colors) {
19703
+ return pick(DIMMED_COLORS, DIMMED_PALETTES, palette, index, colors);
19704
+ }
19454
19705
  function useElementSize() {
19455
19706
  const ref = useRef(null);
19456
19707
  const [size, setSize] = useState({ width: 0, height: 0 });
@@ -19528,7 +19779,8 @@ function ChartTooltip({
19528
19779
  "pointer-events-none absolute top-0 left-0 z-10 w-max",
19529
19780
  "flex flex-col gap-(--cmp-chart-chartTooltip-gap)",
19530
19781
  "px-(--cmp-chart-chartTooltip-paddingX) py-(--cmp-chart-chartTooltip-paddingY)",
19531
- "rounded-(--cmp-chart-chartTooltip-radius) bg-(--cmp-chart-chartTooltip-bg) shadow-floating",
19782
+ "rounded-(--cmp-chart-chartTooltip-radius) bg-(--cmp-chart-chartTooltip-bg)",
19783
+ "shadow-(--cmp-chart-chartTooltip-shadow)",
19532
19784
  className
19533
19785
  ),
19534
19786
  style: {
@@ -19575,12 +19827,12 @@ var BAR_SIZE_MAX = 80;
19575
19827
  var BAR_GAP = 6;
19576
19828
  var GROUP_PADDING_MIN = 8;
19577
19829
  var GROUP_PADDING_MAX = 24;
19578
- var VALUE_LABEL_GAP = 6;
19830
+ var VALUE_LABEL_GAP = 4;
19579
19831
  var BAR_RADIUS = 8;
19580
- var BAR_OPACITY_DEFAULT = "var(--cmp-chart-bar-opacity-default)";
19832
+ var BAR_OPACITY_DEFAULT = "var(--cmp-chart-opacity-default)";
19581
19833
  var BAR_OPACITY_DIMMED = "var(--cmp-chart-bar-opacity-dimmed)";
19582
19834
  var BAR_OPACITY_HOVER = 1;
19583
- var BAR_DATA_LABEL_COLOR = "var(--cmp-chart-bar-dataLabel-color-default)";
19835
+ var BAR_DATA_LABEL_COLOR = "var(--cmp-chart-dataLabel-color-default)";
19584
19836
  var BAR_DATA_LABEL_TYPO = "typo-body-sm-medium";
19585
19837
  var BAR_DATA_LABEL_TYPO_HOVER = "typo-body-md-bold";
19586
19838
  var BAR_HOVER_TRANSITION = "transition-opacity duration-200 ease-out motion-reduce:transition-none";
@@ -19640,6 +19892,8 @@ function barPath(x, y, width, height, direction, negative) {
19640
19892
  var SBarChart = /* @__PURE__ */ forwardRef(function SBarChart2({
19641
19893
  categories,
19642
19894
  series,
19895
+ title,
19896
+ unit,
19643
19897
  direction = "vertical",
19644
19898
  stacked = false,
19645
19899
  palette = "default",
@@ -20105,6 +20359,8 @@ var SBarChart = /* @__PURE__ */ forwardRef(function SBarChart2({
20105
20359
  ChartFrame,
20106
20360
  {
20107
20361
  ref,
20362
+ title,
20363
+ unit,
20108
20364
  legend,
20109
20365
  legendPosition,
20110
20366
  className,
@@ -20145,18 +20401,18 @@ var SBarChart = /* @__PURE__ */ forwardRef(function SBarChart2({
20145
20401
  });
20146
20402
 
20147
20403
  // src/components/SLineChart/lineChart.config.ts
20148
- var LINE_WIDTH = 2;
20149
- var POINT_RADIUS = 4;
20150
- var POINT_HOVER_RADIUS = 9.5;
20151
- var POINT_HOVER_BORDER_WIDTH = 1;
20152
- var POINT_HOVER_INNER_RADIUS = 5;
20153
- var POINT_HOVER_BG = "var(--cmp-chart-bg)";
20154
- 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;
20155
20411
  var BAND_MIN = 40;
20156
- var VALUE_LABEL_GAP2 = 6;
20157
- var AREA_OPACITY_TOP = "30%";
20158
- var AREA_OPACITY_BOTTOM = "var(--opacity-005)";
20159
- 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)";
20160
20416
  var LINE_DATA_LABEL_TYPO = "typo-body-sm-medium";
20161
20417
  var LINE_DATA_LABEL_TYPO_HOVER = "typo-body-md-bold";
20162
20418
  var r = (value) => Math.round(value * 100) / 100;
@@ -20236,6 +20492,8 @@ function runsOf(row) {
20236
20492
  var SLineChart = /* @__PURE__ */ forwardRef(function SLineChart2({
20237
20493
  categories,
20238
20494
  series,
20495
+ title,
20496
+ unit,
20239
20497
  curve = "linear",
20240
20498
  area = false,
20241
20499
  stacked = false,
@@ -20265,6 +20523,10 @@ var SLineChart = /* @__PURE__ */ forwardRef(function SLineChart2({
20265
20523
  (seriesIndex) => paletteColor(palette, seriesIndex, customColors),
20266
20524
  [palette, customColors]
20267
20525
  );
20526
+ const dimmedColorAt = useCallback(
20527
+ (seriesIndex) => linePointDimmedColor(palette, seriesIndex, customColors),
20528
+ [palette, customColors]
20529
+ );
20268
20530
  const rows = useMemo(() => {
20269
20531
  const running = categories.map(() => 0);
20270
20532
  return series.map(
@@ -20436,10 +20698,13 @@ var SLineChart = /* @__PURE__ */ forwardRef(function SLineChart2({
20436
20698
  "aria-hidden": true,
20437
20699
  d,
20438
20700
  fill: "none",
20439
- strokeWidth: LINE_WIDTH,
20440
20701
  strokeLinecap: "round",
20441
20702
  strokeLinejoin: "round",
20442
- style: { stroke: colorAt(seriesIndex) }
20703
+ style: {
20704
+ stroke: colorAt(seriesIndex),
20705
+ strokeWidth: LINE_WIDTH,
20706
+ strokeOpacity: LINE_OPACITY
20707
+ }
20443
20708
  },
20444
20709
  `line-${seriesIndex}-${runIndex}`
20445
20710
  );
@@ -20456,6 +20721,7 @@ var SLineChart = /* @__PURE__ */ forwardRef(function SLineChart2({
20456
20721
  const hovered = hoveredCategory === categoryIndex;
20457
20722
  if (!showPoint && !hovered) return;
20458
20723
  const color = colorAt(seriesIndex);
20724
+ const dimmed = hoveredCategory != null && !hovered;
20459
20725
  const key = `${seriesIndex}-${categoryIndex}`;
20460
20726
  if (hovered) {
20461
20727
  halos.push(
@@ -20465,12 +20731,8 @@ var SLineChart = /* @__PURE__ */ forwardRef(function SLineChart2({
20465
20731
  "aria-hidden": true,
20466
20732
  cx: point.x,
20467
20733
  cy: point.y,
20468
- r: POINT_HOVER_RADIUS,
20469
- style: {
20470
- fill: POINT_HOVER_BG,
20471
- stroke: color,
20472
- strokeWidth: POINT_HOVER_BORDER_WIDTH
20473
- }
20734
+ r: POINT_HALO_RADIUS,
20735
+ style: { fill: color, fillOpacity: POINT_HALO_OPACITY }
20474
20736
  },
20475
20737
  `halo-${key}`
20476
20738
  )
@@ -20482,8 +20744,11 @@ var SLineChart = /* @__PURE__ */ forwardRef(function SLineChart2({
20482
20744
  {
20483
20745
  cx: point.x,
20484
20746
  cy: point.y,
20485
- r: hovered ? POINT_HOVER_INNER_RADIUS : POINT_RADIUS,
20486
- 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
+ },
20487
20752
  onClick: onPointClick ? () => onPointClick({ seriesIndex, categoryIndex, value: point.own }) : void 0,
20488
20753
  children: /* @__PURE__ */ jsx("title", { children: `${categories[categoryIndex]} ${series[seriesIndex]?.name ?? ""} ${formatValue(point.own)}` })
20489
20754
  },
@@ -20493,7 +20758,17 @@ var SLineChart = /* @__PURE__ */ forwardRef(function SLineChart2({
20493
20758
  });
20494
20759
  });
20495
20760
  return { pointHalos: halos, pointDots: dots };
20496
- }, [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
+ ]);
20497
20772
  const valueLabels = useMemo(
20498
20773
  () => showValueLabel ? plotted.flatMap(
20499
20774
  (row, seriesIndex) => row.map(
@@ -20519,6 +20794,8 @@ var SLineChart = /* @__PURE__ */ forwardRef(function SLineChart2({
20519
20794
  ChartFrame,
20520
20795
  {
20521
20796
  ref,
20797
+ title,
20798
+ unit,
20522
20799
  legend,
20523
20800
  legendPosition,
20524
20801
  className,
@@ -20654,8 +20931,9 @@ var LABEL_MIN_RATIO = 0.05;
20654
20931
  var PIE_LABEL_RADIUS_RATIO = 0.65;
20655
20932
  var HOVER_GROW = 4;
20656
20933
  var HOVER_CORNER = 2;
20657
- var OPACITY_DEFAULT = "var(--cmp-chart-bar-opacity-default)";
20658
- 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)";
20659
20937
  var OPACITY_HOVER = 1;
20660
20938
  var defaultFormat3 = (value) => value.toLocaleString();
20661
20939
  function formatRatio(ratio) {
@@ -20705,6 +20983,8 @@ function slicePath(center, outer, inner, start, end, corner = 0) {
20705
20983
  }
20706
20984
  var RadialChart = /* @__PURE__ */ forwardRef(function RadialChart2({
20707
20985
  data,
20986
+ title,
20987
+ unit,
20708
20988
  palette = "multi",
20709
20989
  colors,
20710
20990
  showValueLabel = false,
@@ -20776,6 +21056,8 @@ var RadialChart = /* @__PURE__ */ forwardRef(function RadialChart2({
20776
21056
  ChartFrame,
20777
21057
  {
20778
21058
  ref,
21059
+ title,
21060
+ unit,
20779
21061
  legend,
20780
21062
  legendPosition,
20781
21063
  className,
@@ -20786,6 +21068,7 @@ var RadialChart = /* @__PURE__ */ forwardRef(function RadialChart2({
20786
21068
  {
20787
21069
  width: diameter,
20788
21070
  height: diameter,
21071
+ overflow: "visible",
20789
21072
  role: "img",
20790
21073
  "aria-label": `${arcs.length}\uAC1C \uD56D\uBAA9 ${kind}`,
20791
21074
  onMouseLeave: () => setHovered(null),
@@ -20798,7 +21081,7 @@ var RadialChart = /* @__PURE__ */ forwardRef(function RadialChart2({
20798
21081
  "aria-hidden": true,
20799
21082
  d: slicePath(center, outer, inner, 0, Math.PI * 2),
20800
21083
  fillRule: "evenodd",
20801
- style: { fill: "var(--cmp-chart-grid-line-color)" }
21084
+ style: { fill: "var(--cmp-chart-gridline-color)" }
20802
21085
  }
20803
21086
  )
20804
21087
  ) : arcs.map((arc2) => {
@@ -20812,6 +21095,10 @@ var RadialChart = /* @__PURE__ */ forwardRef(function RadialChart2({
20812
21095
  style: {
20813
21096
  fill: arc2.color,
20814
21097
  opacity,
21098
+ // 짚은 조각만 떠오른다. SVG 도형에는 box-shadow 가 걸리지 않아
21099
+ // 같은 토큰의 filter 형태를 쓴다 (drop-shadow 에는 spread 가 없다 —
21100
+ // 토큰의 음수 spread 만큼 설계보다 조금 넓게 깔린다).
21101
+ filter: hovered === arc2.index ? SLICE_HOVER_SHADOW : void 0,
20815
21102
  cursor: onSliceClick ? "pointer" : void 0
20816
21103
  },
20817
21104
  onMouseEnter: () => setHovered(arc2.index),
@@ -23382,6 +23669,7 @@ var SEditor = /* @__PURE__ */ forwardRef(function SEditor2({
23382
23669
  onFocus,
23383
23670
  onBlur,
23384
23671
  label,
23672
+ labelPosition,
23385
23673
  labelWidth,
23386
23674
  icon,
23387
23675
  iconColor,
@@ -23470,6 +23758,7 @@ var SEditor = /* @__PURE__ */ forwardRef(function SEditor2({
23470
23758
  {
23471
23759
  name,
23472
23760
  label,
23761
+ labelPosition,
23473
23762
  labelWidth,
23474
23763
  icon,
23475
23764
  iconColor,
@@ -25357,7 +25646,7 @@ function ListBox({
25357
25646
  "div",
25358
25647
  {
25359
25648
  className: cn(
25360
- "overflow-hidden border border-solid shadow-[var(--shadow-overlay)]",
25649
+ "overflow-hidden border border-solid shadow-[var(--cmp-chipFilter-listbox-shadow)]",
25361
25650
  maxHeight && "flex flex-col"
25362
25651
  ),
25363
25652
  style: {
@@ -25442,6 +25731,7 @@ var SChipInput = /* @__PURE__ */ forwardRef(function SChipInput2({
25442
25731
  loadingRecommendedItems = false,
25443
25732
  dropdownMinWidth = 200,
25444
25733
  label,
25734
+ labelPosition,
25445
25735
  labelWidth,
25446
25736
  hint,
25447
25737
  errorMessage,
@@ -25582,6 +25872,7 @@ var SChipInput = /* @__PURE__ */ forwardRef(function SChipInput2({
25582
25872
  SField,
25583
25873
  {
25584
25874
  label,
25875
+ labelPosition,
25585
25876
  labelWidth,
25586
25877
  labelHeight: `calc(var(--cmp-chipInput-${size}-minHeight) + 2px)`,
25587
25878
  icon,
@@ -25900,6 +26191,7 @@ var SBarcodeInput = /* @__PURE__ */ forwardRef(
25900
26191
  inputClassName,
25901
26192
  inputStyle,
25902
26193
  label,
26194
+ labelPosition,
25903
26195
  labelWidth,
25904
26196
  icon,
25905
26197
  iconColor,
@@ -25936,6 +26228,7 @@ var SBarcodeInput = /* @__PURE__ */ forwardRef(
25936
26228
  SField,
25937
26229
  {
25938
26230
  label,
26231
+ labelPosition,
25939
26232
  labelWidth,
25940
26233
  icon,
25941
26234
  iconColor,
@@ -26305,6 +26598,7 @@ function STimePicker({
26305
26598
  rules,
26306
26599
  status,
26307
26600
  label,
26601
+ labelPosition,
26308
26602
  labelWidth,
26309
26603
  icon,
26310
26604
  iconColor,
@@ -26359,6 +26653,7 @@ function STimePicker({
26359
26653
  SField,
26360
26654
  {
26361
26655
  label,
26656
+ labelPosition,
26362
26657
  labelWidth,
26363
26658
  icon,
26364
26659
  iconColor,
@@ -26771,6 +27066,7 @@ function STimeRangePicker({
26771
27066
  rules,
26772
27067
  status,
26773
27068
  label,
27069
+ labelPosition,
26774
27070
  labelWidth,
26775
27071
  icon,
26776
27072
  iconColor,
@@ -26827,6 +27123,7 @@ function STimeRangePicker({
26827
27123
  SField,
26828
27124
  {
26829
27125
  label,
27126
+ labelPosition,
26830
27127
  labelWidth,
26831
27128
  icon,
26832
27129
  iconColor,
@@ -26935,6 +27232,6 @@ function STimeRangePicker({
26935
27232
  );
26936
27233
  }
26937
27234
 
26938
- export { ACCOUNT_LIST_BOX_ICONS, ACCOUNT_LIST_BOX_ITEM_TONES, ACCOUNT_LIST_BOX_LABELS, ACCOUNT_LIST_BOX_LAYOUT, ACCOUNT_LIST_BOX_TONE_CONFIG, BADGE_COLORS, BAR_GAP, BAR_SIZE_MAX, BAR_SIZE_MIN, BUTTON_COLORS, BUTTON_SIZES, CALENDAR_BOARD_DAY_BG, CALENDAR_BOARD_DAY_COLORS, CALENDAR_BOARD_EVENT_COLORS, CALENDAR_BOARD_EVENT_PRESETS, CALENDAR_BOARD_MAX_VISIBLE_EVENTS, CHAT_ATTACHED_FILE_CONFIG, CHAT_FILE_CONFIG, CHAT_MESSAGE_DIRECTIONS, CHAT_MESSAGE_READ_STATUSES, CHAT_MESSAGE_VARIANTS, CHIP_COLORS, COLOR_KEYS, FIELD_WIDTH_GRADES, GNB_COLORS, GNB_COMMON, GNB_FOLD_MS, GNB_FULL_LOGO_WIDTH, GNB_HEADER, GNB_MENU, GNB_MENU_WIDTH, GNB_RAIL, GNB_RAIL_WIDTH, GNB_SYSTEM_COLORS, GNB_SYSTEM_COLOR_CONFIG, GNB_SYSTEM_LAYOUT, GNB_SYSTEM_PLACEMENTS, GNB_SYSTEM_TOP_COLOR_CONFIG, ICONS, IMAGE_FITS, LAUNCHER_LIST_BOX_LAYOUT, LAUNCHER_LIST_BOX_LOGO_HEIGHT, LAUNCHER_LIST_BOX_LOGO_SERVICE_GAP, LAUNCHER_LIST_BOX_TRAILING_ICON, LAUNCHER_LIST_BOX_WIDTH, LAUNCHER_SERVICES, LAUNCHER_SERVICE_CATALOG, LOGO_DEFAULT_SIZE, LOGO_NAMES, PAGE_BACKGROUNDS, PAGE_CONTENT_HEIGHTS, PAGE_CONTENT_WIDTHS, PAGE_HEADER_VARIANTS, PAGE_PADDINGS, RangeCalendar, SAccountListBox, SActionModal, SBadge, SBarChart, SBarcodeInput, SButton, SCROLL_AREA_AXES, SCalendar, SCalendarBoard, SCallout, SCard, SChatAttachedFile2 as SChatAttachedFile, SChatFile2 as SChatFile, SChatInput2 as SChatInput, SChatMessage2 as SChatMessage, SChatSystemMessage2 as SChatSystemMessage, SCheckbox, SChip2 as SChip, SChipFilter, SChipInput, SCircleProgress, SConfirmModal, SDatePicker, SDatePickerMonthListbox, SDatePickerYearListbox, SDateRangePicker, SDivider, SDonutChart, SDraggableGroup, SDraggableItem2 as SDraggableItem, SDraggableList, SDraggableProvider, SDrawer, SDropdownButton2 as SDropdownButton, SEDITOR_DEFAULT_FONT_SIZE, SEDITOR_HEADING_LABELS, SEDITOR_HEADING_LEVELS, SEditor, SExpansionItem, SExpansionList2 as SExpansionList, SField, SFilePicker, SForm, SGhostButton, SGnb, SGnbSystem, SGnbSystemContext, SGuide, SIcon, SImage, SInput, SKeyValueTable, SLAYOUT_MIN_WIDTH, SLauncherListBox, SLayout, SLayoutContext, SLineChart, SLinearProgress, SList2 as SList, SListItem2 as SListItem, SLoadingContainer, SLoadingModal, SLoadingViewport, SLoginCard2 as SLoginCard, SLogo, SMeatballButton2 as SMeatballButton, SModal, SModalOutlet, SNumberInput, SPage, SPageHeader, SPagination, SPieChart, SPopover, SPopup, SPortal, SRadio, SRadioButton, SRadioCard, SRadioCardGroup, SRadioGroup, SSPLITTER_UNITS, SScrollArea, SSearchInput, SSectionHeaderCard2 as SSectionHeaderCard, SSelect2 as SSelect, SSplitter2 as SSplitter, SStepper, SSwitch, SSystemActionButton, STEPPER_SIZES, STable, STableBar, STabs, STag, STextLink, STextarea, STimePicker, STimeRangePicker, SToast, SToastContainer, SToggle, STooltip2 as STooltip, STree2 as STree, STreeItem2 as STreeItem, SYSTEM_ACTION_BUTTON_COLORS, SYSTEM_ACTION_BUTTON_COLOR_CONFIG, SYSTEM_ACTION_BUTTON_LAYOUT, SYSTEM_ACTION_BUTTON_TYPES, SYSTEM_ACTION_BUTTON_TYPE_CONFIG, TAG_COLORS, TAG_SHAPES, TAG_SIZES, TIMEPICKER_SIZES, TIMEPICKER_SIZE_CONFIG, buttonPreset, cn, fieldWidthValue, fileExtension, findGnbAncestors, findGnbRailValue, formatFileSize, isColorKey, isFieldWidthGrade, loading, normalizeExtension, resolveColor, useSLayout };
27235
+ export { ACCOUNT_LIST_BOX_ICONS, ACCOUNT_LIST_BOX_ITEM_TONES, ACCOUNT_LIST_BOX_LABELS, ACCOUNT_LIST_BOX_LAYOUT, ACCOUNT_LIST_BOX_TONE_CONFIG, BADGE_COLORS, BAR_GAP, BAR_SIZE_MAX, BAR_SIZE_MIN, BUTTON_COLORS, BUTTON_SIZES, CALENDAR_BOARD_DAY_BG, CALENDAR_BOARD_DAY_COLORS, CALENDAR_BOARD_EVENT_COLORS, CALENDAR_BOARD_EVENT_PRESETS, CALENDAR_BOARD_MAX_VISIBLE_EVENTS, CHAT_ATTACHED_FILE_CONFIG, CHAT_FILE_CONFIG, CHAT_MESSAGE_DIRECTIONS, CHAT_MESSAGE_READ_STATUSES, CHAT_MESSAGE_VARIANTS, CHIP_COLORS, COLOR_KEYS, CONTEXT_ALERT_DEFAULT_ICON, CONTEXT_ALERT_ICON_COLOR, CONTEXT_ALERT_INTENTS, CONTEXT_ALERT_SURFACE, FIELD_WIDTH_GRADES, GNB_COLORS, GNB_COMMON, GNB_FOLD_MS, GNB_FULL_LOGO_WIDTH, GNB_HEADER, GNB_MENU, GNB_MENU_WIDTH, GNB_RAIL, GNB_RAIL_WIDTH, GNB_SYSTEM_COLORS, GNB_SYSTEM_COLOR_CONFIG, GNB_SYSTEM_LAYOUT, GNB_SYSTEM_PLACEMENTS, GNB_SYSTEM_TOP_COLOR_CONFIG, ICONS, IMAGE_FITS, LAUNCHER_LIST_BOX_LAYOUT, LAUNCHER_LIST_BOX_LOGO_HEIGHT, LAUNCHER_LIST_BOX_LOGO_SERVICE_GAP, LAUNCHER_LIST_BOX_TRAILING_ICON, LAUNCHER_LIST_BOX_WIDTH, LAUNCHER_SERVICES, LAUNCHER_SERVICE_CATALOG, LOGO_DEFAULT_SIZE, LOGO_NAMES, PAGE_BACKGROUNDS, PAGE_CONTENT_HEIGHTS, PAGE_CONTENT_WIDTHS, PAGE_HEADER_VARIANTS, PAGE_PADDINGS, RangeCalendar, SAccountListBox, SActionModal, SBadge, SBarChart, SBarcodeInput, SButton, SCROLL_AREA_AXES, SCalendar, SCalendarBoard, SCallout, SCard, SChatAttachedFile2 as SChatAttachedFile, SChatFile2 as SChatFile, SChatInput2 as SChatInput, SChatMessage2 as SChatMessage, SChatSystemMessage2 as SChatSystemMessage, SCheckbox, SChip2 as SChip, SChipFilter, SChipInput, SCircleProgress, SConfirmModal, SContextAlert, SDatePicker, SDatePickerMonthListbox, SDatePickerYearListbox, SDateRangePicker, SDivider, SDonutChart, SDraggableGroup, SDraggableItem2 as SDraggableItem, SDraggableList, SDraggableProvider, SDrawer, SDropdownButton2 as SDropdownButton, SEDITOR_DEFAULT_FONT_SIZE, SEDITOR_HEADING_LABELS, SEDITOR_HEADING_LEVELS, SEditor, SExpansionItem, SExpansionList2 as SExpansionList, SField, SFilePicker, SForm, SGhostButton, SGnb, SGnbSystem, SGnbSystemContext, SGuide, SIcon, SImage, SInput, SKeyValueTable, SLAYOUT_MIN_WIDTH, SLauncherListBox, SLayout, SLayoutContext, SLineChart, SLinearProgress, SList2 as SList, SListItem2 as SListItem, SLoadingContainer, SLoadingModal, SLoadingViewport, SLoginCard2 as SLoginCard, SLogo, SMeatballButton2 as SMeatballButton, SModal, SModalOutlet, SNumberInput, SPage, SPageHeader, SPagination, SPieChart, SPopover, SPopup, SPortal, SRadio, SRadioButton, SRadioCard, SRadioCardGroup, SRadioGroup, SSPLITTER_UNITS, SScrollArea, SSearchInput, SSectionHeaderCard2 as SSectionHeaderCard, SSelect2 as SSelect, SSplitter2 as SSplitter, SStepper, SSwitch, SSystemActionButton, STEPPER_SIZES, STable, STableBar, STabs, STag, STextLink, STextarea, STimePicker, STimeRangePicker, SToast, SToastContainer, SToggle, STooltip2 as STooltip, STree2 as STree, STreeItem2 as STreeItem, SYSTEM_ACTION_BUTTON_COLORS, SYSTEM_ACTION_BUTTON_COLOR_CONFIG, SYSTEM_ACTION_BUTTON_LAYOUT, SYSTEM_ACTION_BUTTON_TYPES, SYSTEM_ACTION_BUTTON_TYPE_CONFIG, TAG_COLORS, TAG_SHAPES, TAG_SIZES, TIMEPICKER_SIZES, TIMEPICKER_SIZE_CONFIG, buttonPreset, cn, fieldWidthValue, fileExtension, findGnbAncestors, findGnbRailValue, formatFileSize, isColorKey, isFieldWidthGrade, loading, normalizeExtension, resolveColor, useSLayout };
26939
27236
  //# sourceMappingURL=index.js.map
26940
27237
  //# sourceMappingURL=index.js.map