sellmate-design-system-react 0.1.9 โ†’ 0.1.10

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 (82) hide show
  1. package/dist/components/SBarcodeInput/SBarcodeInput.cjs +1 -1
  2. package/dist/components/SBarcodeInput/SBarcodeInput.cjs.map +1 -1
  3. package/dist/components/SBarcodeInput/SBarcodeInput.js +1 -1
  4. package/dist/components/SBarcodeInput/SBarcodeInput.js.map +1 -1
  5. package/dist/components/SChipInput/SChipInput.cjs +1 -1
  6. package/dist/components/SChipInput/SChipInput.cjs.map +1 -1
  7. package/dist/components/SChipInput/SChipInput.js +1 -1
  8. package/dist/components/SChipInput/SChipInput.js.map +1 -1
  9. package/dist/components/SCircleProgress/SCircleProgress.cjs +69 -50
  10. package/dist/components/SCircleProgress/SCircleProgress.cjs.map +1 -1
  11. package/dist/components/SCircleProgress/SCircleProgress.d.ts +2 -0
  12. package/dist/components/SCircleProgress/SCircleProgress.js +69 -50
  13. package/dist/components/SCircleProgress/SCircleProgress.js.map +1 -1
  14. package/dist/components/SDatePicker/SDatePicker.cjs +1 -1
  15. package/dist/components/SDatePicker/SDatePicker.cjs.map +1 -1
  16. package/dist/components/SDatePicker/SDatePicker.js +1 -1
  17. package/dist/components/SDatePicker/SDatePicker.js.map +1 -1
  18. package/dist/components/SDateRangePicker/SDateRangePicker.cjs +1 -1
  19. package/dist/components/SDateRangePicker/SDateRangePicker.cjs.map +1 -1
  20. package/dist/components/SDateRangePicker/SDateRangePicker.js +1 -1
  21. package/dist/components/SDateRangePicker/SDateRangePicker.js.map +1 -1
  22. package/dist/components/SField/SField.cjs +1 -1
  23. package/dist/components/SField/SField.cjs.map +1 -1
  24. package/dist/components/SField/SField.js +1 -1
  25. package/dist/components/SField/SField.js.map +1 -1
  26. package/dist/components/SFilePicker/SFilePicker.cjs +36 -17
  27. package/dist/components/SFilePicker/SFilePicker.cjs.map +1 -1
  28. package/dist/components/SFilePicker/SFilePicker.d.ts +1 -1
  29. package/dist/components/SFilePicker/SFilePicker.js +35 -17
  30. package/dist/components/SFilePicker/SFilePicker.js.map +1 -1
  31. package/dist/components/SInput/SInput.cjs +1 -1
  32. package/dist/components/SInput/SInput.cjs.map +1 -1
  33. package/dist/components/SInput/SInput.js +1 -1
  34. package/dist/components/SInput/SInput.js.map +1 -1
  35. package/dist/components/SKeyValueTable/SKeyValueTable.cjs +43 -22
  36. package/dist/components/SKeyValueTable/SKeyValueTable.cjs.map +1 -1
  37. package/dist/components/SKeyValueTable/SKeyValueTable.js +43 -22
  38. package/dist/components/SKeyValueTable/SKeyValueTable.js.map +1 -1
  39. package/dist/components/SLoadingContainer/SLoadingContainer.cjs +69 -50
  40. package/dist/components/SLoadingContainer/SLoadingContainer.cjs.map +1 -1
  41. package/dist/components/SLoadingContainer/SLoadingContainer.js +69 -50
  42. package/dist/components/SLoadingContainer/SLoadingContainer.js.map +1 -1
  43. package/dist/components/SLoadingContainer/loading.cjs +69 -50
  44. package/dist/components/SLoadingContainer/loading.cjs.map +1 -1
  45. package/dist/components/SLoadingContainer/loading.js +69 -50
  46. package/dist/components/SLoadingContainer/loading.js.map +1 -1
  47. package/dist/components/SLoadingModal/SLoadingModal.cjs +72 -50
  48. package/dist/components/SLoadingModal/SLoadingModal.cjs.map +1 -1
  49. package/dist/components/SLoadingModal/SLoadingModal.d.ts +3 -1
  50. package/dist/components/SLoadingModal/SLoadingModal.js +72 -50
  51. package/dist/components/SLoadingModal/SLoadingModal.js.map +1 -1
  52. package/dist/components/SNumberInput/SNumberInput.cjs +1 -1
  53. package/dist/components/SNumberInput/SNumberInput.cjs.map +1 -1
  54. package/dist/components/SNumberInput/SNumberInput.js +1 -1
  55. package/dist/components/SNumberInput/SNumberInput.js.map +1 -1
  56. package/dist/components/SRadio/SRadioGroup.cjs +1 -1
  57. package/dist/components/SRadio/SRadioGroup.cjs.map +1 -1
  58. package/dist/components/SRadio/SRadioGroup.js +1 -1
  59. package/dist/components/SRadio/SRadioGroup.js.map +1 -1
  60. package/dist/components/SSelect/SSelect.cjs +8 -4
  61. package/dist/components/SSelect/SSelect.cjs.map +1 -1
  62. package/dist/components/SSelect/SSelect.js +8 -4
  63. package/dist/components/SSelect/SSelect.js.map +1 -1
  64. package/dist/components/STable/STable.cjs +82 -56
  65. package/dist/components/STable/STable.cjs.map +1 -1
  66. package/dist/components/STable/STable.js +82 -56
  67. package/dist/components/STable/STable.js.map +1 -1
  68. package/dist/components/STextarea/STextarea.cjs +1 -1
  69. package/dist/components/STextarea/STextarea.cjs.map +1 -1
  70. package/dist/components/STextarea/STextarea.js +1 -1
  71. package/dist/components/STextarea/STextarea.js.map +1 -1
  72. package/dist/components/STooltip/STooltip.cjs +1 -1
  73. package/dist/components/STooltip/STooltip.cjs.map +1 -1
  74. package/dist/components/STooltip/STooltip.js +1 -1
  75. package/dist/components/STooltip/STooltip.js.map +1 -1
  76. package/dist/index.cjs +120 -74
  77. package/dist/index.cjs.map +1 -1
  78. package/dist/index.js +120 -74
  79. package/dist/index.js.map +1 -1
  80. package/dist/styles.css +62 -21
  81. package/dist/theme.css +45 -21
  82. package/package.json +1 -1
