sellmate-design-system-react 0.7.0 → 0.8.0

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 (80) 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 +61 -49
  6. package/dist/components/SChipInput/SChipInput.cjs.map +1 -1
  7. package/dist/components/SChipInput/SChipInput.js +61 -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 +61 -49
  31. package/dist/components/SKeyValueTable/SKeyValueTable.cjs.map +1 -1
  32. package/dist/components/SKeyValueTable/SKeyValueTable.js +61 -49
  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/SScrollArea/SScrollArea.cjs.map +1 -1
  48. package/dist/components/SScrollArea/SScrollArea.js.map +1 -1
  49. package/dist/components/SSelect/SSelect.cjs +61 -49
  50. package/dist/components/SSelect/SSelect.cjs.map +1 -1
  51. package/dist/components/SSelect/SSelect.js +61 -49
  52. package/dist/components/SSelect/SSelect.js.map +1 -1
  53. package/dist/components/STable/STable.cjs +67 -55
  54. package/dist/components/STable/STable.cjs.map +1 -1
  55. package/dist/components/STable/STable.d.ts +2 -0
  56. package/dist/components/STable/STable.js +67 -55
  57. package/dist/components/STable/STable.js.map +1 -1
  58. package/dist/components/STextarea/STextarea.cjs +61 -49
  59. package/dist/components/STextarea/STextarea.cjs.map +1 -1
  60. package/dist/components/STextarea/STextarea.js +61 -49
  61. package/dist/components/STextarea/STextarea.js.map +1 -1
  62. package/dist/components/STimePicker/STimePicker.cjs +61 -49
  63. package/dist/components/STimePicker/STimePicker.cjs.map +1 -1
  64. package/dist/components/STimePicker/STimePicker.js +61 -49
  65. package/dist/components/STimePicker/STimePicker.js.map +1 -1
  66. package/dist/components/STimeRangePicker/STimeRangePicker.cjs +61 -49
  67. package/dist/components/STimeRangePicker/STimeRangePicker.cjs.map +1 -1
  68. package/dist/components/STimeRangePicker/STimeRangePicker.js +61 -49
  69. package/dist/components/STimeRangePicker/STimeRangePicker.js.map +1 -1
  70. package/dist/index.cjs +84 -57
  71. package/dist/index.cjs.map +1 -1
  72. package/dist/index.js +84 -58
  73. package/dist/index.js.map +1 -1
  74. package/dist/lib/scrollbar.cjs +2 -0
  75. package/dist/lib/scrollbar.cjs.map +1 -1
  76. package/dist/lib/scrollbar.d.ts +13 -1
  77. package/dist/lib/scrollbar.js +2 -1
  78. package/dist/lib/scrollbar.js.map +1 -1
  79. package/dist/styles.css +53 -3
  80. 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",
@@ -5589,14 +5590,24 @@ var SGnb = react.forwardRef(function SGnb2({
5589
5590
  }
5590
5591
  );
5591
5592
  });
