sellmate-design-system-react 0.7.0 → 0.8.1

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 (85) hide show
  1. package/dist/components/SBarcodeInput/SBarcodeInput.cjs +61 -49
  2. package/dist/components/SBarcodeInput/SBarcodeInput.cjs.map +1 -1
  3. package/dist/components/SBarcodeInput/SBarcodeInput.js +61 -49
  4. package/dist/components/SBarcodeInput/SBarcodeInput.js.map +1 -1
  5. package/dist/components/SChipInput/SChipInput.cjs +64 -49
  6. package/dist/components/SChipInput/SChipInput.cjs.map +1 -1
  7. package/dist/components/SChipInput/SChipInput.js +64 -49
  8. package/dist/components/SChipInput/SChipInput.js.map +1 -1
  9. package/dist/components/SDatePicker/SDatePicker.cjs +61 -49
  10. package/dist/components/SDatePicker/SDatePicker.cjs.map +1 -1
  11. package/dist/components/SDatePicker/SDatePicker.js +61 -49
  12. package/dist/components/SDatePicker/SDatePicker.js.map +1 -1
  13. package/dist/components/SDateRangePicker/SDateRangePicker.cjs +61 -49
  14. package/dist/components/SDateRangePicker/SDateRangePicker.cjs.map +1 -1
  15. package/dist/components/SDateRangePicker/SDateRangePicker.js +61 -49
  16. package/dist/components/SDateRangePicker/SDateRangePicker.js.map +1 -1
  17. package/dist/components/SField/SField.cjs +61 -49
  18. package/dist/components/SField/SField.cjs.map +1 -1
  19. package/dist/components/SField/SField.d.ts +5 -2
  20. package/dist/components/SField/SField.js +61 -49
  21. package/dist/components/SField/SField.js.map +1 -1
  22. package/dist/components/SFilePicker/SFilePicker.cjs +61 -49
  23. package/dist/components/SFilePicker/SFilePicker.cjs.map +1 -1
  24. package/dist/components/SFilePicker/SFilePicker.js +61 -49
  25. package/dist/components/SFilePicker/SFilePicker.js.map +1 -1
  26. package/dist/components/SInput/SInput.cjs +61 -49
  27. package/dist/components/SInput/SInput.cjs.map +1 -1
  28. package/dist/components/SInput/SInput.js +61 -49
  29. package/dist/components/SInput/SInput.js.map +1 -1
  30. package/dist/components/SKeyValueTable/SKeyValueTable.cjs +72 -50
  31. package/dist/components/SKeyValueTable/SKeyValueTable.cjs.map +1 -1
  32. package/dist/components/SKeyValueTable/SKeyValueTable.js +72 -50
  33. package/dist/components/SKeyValueTable/SKeyValueTable.js.map +1 -1
  34. package/dist/components/SNumberInput/SNumberInput.cjs +61 -49
  35. package/dist/components/SNumberInput/SNumberInput.cjs.map +1 -1
  36. package/dist/components/SNumberInput/SNumberInput.js +61 -49
  37. package/dist/components/SNumberInput/SNumberInput.js.map +1 -1
  38. package/dist/components/SPage/SPage.cjs +19 -2
  39. package/dist/components/SPage/SPage.cjs.map +1 -1
  40. package/dist/components/SPage/SPage.d.ts +7 -1
  41. package/dist/components/SPage/SPage.js +19 -2
  42. package/dist/components/SPage/SPage.js.map +1 -1
  43. package/dist/components/SPage/index.d.ts +1 -0
  44. package/dist/components/SPage/page.config.d.ts +8 -0
  45. package/dist/components/SPopup/SPopup.cjs.map +1 -1
  46. package/dist/components/SPopup/SPopup.js.map +1 -1
  47. package/dist/components/SPortal/SPortal.cjs +3 -0
  48. package/dist/components/SPortal/SPortal.cjs.map +1 -1
  49. package/dist/components/SPortal/SPortal.d.ts +3 -1
  50. package/dist/components/SPortal/SPortal.js +3 -0
  51. package/dist/components/SPortal/SPortal.js.map +1 -1
  52. package/dist/components/SScrollArea/SScrollArea.cjs.map +1 -1
  53. package/dist/components/SScrollArea/SScrollArea.js.map +1 -1
  54. package/dist/components/SSelect/SSelect.cjs +72 -50
  55. package/dist/components/SSelect/SSelect.cjs.map +1 -1
  56. package/dist/components/SSelect/SSelect.js +72 -50
  57. package/dist/components/SSelect/SSelect.js.map +1 -1
  58. package/dist/components/STable/STable.cjs +78 -56
  59. package/dist/components/STable/STable.cjs.map +1 -1
  60. package/dist/components/STable/STable.d.ts +2 -0
  61. package/dist/components/STable/STable.js +78 -56
  62. package/dist/components/STable/STable.js.map +1 -1
  63. package/dist/components/STextarea/STextarea.cjs +61 -49
  64. package/dist/components/STextarea/STextarea.cjs.map +1 -1
  65. package/dist/components/STextarea/STextarea.js +61 -49
  66. package/dist/components/STextarea/STextarea.js.map +1 -1
  67. package/dist/components/STimePicker/STimePicker.cjs +61 -49
  68. package/dist/components/STimePicker/STimePicker.cjs.map +1 -1
  69. package/dist/components/STimePicker/STimePicker.js +61 -49
  70. package/dist/components/STimePicker/STimePicker.js.map +1 -1
  71. package/dist/components/STimeRangePicker/STimeRangePicker.cjs +61 -49
  72. package/dist/components/STimeRangePicker/STimeRangePicker.cjs.map +1 -1
  73. package/dist/components/STimeRangePicker/STimeRangePicker.js +61 -49
  74. package/dist/components/STimeRangePicker/STimeRangePicker.js.map +1 -1
  75. package/dist/index.cjs +95 -58
  76. package/dist/index.cjs.map +1 -1
  77. package/dist/index.js +95 -59
  78. package/dist/index.js.map +1 -1
  79. package/dist/lib/scrollbar.cjs +2 -0
  80. package/dist/lib/scrollbar.cjs.map +1 -1
  81. package/dist/lib/scrollbar.d.ts +13 -1
  82. package/dist/lib/scrollbar.js +2 -1
  83. package/dist/lib/scrollbar.js.map +1 -1
  84. package/dist/styles.css +53 -3
  85. package/package.json +1 -1