@@ -122,7 +122,7 @@ function SRadioGroup({
122
122
  role: "radiogroup",
123
123
  className: cn(
124
124
  "inline-flex",
125
- direction === "vertical" ? "flex-col gap-[8px]" : "flex-row gap-[20px]",
125
+ direction === "vertical" ? "flex-col gap-[var(--cmp-radio-group-gap-vertical)]" : "flex-row gap-[var(--cmp-radio-group-gap-horizontal)]",
126
126
  className
127
127
  ),
128
128
  style,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/cn.ts","../../../src/components/SRadio/SRadio.tsx","../../../src/components/SRadio/SRadioGroup.tsx"],"names":["extendTailwindMerge","clsx","jsxs","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;ACIO,SAAS,MAAA,CAAO;AAAA,EACrB,GAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,IAAA;AAAA,EACA,aAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAAgB;AAEd,EAAA,MAAM,MAAA,GAAS,OAAO,GAAG,CAAA;AACzB,EAAA,MAAM,UAAU,KAAA,KAAU,GAAA;AAC1B,EAAA,MAAM,SAAS,MAAM;AACnB,IAAA,IAAI,CAAC,QAAA,IAAY,CAAC,OAAA,kBAAyB,GAAG,CAAA;AAAA,EAChD,CAAA;AAKA,EAAA,MAAM,MAAA,GAAS,IAAA,IAAQ,IAAA,IAAQ,IAAA,KAAS,EAAA;AAGxC,EAAA,MAAM,qBAAA,GAA0D,MAAA,GAC5D,EAAC,GACD;AAAA,IACE,MAAA,EAAQ,OAAA;AAAA,IACR,cAAA,EAAgB,OAAA;AAAA,IAChB,UAAA,EAAY,WAAW,EAAA,GAAK,CAAA;AAAA,IAC5B,SAAA,EAAW,MAAA;AAAA,IACX,aAAa,CAAA,CAAA,KAAK;AAChB,MAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,GAAA,IAAO,CAAA,CAAE,QAAQ,OAAA,EAAS;AACtC,QAAA,CAAA,CAAE,cAAA,EAAe;AACjB,QAAA,MAAA,EAAO;AAAA,MACT;AAAA,IACF;AAAA,GACF;AAEJ,EAAA,uBACEC,eAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACE,GAAG,qBAAA;AAAA,MACJ,SAAA,EAAW,EAAA;AAAA,QACT,oCAAA;AAAA,QACA,WAAW,oBAAA,GAAuB,gBAAA;AAAA,QAClC;AAAA,OACF;AAAA,MACA,KAAA;AAAA,MAEC,QAAA,EAAA;AAAA,QAAA,MAAA,oBACCC,cAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,OAAA;AAAA,YACL,IAAA;AAAA,YACA,KAAA,EAAO,MAAA;AAAA,YACP,OAAA;AAAA,YACA,QAAA;AAAA,YAGA,QAAA,EAAU,MAAM,aAAA,GAAgB,GAAG,CAAA;AAAA,YACnC,SAAA,EAAU;AAAA;AAAA,SACZ;AAAA,wBAEFA,cAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,EAAA;AAAA,cACT,qJAAA;AAAA,cACA,CAAC,QAAA,IACC,CAAC,OAAA,IACD;AAAA,aACJ;AAAA,YACA,KAAA,EACE;AAAA,cACE,SAAA,EAAW,WAAW,8BAAA,GAAiC,6BAAA;AAAA,cACvD,aAAA,EAAe,QAAA,GACX,kCAAA,GACA,OAAA,GACE,gCAAA,GACA;AAAA,aACR;AAAA,YAGD,QAAA,EAAA,OAAA,oBACCA,cAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAU,gCAAA;AAAA,gBACV,KAAA,EAAO;AAAA,kBACL,UAAA,EAAY,WACR,+BAAA,GACA;AAAA;AACN;AAAA;AACF;AAAA,SAEJ;AAAA,QACC,KAAA,oBACCD,eAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,iCAAA;AAAA,YACV,KAAA,EAAO;AAAA,cACL,KAAA,EAAO,WAAW,iCAAA,GAAoC;AAAA,aACxD;AAAA,YAEA,QAAA,EAAA;AAAA,8BAAAC,cAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAW,IAAA,EAAC,SAAA,EAAU,uBAAA,EAAwB,OAAO,EAAE,QAAA,EAAU,OAAA,EAAQ,EAC5E,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,8BACAA,cAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,QAAA,EAAU,OAAA,EAAS,UAAA,EAAY,OAAA,GAAU,GAAA,GAAM,GAAA,EAAI,EAAI,QAAA,EAAA,KAAA,EAAM;AAAA;AAAA;AAAA;AAC9E;AAAA;AAAA,GAEJ;AAEJ;ACpGO,SAAS,WAAA,CAAY;AAAA,EAC1B,UAAU,EAAC;AAAA,EACX,KAAA;AAAA,EACA,SAAA,GAAY,UAAA;AAAA,EACZ,QAAA,GAAW,KAAA;AAAA,EACX,SAAA;AAAA,EACA,aAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAAqB;AACnB,EAAA,uBACEA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,YAAA;AAAA,MACL,SAAA,EAAW,EAAA;AAAA,QACT,aAAA;AAAA,QACA,SAAA,KAAc,aAAa,oBAAA,GAAuB,qBAAA;AAAA,QAClD;AAAA,OACF;AAAA,MACA,KAAA;AAAA,MAEC,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,CAAA,qBACXA,cAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UAEC,KAAK,CAAA,CAAE,KAAA;AAAA,UACP,KAAA;AAAA,UACA,OAAO,CAAA,CAAE,KAAA;AAAA,UACT,IAAA,EAAM,SAAA;AAAA,UACN,QAAA,EAAU,YAAY,CAAA,CAAE,QAAA;AAAA,UACxB;AAAA,SAAA;AAAA,QANK,MAAA,CAAO,EAAE,KAAK;AAAA,OAQtB;AAAA;AAAA,GACH;AAEJ","file":"SRadioGroup.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","'use client';\n\nimport { type CSSProperties, type HTMLAttributes } from 'react';\nimport { cn } from '../../lib/cn';\n\n/** ๋ผ๋””์˜ค ๊ฐ’ ํƒ€์ž… (sd-radio SRadioValue) */\nexport type SRadioValue = string | number | boolean;\n\nexport interface SRadioProps {\n /** ์ด ๋ผ๋””์˜ค์˜ ๊ฐ’ */\n val: SRadioValue;\n /** ๊ทธ๋ฃน์˜ ํ˜„์žฌ ์„ ํƒ ๊ฐ’ */\n value?: SRadioValue | null;\n /** ๋ผ๋ฒจ */\n label?: string;\n /** ๋น„ํ™œ์„ฑ */\n disabled?: boolean;\n /** native radio name (form-agnostic ๊ทธ๋ฃนํ•‘) */\n name?: string;\n /** ์„ ํƒ ๋ณ€๊ฒฝ (sdUpdate) โ€” ์„ ํƒ๋œ val ์ „๋‹ฌ */\n onValueChange?: (val: SRadioValue) => void;\n className?: string;\n style?: CSSProperties;\n}\n\n/** SRadio โ€” sd-radio ํฌํŒ…. value===val ์ด๋ฉด ์„ ํƒ. ๋‹จ๋… ๋˜๋Š” SRadioGroup ์•ˆ์—์„œ ์‚ฌ์šฉ. */\nexport function SRadio({\n val,\n value,\n label,\n disabled = false,\n name,\n onValueChange,\n className,\n style,\n}: SRadioProps) {\n // key/name ์†์„ฑ์šฉ ๋ฌธ์ž์—ด ํ‘œํ˜„\n const valStr = String(val);\n const checked = value === val;\n const select = () => {\n if (!disabled && !checked) onValueChange?.(val);\n };\n\n // name ์ด ์žˆ์œผ๋ฉด ๋„ค์ดํ‹ฐ๋ธŒ <input type=\"radio\"> ๊ฐ€ ์‹ค์ œ ์ƒํ˜ธ์ž‘์šฉ ์ปจํŠธ๋กค์ด ๋œ๋‹ค.\n // ์ด๋•Œ label ์—๋Š” role/tabIndex/ํ‚คํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ฃผ์ง€ ์•Š๋Š”๋‹ค โ€” ์ƒํ˜ธ์ž‘์šฉ ์š”์†Œ ์ค‘์ฒฉ\n // (role=\"radio\" ์•ˆ์— native radio) ๋ฐ radio ์—ญํ•  ์ค‘๋ณต์„ ํ”ผํ•œ๋‹ค.\n const native = name != null && name !== '';\n\n // native ๋ชจ๋“œ๊ฐ€ ์•„๋‹ˆ๋ฉด label ์ž์ฒด๊ฐ€ ์ปค์Šคํ…€ radio ๋กœ ๋™์ž‘ํ•œ๋‹ค.\n const labelInteractiveProps: HTMLAttributes<HTMLLabelElement> = native\n ? {}\n : {\n 'role': 'radio',\n 'aria-checked': checked,\n 'tabIndex': disabled ? -1 : 0,\n 'onClick': select,\n 'onKeyDown': e => {\n if (e.key === ' ' || e.key === 'Enter') {\n e.preventDefault();\n select();\n }\n },\n };\n\n return (\n <label\n {...labelInteractiveProps}\n className={cn(\n 'inline-flex items-center gap-[8px]',\n disabled ? 'cursor-not-allowed' : 'cursor-pointer',\n className,\n )}\n style={style}\n >\n {native && (\n <input\n type=\"radio\"\n name={name}\n value={valStr}\n checked={checked}\n disabled={disabled}\n // ๋„ค์ดํ‹ฐ๋ธŒ ๋ผ๋””์˜ค๊ฐ€ ํฌ์ปค์Šค/ํ‚ค๋ณด๋“œ/์„ ํƒ์„ ๋‹ด๋‹นํ•œ๋‹ค. label ์ด ๊ฐ์‹ธ๋ฏ€๋กœ\n // ๋ผ๋ฒจ ํด๋ฆญ๋„ ์ด input ์„ ํ† ๊ธ€ํ•˜๋ฉฐ, onChange ๋Š” ๊ฐ’์ด ์‹ค์ œ๋กœ ๋ฐ”๋€” ๋•Œ๋งŒ ๋ฐœ์ƒ.\n onChange={() => onValueChange?.(val)}\n className=\"sr-only\"\n />\n )}\n <span\n className={cn(\n 'flex h-[16px] w-[16px] flex-shrink-0 items-center justify-center rounded-full border border-solid border-[color:var(--rd-border)] bg-[var(--rd-bg)]',\n !disabled &&\n !checked &&\n 'hover:border-[color:var(--cmp-radio-border-hover)] hover:bg-[var(--cmp-radio-bg-hover)]',\n )}\n style={\n {\n '--rd-bg': disabled ? 'var(--cmp-radio-bg-disabled)' : 'var(--cmp-radio-bg-default)',\n '--rd-border': disabled\n ? 'var(--cmp-radio-border-disabled)'\n : checked\n ? 'var(--cmp-radio-border-active)'\n : 'var(--cmp-radio-border-default)',\n } as CSSProperties\n }\n >\n {checked && (\n <span\n className=\"h-[10px] w-[10px] rounded-full\"\n style={{\n background: disabled\n ? 'var(--cmp-radio-dot-disabled)'\n : 'var(--cmp-radio-dot-default)',\n }}\n />\n )}\n </span>\n {label && (\n <span\n className=\"grid text-[12px] leading-[20px]\"\n style={{\n color: disabled ? 'var(--cmp-radio-label-disabled)' : 'var(--cmp-radio-label-default)',\n }}\n >\n <span aria-hidden className=\"invisible font-medium\" style={{ gridArea: '1 / 1' }}>\n {label}\n </span>\n <span style={{ gridArea: '1 / 1', fontWeight: checked ? 500 : 400 }}>{label}</span>\n </span>\n )}\n </label>\n );\n}\n","'use client';\n\nimport { type CSSProperties } from 'react';\nimport { cn } from '../../lib/cn';\nimport { SRadio, type SRadioValue } from './SRadio';\n\nexport interface SRadioOption {\n /** ์˜ต์…˜ ๊ฐ’ (sd-radio-group SRadioOption.value) */\n value: SRadioValue;\n label: string;\n disabled?: boolean;\n}\n\nexport interface SRadioGroupProps {\n /** ์˜ต์…˜ ๋ชฉ๋ก */\n options?: SRadioOption[];\n /** ํ˜„์žฌ ์„ ํƒ ๊ฐ’ */\n value?: SRadioValue | null;\n /** ๋ฐฐ์น˜ ๋ฐฉํ–ฅ */\n direction?: 'vertical' | 'horizontal';\n /** ์ „์ฒด ๋น„ํ™œ์„ฑ */\n disabled?: boolean;\n /** ๋ผ๋””์˜ค name ์†์„ฑ (form-agnostic ๊ทธ๋ฃนํ•‘) */\n groupName?: string;\n /** ์„ ํƒ ๋ณ€๊ฒฝ (sdUpdate) */\n onValueChange?: (val: SRadioValue) => void;\n className?: string;\n style?: CSSProperties;\n}\n\n/** SRadioGroup โ€” sd-radio-group ํฌํŒ…. options๋ฅผ SRadio๋กœ ๋ Œ๋”. */\nexport function SRadioGroup({\n options = [],\n value,\n direction = 'vertical',\n disabled = false,\n groupName,\n onValueChange,\n className,\n style,\n}: SRadioGroupProps) {\n return (\n <div\n role=\"radiogroup\"\n className={cn(\n 'inline-flex',\n direction === 'vertical' ? 'flex-col gap-[8px]' : 'flex-row gap-[20px]',\n className,\n )}\n style={style}\n >\n {options.map(o => (\n <SRadio\n key={String(o.value)}\n val={o.value}\n value={value}\n label={o.label}\n name={groupName}\n disabled={disabled || o.disabled}\n onValueChange={onValueChange}\n />\n ))}\n </div>\n );\n}\n"]}
1
+ {"version":3,"sources":["../../../src/lib/cn.ts","../../../src/components/SRadio/SRadio.tsx","../../../src/components/SRadio/SRadioGroup.tsx"],"names":["extendTailwindMerge","clsx","jsxs","jsx"],"mappings":"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","file":"SRadioGroup.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","'use client';\n\nimport { type CSSProperties, type HTMLAttributes } from 'react';\nimport { cn } from '../../lib/cn';\n\n/** ๋ผ๋””์˜ค ๊ฐ’ ํƒ€์ž… (sd-radio SRadioValue) */\nexport type SRadioValue = string | number | boolean;\n\nexport interface SRadioProps {\n /** ์ด ๋ผ๋””์˜ค์˜ ๊ฐ’ */\n val: SRadioValue;\n /** ๊ทธ๋ฃน์˜ ํ˜„์žฌ ์„ ํƒ ๊ฐ’ */\n value?: SRadioValue | null;\n /** ๋ผ๋ฒจ */\n label?: string;\n /** ๋น„ํ™œ์„ฑ */\n disabled?: boolean;\n /** native radio name (form-agnostic ๊ทธ๋ฃนํ•‘) */\n name?: string;\n /** ์„ ํƒ ๋ณ€๊ฒฝ (sdUpdate) โ€” ์„ ํƒ๋œ val ์ „๋‹ฌ */\n onValueChange?: (val: SRadioValue) => void;\n className?: string;\n style?: CSSProperties;\n}\n\n/** SRadio โ€” sd-radio ํฌํŒ…. value===val ์ด๋ฉด ์„ ํƒ. ๋‹จ๋… ๋˜๋Š” SRadioGroup ์•ˆ์—์„œ ์‚ฌ์šฉ. */\nexport function SRadio({\n val,\n value,\n label,\n disabled = false,\n name,\n onValueChange,\n className,\n style,\n}: SRadioProps) {\n // key/name ์†์„ฑ์šฉ ๋ฌธ์ž์—ด ํ‘œํ˜„\n const valStr = String(val);\n const checked = value === val;\n const select = () => {\n if (!disabled && !checked) onValueChange?.(val);\n };\n\n // name ์ด ์žˆ์œผ๋ฉด ๋„ค์ดํ‹ฐ๋ธŒ <input type=\"radio\"> ๊ฐ€ ์‹ค์ œ ์ƒํ˜ธ์ž‘์šฉ ์ปจํŠธ๋กค์ด ๋œ๋‹ค.\n // ์ด๋•Œ label ์—๋Š” role/tabIndex/ํ‚คํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ฃผ์ง€ ์•Š๋Š”๋‹ค โ€” ์ƒํ˜ธ์ž‘์šฉ ์š”์†Œ ์ค‘์ฒฉ\n // (role=\"radio\" ์•ˆ์— native radio) ๋ฐ radio ์—ญํ•  ์ค‘๋ณต์„ ํ”ผํ•œ๋‹ค.\n const native = name != null && name !== '';\n\n // native ๋ชจ๋“œ๊ฐ€ ์•„๋‹ˆ๋ฉด label ์ž์ฒด๊ฐ€ ์ปค์Šคํ…€ radio ๋กœ ๋™์ž‘ํ•œ๋‹ค.\n const labelInteractiveProps: HTMLAttributes<HTMLLabelElement> = native\n ? {}\n : {\n 'role': 'radio',\n 'aria-checked': checked,\n 'tabIndex': disabled ? -1 : 0,\n 'onClick': select,\n 'onKeyDown': e => {\n if (e.key === ' ' || e.key === 'Enter') {\n e.preventDefault();\n select();\n }\n },\n };\n\n return (\n <label\n {...labelInteractiveProps}\n className={cn(\n 'inline-flex items-center gap-[8px]',\n disabled ? 'cursor-not-allowed' : 'cursor-pointer',\n className,\n )}\n style={style}\n >\n {native && (\n <input\n type=\"radio\"\n name={name}\n value={valStr}\n checked={checked}\n disabled={disabled}\n // ๋„ค์ดํ‹ฐ๋ธŒ ๋ผ๋””์˜ค๊ฐ€ ํฌ์ปค์Šค/ํ‚ค๋ณด๋“œ/์„ ํƒ์„ ๋‹ด๋‹นํ•œ๋‹ค. label ์ด ๊ฐ์‹ธ๋ฏ€๋กœ\n // ๋ผ๋ฒจ ํด๋ฆญ๋„ ์ด input ์„ ํ† ๊ธ€ํ•˜๋ฉฐ, onChange ๋Š” ๊ฐ’์ด ์‹ค์ œ๋กœ ๋ฐ”๋€” ๋•Œ๋งŒ ๋ฐœ์ƒ.\n onChange={() => onValueChange?.(val)}\n className=\"sr-only\"\n />\n )}\n <span\n className={cn(\n 'flex h-[16px] w-[16px] flex-shrink-0 items-center justify-center rounded-full border border-solid border-[color:var(--rd-border)] bg-[var(--rd-bg)]',\n !disabled &&\n !checked &&\n 'hover:border-[color:var(--cmp-radio-border-hover)] hover:bg-[var(--cmp-radio-bg-hover)]',\n )}\n style={\n {\n '--rd-bg': disabled ? 'var(--cmp-radio-bg-disabled)' : 'var(--cmp-radio-bg-default)',\n '--rd-border': disabled\n ? 'var(--cmp-radio-border-disabled)'\n : checked\n ? 'var(--cmp-radio-border-active)'\n : 'var(--cmp-radio-border-default)',\n } as CSSProperties\n }\n >\n {checked && (\n <span\n className=\"h-[10px] w-[10px] rounded-full\"\n style={{\n background: disabled\n ? 'var(--cmp-radio-dot-disabled)'\n : 'var(--cmp-radio-dot-default)',\n }}\n />\n )}\n </span>\n {label && (\n <span\n className=\"grid text-[12px] leading-[20px]\"\n style={{\n color: disabled ? 'var(--cmp-radio-label-disabled)' : 'var(--cmp-radio-label-default)',\n }}\n >\n <span aria-hidden className=\"invisible font-medium\" style={{ gridArea: '1 / 1' }}>\n {label}\n </span>\n <span style={{ gridArea: '1 / 1', fontWeight: checked ? 500 : 400 }}>{label}</span>\n </span>\n )}\n </label>\n );\n}\n","'use client';\n\nimport { type CSSProperties } from 'react';\nimport { cn } from '../../lib/cn';\nimport { SRadio, type SRadioValue } from './SRadio';\n\nexport interface SRadioOption {\n /** ์˜ต์…˜ ๊ฐ’ (sd-radio-group SRadioOption.value) */\n value: SRadioValue;\n label: string;\n disabled?: boolean;\n}\n\nexport interface SRadioGroupProps {\n /** ์˜ต์…˜ ๋ชฉ๋ก */\n options?: SRadioOption[];\n /** ํ˜„์žฌ ์„ ํƒ ๊ฐ’ */\n value?: SRadioValue | null;\n /** ๋ฐฐ์น˜ ๋ฐฉํ–ฅ */\n direction?: 'vertical' | 'horizontal';\n /** ์ „์ฒด ๋น„ํ™œ์„ฑ */\n disabled?: boolean;\n /** ๋ผ๋””์˜ค name ์†์„ฑ (form-agnostic ๊ทธ๋ฃนํ•‘) */\n groupName?: string;\n /** ์„ ํƒ ๋ณ€๊ฒฝ (sdUpdate) */\n onValueChange?: (val: SRadioValue) => void;\n className?: string;\n style?: CSSProperties;\n}\n\n/** SRadioGroup โ€” sd-radio-group ํฌํŒ…. options๋ฅผ SRadio๋กœ ๋ Œ๋”. */\nexport function SRadioGroup({\n options = [],\n value,\n direction = 'vertical',\n disabled = false,\n groupName,\n onValueChange,\n className,\n style,\n}: SRadioGroupProps) {\n return (\n <div\n role=\"radiogroup\"\n className={cn(\n 'inline-flex',\n direction === 'vertical'\n ? 'flex-col gap-[var(--cmp-radio-group-gap-vertical)]'\n : 'flex-row gap-[var(--cmp-radio-group-gap-horizontal)]',\n className,\n )}\n style={style}\n >\n {options.map(o => (\n <SRadio\n key={String(o.value)}\n val={o.value}\n value={value}\n label={o.label}\n name={groupName}\n disabled={disabled || o.disabled}\n onValueChange={onValueChange}\n />\n ))}\n </div>\n );\n}\n"]}
@@ -120,7 +120,7 @@ function SRadioGroup({
120
120
  role: "radiogroup",
121
121
  className: cn(
122
122
  "inline-flex",
123
- direction === "vertical" ? "flex-col gap-[8px]" : "flex-row gap-[20px]",
123
+ direction === "vertical" ? "flex-col gap-[var(--cmp-radio-group-gap-vertical)]" : "flex-row gap-[var(--cmp-radio-group-gap-horizontal)]",
124
124
  className
125
125
  ),
126
126
  style,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/cn.ts","../../../src/components/SRadio/SRadio.tsx","../../../src/components/SRadio/SRadioGroup.tsx"],"names":["jsx"],"mappings":"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","file":"SRadioGroup.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","'use client';\n\nimport { type CSSProperties, type HTMLAttributes } from 'react';\nimport { cn } from '../../lib/cn';\n\n/** ๋ผ๋””์˜ค ๊ฐ’ ํƒ€์ž… (sd-radio SRadioValue) */\nexport type SRadioValue = string | number | boolean;\n\nexport interface SRadioProps {\n /** ์ด ๋ผ๋””์˜ค์˜ ๊ฐ’ */\n val: SRadioValue;\n /** ๊ทธ๋ฃน์˜ ํ˜„์žฌ ์„ ํƒ ๊ฐ’ */\n value?: SRadioValue | null;\n /** ๋ผ๋ฒจ */\n label?: string;\n /** ๋น„ํ™œ์„ฑ */\n disabled?: boolean;\n /** native radio name (form-agnostic ๊ทธ๋ฃนํ•‘) */\n name?: string;\n /** ์„ ํƒ ๋ณ€๊ฒฝ (sdUpdate) โ€” ์„ ํƒ๋œ val ์ „๋‹ฌ */\n onValueChange?: (val: SRadioValue) => void;\n className?: string;\n style?: CSSProperties;\n}\n\n/** SRadio โ€” sd-radio ํฌํŒ…. value===val ์ด๋ฉด ์„ ํƒ. ๋‹จ๋… ๋˜๋Š” SRadioGroup ์•ˆ์—์„œ ์‚ฌ์šฉ. */\nexport function SRadio({\n val,\n value,\n label,\n disabled = false,\n name,\n onValueChange,\n className,\n style,\n}: SRadioProps) {\n // key/name ์†์„ฑ์šฉ ๋ฌธ์ž์—ด ํ‘œํ˜„\n const valStr = String(val);\n const checked = value === val;\n const select = () => {\n if (!disabled && !checked) onValueChange?.(val);\n };\n\n // name ์ด ์žˆ์œผ๋ฉด ๋„ค์ดํ‹ฐ๋ธŒ <input type=\"radio\"> ๊ฐ€ ์‹ค์ œ ์ƒํ˜ธ์ž‘์šฉ ์ปจํŠธ๋กค์ด ๋œ๋‹ค.\n // ์ด๋•Œ label ์—๋Š” role/tabIndex/ํ‚คํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ฃผ์ง€ ์•Š๋Š”๋‹ค โ€” ์ƒํ˜ธ์ž‘์šฉ ์š”์†Œ ์ค‘์ฒฉ\n // (role=\"radio\" ์•ˆ์— native radio) ๋ฐ radio ์—ญํ•  ์ค‘๋ณต์„ ํ”ผํ•œ๋‹ค.\n const native = name != null && name !== '';\n\n // native ๋ชจ๋“œ๊ฐ€ ์•„๋‹ˆ๋ฉด label ์ž์ฒด๊ฐ€ ์ปค์Šคํ…€ radio ๋กœ ๋™์ž‘ํ•œ๋‹ค.\n const labelInteractiveProps: HTMLAttributes<HTMLLabelElement> = native\n ? {}\n : {\n 'role': 'radio',\n 'aria-checked': checked,\n 'tabIndex': disabled ? -1 : 0,\n 'onClick': select,\n 'onKeyDown': e => {\n if (e.key === ' ' || e.key === 'Enter') {\n e.preventDefault();\n select();\n }\n },\n };\n\n return (\n <label\n {...labelInteractiveProps}\n className={cn(\n 'inline-flex items-center gap-[8px]',\n disabled ? 'cursor-not-allowed' : 'cursor-pointer',\n className,\n )}\n style={style}\n >\n {native && (\n <input\n type=\"radio\"\n name={name}\n value={valStr}\n checked={checked}\n disabled={disabled}\n // ๋„ค์ดํ‹ฐ๋ธŒ ๋ผ๋””์˜ค๊ฐ€ ํฌ์ปค์Šค/ํ‚ค๋ณด๋“œ/์„ ํƒ์„ ๋‹ด๋‹นํ•œ๋‹ค. label ์ด ๊ฐ์‹ธ๋ฏ€๋กœ\n // ๋ผ๋ฒจ ํด๋ฆญ๋„ ์ด input ์„ ํ† ๊ธ€ํ•˜๋ฉฐ, onChange ๋Š” ๊ฐ’์ด ์‹ค์ œ๋กœ ๋ฐ”๋€” ๋•Œ๋งŒ ๋ฐœ์ƒ.\n onChange={() => onValueChange?.(val)}\n className=\"sr-only\"\n />\n )}\n <span\n className={cn(\n 'flex h-[16px] w-[16px] flex-shrink-0 items-center justify-center rounded-full border border-solid border-[color:var(--rd-border)] bg-[var(--rd-bg)]',\n !disabled &&\n !checked &&\n 'hover:border-[color:var(--cmp-radio-border-hover)] hover:bg-[var(--cmp-radio-bg-hover)]',\n )}\n style={\n {\n '--rd-bg': disabled ? 'var(--cmp-radio-bg-disabled)' : 'var(--cmp-radio-bg-default)',\n '--rd-border': disabled\n ? 'var(--cmp-radio-border-disabled)'\n : checked\n ? 'var(--cmp-radio-border-active)'\n : 'var(--cmp-radio-border-default)',\n } as CSSProperties\n }\n >\n {checked && (\n <span\n className=\"h-[10px] w-[10px] rounded-full\"\n style={{\n background: disabled\n ? 'var(--cmp-radio-dot-disabled)'\n : 'var(--cmp-radio-dot-default)',\n }}\n />\n )}\n </span>\n {label && (\n <span\n className=\"grid text-[12px] leading-[20px]\"\n style={{\n color: disabled ? 'var(--cmp-radio-label-disabled)' : 'var(--cmp-radio-label-default)',\n }}\n >\n <span aria-hidden className=\"invisible font-medium\" style={{ gridArea: '1 / 1' }}>\n {label}\n </span>\n <span style={{ gridArea: '1 / 1', fontWeight: checked ? 500 : 400 }}>{label}</span>\n </span>\n )}\n </label>\n );\n}\n","'use client';\n\nimport { type CSSProperties } from 'react';\nimport { cn } from '../../lib/cn';\nimport { SRadio, type SRadioValue } from './SRadio';\n\nexport interface SRadioOption {\n /** ์˜ต์…˜ ๊ฐ’ (sd-radio-group SRadioOption.value) */\n value: SRadioValue;\n label: string;\n disabled?: boolean;\n}\n\nexport interface SRadioGroupProps {\n /** ์˜ต์…˜ ๋ชฉ๋ก */\n options?: SRadioOption[];\n /** ํ˜„์žฌ ์„ ํƒ ๊ฐ’ */\n value?: SRadioValue | null;\n /** ๋ฐฐ์น˜ ๋ฐฉํ–ฅ */\n direction?: 'vertical' | 'horizontal';\n /** ์ „์ฒด ๋น„ํ™œ์„ฑ */\n disabled?: boolean;\n /** ๋ผ๋””์˜ค name ์†์„ฑ (form-agnostic ๊ทธ๋ฃนํ•‘) */\n groupName?: string;\n /** ์„ ํƒ ๋ณ€๊ฒฝ (sdUpdate) */\n onValueChange?: (val: SRadioValue) => void;\n className?: string;\n style?: CSSProperties;\n}\n\n/** SRadioGroup โ€” sd-radio-group ํฌํŒ…. options๋ฅผ SRadio๋กœ ๋ Œ๋”. */\nexport function SRadioGroup({\n options = [],\n value,\n direction = 'vertical',\n disabled = false,\n groupName,\n onValueChange,\n className,\n style,\n}: SRadioGroupProps) {\n return (\n <div\n role=\"radiogroup\"\n className={cn(\n 'inline-flex',\n direction === 'vertical' ? 'flex-col gap-[8px]' : 'flex-row gap-[20px]',\n className,\n )}\n style={style}\n >\n {options.map(o => (\n <SRadio\n key={String(o.value)}\n val={o.value}\n value={value}\n label={o.label}\n name={groupName}\n disabled={disabled || o.disabled}\n onValueChange={onValueChange}\n />\n ))}\n </div>\n );\n}\n"]}
1
+ {"version":3,"sources":["../../../src/lib/cn.ts","../../../src/components/SRadio/SRadio.tsx","../../../src/components/SRadio/SRadioGroup.tsx"],"names":["jsx"],"mappings":"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","file":"SRadioGroup.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","'use client';\n\nimport { type CSSProperties, type HTMLAttributes } from 'react';\nimport { cn } from '../../lib/cn';\n\n/** ๋ผ๋””์˜ค ๊ฐ’ ํƒ€์ž… (sd-radio SRadioValue) */\nexport type SRadioValue = string | number | boolean;\n\nexport interface SRadioProps {\n /** ์ด ๋ผ๋””์˜ค์˜ ๊ฐ’ */\n val: SRadioValue;\n /** ๊ทธ๋ฃน์˜ ํ˜„์žฌ ์„ ํƒ ๊ฐ’ */\n value?: SRadioValue | null;\n /** ๋ผ๋ฒจ */\n label?: string;\n /** ๋น„ํ™œ์„ฑ */\n disabled?: boolean;\n /** native radio name (form-agnostic ๊ทธ๋ฃนํ•‘) */\n name?: string;\n /** ์„ ํƒ ๋ณ€๊ฒฝ (sdUpdate) โ€” ์„ ํƒ๋œ val ์ „๋‹ฌ */\n onValueChange?: (val: SRadioValue) => void;\n className?: string;\n style?: CSSProperties;\n}\n\n/** SRadio โ€” sd-radio ํฌํŒ…. value===val ์ด๋ฉด ์„ ํƒ. ๋‹จ๋… ๋˜๋Š” SRadioGroup ์•ˆ์—์„œ ์‚ฌ์šฉ. */\nexport function SRadio({\n val,\n value,\n label,\n disabled = false,\n name,\n onValueChange,\n className,\n style,\n}: SRadioProps) {\n // key/name ์†์„ฑ์šฉ ๋ฌธ์ž์—ด ํ‘œํ˜„\n const valStr = String(val);\n const checked = value === val;\n const select = () => {\n if (!disabled && !checked) onValueChange?.(val);\n };\n\n // name ์ด ์žˆ์œผ๋ฉด ๋„ค์ดํ‹ฐ๋ธŒ <input type=\"radio\"> ๊ฐ€ ์‹ค์ œ ์ƒํ˜ธ์ž‘์šฉ ์ปจํŠธ๋กค์ด ๋œ๋‹ค.\n // ์ด๋•Œ label ์—๋Š” role/tabIndex/ํ‚คํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ฃผ์ง€ ์•Š๋Š”๋‹ค โ€” ์ƒํ˜ธ์ž‘์šฉ ์š”์†Œ ์ค‘์ฒฉ\n // (role=\"radio\" ์•ˆ์— native radio) ๋ฐ radio ์—ญํ•  ์ค‘๋ณต์„ ํ”ผํ•œ๋‹ค.\n const native = name != null && name !== '';\n\n // native ๋ชจ๋“œ๊ฐ€ ์•„๋‹ˆ๋ฉด label ์ž์ฒด๊ฐ€ ์ปค์Šคํ…€ radio ๋กœ ๋™์ž‘ํ•œ๋‹ค.\n const labelInteractiveProps: HTMLAttributes<HTMLLabelElement> = native\n ? {}\n : {\n 'role': 'radio',\n 'aria-checked': checked,\n 'tabIndex': disabled ? -1 : 0,\n 'onClick': select,\n 'onKeyDown': e => {\n if (e.key === ' ' || e.key === 'Enter') {\n e.preventDefault();\n select();\n }\n },\n };\n\n return (\n <label\n {...labelInteractiveProps}\n className={cn(\n 'inline-flex items-center gap-[8px]',\n disabled ? 'cursor-not-allowed' : 'cursor-pointer',\n className,\n )}\n style={style}\n >\n {native && (\n <input\n type=\"radio\"\n name={name}\n value={valStr}\n checked={checked}\n disabled={disabled}\n // ๋„ค์ดํ‹ฐ๋ธŒ ๋ผ๋””์˜ค๊ฐ€ ํฌ์ปค์Šค/ํ‚ค๋ณด๋“œ/์„ ํƒ์„ ๋‹ด๋‹นํ•œ๋‹ค. label ์ด ๊ฐ์‹ธ๋ฏ€๋กœ\n // ๋ผ๋ฒจ ํด๋ฆญ๋„ ์ด input ์„ ํ† ๊ธ€ํ•˜๋ฉฐ, onChange ๋Š” ๊ฐ’์ด ์‹ค์ œ๋กœ ๋ฐ”๋€” ๋•Œ๋งŒ ๋ฐœ์ƒ.\n onChange={() => onValueChange?.(val)}\n className=\"sr-only\"\n />\n )}\n <span\n className={cn(\n 'flex h-[16px] w-[16px] flex-shrink-0 items-center justify-center rounded-full border border-solid border-[color:var(--rd-border)] bg-[var(--rd-bg)]',\n !disabled &&\n !checked &&\n 'hover:border-[color:var(--cmp-radio-border-hover)] hover:bg-[var(--cmp-radio-bg-hover)]',\n )}\n style={\n {\n '--rd-bg': disabled ? 'var(--cmp-radio-bg-disabled)' : 'var(--cmp-radio-bg-default)',\n '--rd-border': disabled\n ? 'var(--cmp-radio-border-disabled)'\n : checked\n ? 'var(--cmp-radio-border-active)'\n : 'var(--cmp-radio-border-default)',\n } as CSSProperties\n }\n >\n {checked && (\n <span\n className=\"h-[10px] w-[10px] rounded-full\"\n style={{\n background: disabled\n ? 'var(--cmp-radio-dot-disabled)'\n : 'var(--cmp-radio-dot-default)',\n }}\n />\n )}\n </span>\n {label && (\n <span\n className=\"grid text-[12px] leading-[20px]\"\n style={{\n color: disabled ? 'var(--cmp-radio-label-disabled)' : 'var(--cmp-radio-label-default)',\n }}\n >\n <span aria-hidden className=\"invisible font-medium\" style={{ gridArea: '1 / 1' }}>\n {label}\n </span>\n <span style={{ gridArea: '1 / 1', fontWeight: checked ? 500 : 400 }}>{label}</span>\n </span>\n )}\n </label>\n );\n}\n","'use client';\n\nimport { type CSSProperties } from 'react';\nimport { cn } from '../../lib/cn';\nimport { SRadio, type SRadioValue } from './SRadio';\n\nexport interface SRadioOption {\n /** ์˜ต์…˜ ๊ฐ’ (sd-radio-group SRadioOption.value) */\n value: SRadioValue;\n label: string;\n disabled?: boolean;\n}\n\nexport interface SRadioGroupProps {\n /** ์˜ต์…˜ ๋ชฉ๋ก */\n options?: SRadioOption[];\n /** ํ˜„์žฌ ์„ ํƒ ๊ฐ’ */\n value?: SRadioValue | null;\n /** ๋ฐฐ์น˜ ๋ฐฉํ–ฅ */\n direction?: 'vertical' | 'horizontal';\n /** ์ „์ฒด ๋น„ํ™œ์„ฑ */\n disabled?: boolean;\n /** ๋ผ๋””์˜ค name ์†์„ฑ (form-agnostic ๊ทธ๋ฃนํ•‘) */\n groupName?: string;\n /** ์„ ํƒ ๋ณ€๊ฒฝ (sdUpdate) */\n onValueChange?: (val: SRadioValue) => void;\n className?: string;\n style?: CSSProperties;\n}\n\n/** SRadioGroup โ€” sd-radio-group ํฌํŒ…. options๋ฅผ SRadio๋กœ ๋ Œ๋”. */\nexport function SRadioGroup({\n options = [],\n value,\n direction = 'vertical',\n disabled = false,\n groupName,\n onValueChange,\n className,\n style,\n}: SRadioGroupProps) {\n return (\n <div\n role=\"radiogroup\"\n className={cn(\n 'inline-flex',\n direction === 'vertical'\n ? 'flex-col gap-[var(--cmp-radio-group-gap-vertical)]'\n : 'flex-row gap-[var(--cmp-radio-group-gap-horizontal)]',\n className,\n )}\n style={style}\n >\n {options.map(o => (\n <SRadio\n key={String(o.value)}\n val={o.value}\n value={value}\n label={o.label}\n name={groupName}\n disabled={disabled || o.disabled}\n onValueChange={onValueChange}\n />\n ))}\n </div>\n );\n}\n"]}
@@ -3150,7 +3150,7 @@ var STooltip = react.forwardRef(function STooltip2({
3150
3150
  if (disabled || body == null) return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: triggerNode });
3151
3151
  const isHover = trigger === "hover";
3152
3152
  const contentClass = cn(
3153
- "z-50 max-w-xs rounded-[6px] px-[16px] py-[12px] text-[12px] leading-[20px] shadow-[2px_2px_12px_2px_rgba(0,0,0,0.1)]",
3153
+ "z-50 max-w-xs rounded-[6px] px-[16px] py-[12px] text-[12px] leading-[20px]",
3154
3154
  FLOATING_SLIDE_ANIM,
3155
3155
  className
3156
3156
  );
@@ -3752,7 +3752,7 @@ function ItemList({
3752
3752
  isDepth1 ? "border-t border-solid border-[color:var(--cmp-listItem-depth1-border-color)] bg-[var(--cmp-listItem-depth1-bg-default)] font-bold" : "bg-[var(--cmp-listItem-depth2-middle-bg)] font-medium",
3753
3753
  // ํ•˜์œ„๊ฐ€ ์ „๋ถ€ ๋น„ํ™œ์„ฑ์ด๋ฉด(select.config ์—์„œ bubble-up) ์–ด๋ฏธ ๊ทธ๋ฃน๋„ ๋น„ํ™œ์„ฑ ์ฒ˜๋ฆฌ:
3754
3754
  // ํ…์ŠคํŠธ๋Š” ํšŒ์ƒ‰(#888), depth1 ๊ทธ๋ฃน์€ ํŒŒ๋ž€ ๋ฐฐ๊ฒฝ ๋Œ€์‹  ํšŒ์ƒ‰(#EEE)์œผ๋กœ (depth2 ๋Š” #F6F6F6 ์œ ์ง€)
3755
- o.disabled && "text-[color:var(--cmp-listItem-content-disabled)]",
3755
+ o.disabled && "cursor-not-allowed text-[color:var(--cmp-listItem-content-disabled)]",
3756
3756
  o.disabled && isDepth1 && "bg-[var(--cmp-listItem-depth1-bg-disabled)]"
3757
3757
  ),
3758
3758
  style: { paddingLeft: padLeft },
@@ -3767,10 +3767,14 @@ function ItemList({
3767
3767
  {
3768
3768
  value: o.value,
3769
3769
  disabled: o.disabled,
3770
+ accessibleWhenDisabled: true,
3770
3771
  className: cn(
3771
3772
  itemBase,
3772
3773
  isSelected && !multi && "font-bold text-[color:var(--cmp-listItem-content-selected)]",
3773
- activeClass
3774
+ // Ariakit์€ disabled ํ•ญ๋ชฉ๋„ hover ์‹œ active(data-active-item) ์ฒ˜๋ฆฌํ•˜๋ฏ€๋กœ,
3775
+ // ๋น„ํ™œ์„ฑ ํ•ญ๋ชฉ์—๋Š” hover ํ•˜์ด๋ผ์ดํŠธ๋ฅผ ์ ์šฉํ•˜์ง€ ์•Š์•„ ํšŒ์ƒ‰ ๋น„ํ™œ์„ฑ ์Šคํƒ€์ผ์„ ์œ ์ง€ํ•œ๋‹ค.
3776
+ // (์›๋ณธ Stencil์˜ `--focused...:not(--disabled)` ๊ทœ์น™๊ณผ ๋™์ผํ•œ ์˜๋„)
3777
+ !o.disabled && activeClass
3774
3778
  ),
3775
3779
  style: { paddingTop: 4, paddingBottom: 4, paddingRight: 12, paddingLeft: padLeft },
3776
3780
  render: useSearch ? /* @__PURE__ */ jsxRuntime.jsx(Ariakit__namespace.ComboboxItem, {}) : void 0,
@@ -3783,7 +3787,7 @@ function ItemList({
3783
3787
  "flex h-[16px] w-[16px] flex-shrink-0 items-center justify-center rounded-[2px] border border-solid",
3784
3788
  o.disabled ? (
3785
3789
  // ๋น„ํ™œ์„ฑ: ํšŒ์ƒ‰ ์ฑ„์›€(#E1E1E1) + ํšŒ์ƒ‰ ํ…Œ๋‘๋ฆฌ(#CCCCCC)
3786
- "border-[color:var(--cmp-checkbox-border-disabled)] bg-[var(--cmp-checkbox-bg-disabled)]"
3790
+ "cursor-not-allowed border-[color:var(--cmp-checkbox-border-disabled)] bg-[var(--cmp-checkbox-bg-disabled)]"
3787
3791
  ) : cn(
3788
3792
  "group-data-[active-item]:border-[color:var(--cmp-checkbox-checked-border-inverse)]",
3789
3793
  isSelected ? "border-[color:var(--cmp-checkbox-checked-bg-default)] bg-[var(--cmp-checkbox-checked-bg-default)] group-data-[active-item]:bg-transparent" : "border-[color:var(--cmp-checkbox-unchecked-border-default)] bg-transparent"