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
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/cn.ts","../../../src/lib/scrollbar.ts","../../../src/components/SScrollArea/SScrollArea.tsx"],"names":["extendTailwindMerge","clsx","forwardRef","SScrollArea","jsx"],"mappings":";;;;;;;AAQA,IAAM,UAAUA,iCAAA,CAAoB;AAAA,EAClC,MAAA,EAAQ;AAAA,IACN,WAAA,EAAa;AAAA,MACX,aAAa,CAAC,EAAE,IAAA,EAAM,CAAC,MAAM,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,MAAM,IAAA,EAAM,IAAA,EAAM,MAAM,IAAA,EAAM,IAAI,GAAG;AAAA;AAC5F;AAEJ,CAAC,CAAA;AAMM,SAAS,MAAM,MAAA,EAA8B;AAClD,EAAA,OAAO,OAAA,CAAQC,SAAA,CAAK,MAAM,CAAC,CAAA;AAC7B;;;ACVA,IAAM,uBAAA,GACJ,qKAAA;AAIK,IAAM,eAAA,GACX,GAAG,uBAAuB,CAAA,gaAAA,CAAA;AAMrB,IAAM,wBAAA,GACX,kNAAA;AAUK,IAAM,4BAAA,GACX,2TAAA;ACzBF,IAAM,UAAA,GAA8C;AAAA,EAClD,QAAA,EAAU,mCAAA;AAAA,EACV,UAAA,EAAY,mCAAA;AAAA,EACZ,IAAA,EAAM;AACR,CAAA;AAqBO,IAAM,WAAA,GAAcC,gBAAA,CAA6C,SAASC,YAAAA,CAC/E;AAAA,EACE,IAAA,GAAO,MAAA;AAAA,EACP,UAAA,GAAa,KAAA;AAAA,EACb,QAAA,GAAW,KAAA;AAAA,EACX,SAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EACA,GAAA,EACA;AACA,EAAA,MAAM,WAAA,GAA6B,EAAE,GAAG,KAAA,EAAM;AAC9C,EAAA,IAAI,SAAA,cAAuB,SAAA,GAAY,SAAA;AACvC,EAAA,IAAI,QAAA,cAAsB,QAAA,GAAW,QAAA;AAErC,EAAA,uBACEC,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,WAAW,IAAI,CAAA;AAAA,QACf,eAAA;AAAA,QACA,UAAA,IAAc,wBAAA;AAAA,QACd,QAAA,IAAY,4BAAA;AAAA,QACZ;AAAA,OACF;AAAA,MACA,KAAA,EAAO,WAAA;AAAA,MACN,GAAG,IAAA;AAAA,MAEH;AAAA;AAAA,GACH;AAEJ,CAAC","file":"SScrollArea.cjs","sourcesContent":["import { clsx, type ClassValue } from 'clsx';\nimport { extendTailwindMerge } from 'tailwind-merge';\n\n/**\n * theme.css ์˜ --text-* ๋Š” ๊ธฐ๋ณธ Tailwind ํฐํŠธ์‚ฌ์ด์ฆˆ ์Šค์ผ€์ผ(xs/sm/base...)์ด ์•„๋‹Œ\n * ์ˆซ์ž ์Šค์ผ€์ผ(10~32)์ด๋ผ, ํ™•์žฅ ์—†์ด๋Š” tailwind-merge ๊ฐ€ ์ด๋ฅผ ํ…์ŠคํŠธ ์ปฌ๋Ÿฌ ๊ทธ๋ฃน์œผ๋กœ\n * ์˜ค์ธํ•ด text-12 ๊ฐ™์€ ํด๋ž˜์Šค๋ฅผ text-(--color-var) ๋’ค์—์„œ ์ถฉ๋Œ ์ œ๊ฑฐํ•ด๋ฒ„๋ฆฐ๋‹ค.\n */\nconst twMerge = extendTailwindMerge({\n extend: {\n classGroups: {\n 'font-size': [{ text: ['10', '11', '12', '13', '14', '16', '18', '20', '24', '28', '32'] }],\n },\n },\n});\n\n/**\n * className ๋ณ‘ํ•ฉ ์œ ํ‹ธ.\n * clsx๋กœ ์กฐ๊ฑด๋ถ€ ํด๋ž˜์Šค๋ฅผ ํ•ฉ์น˜๊ณ , tailwind-merge๋กœ Tailwind ํด๋ž˜์Šค ์ถฉ๋Œ์„ ํ•ด์†Œํ•œ๋‹ค.\n */\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n","/**\n * ๊ณต์šฉ ์ปค์Šคํ…€ ์Šคํฌ๋กค๋ฐ” ํด๋ž˜์Šค.\n * Stencil์˜ styles/scrollbar.scss mixin๊ณผ ์ง์„ ์ด๋ฃจ๋Š” ๋‹จ์ผ ๊ธฐ์ค€์ด๋ฉฐ,\n * ์Šคํฌ๋กค ์˜์—ญ์„ ๊ฐ€์ง„ ์ปดํฌ๋„ŒํŠธ๋Š” DOM์„ ๊ฐ์‹ธ์ง€ ์•Š๊ณ  ์ด ํด๋ž˜์Šค๋ฅผ ์ง์ ‘ ๋ถ™์—ฌ ์“ด๋‹ค.\n *\n * SVG ์ŠคํŽ™: ํŠธ๋ž™ 12px / ์ธ 8px(grey-45, 2px ์ธ์…‹, radius 4).\n * ์ธ์…‹์€ ํˆฌ๋ช… ํ…Œ๋‘๋ฆฌ + padding-box ํด๋ฆฝ์œผ๋กœ ๋งŒ๋“ค์–ด, ํŠธ๋ž™์„ ์น ํ•˜๋“  ์•ˆ ์น ํ•˜๋“  ์ธ์ด 8px๋กœ ๋ณด์ธ๋‹ค.\n */\n\n// Chrome 121+/WebKit๋Š” scrollbar-widthยทscrollbar-color์˜ ๊ณ„์‚ฐ๊ฐ’์ด ์ดˆ๊ธฐ๊ฐ’(auto)์ด ์•„๋‹ˆ๋ฉด\n// ::-webkit-scrollbar-* ๋ฅผ ํ†ต์งธ๋กœ ๋ฌด์‹œํ•œ๋‹ค(CSSWG ๊ฒฐ์ •). ํ‘œ์ค€ ์†์„ฑ์„ ๋ฌด์กฐ๊ฑด ์ผœ๋ฉด ์•„๋ž˜ ํŠธ๋ž™/์ธ์ด\n// ์ „๋ถ€ ์ฃฝ์œผ๋ฏ€๋กœ, webkit ์œ ์‚ฌ์š”์†Œ๊ฐ€ ์—†๋Š” ๋ธŒ๋ผ์šฐ์ €(Firefox)์—์„œ๋งŒ ์ ์šฉํ•œ๋‹ค.\nconst FIREFOX_SCROLLBAR_CLASS =\n 'supports-[not_selector(::-webkit-scrollbar)]:[scrollbar-width:thin] ' +\n 'supports-[not_selector(::-webkit-scrollbar)]:[scrollbar-color:var(--color-grey-45)_transparent]';\n\n/** ์Šคํฌ๋กค ์˜์—ญ ๊ธฐ๋ณธ ์Šคํฌ๋กค๋ฐ”. overflow ํด๋ž˜์Šค๋Š” ๊ฐ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋”ฐ๋กœ ์ง€์ •ํ•œ๋‹ค. */\nexport const SCROLLBAR_CLASS =\n `${FIREFOX_SCROLLBAR_CLASS} ` +\n '[&::-webkit-scrollbar]:h-[12px] [&::-webkit-scrollbar]:w-[12px] [&::-webkit-scrollbar]:bg-transparent ' +\n '[&::-webkit-scrollbar-track]:bg-transparent ' +\n '[&::-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';\n\n/** background: ํŠธ๋ž™ ๋ฐฐ๊ฒฝ์„ ์ฑ„์šด๋‹ค. ์ฝ˜ํ…์ธ  ์˜์—ญ ๋ฐฐ๊ฒฝ์€ ๋ฐ”๋€Œ์ง€ ์•Š๋Š”๋‹ค. */\nexport const SCROLLBAR_TRACK_BG_CLASS =\n 'supports-[not_selector(::-webkit-scrollbar)]:[scrollbar-color:var(--color-grey-45)_var(--color-grey-10)] ' +\n '[&::-webkit-scrollbar]:bg-[var(--color-grey-10)] [&::-webkit-scrollbar-track]:bg-[var(--color-grey-10)]';\n\n/**\n * bordered: ์Šคํฌ๋กค๋ฐ”์™€ ์ฝ˜ํ…์ธ  ์‚ฌ์ด 1px ๊ตฌ๋ถ„์„ .\n * ๋‹จ์ถ• ์†์„ฑ์œผ๋กœ ํ•œ ๋ณ€๋งŒ ์ง€์ •ํ•œ๋‹ค โ€” border-solid๋Š” ๋„ค ๋ณ€์— ๊ฑธ๋ ค ํŠธ๋ž™์— ๊ธฐ๋ณธ 3px ํ…Œ๋‘๋ฆฌ๋ฅผ ๋งŒ๋“ ๋‹ค.\n * ์ธ๊ณผ ํŠธ๋ž™์€ ํ˜•์ œ ๋ฐ•์Šค๋ผ ํŠธ๋ž™์˜ ๊ตฌ๋ถ„์„ ์ด ์ธ์„ ๋ฐ€์–ด์ฃผ์ง€ ์•Š๋Š”๋‹ค. ๊ตฌ๋ถ„์„ ์ด ์ธ์…‹ 2px ์ค‘ 1px์„\n * ์ฐจ์ง€ํ•ด ์ขŒ์šฐ ์—ฌ๋ฐฑ์ด 1px/2px๋กœ ์–ด๊ธ‹๋‚˜๋ฏ€๋กœ, ์ธ ์ธ์…‹์„ ๊ฐ™์€ ๋งŒํผ ํ‚ค์›Œ 2px/2px๋กœ ๋˜๋Œ๋ฆฐ๋‹ค(์ธ 8px โ†’ 7px).\n * Firefox๋Š” thin ์Šคํฌ๋กค๋ฐ”๋ฅผ ์ด ์ˆ˜์ค€์œผ๋กœ ์ปค์Šคํ„ฐ๋งˆ์ด์ฆˆํ•  ์ˆ˜ ์—†์–ด ์ ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค.\n */\nexport const SCROLLBAR_TRACK_BORDER_CLASS =\n '[&::-webkit-scrollbar-track:vertical]:[border-left:1px_solid_var(--sys-color-border-default)] ' +\n '[&::-webkit-scrollbar-track:horizontal]:[border-top:1px_solid_var(--sys-color-border-default)] ' +\n '[&::-webkit-scrollbar-thumb:vertical]:[border-left-width:3px] ' +\n '[&::-webkit-scrollbar-thumb:horizontal]:[border-top-width:3px]';\n","'use client';\n\nimport { forwardRef, type CSSProperties, type HTMLAttributes } from 'react';\nimport { cn } from '../../lib/cn';\nimport {\n SCROLLBAR_CLASS,\n SCROLLBAR_TRACK_BG_CLASS,\n SCROLLBAR_TRACK_BORDER_CLASS,\n} from '../../lib/scrollbar';\nimport type { SScrollAreaAxis } from './scrollArea.config';\n\nconst AXIS_CLASS: Record<SScrollAreaAxis, string> = {\n vertical: 'overflow-x-hidden overflow-y-auto',\n horizontal: 'overflow-x-auto overflow-y-hidden',\n both: 'overflow-auto',\n};\n\nexport interface SScrollAreaProps extends HTMLAttributes<HTMLDivElement> {\n /** ์Šคํฌ๋กค ๋ฐฉํ–ฅ. vertical=์„ธ๋กœ๋งŒ, horizontal=๊ฐ€๋กœ๋งŒ, both=์–‘๋ฐฉํ–ฅ */\n axis?: SScrollAreaAxis;\n /** true๋ฉด ์Šคํฌ๋กค๋ฐ” ํŠธ๋ž™ ๋ฐฐ๊ฒฝ์„ ์ฑ„์šด๋‹ค. ์ฝ˜ํ…์ธ  ์˜์—ญ ๋ฐฐ๊ฒฝ์€ ๋ฐ”๋€Œ์ง€ ์•Š๋Š”๋‹ค. */\n background?: boolean;\n /** true๋ฉด ์Šคํฌ๋กค๋ฐ”์™€ ์ฝ˜ํ…์ธ  ์‚ฌ์ด์— 1px ๊ตฌ๋ถ„์„ ์„ ๊ทธ๋ฆฐ๋‹ค. ์ปจํ…Œ์ด๋„ˆ ํ…Œ๋‘๋ฆฌ๊ฐ€ ์•„๋‹ˆ๋‹ค. */\n bordered?: boolean;\n /** viewport ์ตœ๋Œ€ ๋†’์ด (์˜ˆ: '400px'). ๋น„์šฐ๋ฉด ๋ถ€๋ชจ ํฌ๊ธฐ๋ฅผ ๋”ฐ๋ฅธ๋‹ค. */\n maxHeight?: string;\n /** viewport ์ตœ๋Œ€ ๋„ˆ๋น„ (์˜ˆ: '480px'). ๋น„์šฐ๋ฉด ๋ถ€๋ชจ ํฌ๊ธฐ๋ฅผ ๋”ฐ๋ฅธ๋‹ค. */\n maxWidth?: string;\n}\n\n/**\n * SScrollArea โ€” sd-scroll-area ํฌํŒ….\n * ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ ์ฝ˜ํ…์ธ ๋ฅผ ์ปค์Šคํ…€ ๋„ค์ดํ‹ฐ๋ธŒ ์Šคํฌ๋กค๋ฐ”๋กœ ๊ฐ์‹ธ๋Š” ์˜์—ญ.\n * backgroundยทbordered๋Š” ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์•„๋‹ˆ๋ผ ์Šคํฌ๋กค๋ฐ”์—๋งŒ ์ ์šฉ๋œ๋‹ค.\n * ํฌ๊ธฐ๋Š” ์†Œ๋น„์ž๊ฐ€ className/style ๋กœ ์ง€์ •ํ•œ๋‹ค(ํ˜ธ์ŠคํŠธ ์˜ค๋ฒ„๋ผ์ด๋“œ ๊ฐ€๋Šฅ).\n */\nexport const SScrollArea = forwardRef<HTMLDivElement, SScrollAreaProps>(function SScrollArea(\n {\n axis = 'both',\n background = false,\n bordered = false,\n maxHeight,\n maxWidth,\n className,\n style,\n children,\n ...rest\n },\n ref,\n) {\n const mergedStyle: CSSProperties = { ...style };\n if (maxHeight) mergedStyle.maxHeight = maxHeight;\n if (maxWidth) mergedStyle.maxWidth = maxWidth;\n\n return (\n <div\n ref={ref}\n className={cn(\n AXIS_CLASS[axis],\n SCROLLBAR_CLASS,\n background && SCROLLBAR_TRACK_BG_CLASS,\n bordered && SCROLLBAR_TRACK_BORDER_CLASS,\n className,\n )}\n style={mergedStyle}\n {...rest}\n >\n {children}\n </div>\n );\n});\n"]}
1
+ {"version":3,"sources":["../../../src/lib/cn.ts","../../../src/lib/scrollbar.ts","../../../src/components/SScrollArea/SScrollArea.tsx"],"names":["extendTailwindMerge","clsx","forwardRef","SScrollArea","jsx"],"mappings":";;;;;;;AAQA,IAAM,UAAUA,iCAAA,CAAoB;AAAA,EAClC,MAAA,EAAQ;AAAA,IACN,WAAA,EAAa;AAAA,MACX,aAAa,CAAC,EAAE,IAAA,EAAM,CAAC,MAAM,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,MAAM,IAAA,EAAM,IAAA,EAAM,MAAM,IAAA,EAAM,IAAI,GAAG;AAAA;AAC5F;AAEJ,CAAC,CAAA;AAMM,SAAS,MAAM,MAAA,EAA8B;AAClD,EAAA,OAAO,OAAA,CAAQC,SAAA,CAAK,MAAM,CAAC,CAAA;AAC7B;;;ACVA,IAAM,uBAAA,GACJ,qKAAA;AAIK,IAAM,eAAA,GACX,GAAG,uBAAuB,CAAA,gaAAA,CAAA;AAarB,IAAM,wBAAA,GACX,kNAAA;AAkBK,IAAM,4BAAA,GACX,2TAAA;ACxCF,IAAM,UAAA,GAA8C;AAAA,EAClD,QAAA,EAAU,mCAAA;AAAA,EACV,UAAA,EAAY,mCAAA;AAAA,EACZ,IAAA,EAAM;AACR,CAAA;AAqBO,IAAM,WAAA,GAAcC,gBAAA,CAA6C,SAASC,YAAAA,CAC/E;AAAA,EACE,IAAA,GAAO,MAAA;AAAA,EACP,UAAA,GAAa,KAAA;AAAA,EACb,QAAA,GAAW,KAAA;AAAA,EACX,SAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EACA,GAAA,EACA;AACA,EAAA,MAAM,WAAA,GAA6B,EAAE,GAAG,KAAA,EAAM;AAC9C,EAAA,IAAI,SAAA,cAAuB,SAAA,GAAY,SAAA;AACvC,EAAA,IAAI,QAAA,cAAsB,QAAA,GAAW,QAAA;AAErC,EAAA,uBACEC,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,WAAW,IAAI,CAAA;AAAA,QACf,eAAA;AAAA,QACA,UAAA,IAAc,wBAAA;AAAA,QACd,QAAA,IAAY,4BAAA;AAAA,QACZ;AAAA,OACF;AAAA,MACA,KAAA,EAAO,WAAA;AAAA,MACN,GAAG,IAAA;AAAA,MAEH;AAAA;AAAA,GACH;AAEJ,CAAC","file":"SScrollArea.cjs","sourcesContent":["import { clsx, type ClassValue } from 'clsx';\nimport { extendTailwindMerge } from 'tailwind-merge';\n\n/**\n * theme.css ์˜ --text-* ๋Š” ๊ธฐ๋ณธ Tailwind ํฐํŠธ์‚ฌ์ด์ฆˆ ์Šค์ผ€์ผ(xs/sm/base...)์ด ์•„๋‹Œ\n * ์ˆซ์ž ์Šค์ผ€์ผ(10~32)์ด๋ผ, ํ™•์žฅ ์—†์ด๋Š” tailwind-merge ๊ฐ€ ์ด๋ฅผ ํ…์ŠคํŠธ ์ปฌ๋Ÿฌ ๊ทธ๋ฃน์œผ๋กœ\n * ์˜ค์ธํ•ด text-12 ๊ฐ™์€ ํด๋ž˜์Šค๋ฅผ text-(--color-var) ๋’ค์—์„œ ์ถฉ๋Œ ์ œ๊ฑฐํ•ด๋ฒ„๋ฆฐ๋‹ค.\n */\nconst twMerge = extendTailwindMerge({\n extend: {\n classGroups: {\n 'font-size': [{ text: ['10', '11', '12', '13', '14', '16', '18', '20', '24', '28', '32'] }],\n },\n },\n});\n\n/**\n * className ๋ณ‘ํ•ฉ ์œ ํ‹ธ.\n * clsx๋กœ ์กฐ๊ฑด๋ถ€ ํด๋ž˜์Šค๋ฅผ ํ•ฉ์น˜๊ณ , tailwind-merge๋กœ Tailwind ํด๋ž˜์Šค ์ถฉ๋Œ์„ ํ•ด์†Œํ•œ๋‹ค.\n */\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n","/**\n * ๊ณต์šฉ ์ปค์Šคํ…€ ์Šคํฌ๋กค๋ฐ” ํด๋ž˜์Šค.\n * Stencil์˜ styles/scrollbar.scss mixin๊ณผ ์ง์„ ์ด๋ฃจ๋Š” ๋‹จ์ผ ๊ธฐ์ค€์ด๋ฉฐ,\n * ์Šคํฌ๋กค ์˜์—ญ์„ ๊ฐ€์ง„ ์ปดํฌ๋„ŒํŠธ๋Š” DOM์„ ๊ฐ์‹ธ์ง€ ์•Š๊ณ  ์ด ํด๋ž˜์Šค๋ฅผ ์ง์ ‘ ๋ถ™์—ฌ ์“ด๋‹ค.\n *\n * SVG ์ŠคํŽ™: ํŠธ๋ž™ 12px / ์ธ 8px(grey-45, 2px ์ธ์…‹, radius 4).\n * ์ธ์…‹์€ ํˆฌ๋ช… ํ…Œ๋‘๋ฆฌ + padding-box ํด๋ฆฝ์œผ๋กœ ๋งŒ๋“ค์–ด, ํŠธ๋ž™์„ ์น ํ•˜๋“  ์•ˆ ์น ํ•˜๋“  ์ธ์ด 8px๋กœ ๋ณด์ธ๋‹ค.\n */\n\n// Chrome 121+/WebKit๋Š” scrollbar-widthยทscrollbar-color์˜ ๊ณ„์‚ฐ๊ฐ’์ด ์ดˆ๊ธฐ๊ฐ’(auto)์ด ์•„๋‹ˆ๋ฉด\n// ::-webkit-scrollbar-* ๋ฅผ ํ†ต์งธ๋กœ ๋ฌด์‹œํ•œ๋‹ค(CSSWG ๊ฒฐ์ •). ํ‘œ์ค€ ์†์„ฑ์„ ๋ฌด์กฐ๊ฑด ์ผœ๋ฉด ์•„๋ž˜ ํŠธ๋ž™/์ธ์ด\n// ์ „๋ถ€ ์ฃฝ์œผ๋ฏ€๋กœ, webkit ์œ ์‚ฌ์š”์†Œ๊ฐ€ ์—†๋Š” ๋ธŒ๋ผ์šฐ์ €(Firefox)์—์„œ๋งŒ ์ ์šฉํ•œ๋‹ค.\nconst FIREFOX_SCROLLBAR_CLASS =\n 'supports-[not_selector(::-webkit-scrollbar)]:[scrollbar-width:thin] ' +\n 'supports-[not_selector(::-webkit-scrollbar)]:[scrollbar-color:var(--color-grey-45)_transparent]';\n\n/** ์Šคํฌ๋กค ์˜์—ญ ๊ธฐ๋ณธ ์Šคํฌ๋กค๋ฐ”. overflow ํด๋ž˜์Šค๋Š” ๊ฐ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋”ฐ๋กœ ์ง€์ •ํ•œ๋‹ค. */\nexport const SCROLLBAR_CLASS =\n `${FIREFOX_SCROLLBAR_CLASS} ` +\n '[&::-webkit-scrollbar]:h-[12px] [&::-webkit-scrollbar]:w-[12px] [&::-webkit-scrollbar]:bg-transparent ' +\n '[&::-webkit-scrollbar-track]:bg-transparent ' +\n '[&::-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';\n\n/**\n * background: ํŠธ๋ž™ ๋ฐฐ๊ฒฝ์„ ์ฑ„์šด๋‹ค. ์ฝ˜ํ…์ธ  ์˜์—ญ ๋ฐฐ๊ฒฝ์€ ๋ฐ”๋€Œ์ง€ ์•Š๋Š”๋‹ค.\n * Stencil ์˜ scrollbar-track-bg($color) mixin ๊ณผ ์ง์ด๋ฉฐ, ์ด์ชฝ์€ ๊ธฐ๋ณธ๊ฐ’ grey-10 ์— ํ•ด๋‹นํ•œ๋‹ค.\n * Tailwind ๋Š” ์†Œ์Šค์— ๋ฌธ์ž์—ด๋กœ ๋ฐ•ํžŒ ํด๋ž˜์Šค๋งŒ ์ˆ˜์ง‘ํ•˜๋ฏ€๋กœ ์ƒ‰์„ ์ธ์ž๋กœ ๋ฐ›๋Š” ํ•จ์ˆ˜๋กœ ๋งŒ๋“ค ์ˆ˜ ์—†๋‹ค.\n * ์ƒ‰์ด ํ•„์š”ํ•˜๋ฉด ์•„๋ž˜ WHITE ์ฒ˜๋Ÿผ ๋ฆฌํ„ฐ๋Ÿด ์ƒ์ˆ˜๋ฅผ ํ•˜๋‚˜ ๋” ๋งŒ๋“ ๋‹ค.\n *\n * SCROLLBAR_CLASS ๋’ค์— ์™€์•ผ Firefox ํด๋ฐฑ(scrollbar-color)์„ ๋ฎ์–ด์“ธ ์ˆ˜ ์žˆ๋‹ค.\n */\nexport const SCROLLBAR_TRACK_BG_CLASS =\n 'supports-[not_selector(::-webkit-scrollbar)]:[scrollbar-color:var(--color-grey-45)_var(--color-grey-10)] ' +\n '[&::-webkit-scrollbar]:bg-[var(--color-grey-10)] [&::-webkit-scrollbar-track]:bg-[var(--color-grey-10)]';\n\n/**\n * background(white): ํŠธ๋ž™์„ ํฐ์ƒ‰์œผ๋กœ ์ฑ„์šด๋‹ค.\n * ํŽ˜์ด์ง€ ํ‘œ๋ฉด์ด grey-10(#F6F6F6)๊ณผ ๊ฐ™์€ ์ƒ‰์ด๋ผ ๊ธฐ๋ณธ ํŠธ๋ž™ ๋ฐฐ๊ฒฝ์ด ๋ฌปํžˆ๋Š” ์ž๋ฆฌ์— ์“ด๋‹ค โ€” SPage ์˜ neutral ์ด ๊ทธ ๊ฒฝ์šฐ๋‹ค.\n */\nexport const SCROLLBAR_TRACK_BG_WHITE_CLASS =\n 'supports-[not_selector(::-webkit-scrollbar)]:[scrollbar-color:var(--color-grey-45)_var(--color-white)] ' +\n '[&::-webkit-scrollbar]:bg-[var(--color-white)] [&::-webkit-scrollbar-track]:bg-[var(--color-white)]';\n\n/**\n * bordered: ์Šคํฌ๋กค๋ฐ”์™€ ์ฝ˜ํ…์ธ  ์‚ฌ์ด 1px ๊ตฌ๋ถ„์„ .\n * ๋‹จ์ถ• ์†์„ฑ์œผ๋กœ ํ•œ ๋ณ€๋งŒ ์ง€์ •ํ•œ๋‹ค โ€” border-solid๋Š” ๋„ค ๋ณ€์— ๊ฑธ๋ ค ํŠธ๋ž™์— ๊ธฐ๋ณธ 3px ํ…Œ๋‘๋ฆฌ๋ฅผ ๋งŒ๋“ ๋‹ค.\n * ์ธ๊ณผ ํŠธ๋ž™์€ ํ˜•์ œ ๋ฐ•์Šค๋ผ ํŠธ๋ž™์˜ ๊ตฌ๋ถ„์„ ์ด ์ธ์„ ๋ฐ€์–ด์ฃผ์ง€ ์•Š๋Š”๋‹ค. ๊ตฌ๋ถ„์„ ์ด ์ธ์…‹ 2px ์ค‘ 1px์„\n * ์ฐจ์ง€ํ•ด ์ขŒ์šฐ ์—ฌ๋ฐฑ์ด 1px/2px๋กœ ์–ด๊ธ‹๋‚˜๋ฏ€๋กœ, ์ธ ์ธ์…‹์„ ๊ฐ™์€ ๋งŒํผ ํ‚ค์›Œ 2px/2px๋กœ ๋˜๋Œ๋ฆฐ๋‹ค(์ธ 8px โ†’ 7px).\n * Firefox๋Š” thin ์Šคํฌ๋กค๋ฐ”๋ฅผ ์ด ์ˆ˜์ค€์œผ๋กœ ์ปค์Šคํ„ฐ๋งˆ์ด์ฆˆํ•  ์ˆ˜ ์—†์–ด ์ ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค.\n */\nexport const SCROLLBAR_TRACK_BORDER_CLASS =\n '[&::-webkit-scrollbar-track:vertical]:[border-left:1px_solid_var(--sys-color-border-default)] ' +\n '[&::-webkit-scrollbar-track:horizontal]:[border-top:1px_solid_var(--sys-color-border-default)] ' +\n '[&::-webkit-scrollbar-thumb:vertical]:[border-left-width:3px] ' +\n '[&::-webkit-scrollbar-thumb:horizontal]:[border-top-width:3px]';\n","'use client';\n\nimport { forwardRef, type CSSProperties, type HTMLAttributes } from 'react';\nimport { cn } from '../../lib/cn';\nimport {\n SCROLLBAR_CLASS,\n SCROLLBAR_TRACK_BG_CLASS,\n SCROLLBAR_TRACK_BORDER_CLASS,\n} from '../../lib/scrollbar';\nimport type { SScrollAreaAxis } from './scrollArea.config';\n\nconst AXIS_CLASS: Record<SScrollAreaAxis, string> = {\n vertical: 'overflow-x-hidden overflow-y-auto',\n horizontal: 'overflow-x-auto overflow-y-hidden',\n both: 'overflow-auto',\n};\n\nexport interface SScrollAreaProps extends HTMLAttributes<HTMLDivElement> {\n /** ์Šคํฌ๋กค ๋ฐฉํ–ฅ. vertical=์„ธ๋กœ๋งŒ, horizontal=๊ฐ€๋กœ๋งŒ, both=์–‘๋ฐฉํ–ฅ */\n axis?: SScrollAreaAxis;\n /** true๋ฉด ์Šคํฌ๋กค๋ฐ” ํŠธ๋ž™ ๋ฐฐ๊ฒฝ์„ ์ฑ„์šด๋‹ค. ์ฝ˜ํ…์ธ  ์˜์—ญ ๋ฐฐ๊ฒฝ์€ ๋ฐ”๋€Œ์ง€ ์•Š๋Š”๋‹ค. */\n background?: boolean;\n /** true๋ฉด ์Šคํฌ๋กค๋ฐ”์™€ ์ฝ˜ํ…์ธ  ์‚ฌ์ด์— 1px ๊ตฌ๋ถ„์„ ์„ ๊ทธ๋ฆฐ๋‹ค. ์ปจํ…Œ์ด๋„ˆ ํ…Œ๋‘๋ฆฌ๊ฐ€ ์•„๋‹ˆ๋‹ค. */\n bordered?: boolean;\n /** viewport ์ตœ๋Œ€ ๋†’์ด (์˜ˆ: '400px'). ๋น„์šฐ๋ฉด ๋ถ€๋ชจ ํฌ๊ธฐ๋ฅผ ๋”ฐ๋ฅธ๋‹ค. */\n maxHeight?: string;\n /** viewport ์ตœ๋Œ€ ๋„ˆ๋น„ (์˜ˆ: '480px'). ๋น„์šฐ๋ฉด ๋ถ€๋ชจ ํฌ๊ธฐ๋ฅผ ๋”ฐ๋ฅธ๋‹ค. */\n maxWidth?: string;\n}\n\n/**\n * SScrollArea โ€” sd-scroll-area ํฌํŒ….\n * ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ ์ฝ˜ํ…์ธ ๋ฅผ ์ปค์Šคํ…€ ๋„ค์ดํ‹ฐ๋ธŒ ์Šคํฌ๋กค๋ฐ”๋กœ ๊ฐ์‹ธ๋Š” ์˜์—ญ.\n * backgroundยทbordered๋Š” ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์•„๋‹ˆ๋ผ ์Šคํฌ๋กค๋ฐ”์—๋งŒ ์ ์šฉ๋œ๋‹ค.\n * ํฌ๊ธฐ๋Š” ์†Œ๋น„์ž๊ฐ€ className/style ๋กœ ์ง€์ •ํ•œ๋‹ค(ํ˜ธ์ŠคํŠธ ์˜ค๋ฒ„๋ผ์ด๋“œ ๊ฐ€๋Šฅ).\n */\nexport const SScrollArea = forwardRef<HTMLDivElement, SScrollAreaProps>(function SScrollArea(\n {\n axis = 'both',\n background = false,\n bordered = false,\n maxHeight,\n maxWidth,\n className,\n style,\n children,\n ...rest\n },\n ref,\n) {\n const mergedStyle: CSSProperties = { ...style };\n if (maxHeight) mergedStyle.maxHeight = maxHeight;\n if (maxWidth) mergedStyle.maxWidth = maxWidth;\n\n return (\n <div\n ref={ref}\n className={cn(\n AXIS_CLASS[axis],\n SCROLLBAR_CLASS,\n background && SCROLLBAR_TRACK_BG_CLASS,\n bordered && SCROLLBAR_TRACK_BORDER_CLASS,\n className,\n )}\n style={mergedStyle}\n {...rest}\n >\n {children}\n </div>\n );\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/cn.ts","../../../src/lib/scrollbar.ts","../../../src/components/SScrollArea/SScrollArea.tsx"],"names":["SScrollArea"],"mappings":";;;;;AAQA,IAAM,UAAU,mBAAA,CAAoB;AAAA,EAClC,MAAA,EAAQ;AAAA,IACN,WAAA,EAAa;AAAA,MACX,aAAa,CAAC,EAAE,IAAA,EAAM,CAAC,MAAM,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,MAAM,IAAA,EAAM,IAAA,EAAM,MAAM,IAAA,EAAM,IAAI,GAAG;AAAA;AAC5F;AAEJ,CAAC,CAAA;AAMM,SAAS,MAAM,MAAA,EAA8B;AAClD,EAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAC,CAAA;AAC7B;;;ACVA,IAAM,uBAAA,GACJ,qKAAA;AAIK,IAAM,eAAA,GACX,GAAG,uBAAuB,CAAA,gaAAA,CAAA;AAMrB,IAAM,wBAAA,GACX,kNAAA;AAUK,IAAM,4BAAA,GACX,2TAAA;ACzBF,IAAM,UAAA,GAA8C;AAAA,EAClD,QAAA,EAAU,mCAAA;AAAA,EACV,UAAA,EAAY,mCAAA;AAAA,EACZ,IAAA,EAAM;AACR,CAAA;AAqBO,IAAM,WAAA,GAAc,UAAA,CAA6C,SAASA,YAAAA,CAC/E;AAAA,EACE,IAAA,GAAO,MAAA;AAAA,EACP,UAAA,GAAa,KAAA;AAAA,EACb,QAAA,GAAW,KAAA;AAAA,EACX,SAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EACA,GAAA,EACA;AACA,EAAA,MAAM,WAAA,GAA6B,EAAE,GAAG,KAAA,EAAM;AAC9C,EAAA,IAAI,SAAA,cAAuB,SAAA,GAAY,SAAA;AACvC,EAAA,IAAI,QAAA,cAAsB,QAAA,GAAW,QAAA;AAErC,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,WAAW,IAAI,CAAA;AAAA,QACf,eAAA;AAAA,QACA,UAAA,IAAc,wBAAA;AAAA,QACd,QAAA,IAAY,4BAAA;AAAA,QACZ;AAAA,OACF;AAAA,MACA,KAAA,EAAO,WAAA;AAAA,MACN,GAAG,IAAA;AAAA,MAEH;AAAA;AAAA,GACH;AAEJ,CAAC","file":"SScrollArea.js","sourcesContent":["import { clsx, type ClassValue } from 'clsx';\nimport { extendTailwindMerge } from 'tailwind-merge';\n\n/**\n * theme.css ์˜ --text-* ๋Š” ๊ธฐ๋ณธ Tailwind ํฐํŠธ์‚ฌ์ด์ฆˆ ์Šค์ผ€์ผ(xs/sm/base...)์ด ์•„๋‹Œ\n * ์ˆซ์ž ์Šค์ผ€์ผ(10~32)์ด๋ผ, ํ™•์žฅ ์—†์ด๋Š” tailwind-merge ๊ฐ€ ์ด๋ฅผ ํ…์ŠคํŠธ ์ปฌ๋Ÿฌ ๊ทธ๋ฃน์œผ๋กœ\n * ์˜ค์ธํ•ด text-12 ๊ฐ™์€ ํด๋ž˜์Šค๋ฅผ text-(--color-var) ๋’ค์—์„œ ์ถฉ๋Œ ์ œ๊ฑฐํ•ด๋ฒ„๋ฆฐ๋‹ค.\n */\nconst twMerge = extendTailwindMerge({\n extend: {\n classGroups: {\n 'font-size': [{ text: ['10', '11', '12', '13', '14', '16', '18', '20', '24', '28', '32'] }],\n },\n },\n});\n\n/**\n * className ๋ณ‘ํ•ฉ ์œ ํ‹ธ.\n * clsx๋กœ ์กฐ๊ฑด๋ถ€ ํด๋ž˜์Šค๋ฅผ ํ•ฉ์น˜๊ณ , tailwind-merge๋กœ Tailwind ํด๋ž˜์Šค ์ถฉ๋Œ์„ ํ•ด์†Œํ•œ๋‹ค.\n */\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n","/**\n * ๊ณต์šฉ ์ปค์Šคํ…€ ์Šคํฌ๋กค๋ฐ” ํด๋ž˜์Šค.\n * Stencil์˜ styles/scrollbar.scss mixin๊ณผ ์ง์„ ์ด๋ฃจ๋Š” ๋‹จ์ผ ๊ธฐ์ค€์ด๋ฉฐ,\n * ์Šคํฌ๋กค ์˜์—ญ์„ ๊ฐ€์ง„ ์ปดํฌ๋„ŒํŠธ๋Š” DOM์„ ๊ฐ์‹ธ์ง€ ์•Š๊ณ  ์ด ํด๋ž˜์Šค๋ฅผ ์ง์ ‘ ๋ถ™์—ฌ ์“ด๋‹ค.\n *\n * SVG ์ŠคํŽ™: ํŠธ๋ž™ 12px / ์ธ 8px(grey-45, 2px ์ธ์…‹, radius 4).\n * ์ธ์…‹์€ ํˆฌ๋ช… ํ…Œ๋‘๋ฆฌ + padding-box ํด๋ฆฝ์œผ๋กœ ๋งŒ๋“ค์–ด, ํŠธ๋ž™์„ ์น ํ•˜๋“  ์•ˆ ์น ํ•˜๋“  ์ธ์ด 8px๋กœ ๋ณด์ธ๋‹ค.\n */\n\n// Chrome 121+/WebKit๋Š” scrollbar-widthยทscrollbar-color์˜ ๊ณ„์‚ฐ๊ฐ’์ด ์ดˆ๊ธฐ๊ฐ’(auto)์ด ์•„๋‹ˆ๋ฉด\n// ::-webkit-scrollbar-* ๋ฅผ ํ†ต์งธ๋กœ ๋ฌด์‹œํ•œ๋‹ค(CSSWG ๊ฒฐ์ •). ํ‘œ์ค€ ์†์„ฑ์„ ๋ฌด์กฐ๊ฑด ์ผœ๋ฉด ์•„๋ž˜ ํŠธ๋ž™/์ธ์ด\n// ์ „๋ถ€ ์ฃฝ์œผ๋ฏ€๋กœ, webkit ์œ ์‚ฌ์š”์†Œ๊ฐ€ ์—†๋Š” ๋ธŒ๋ผ์šฐ์ €(Firefox)์—์„œ๋งŒ ์ ์šฉํ•œ๋‹ค.\nconst FIREFOX_SCROLLBAR_CLASS =\n 'supports-[not_selector(::-webkit-scrollbar)]:[scrollbar-width:thin] ' +\n 'supports-[not_selector(::-webkit-scrollbar)]:[scrollbar-color:var(--color-grey-45)_transparent]';\n\n/** ์Šคํฌ๋กค ์˜์—ญ ๊ธฐ๋ณธ ์Šคํฌ๋กค๋ฐ”. overflow ํด๋ž˜์Šค๋Š” ๊ฐ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋”ฐ๋กœ ์ง€์ •ํ•œ๋‹ค. */\nexport const SCROLLBAR_CLASS =\n `${FIREFOX_SCROLLBAR_CLASS} ` +\n '[&::-webkit-scrollbar]:h-[12px] [&::-webkit-scrollbar]:w-[12px] [&::-webkit-scrollbar]:bg-transparent ' +\n '[&::-webkit-scrollbar-track]:bg-transparent ' +\n '[&::-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';\n\n/** background: ํŠธ๋ž™ ๋ฐฐ๊ฒฝ์„ ์ฑ„์šด๋‹ค. ์ฝ˜ํ…์ธ  ์˜์—ญ ๋ฐฐ๊ฒฝ์€ ๋ฐ”๋€Œ์ง€ ์•Š๋Š”๋‹ค. */\nexport const SCROLLBAR_TRACK_BG_CLASS =\n 'supports-[not_selector(::-webkit-scrollbar)]:[scrollbar-color:var(--color-grey-45)_var(--color-grey-10)] ' +\n '[&::-webkit-scrollbar]:bg-[var(--color-grey-10)] [&::-webkit-scrollbar-track]:bg-[var(--color-grey-10)]';\n\n/**\n * bordered: ์Šคํฌ๋กค๋ฐ”์™€ ์ฝ˜ํ…์ธ  ์‚ฌ์ด 1px ๊ตฌ๋ถ„์„ .\n * ๋‹จ์ถ• ์†์„ฑ์œผ๋กœ ํ•œ ๋ณ€๋งŒ ์ง€์ •ํ•œ๋‹ค โ€” border-solid๋Š” ๋„ค ๋ณ€์— ๊ฑธ๋ ค ํŠธ๋ž™์— ๊ธฐ๋ณธ 3px ํ…Œ๋‘๋ฆฌ๋ฅผ ๋งŒ๋“ ๋‹ค.\n * ์ธ๊ณผ ํŠธ๋ž™์€ ํ˜•์ œ ๋ฐ•์Šค๋ผ ํŠธ๋ž™์˜ ๊ตฌ๋ถ„์„ ์ด ์ธ์„ ๋ฐ€์–ด์ฃผ์ง€ ์•Š๋Š”๋‹ค. ๊ตฌ๋ถ„์„ ์ด ์ธ์…‹ 2px ์ค‘ 1px์„\n * ์ฐจ์ง€ํ•ด ์ขŒ์šฐ ์—ฌ๋ฐฑ์ด 1px/2px๋กœ ์–ด๊ธ‹๋‚˜๋ฏ€๋กœ, ์ธ ์ธ์…‹์„ ๊ฐ™์€ ๋งŒํผ ํ‚ค์›Œ 2px/2px๋กœ ๋˜๋Œ๋ฆฐ๋‹ค(์ธ 8px โ†’ 7px).\n * Firefox๋Š” thin ์Šคํฌ๋กค๋ฐ”๋ฅผ ์ด ์ˆ˜์ค€์œผ๋กœ ์ปค์Šคํ„ฐ๋งˆ์ด์ฆˆํ•  ์ˆ˜ ์—†์–ด ์ ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค.\n */\nexport const SCROLLBAR_TRACK_BORDER_CLASS =\n '[&::-webkit-scrollbar-track:vertical]:[border-left:1px_solid_var(--sys-color-border-default)] ' +\n '[&::-webkit-scrollbar-track:horizontal]:[border-top:1px_solid_var(--sys-color-border-default)] ' +\n '[&::-webkit-scrollbar-thumb:vertical]:[border-left-width:3px] ' +\n '[&::-webkit-scrollbar-thumb:horizontal]:[border-top-width:3px]';\n","'use client';\n\nimport { forwardRef, type CSSProperties, type HTMLAttributes } from 'react';\nimport { cn } from '../../lib/cn';\nimport {\n SCROLLBAR_CLASS,\n SCROLLBAR_TRACK_BG_CLASS,\n SCROLLBAR_TRACK_BORDER_CLASS,\n} from '../../lib/scrollbar';\nimport type { SScrollAreaAxis } from './scrollArea.config';\n\nconst AXIS_CLASS: Record<SScrollAreaAxis, string> = {\n vertical: 'overflow-x-hidden overflow-y-auto',\n horizontal: 'overflow-x-auto overflow-y-hidden',\n both: 'overflow-auto',\n};\n\nexport interface SScrollAreaProps extends HTMLAttributes<HTMLDivElement> {\n /** ์Šคํฌ๋กค ๋ฐฉํ–ฅ. vertical=์„ธ๋กœ๋งŒ, horizontal=๊ฐ€๋กœ๋งŒ, both=์–‘๋ฐฉํ–ฅ */\n axis?: SScrollAreaAxis;\n /** true๋ฉด ์Šคํฌ๋กค๋ฐ” ํŠธ๋ž™ ๋ฐฐ๊ฒฝ์„ ์ฑ„์šด๋‹ค. ์ฝ˜ํ…์ธ  ์˜์—ญ ๋ฐฐ๊ฒฝ์€ ๋ฐ”๋€Œ์ง€ ์•Š๋Š”๋‹ค. */\n background?: boolean;\n /** true๋ฉด ์Šคํฌ๋กค๋ฐ”์™€ ์ฝ˜ํ…์ธ  ์‚ฌ์ด์— 1px ๊ตฌ๋ถ„์„ ์„ ๊ทธ๋ฆฐ๋‹ค. ์ปจํ…Œ์ด๋„ˆ ํ…Œ๋‘๋ฆฌ๊ฐ€ ์•„๋‹ˆ๋‹ค. */\n bordered?: boolean;\n /** viewport ์ตœ๋Œ€ ๋†’์ด (์˜ˆ: '400px'). ๋น„์šฐ๋ฉด ๋ถ€๋ชจ ํฌ๊ธฐ๋ฅผ ๋”ฐ๋ฅธ๋‹ค. */\n maxHeight?: string;\n /** viewport ์ตœ๋Œ€ ๋„ˆ๋น„ (์˜ˆ: '480px'). ๋น„์šฐ๋ฉด ๋ถ€๋ชจ ํฌ๊ธฐ๋ฅผ ๋”ฐ๋ฅธ๋‹ค. */\n maxWidth?: string;\n}\n\n/**\n * SScrollArea โ€” sd-scroll-area ํฌํŒ….\n * ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ ์ฝ˜ํ…์ธ ๋ฅผ ์ปค์Šคํ…€ ๋„ค์ดํ‹ฐ๋ธŒ ์Šคํฌ๋กค๋ฐ”๋กœ ๊ฐ์‹ธ๋Š” ์˜์—ญ.\n * backgroundยทbordered๋Š” ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์•„๋‹ˆ๋ผ ์Šคํฌ๋กค๋ฐ”์—๋งŒ ์ ์šฉ๋œ๋‹ค.\n * ํฌ๊ธฐ๋Š” ์†Œ๋น„์ž๊ฐ€ className/style ๋กœ ์ง€์ •ํ•œ๋‹ค(ํ˜ธ์ŠคํŠธ ์˜ค๋ฒ„๋ผ์ด๋“œ ๊ฐ€๋Šฅ).\n */\nexport const SScrollArea = forwardRef<HTMLDivElement, SScrollAreaProps>(function SScrollArea(\n {\n axis = 'both',\n background = false,\n bordered = false,\n maxHeight,\n maxWidth,\n className,\n style,\n children,\n ...rest\n },\n ref,\n) {\n const mergedStyle: CSSProperties = { ...style };\n if (maxHeight) mergedStyle.maxHeight = maxHeight;\n if (maxWidth) mergedStyle.maxWidth = maxWidth;\n\n return (\n <div\n ref={ref}\n className={cn(\n AXIS_CLASS[axis],\n SCROLLBAR_CLASS,\n background && SCROLLBAR_TRACK_BG_CLASS,\n bordered && SCROLLBAR_TRACK_BORDER_CLASS,\n className,\n )}\n style={mergedStyle}\n {...rest}\n >\n {children}\n </div>\n );\n});\n"]}
1
+ {"version":3,"sources":["../../../src/lib/cn.ts","../../../src/lib/scrollbar.ts","../../../src/components/SScrollArea/SScrollArea.tsx"],"names":["SScrollArea"],"mappings":";;;;;AAQA,IAAM,UAAU,mBAAA,CAAoB;AAAA,EAClC,MAAA,EAAQ;AAAA,IACN,WAAA,EAAa;AAAA,MACX,aAAa,CAAC,EAAE,IAAA,EAAM,CAAC,MAAM,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,MAAM,IAAA,EAAM,IAAA,EAAM,MAAM,IAAA,EAAM,IAAI,GAAG;AAAA;AAC5F;AAEJ,CAAC,CAAA;AAMM,SAAS,MAAM,MAAA,EAA8B;AAClD,EAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAC,CAAA;AAC7B;;;ACVA,IAAM,uBAAA,GACJ,qKAAA;AAIK,IAAM,eAAA,GACX,GAAG,uBAAuB,CAAA,gaAAA,CAAA;AAarB,IAAM,wBAAA,GACX,kNAAA;AAkBK,IAAM,4BAAA,GACX,2TAAA;ACxCF,IAAM,UAAA,GAA8C;AAAA,EAClD,QAAA,EAAU,mCAAA;AAAA,EACV,UAAA,EAAY,mCAAA;AAAA,EACZ,IAAA,EAAM;AACR,CAAA;AAqBO,IAAM,WAAA,GAAc,UAAA,CAA6C,SAASA,YAAAA,CAC/E;AAAA,EACE,IAAA,GAAO,MAAA;AAAA,EACP,UAAA,GAAa,KAAA;AAAA,EACb,QAAA,GAAW,KAAA;AAAA,EACX,SAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EACA,GAAA,EACA;AACA,EAAA,MAAM,WAAA,GAA6B,EAAE,GAAG,KAAA,EAAM;AAC9C,EAAA,IAAI,SAAA,cAAuB,SAAA,GAAY,SAAA;AACvC,EAAA,IAAI,QAAA,cAAsB,QAAA,GAAW,QAAA;AAErC,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,WAAW,IAAI,CAAA;AAAA,QACf,eAAA;AAAA,QACA,UAAA,IAAc,wBAAA;AAAA,QACd,QAAA,IAAY,4BAAA;AAAA,QACZ;AAAA,OACF;AAAA,MACA,KAAA,EAAO,WAAA;AAAA,MACN,GAAG,IAAA;AAAA,MAEH;AAAA;AAAA,GACH;AAEJ,CAAC","file":"SScrollArea.js","sourcesContent":["import { clsx, type ClassValue } from 'clsx';\nimport { extendTailwindMerge } from 'tailwind-merge';\n\n/**\n * theme.css ์˜ --text-* ๋Š” ๊ธฐ๋ณธ Tailwind ํฐํŠธ์‚ฌ์ด์ฆˆ ์Šค์ผ€์ผ(xs/sm/base...)์ด ์•„๋‹Œ\n * ์ˆซ์ž ์Šค์ผ€์ผ(10~32)์ด๋ผ, ํ™•์žฅ ์—†์ด๋Š” tailwind-merge ๊ฐ€ ์ด๋ฅผ ํ…์ŠคํŠธ ์ปฌ๋Ÿฌ ๊ทธ๋ฃน์œผ๋กœ\n * ์˜ค์ธํ•ด text-12 ๊ฐ™์€ ํด๋ž˜์Šค๋ฅผ text-(--color-var) ๋’ค์—์„œ ์ถฉ๋Œ ์ œ๊ฑฐํ•ด๋ฒ„๋ฆฐ๋‹ค.\n */\nconst twMerge = extendTailwindMerge({\n extend: {\n classGroups: {\n 'font-size': [{ text: ['10', '11', '12', '13', '14', '16', '18', '20', '24', '28', '32'] }],\n },\n },\n});\n\n/**\n * className ๋ณ‘ํ•ฉ ์œ ํ‹ธ.\n * clsx๋กœ ์กฐ๊ฑด๋ถ€ ํด๋ž˜์Šค๋ฅผ ํ•ฉ์น˜๊ณ , tailwind-merge๋กœ Tailwind ํด๋ž˜์Šค ์ถฉ๋Œ์„ ํ•ด์†Œํ•œ๋‹ค.\n */\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n","/**\n * ๊ณต์šฉ ์ปค์Šคํ…€ ์Šคํฌ๋กค๋ฐ” ํด๋ž˜์Šค.\n * Stencil์˜ styles/scrollbar.scss mixin๊ณผ ์ง์„ ์ด๋ฃจ๋Š” ๋‹จ์ผ ๊ธฐ์ค€์ด๋ฉฐ,\n * ์Šคํฌ๋กค ์˜์—ญ์„ ๊ฐ€์ง„ ์ปดํฌ๋„ŒํŠธ๋Š” DOM์„ ๊ฐ์‹ธ์ง€ ์•Š๊ณ  ์ด ํด๋ž˜์Šค๋ฅผ ์ง์ ‘ ๋ถ™์—ฌ ์“ด๋‹ค.\n *\n * SVG ์ŠคํŽ™: ํŠธ๋ž™ 12px / ์ธ 8px(grey-45, 2px ์ธ์…‹, radius 4).\n * ์ธ์…‹์€ ํˆฌ๋ช… ํ…Œ๋‘๋ฆฌ + padding-box ํด๋ฆฝ์œผ๋กœ ๋งŒ๋“ค์–ด, ํŠธ๋ž™์„ ์น ํ•˜๋“  ์•ˆ ์น ํ•˜๋“  ์ธ์ด 8px๋กœ ๋ณด์ธ๋‹ค.\n */\n\n// Chrome 121+/WebKit๋Š” scrollbar-widthยทscrollbar-color์˜ ๊ณ„์‚ฐ๊ฐ’์ด ์ดˆ๊ธฐ๊ฐ’(auto)์ด ์•„๋‹ˆ๋ฉด\n// ::-webkit-scrollbar-* ๋ฅผ ํ†ต์งธ๋กœ ๋ฌด์‹œํ•œ๋‹ค(CSSWG ๊ฒฐ์ •). ํ‘œ์ค€ ์†์„ฑ์„ ๋ฌด์กฐ๊ฑด ์ผœ๋ฉด ์•„๋ž˜ ํŠธ๋ž™/์ธ์ด\n// ์ „๋ถ€ ์ฃฝ์œผ๋ฏ€๋กœ, webkit ์œ ์‚ฌ์š”์†Œ๊ฐ€ ์—†๋Š” ๋ธŒ๋ผ์šฐ์ €(Firefox)์—์„œ๋งŒ ์ ์šฉํ•œ๋‹ค.\nconst FIREFOX_SCROLLBAR_CLASS =\n 'supports-[not_selector(::-webkit-scrollbar)]:[scrollbar-width:thin] ' +\n 'supports-[not_selector(::-webkit-scrollbar)]:[scrollbar-color:var(--color-grey-45)_transparent]';\n\n/** ์Šคํฌ๋กค ์˜์—ญ ๊ธฐ๋ณธ ์Šคํฌ๋กค๋ฐ”. overflow ํด๋ž˜์Šค๋Š” ๊ฐ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋”ฐ๋กœ ์ง€์ •ํ•œ๋‹ค. */\nexport const SCROLLBAR_CLASS =\n `${FIREFOX_SCROLLBAR_CLASS} ` +\n '[&::-webkit-scrollbar]:h-[12px] [&::-webkit-scrollbar]:w-[12px] [&::-webkit-scrollbar]:bg-transparent ' +\n '[&::-webkit-scrollbar-track]:bg-transparent ' +\n '[&::-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';\n\n/**\n * background: ํŠธ๋ž™ ๋ฐฐ๊ฒฝ์„ ์ฑ„์šด๋‹ค. ์ฝ˜ํ…์ธ  ์˜์—ญ ๋ฐฐ๊ฒฝ์€ ๋ฐ”๋€Œ์ง€ ์•Š๋Š”๋‹ค.\n * Stencil ์˜ scrollbar-track-bg($color) mixin ๊ณผ ์ง์ด๋ฉฐ, ์ด์ชฝ์€ ๊ธฐ๋ณธ๊ฐ’ grey-10 ์— ํ•ด๋‹นํ•œ๋‹ค.\n * Tailwind ๋Š” ์†Œ์Šค์— ๋ฌธ์ž์—ด๋กœ ๋ฐ•ํžŒ ํด๋ž˜์Šค๋งŒ ์ˆ˜์ง‘ํ•˜๋ฏ€๋กœ ์ƒ‰์„ ์ธ์ž๋กœ ๋ฐ›๋Š” ํ•จ์ˆ˜๋กœ ๋งŒ๋“ค ์ˆ˜ ์—†๋‹ค.\n * ์ƒ‰์ด ํ•„์š”ํ•˜๋ฉด ์•„๋ž˜ WHITE ์ฒ˜๋Ÿผ ๋ฆฌํ„ฐ๋Ÿด ์ƒ์ˆ˜๋ฅผ ํ•˜๋‚˜ ๋” ๋งŒ๋“ ๋‹ค.\n *\n * SCROLLBAR_CLASS ๋’ค์— ์™€์•ผ Firefox ํด๋ฐฑ(scrollbar-color)์„ ๋ฎ์–ด์“ธ ์ˆ˜ ์žˆ๋‹ค.\n */\nexport const SCROLLBAR_TRACK_BG_CLASS =\n 'supports-[not_selector(::-webkit-scrollbar)]:[scrollbar-color:var(--color-grey-45)_var(--color-grey-10)] ' +\n '[&::-webkit-scrollbar]:bg-[var(--color-grey-10)] [&::-webkit-scrollbar-track]:bg-[var(--color-grey-10)]';\n\n/**\n * background(white): ํŠธ๋ž™์„ ํฐ์ƒ‰์œผ๋กœ ์ฑ„์šด๋‹ค.\n * ํŽ˜์ด์ง€ ํ‘œ๋ฉด์ด grey-10(#F6F6F6)๊ณผ ๊ฐ™์€ ์ƒ‰์ด๋ผ ๊ธฐ๋ณธ ํŠธ๋ž™ ๋ฐฐ๊ฒฝ์ด ๋ฌปํžˆ๋Š” ์ž๋ฆฌ์— ์“ด๋‹ค โ€” SPage ์˜ neutral ์ด ๊ทธ ๊ฒฝ์šฐ๋‹ค.\n */\nexport const SCROLLBAR_TRACK_BG_WHITE_CLASS =\n 'supports-[not_selector(::-webkit-scrollbar)]:[scrollbar-color:var(--color-grey-45)_var(--color-white)] ' +\n '[&::-webkit-scrollbar]:bg-[var(--color-white)] [&::-webkit-scrollbar-track]:bg-[var(--color-white)]';\n\n/**\n * bordered: ์Šคํฌ๋กค๋ฐ”์™€ ์ฝ˜ํ…์ธ  ์‚ฌ์ด 1px ๊ตฌ๋ถ„์„ .\n * ๋‹จ์ถ• ์†์„ฑ์œผ๋กœ ํ•œ ๋ณ€๋งŒ ์ง€์ •ํ•œ๋‹ค โ€” border-solid๋Š” ๋„ค ๋ณ€์— ๊ฑธ๋ ค ํŠธ๋ž™์— ๊ธฐ๋ณธ 3px ํ…Œ๋‘๋ฆฌ๋ฅผ ๋งŒ๋“ ๋‹ค.\n * ์ธ๊ณผ ํŠธ๋ž™์€ ํ˜•์ œ ๋ฐ•์Šค๋ผ ํŠธ๋ž™์˜ ๊ตฌ๋ถ„์„ ์ด ์ธ์„ ๋ฐ€์–ด์ฃผ์ง€ ์•Š๋Š”๋‹ค. ๊ตฌ๋ถ„์„ ์ด ์ธ์…‹ 2px ์ค‘ 1px์„\n * ์ฐจ์ง€ํ•ด ์ขŒ์šฐ ์—ฌ๋ฐฑ์ด 1px/2px๋กœ ์–ด๊ธ‹๋‚˜๋ฏ€๋กœ, ์ธ ์ธ์…‹์„ ๊ฐ™์€ ๋งŒํผ ํ‚ค์›Œ 2px/2px๋กœ ๋˜๋Œ๋ฆฐ๋‹ค(์ธ 8px โ†’ 7px).\n * Firefox๋Š” thin ์Šคํฌ๋กค๋ฐ”๋ฅผ ์ด ์ˆ˜์ค€์œผ๋กœ ์ปค์Šคํ„ฐ๋งˆ์ด์ฆˆํ•  ์ˆ˜ ์—†์–ด ์ ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค.\n */\nexport const SCROLLBAR_TRACK_BORDER_CLASS =\n '[&::-webkit-scrollbar-track:vertical]:[border-left:1px_solid_var(--sys-color-border-default)] ' +\n '[&::-webkit-scrollbar-track:horizontal]:[border-top:1px_solid_var(--sys-color-border-default)] ' +\n '[&::-webkit-scrollbar-thumb:vertical]:[border-left-width:3px] ' +\n '[&::-webkit-scrollbar-thumb:horizontal]:[border-top-width:3px]';\n","'use client';\n\nimport { forwardRef, type CSSProperties, type HTMLAttributes } from 'react';\nimport { cn } from '../../lib/cn';\nimport {\n SCROLLBAR_CLASS,\n SCROLLBAR_TRACK_BG_CLASS,\n SCROLLBAR_TRACK_BORDER_CLASS,\n} from '../../lib/scrollbar';\nimport type { SScrollAreaAxis } from './scrollArea.config';\n\nconst AXIS_CLASS: Record<SScrollAreaAxis, string> = {\n vertical: 'overflow-x-hidden overflow-y-auto',\n horizontal: 'overflow-x-auto overflow-y-hidden',\n both: 'overflow-auto',\n};\n\nexport interface SScrollAreaProps extends HTMLAttributes<HTMLDivElement> {\n /** ์Šคํฌ๋กค ๋ฐฉํ–ฅ. vertical=์„ธ๋กœ๋งŒ, horizontal=๊ฐ€๋กœ๋งŒ, both=์–‘๋ฐฉํ–ฅ */\n axis?: SScrollAreaAxis;\n /** true๋ฉด ์Šคํฌ๋กค๋ฐ” ํŠธ๋ž™ ๋ฐฐ๊ฒฝ์„ ์ฑ„์šด๋‹ค. ์ฝ˜ํ…์ธ  ์˜์—ญ ๋ฐฐ๊ฒฝ์€ ๋ฐ”๋€Œ์ง€ ์•Š๋Š”๋‹ค. */\n background?: boolean;\n /** true๋ฉด ์Šคํฌ๋กค๋ฐ”์™€ ์ฝ˜ํ…์ธ  ์‚ฌ์ด์— 1px ๊ตฌ๋ถ„์„ ์„ ๊ทธ๋ฆฐ๋‹ค. ์ปจํ…Œ์ด๋„ˆ ํ…Œ๋‘๋ฆฌ๊ฐ€ ์•„๋‹ˆ๋‹ค. */\n bordered?: boolean;\n /** viewport ์ตœ๋Œ€ ๋†’์ด (์˜ˆ: '400px'). ๋น„์šฐ๋ฉด ๋ถ€๋ชจ ํฌ๊ธฐ๋ฅผ ๋”ฐ๋ฅธ๋‹ค. */\n maxHeight?: string;\n /** viewport ์ตœ๋Œ€ ๋„ˆ๋น„ (์˜ˆ: '480px'). ๋น„์šฐ๋ฉด ๋ถ€๋ชจ ํฌ๊ธฐ๋ฅผ ๋”ฐ๋ฅธ๋‹ค. */\n maxWidth?: string;\n}\n\n/**\n * SScrollArea โ€” sd-scroll-area ํฌํŒ….\n * ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ ์ฝ˜ํ…์ธ ๋ฅผ ์ปค์Šคํ…€ ๋„ค์ดํ‹ฐ๋ธŒ ์Šคํฌ๋กค๋ฐ”๋กœ ๊ฐ์‹ธ๋Š” ์˜์—ญ.\n * backgroundยทbordered๋Š” ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์•„๋‹ˆ๋ผ ์Šคํฌ๋กค๋ฐ”์—๋งŒ ์ ์šฉ๋œ๋‹ค.\n * ํฌ๊ธฐ๋Š” ์†Œ๋น„์ž๊ฐ€ className/style ๋กœ ์ง€์ •ํ•œ๋‹ค(ํ˜ธ์ŠคํŠธ ์˜ค๋ฒ„๋ผ์ด๋“œ ๊ฐ€๋Šฅ).\n */\nexport const SScrollArea = forwardRef<HTMLDivElement, SScrollAreaProps>(function SScrollArea(\n {\n axis = 'both',\n background = false,\n bordered = false,\n maxHeight,\n maxWidth,\n className,\n style,\n children,\n ...rest\n },\n ref,\n) {\n const mergedStyle: CSSProperties = { ...style };\n if (maxHeight) mergedStyle.maxHeight = maxHeight;\n if (maxWidth) mergedStyle.maxWidth = maxWidth;\n\n return (\n <div\n ref={ref}\n className={cn(\n AXIS_CLASS[axis],\n SCROLLBAR_CLASS,\n background && SCROLLBAR_TRACK_BG_CLASS,\n bordered && SCROLLBAR_TRACK_BORDER_CLASS,\n className,\n )}\n style={mergedStyle}\n {...rest}\n >\n {children}\n </div>\n );\n});\n"]}
@@ -3394,6 +3394,7 @@ var SField = react.forwardRef(function SField2({
3394
3394
  const resolvedSuccess = status === "pass";
3395
3395
  const showError = resolvedError && errorMessage !== "";
3396
3396
  const interactive = !disabled && !readOnly;
3397
+ const hug = cssLen(width) !== void 0;
3397
3398
  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)";
3398
3399
  const bgColor = borderless ? "transparent" : disabled ? "var(--color-grey-30)" : readOnly ? "var(--sys-color-field-bg-readOnly)" : "var(--sys-color-field-bg-default)";
3399
3400
  const textColor = disabled ? "var(--color-grey-65)" : readOnly ? "var(--sys-color-field-text-readOnly)" : "var(--sys-color-field-text-default)";
@@ -3402,7 +3403,13 @@ var SField = react.forwardRef(function SField2({
3402
3403
  {
3403
3404
  ref: rootRef,
3404
3405
  "data-name": name || void 0,
3405
- className: cn("inline-flex h-fit w-full flex-col", className),
3406
+ className: cn(
3407
+ "h-fit flex-col",
3408
+ // hug ์‹œ inline-flex ๋ฅผ ์œ ์ง€ํ•˜๋ฉด ๊ธฐ์กด์— ์„ธ๋กœ๋กœ ์Œ“์—ฌ ์žˆ๋˜ ํ•„๋“œ๋“ค์ด ํ•œ ์ค„์— ๋ถ™์–ด๋ฒ„๋ฆฌ๋ฏ€๋กœ
3409
+ // ๋ธ”๋ก ๋ ˆ๋ฒจ(flex)๋กœ ๋‘์–ด ์Œ“์ž„์€ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•œ๋‹ค. ๋‚˜๋ž€ํžˆ ๋†“์œผ๋ ค๋ฉด ๋ถ€๋ชจ๋ฅผ flex ๋กœ.
3410
+ hug ? "flex w-fit max-w-full" : "inline-flex w-full",
3411
+ className
3412
+ ),
3406
3413
  style,
3407
3414
  onMouseEnter,
3408
3415
  onMouseLeave,
@@ -3440,55 +3447,60 @@ var SField = react.forwardRef(function SField2({
3440
3447
  ]
3441
3448
  }
3442
3449
  ),
3443
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 flex-1 flex-col", children: [
3444
- /* @__PURE__ */ jsxRuntime.jsxs(
3445
- "div",
3446
- {
3447
- className: cn(
3448
- "relative box-border flex min-w-0 items-stretch overflow-hidden border border-solid border-(--field-bc)",
3449
- 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]",
3450
- disabled && "cursor-not-allowed"
3450
+ /* @__PURE__ */ jsxRuntime.jsxs(
3451
+ "div",
3452
+ {
3453
+ className: cn("flex min-w-0 flex-col", !hug && "flex-1"),
3454
+ style: { width: cssLen(width), minWidth: cssLen(minWidth) },
3455
+ children: [
3456
+ /* @__PURE__ */ jsxRuntime.jsxs(
3457
+ "div",
3458
+ {
3459
+ className: cn(
3460
+ "relative box-border flex min-w-0 items-stretch overflow-hidden border border-solid border-(--field-bc)",
3461
+ 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]",
3462
+ disabled && "cursor-not-allowed"
3463
+ ),
3464
+ style: {
3465
+ // @ts-expect-error CSS ๋ณ€์ˆ˜
3466
+ "--field-bc": borderColor,
3467
+ // focused/hovered prop์ด ๋ช…์‹œ๋œ ๊ฒฝ์šฐ ๊ฐ•์กฐ๋ฅผ ์ฆ‰์‹œ ๋ฐ˜์˜
3468
+ ...interactive && !borderless && focused ? { boxShadow: "0px 0px 4px 0px #0071ff66" } : {},
3469
+ ...multiline ? { minHeight: s.height } : { height: s.height },
3470
+ "borderRadius": s.radius,
3471
+ "background": bgColor,
3472
+ "color": textColor
3473
+ },
3474
+ "data-focused": focused || void 0,
3475
+ "data-hovered": hovered || void 0,
3476
+ children: [
3477
+ effectiveAddonLabel !== "" && /* @__PURE__ */ jsxRuntime.jsxs(
3478
+ "div",
3479
+ {
3480
+ 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",
3481
+ style: {
3482
+ // ์›๋ณธ sd-field: labelWidth๊ฐ€ addon ํญ(--sd-field-addon-width)์—๋„ ์ ์šฉ๋จ
3483
+ width: cssLen(labelWidth),
3484
+ justifyContent: ALIGN[addonAlign],
3485
+ background: "var(--cmp-field-addonLabel-bg)",
3486
+ borderRightColor: disabled ? "var(--cmp-field-addonLabel-border-disabled)" : "var(--cmp-field-addonLabel-border-default)",
3487
+ borderTopLeftRadius: s.radius - 1,
3488
+ borderBottomLeftRadius: s.radius - 1
3489
+ },
3490
+ children: [
3491
+ icon && !label && /* @__PURE__ */ jsxRuntime.jsx(SIcon, { name: icon, size: s.icon, color: iconColor }),
3492
+ effectiveAddonLabel
3493
+ ]
3494
+ }
3495
+ ),
3496
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex min-w-0 flex-1", children })
3497
+ ]
3498
+ }
3451
3499
  ),
3452
- style: {
3453
- // @ts-expect-error CSS ๋ณ€์ˆ˜
3454
- "--field-bc": borderColor,
3455
- // focused/hovered prop์ด ๋ช…์‹œ๋œ ๊ฒฝ์šฐ ๊ฐ•์กฐ๋ฅผ ์ฆ‰์‹œ ๋ฐ˜์˜
3456
- ...interactive && !borderless && focused ? { boxShadow: "0px 0px 4px 0px #0071ff66" } : {},
3457
- ...multiline ? { minHeight: s.height } : { height: s.height },
3458
- "minWidth": cssLen(minWidth),
3459
- "width": cssLen(width),
3460
- "borderRadius": s.radius,
3461
- "background": bgColor,
3462
- "color": textColor
3463
- },
3464
- "data-focused": focused || void 0,
3465
- "data-hovered": hovered || void 0,
3466
- children: [
3467
- effectiveAddonLabel !== "" && /* @__PURE__ */ jsxRuntime.jsxs(
3468
- "div",
3469
- {
3470
- 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",
3471
- style: {
3472
- // ์›๋ณธ sd-field: labelWidth๊ฐ€ addon ํญ(--sd-field-addon-width)์—๋„ ์ ์šฉ๋จ
3473
- width: cssLen(labelWidth),
3474
- justifyContent: ALIGN[addonAlign],
3475
- background: "var(--cmp-field-addonLabel-bg)",
3476
- borderRightColor: disabled ? "var(--cmp-field-addonLabel-border-disabled)" : "var(--cmp-field-addonLabel-border-default)",
3477
- borderTopLeftRadius: s.radius - 1,
3478
- borderBottomLeftRadius: s.radius - 1
3479
- },
3480
- children: [
3481
- icon && !label && /* @__PURE__ */ jsxRuntime.jsx(SIcon, { name: icon, size: s.icon, color: iconColor }),
3482
- effectiveAddonLabel
3483
- ]
3484
- }
3485
- ),
3486
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex min-w-0 flex-1", children })
3487
- ]
3488
- }
3489
- ),
3490
- 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
3491
- ] })
3500
+ 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
3501
+ ]
3502
+ }
3503
+ )
3492
3504
  ] })
3493
3505
  }
3494
3506
  );