package/dist/index.cjs CHANGED
@@ -2941,6 +2941,7 @@ var SDivider = react.forwardRef(function SDivider2({ vertical = false, className
2941
2941
  var FIREFOX_SCROLLBAR_CLASS = "supports-[not_selector(::-webkit-scrollbar)]:[scrollbar-width:thin] supports-[not_selector(::-webkit-scrollbar)]:[scrollbar-color:var(--color-grey-45)_transparent]";
2942
2942
  var SCROLLBAR_CLASS = `${FIREFOX_SCROLLBAR_CLASS} [&::-webkit-scrollbar]:h-[12px] [&::-webkit-scrollbar]:w-[12px] [&::-webkit-scrollbar]:bg-transparent [&::-webkit-scrollbar-track]:bg-transparent [&::-webkit-scrollbar-thumb]:rounded-full [&::-webkit-scrollbar-thumb]:border-2 [&::-webkit-scrollbar-thumb]:border-solid [&::-webkit-scrollbar-thumb]:border-transparent [&::-webkit-scrollbar-thumb]:bg-[var(--color-grey-45)] [&::-webkit-scrollbar-thumb]:bg-clip-padding`;
2943
2943
  var SCROLLBAR_TRACK_BG_CLASS = "supports-[not_selector(::-webkit-scrollbar)]:[scrollbar-color:var(--color-grey-45)_var(--color-grey-10)] [&::-webkit-scrollbar]:bg-[var(--color-grey-10)] [&::-webkit-scrollbar-track]:bg-[var(--color-grey-10)]";
2944
+ var SCROLLBAR_TRACK_BG_WHITE_CLASS = "supports-[not_selector(::-webkit-scrollbar)]:[scrollbar-color:var(--color-grey-45)_var(--color-white)] [&::-webkit-scrollbar]:bg-[var(--color-white)] [&::-webkit-scrollbar-track]:bg-[var(--color-white)]";
2944
2945
  var SCROLLBAR_TRACK_BORDER_CLASS = "[&::-webkit-scrollbar-track:vertical]:[border-left:1px_solid_var(--sys-color-border-default)] [&::-webkit-scrollbar-track:horizontal]:[border-top:1px_solid_var(--sys-color-border-default)] [&::-webkit-scrollbar-thumb:vertical]:[border-left-width:3px] [&::-webkit-scrollbar-thumb:horizontal]:[border-top-width:3px]";
2945
2946
  var AXIS_CLASS = {
2946
2947
  vertical: "overflow-x-hidden overflow-y-auto",
@@ -4426,6 +4427,7 @@ function SPortal({
4426
4427
  viewportPadding = 0,
4427
4428
  onOpenAutoFocus,
4428
4429
  onCloseAutoFocus,
4430
+ onPointerDownOutside,
4429
4431
  children,
4430
4432
  className,
4431
4433
  style,
@@ -4454,7 +4456,9 @@ function SPortal({
4454
4456
  onPointerDownOutside: (e) => {
4455
4457
  if (persistent || anchorRef.current?.contains(e.target)) {
4456
4458
  e.preventDefault();
4459
+ return;
4457
4460
  }
4461
+ onPointerDownOutside?.(e);
4458
4462
  },
4459
4463
  onFocusOutside: (e) => {
4460
4464
  if (persistent || anchorRef.current?.contains(e.target)) {
@@ -5589,14 +5593,24 @@ var SGnb = react.forwardRef(function SGnb2({
5589
5593
  }
5590
5594
  );
5591
5595
  });
5592
- var SPage = react.forwardRef(function SPage2({ className, style, children, ...rest }, ref) {
5596
+ var BACKGROUND_CLASS = {
5597
+ frame: `bg-[var(--sys-color-bg-frame)] ${SCROLLBAR_TRACK_BORDER_CLASS} ${SCROLLBAR_TRACK_BG_CLASS}`,
5598
+ neutral: `bg-[var(--sys-color-bg-neutralLight)] ${SCROLLBAR_TRACK_BORDER_CLASS} ${SCROLLBAR_TRACK_BG_WHITE_CLASS}`,
5599
+ screen: `bg-[var(--sys-color-bg-screen)] ${SCROLLBAR_TRACK_BORDER_CLASS} ${SCROLLBAR_TRACK_BG_CLASS}`
5600
+ };
5601
+ var SPage = react.forwardRef(function SPage2({ background = "frame", className, style, children, ...rest }, ref) {
5593
5602
  const layout = react.useContext(SLayoutContext);
5594
5603
  const gridStyle = layout?.header === "full" ? { gridColumn: 2, gridRow: 2 } : void 0;
5595
5604
  return /* @__PURE__ */ jsxRuntime.jsx(
5596
5605
  "main",
5597
5606
  {
5598
5607
  ref,
5599
- className: cn("box-border min-h-0 min-w-0 flex-1 overflow-auto p-20", className),
5608
+ className: cn(
5609
+ "box-border min-h-0 min-w-0 flex-1 overflow-auto p-20",
5610
+ SCROLLBAR_CLASS,
5611
+ BACKGROUND_CLASS[background],
5612
+ className
5613
+ ),
5600
5614
  style: { ...gridStyle, ...style },
5601
5615
  ...rest,
5602
5616
  children
@@ -5604,6 +5618,9 @@ var SPage = react.forwardRef(function SPage2({ className, style, children, ...re
5604
5618
  );
5605
5619
  });
5606
5620
 
5621
+ // src/components/SPage/page.config.ts
5622
+ var PAGE_BACKGROUNDS = ["frame", "neutral", "screen"];
5623
+
5607
5624
  // src/components/STabs/tabs.config.ts
5608
5625
  var TAB_MAIN_SIZE = {
5609
5626
  md: { height: 36, paddingX: 24 },
@@ -6156,6 +6173,7 @@ var SField = react.forwardRef(function SField2({
6156
6173
  const resolvedSuccess = status === "pass";
6157
6174
  const showError = resolvedError && errorMessage !== "";
6158
6175
  const interactive = !disabled && !readOnly;
6176
+ const hug = cssLen(width) !== void 0;
6159
6177
  const borderColor = borderless ? "transparent" : disabled ? "var(--color-grey-45)" : interactive && focused ? "var(--sys-color-field-border-focus)" : resolvedSuccess ? "var(--sys-color-field-border-success)" : resolvedError ? "var(--sys-color-field-border-danger)" : "var(--sys-color-field-border-default)";
6160
6178
  const bgColor = borderless ? "transparent" : disabled ? "var(--color-grey-30)" : readOnly ? "var(--sys-color-field-bg-readOnly)" : "var(--sys-color-field-bg-default)";
6161
6179
  const textColor = disabled ? "var(--color-grey-65)" : readOnly ? "var(--sys-color-field-text-readOnly)" : "var(--sys-color-field-text-default)";
@@ -6164,7 +6182,13 @@ var SField = react.forwardRef(function SField2({
6164
6182
  {
6165
6183
  ref: rootRef,
6166
6184
  "data-name": name || void 0,
6167
- className: cn("inline-flex h-fit w-full flex-col", className),
6185
+ className: cn(
6186
+ "h-fit flex-col",
6187
+ // hug 시 inline-flex 를 유지하면 기존에 세로로 쌓여 있던 필드들이 한 줄에 붙어버리므로
6188
+ // 블록 레벨(flex)로 두어 쌓임은 그대로 유지한다. 나란히 놓으려면 부모를 flex 로.
6189
+ hug ? "flex w-fit max-w-full" : "inline-flex w-full",
6190
+ className
6191
+ ),
6168
6192
  style,
6169
6193
  onMouseEnter,
6170
6194
  onMouseLeave,
@@ -6202,55 +6226,60 @@ var SField = react.forwardRef(function SField2({
6202
6226
  ]
6203
6227
  }
6204
6228
  ),
6205
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 flex-1 flex-col", children: [
6206
- /* @__PURE__ */ jsxRuntime.jsxs(
6207
- "div",
6208
- {
6209
- className: cn(
6210
- "relative box-border flex min-w-0 items-stretch overflow-hidden border border-solid border-(--field-bc)",
6211
- 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]",
6212
- disabled && "cursor-not-allowed"
6229
+ /* @__PURE__ */ jsxRuntime.jsxs(
6230
+ "div",
6231
+ {
6232
+ className: cn("flex min-w-0 flex-col", !hug && "flex-1"),
6233
+ style: { width: cssLen(width), minWidth: cssLen(minWidth) },
6234
+ children: [
6235
+ /* @__PURE__ */ jsxRuntime.jsxs(
6236
+ "div",
6237
+ {
6238
+ className: cn(
6239
+ "relative box-border flex min-w-0 items-stretch overflow-hidden border border-solid border-(--field-bc)",
6240
+ 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]",
6241
+ disabled && "cursor-not-allowed"
6242
+ ),
6243
+ style: {
6244
+ // @ts-expect-error CSS 변수
6245
+ "--field-bc": borderColor,
6246
+ // focused/hovered prop이 명시된 경우 강조를 즉시 반영
6247
+ ...interactive && !borderless && focused ? { boxShadow: "0px 0px 4px 0px #0071ff66" } : {},
6248
+ ...multiline ? { minHeight: s.height } : { height: s.height },
6249
+ "borderRadius": s.radius,
6250
+ "background": bgColor,
6251
+ "color": textColor
6252
+ },
6253
+ "data-focused": focused || void 0,
6254
+ "data-hovered": hovered || void 0,
6255
+ children: [
6256
+ effectiveAddonLabel !== "" && /* @__PURE__ */ jsxRuntime.jsxs(
6257
+ "div",
6258
+ {
6259
+ 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-20",
6260
+ style: {
6261
+ // 원본 sd-field: labelWidth가 addon 폭(--sd-field-addon-width)에도 적용됨
6262
+ width: cssLen(labelWidth),
6263
+ justifyContent: ALIGN[addonAlign],
6264
+ background: "var(--cmp-field-addonLabel-bg)",
6265
+ borderRightColor: disabled ? "var(--cmp-field-addonLabel-border-disabled)" : "var(--cmp-field-addonLabel-border-default)",
6266
+ borderTopLeftRadius: s.radius - 1,
6267
+ borderBottomLeftRadius: s.radius - 1
6268
+ },
6269
+ children: [
6270
+ icon && !label && /* @__PURE__ */ jsxRuntime.jsx(SIcon, { name: icon, size: s.icon, color: iconColor }),
6271
+ effectiveAddonLabel
6272
+ ]
6273
+ }
6274
+ ),
6275
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex min-w-0 flex-1", children })
6276
+ ]
6277
+ }
6213
6278
  ),
6214
- style: {
6215
- // @ts-expect-error CSS 변수
6216
- "--field-bc": borderColor,
6217
- // focused/hovered prop이 명시된 경우 강조를 즉시 반영
6218
- ...interactive && !borderless && focused ? { boxShadow: "0px 0px 4px 0px #0071ff66" } : {},
6219
- ...multiline ? { minHeight: s.height } : { height: s.height },
6220
- "minWidth": cssLen(minWidth),
6221
- "width": cssLen(width),
6222
- "borderRadius": s.radius,
6223
- "background": bgColor,
6224
- "color": textColor
6225
- },
6226
- "data-focused": focused || void 0,
6227
- "data-hovered": hovered || void 0,
6228
- children: [
6229
- effectiveAddonLabel !== "" && /* @__PURE__ */ jsxRuntime.jsxs(
6230
- "div",
6231
- {
6232
- 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-20",
6233
- style: {
6234
- // 원본 sd-field: labelWidth가 addon 폭(--sd-field-addon-width)에도 적용됨
6235
- width: cssLen(labelWidth),
6236
- justifyContent: ALIGN[addonAlign],
6237
- background: "var(--cmp-field-addonLabel-bg)",
6238
- borderRightColor: disabled ? "var(--cmp-field-addonLabel-border-disabled)" : "var(--cmp-field-addonLabel-border-default)",
6239
- borderTopLeftRadius: s.radius - 1,
6240
- borderBottomLeftRadius: s.radius - 1
6241
- },
6242
- children: [
6243
- icon && !label && /* @__PURE__ */ jsxRuntime.jsx(SIcon, { name: icon, size: s.icon, color: iconColor }),
6244
- effectiveAddonLabel
6245
- ]
6246
- }
6247
- ),
6248
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex min-w-0 flex-1", children })
6249
- ]
6250
- }
6251
- ),
6252
- showError ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-(--cmp-field-contents-gap) text-12 font-normal leading-20 text-(--cmp-field-errorMessage-color)", children: errorMessage }) : hint !== "" ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-(--cmp-field-contents-gap) text-12 font-normal leading-20 text-(--cmp-field-hint-color)", children: hint }) : null
6253
- ] })
6279
+ showError ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-(--cmp-field-contents-gap) text-12 font-normal leading-20 text-(--cmp-field-errorMessage-color)", children: errorMessage }) : hint !== "" ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-(--cmp-field-contents-gap) text-12 font-normal leading-20 text-(--cmp-field-hint-color)", children: hint }) : null
6280
+ ]
6281
+ }
6282
+ )
6254
6283
  ] })
6255
6284
  }
6256
6285
  );
@@ -6333,6 +6362,7 @@ var SSelect = react.forwardRef(function SSelect2({
6333
6362
  const triggerRef = react.useRef(null);
6334
6363
  const searchInputRef = react.useRef(null);
6335
6364
  const listRef = react.useRef(null);
6365
+ const dismissedByPointerRef = react.useRef(false);
6336
6366
  const flat = react.useMemo(() => flattenOptions(options), [options]);
6337
6367
  const selectable = react.useMemo(() => selectableOptions(flat), [flat]);
6338
6368
  const hasLeaf = react.useMemo(() => flat.some((o) => !o.isGroup), [flat]);
@@ -6362,7 +6392,9 @@ var SSelect = react.forwardRef(function SSelect2({
6362
6392
  const commitOpen = (next) => {
6363
6393
  setOpen(next);
6364
6394
  onOpenChange?.(next);
6365
- if (!next) {
6395
+ if (next) {
6396
+ dismissedByPointerRef.current = false;
6397
+ } else {
6366
6398
  setPendingOpen(false);
6367
6399
  setSearch("");
6368
6400
  if (rules && rules.length > 0) {
@@ -6586,8 +6618,12 @@ var SSelect = react.forwardRef(function SSelect2({
6586
6618
  event.preventDefault();
6587
6619
  requestAnimationFrame(() => searchInputRef.current?.focus());
6588
6620
  },
6621
+ onPointerDownOutside: () => {
6622
+ dismissedByPointerRef.current = true;
6623
+ },
6589
6624
  onCloseAutoFocus: (event) => {
6590
6625
  event.preventDefault();
6626
+ if (dismissedByPointerRef.current) return;
6591
6627
  triggerRef.current?.focus();
6592
6628
  },
6593
6629
  className: "rounded-[var(--cmp-listBox-radius)] bg-[var(--cmp-listBox-bg)] shadow-[2px_2px_12px_2px_rgba(0,0,0,0.1)]",
@@ -7093,7 +7129,7 @@ var STable = react.forwardRef(function STable2({
7093
7129
  position: "sticky",
7094
7130
  left: isLeft ? "var(--sticky-left-offset)" : void 0,
7095
7131
  right: isRight ? "var(--sticky-right-offset)" : void 0,
7096
- zIndex: 3
7132
+ zIndex: 6
7097
7133
  };
7098
7134
  };
7099
7135
  const stickyShadowClass = (i) => {
@@ -7150,7 +7186,7 @@ var STable = react.forwardRef(function STable2({
7150
7186
  {
7151
7187
  className: cn(
7152
7188
  // 원본 .th--selected: 48px 고정폭, 항상 left sticky, 체크박스 중앙정렬
7153
- "sticky left-0 z-[4] border-b border-solid border-[color:var(--cmp-table-border-color)] bg-[var(--cmp-table-header-bg)] text-center align-middle",
7189
+ "sticky left-0 z-[7] border-b border-solid border-[color:var(--cmp-table-border-color)] bg-[var(--cmp-table-header-bg)] text-center align-middle",
7154
7190
  stickyLeft === 0 && scrolledLeft && "shadow-[5px_0_8px_0_rgba(34,34,34,0.1)]"
7155
7191
  ),
7156
7192
  style: {
@@ -7175,13 +7211,13 @@ var STable = react.forwardRef(function STable2({
7175
7211
  {
7176
7212
  className: cn(
7177
7213
  "relative border-b border-solid border-[color:var(--cmp-table-border-color)] bg-[var(--cmp-table-header-bg)] px-[16px] text-[12px] font-medium leading-[20px] text-[color:var(--sys-color-fg-primary)]",
7178
- stickyInfo(i).isSticky && "z-[4]",
7214
+ stickyInfo(i).isSticky && "z-[6]",
7179
7215
  stickyShadowClass(i),
7180
7216
  col.thClass
7181
7217
  ),
7182
7218
  style: { textAlign: col.align ?? "left", ...cellStyle(i), ...col.thStyle },
7183
7219
  children: [
7184
- /* @__PURE__ */ jsxRuntime.jsxs(
7220
+ /* @__PURE__ */ jsxRuntime.jsx(
7185
7221
  "span",
7186
7222
  {
7187
7223
  className: cn(
@@ -7190,10 +7226,10 @@ var STable = react.forwardRef(function STable2({
7190
7226
  col.align === "center" && "justify-center",
7191
7227
  col.align === "right" && "justify-end"
7192
7228
  ),
7193
- children: [
7229
+ children: col.renderHeader ? col.renderHeader(col, i) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
7194
7230
  col.icon && /* @__PURE__ */ jsxRuntime.jsx(SIcon, { name: col.icon, size: 16, color: col.iconColor }),
7195
7231
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate", children: col.label })
7196
- ]
7232
+ ] })
7197
7233
  }
7198
7234
  ),
7199
7235
  resizable && !col.autoWidth && i < visibleCols.length - 1 && // 원본 th__resizer: 셀 우측 경계 안쪽 4px 그립(좌우 1px #CCCCCC 라인, 세로 16px).
@@ -11349,6 +11385,7 @@ exports.GNB_MENU_WIDTH = GNB_MENU_WIDTH;
11349
11385
  exports.GNB_RAIL = GNB_RAIL;
11350
11386
  exports.GNB_RAIL_WIDTH = GNB_RAIL_WIDTH;
11351
11387
  exports.ICONS = ICONS;
11388
+ exports.PAGE_BACKGROUNDS = PAGE_BACKGROUNDS;
11352
11389
  exports.SActionModal = SActionModal;
11353
11390
  exports.SBadge = SBadge;
11354
11391
  exports.SBarcodeInput = SBarcodeInput;