5592
- var SPage = react.forwardRef(function SPage2({ className, style, children, ...rest }, ref) {
5593
+ var BACKGROUND_CLASS = {
5594
+ frame: `bg-[var(--sys-color-bg-frame)] ${SCROLLBAR_TRACK_BORDER_CLASS} ${SCROLLBAR_TRACK_BG_CLASS}`,
5595
+ neutral: `bg-[var(--sys-color-bg-neutralLight)] ${SCROLLBAR_TRACK_BORDER_CLASS} ${SCROLLBAR_TRACK_BG_WHITE_CLASS}`,
5596
+ screen: `bg-[var(--sys-color-bg-screen)] ${SCROLLBAR_TRACK_BORDER_CLASS} ${SCROLLBAR_TRACK_BG_CLASS}`
5597
+ };
5598
+ var SPage = react.forwardRef(function SPage2({ background = "frame", className, style, children, ...rest }, ref) {
5593
5599
  const layout = react.useContext(SLayoutContext);
5594
5600
  const gridStyle = layout?.header === "full" ? { gridColumn: 2, gridRow: 2 } : void 0;
5595
5601
  return /* @__PURE__ */ jsxRuntime.jsx(
5596
5602
  "main",
5597
5603
  {
5598
5604
  ref,
5599
- className: cn("box-border min-h-0 min-w-0 flex-1 overflow-auto p-20", className),
5605
+ className: cn(
5606
+ "box-border min-h-0 min-w-0 flex-1 overflow-auto p-20",
5607
+ SCROLLBAR_CLASS,
5608
+ BACKGROUND_CLASS[background],
5609
+ className
5610
+ ),
5600
5611
  style: { ...gridStyle, ...style },
5601
5612
  ...rest,
5602
5613
  children
@@ -5604,6 +5615,9 @@ var SPage = react.forwardRef(function SPage2({ className, style, children, ...re
5604
5615
  );
5605
5616
  });
5606
5617
 
5618
+ // src/components/SPage/page.config.ts
5619
+ var PAGE_BACKGROUNDS = ["frame", "neutral", "screen"];
5620
+
5607
5621
  // src/components/STabs/tabs.config.ts
5608
5622
  var TAB_MAIN_SIZE = {
5609
5623
  md: { height: 36, paddingX: 24 },
@@ -6156,6 +6170,7 @@ var SField = react.forwardRef(function SField2({
6156
6170
  const resolvedSuccess = status === "pass";
6157
6171
  const showError = resolvedError && errorMessage !== "";
6158
6172
  const interactive = !disabled && !readOnly;
6173
+ const hug = cssLen(width) !== void 0;
6159
6174
  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
6175
  const bgColor = borderless ? "transparent" : disabled ? "var(--color-grey-30)" : readOnly ? "var(--sys-color-field-bg-readOnly)" : "var(--sys-color-field-bg-default)";
6161
6176
  const textColor = disabled ? "var(--color-grey-65)" : readOnly ? "var(--sys-color-field-text-readOnly)" : "var(--sys-color-field-text-default)";
@@ -6164,7 +6179,13 @@ var SField = react.forwardRef(function SField2({
6164
6179
  {
6165
6180
  ref: rootRef,
6166
6181
  "data-name": name || void 0,
6167
- className: cn("inline-flex h-fit w-full flex-col", className),
6182
+ className: cn(
6183
+ "h-fit flex-col",
6184
+ // hug 시 inline-flex 를 유지하면 기존에 세로로 쌓여 있던 필드들이 한 줄에 붙어버리므로
6185
+ // 블록 레벨(flex)로 두어 쌓임은 그대로 유지한다. 나란히 놓으려면 부모를 flex 로.
6186
+ hug ? "flex w-fit max-w-full" : "inline-flex w-full",
6187
+ className
6188
+ ),
6168
6189
  style,
6169
6190
  onMouseEnter,
6170
6191
  onMouseLeave,
@@ -6202,55 +6223,60 @@ var SField = react.forwardRef(function SField2({
6202
6223
  ]
6203
6224
  }
6204
6225
  ),
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"
6226
+ /* @__PURE__ */ jsxRuntime.jsxs(
6227
+ "div",
6228
+ {
6229
+ className: cn("flex min-w-0 flex-col", !hug && "flex-1"),
6230
+ style: { width: cssLen(width), minWidth: cssLen(minWidth) },
6231
+ children: [
6232
+ /* @__PURE__ */ jsxRuntime.jsxs(
6233
+ "div",
6234
+ {
6235
+ className: cn(
6236
+ "relative box-border flex min-w-0 items-stretch overflow-hidden border border-solid border-(--field-bc)",
6237
+ 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]",
6238
+ disabled && "cursor-not-allowed"
6239
+ ),
6240
+ style: {
6241
+ // @ts-expect-error CSS 변수
6242
+ "--field-bc": borderColor,
6243
+ // focused/hovered prop이 명시된 경우 강조를 즉시 반영
6244
+ ...interactive && !borderless && focused ? { boxShadow: "0px 0px 4px 0px #0071ff66" } : {},
6245
+ ...multiline ? { minHeight: s.height } : { height: s.height },
6246
+ "borderRadius": s.radius,
6247
+ "background": bgColor,
6248
+ "color": textColor
6249
+ },
6250
+ "data-focused": focused || void 0,
6251
+ "data-hovered": hovered || void 0,
6252
+ children: [
6253
+ effectiveAddonLabel !== "" && /* @__PURE__ */ jsxRuntime.jsxs(
6254
+ "div",
6255
+ {
6256
+ 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",
6257
+ style: {
6258
+ // 원본 sd-field: labelWidth가 addon 폭(--sd-field-addon-width)에도 적용됨
6259
+ width: cssLen(labelWidth),
6260
+ justifyContent: ALIGN[addonAlign],
6261
+ background: "var(--cmp-field-addonLabel-bg)",
6262
+ borderRightColor: disabled ? "var(--cmp-field-addonLabel-border-disabled)" : "var(--cmp-field-addonLabel-border-default)",
6263
+ borderTopLeftRadius: s.radius - 1,
6264
+ borderBottomLeftRadius: s.radius - 1
6265
+ },
6266
+ children: [
6267
+ icon && !label && /* @__PURE__ */ jsxRuntime.jsx(SIcon, { name: icon, size: s.icon, color: iconColor }),
6268
+ effectiveAddonLabel
6269
+ ]
6270
+ }
6271
+ ),
6272
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex min-w-0 flex-1", children })
6273
+ ]
6274
+ }
6213
6275
  ),
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
- ] })
6276
+ 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
6277
+ ]
6278
+ }
6279
+ )
6254
6280
  ] })
6255
6281
  }
6256
6282
  );
@@ -7093,7 +7119,7 @@ var STable = react.forwardRef(function STable2({
7093
7119
  position: "sticky",
7094
7120
  left: isLeft ? "var(--sticky-left-offset)" : void 0,
7095
7121
  right: isRight ? "var(--sticky-right-offset)" : void 0,
7096
- zIndex: 3
7122
+ zIndex: 6
7097
7123
  };
7098
7124
  };
7099
7125
  const stickyShadowClass = (i) => {
@@ -7150,7 +7176,7 @@ var STable = react.forwardRef(function STable2({
7150
7176
  {
7151
7177
  className: cn(
7152
7178
  // 원본 .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",
7179
+ "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
7180
  stickyLeft === 0 && scrolledLeft && "shadow-[5px_0_8px_0_rgba(34,34,34,0.1)]"
7155
7181
  ),
7156
7182
  style: {
@@ -7175,13 +7201,13 @@ var STable = react.forwardRef(function STable2({
7175
7201
  {
7176
7202
  className: cn(
7177
7203
  "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]",
7204
+ stickyInfo(i).isSticky && "z-[6]",
7179
7205
  stickyShadowClass(i),
7180
7206
  col.thClass
7181
7207
  ),
7182
7208
  style: { textAlign: col.align ?? "left", ...cellStyle(i), ...col.thStyle },
7183
7209
  children: [
7184
- /* @__PURE__ */ jsxRuntime.jsxs(
7210
+ /* @__PURE__ */ jsxRuntime.jsx(
7185
7211
  "span",
7186
7212
  {
7187
7213
  className: cn(
@@ -7190,10 +7216,10 @@ var STable = react.forwardRef(function STable2({
7190
7216
  col.align === "center" && "justify-center",
7191
7217
  col.align === "right" && "justify-end"
7192
7218
  ),
7193
- children: [
7219
+ children: col.renderHeader ? col.renderHeader(col, i) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
7194
7220
  col.icon && /* @__PURE__ */ jsxRuntime.jsx(SIcon, { name: col.icon, size: 16, color: col.iconColor }),
7195
7221
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate", children: col.label })
7196
- ]
7222
+ ] })
7197
7223
  }
7198
7224
  ),
7199
7225
  resizable && !col.autoWidth && i < visibleCols.length - 1 && // 원본 th__resizer: 셀 우측 경계 안쪽 4px 그립(좌우 1px #CCCCCC 라인, 세로 16px).
@@ -11349,6 +11375,7 @@ exports.GNB_MENU_WIDTH = GNB_MENU_WIDTH;
11349
11375
  exports.GNB_RAIL = GNB_RAIL;
11350
11376
  exports.GNB_RAIL_WIDTH = GNB_RAIL_WIDTH;
11351
11377
  exports.ICONS = ICONS;
11378
+ exports.PAGE_BACKGROUNDS = PAGE_BACKGROUNDS;
11352
11379
  exports.SActionModal = SActionModal;
11353
11380
  exports.SBadge = SBadge;
11354
11381
  exports.SBarcodeInput = SBarcodeInput;