@sellmate/design-system 1.0.78 → 1.2.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 (483) hide show
  1. package/dist/cjs/component.table-CMqGfEui.js +66 -0
  2. package/dist/cjs/design-system.cjs.js +2 -2
  3. package/dist/cjs/{index--F2wGuAi.js → index-Cw-78mnC.js} +1 -1
  4. package/dist/cjs/index.cjs.js +5 -5
  5. package/dist/cjs/loader.cjs.js +2 -2
  6. package/dist/cjs/{resolveColor-LhfOKtTZ.js → resolveColor-B0hzQNLG.js} +2 -2
  7. package/dist/cjs/sd-action-modal.cjs.entry.js +3 -3
  8. package/dist/cjs/sd-badge.cjs.entry.js +2 -3
  9. package/dist/cjs/sd-barcode-input.cjs.entry.js +3 -3
  10. package/dist/cjs/{sd-button-v2.config-CnqCQQMi.js → sd-button.config-DH08UNfl.js} +114 -28
  11. package/dist/cjs/{sd-button-v2_2.cjs.entry.js → sd-button_2.cjs.entry.js} +102 -85
  12. package/dist/cjs/sd-calendar.cjs.entry.js +15 -15
  13. package/dist/cjs/sd-card.cjs.entry.js +2 -2
  14. package/dist/cjs/sd-checkbox.cjs.entry.js +4 -4
  15. package/dist/cjs/sd-chip.cjs.entry.js +4 -4
  16. package/dist/cjs/sd-circle-progress.cjs.entry.js +3 -3
  17. package/dist/cjs/sd-confirm-modal_2.cjs.entry.js +19 -11
  18. package/dist/cjs/sd-date-box.cjs.entry.js +9 -4
  19. package/dist/cjs/{sd-date-picker-calendar.cjs.entry.js → sd-date-picker-calendar_2.cjs.entry.js} +59 -6
  20. package/dist/cjs/{sd-date-picker.config-CRgCT5dn.js → sd-date-picker.config-CjvrFpYK.js} +1 -2
  21. package/dist/cjs/sd-date-picker_7.cjs.entry.js +1235 -0
  22. package/dist/cjs/sd-date-range-picker-calendar.cjs.entry.js +14 -14
  23. package/dist/cjs/sd-dropdown-button.cjs.entry.js +32 -27
  24. package/dist/cjs/{sd-button_4.cjs.entry.js → sd-field_3.cjs.entry.js} +47 -102
  25. package/dist/cjs/sd-form.cjs.entry.js +5 -5
  26. package/dist/cjs/sd-ghost-button.cjs.entry.js +12 -10
  27. package/dist/cjs/sd-guide.cjs.entry.js +11 -11
  28. package/dist/cjs/sd-key-value-table.cjs.entry.js +230 -0
  29. package/dist/cjs/sd-linear-progress.cjs.entry.js +3 -3
  30. package/dist/cjs/sd-loading-container.cjs.entry.js +3 -3
  31. package/dist/cjs/sd-modal-container.cjs.entry.js +3 -3
  32. package/dist/cjs/{sd-pagination_5.cjs.entry.js → sd-pagination_4.cjs.entry.js} +136 -325
  33. package/dist/cjs/sd-popover.cjs.entry.js +18 -11
  34. package/dist/cjs/sd-popup.cjs.entry.js +112 -0
  35. package/dist/cjs/sd-portal.cjs.entry.js +3 -3
  36. package/dist/cjs/sd-radio-button.cjs.entry.js +9 -6
  37. package/dist/cjs/sd-radio.cjs.entry.js +2 -2
  38. package/dist/cjs/sd-select-list-item_2.cjs.entry.js +159 -0
  39. package/dist/cjs/sd-select.config-B19ptCT2.js +178 -0
  40. package/dist/cjs/{sd-select-list-item_4.cjs.entry.js → sd-select_3.cjs.entry.js} +296 -323
  41. package/dist/cjs/sd-switch.cjs.entry.js +2 -2
  42. package/dist/cjs/sd-table.cjs.entry.js +188 -48
  43. package/dist/cjs/sd-table.config-BIpldZtw.js +76 -0
  44. package/dist/cjs/sd-tabs.cjs.entry.js +8 -3
  45. package/dist/cjs/sd-tag.cjs.entry.js +56 -21
  46. package/dist/cjs/sd-td.cjs.entry.js +52 -10
  47. package/dist/cjs/sd-text-link.cjs.entry.js +13 -5
  48. package/dist/cjs/sd-toast-container.cjs.entry.js +5 -5
  49. package/dist/cjs/sd-toast.cjs.entry.js +35 -5
  50. package/dist/cjs/sd-toggle.cjs.entry.js +2 -2
  51. package/dist/cjs/{system-DpTN1vBC.js → system-VmZRYp6V.js} +4 -2
  52. package/dist/cjs/{tooltipArrow-D1-wcNm1.js → tooltipArrow-BjSFKIUq.js} +1 -1
  53. package/dist/collection/collection-manifest.json +4 -3
  54. package/dist/collection/components/assets/CheckboxCheck.js +5 -0
  55. package/dist/collection/components/assets/CheckboxIndeterminate.js +5 -0
  56. package/dist/collection/components/assets/index.js +4 -0
  57. package/dist/collection/components/sd-action-modal/sd-action-modal.css +1 -1
  58. package/dist/collection/components/sd-action-modal/sd-action-modal.js +7 -7
  59. package/dist/collection/components/sd-badge/sd-badge.config.js +10 -1
  60. package/dist/collection/components/sd-badge/sd-badge.js +1 -22
  61. package/dist/collection/components/sd-barcode-input/sd-barcode-input.js +4 -4
  62. package/dist/collection/components/{sd-button-v2/sd-button-v2.config.js → sd-button/sd-button.config.js} +1 -1
  63. package/dist/collection/components/sd-button/sd-button.css +47 -93
  64. package/dist/collection/components/sd-button/sd-button.js +100 -173
  65. package/dist/collection/components/sd-calendar/sd-calendar.js +14 -14
  66. package/dist/collection/components/sd-card/sd-card.js +1 -1
  67. package/dist/collection/components/sd-checkbox/sd-checkbox.js +3 -3
  68. package/dist/collection/components/sd-chip/sd-chip.js +4 -4
  69. package/dist/collection/components/sd-circle-progress/sd-circle-progress.js +1 -1
  70. package/dist/collection/components/sd-confirm-modal/sd-confirm-modal.js +13 -8
  71. package/dist/collection/components/sd-date-box/sd-date-box.js +8 -3
  72. package/dist/collection/components/sd-date-picker/sd-date-picker-calendar/sd-date-picker-calendar.js +4 -4
  73. package/dist/collection/components/sd-date-picker/sd-date-picker-trigger/sd-date-picker-trigger.css +1 -1
  74. package/dist/collection/components/sd-date-picker/sd-date-picker-trigger/sd-date-picker-trigger.js +13 -6
  75. package/dist/collection/components/sd-date-picker/sd-date-picker.js +4 -4
  76. package/dist/collection/components/sd-date-range-picker/sd-date-range-picker-calendar/sd-date-range-picker-calendar.js +12 -12
  77. package/dist/collection/components/sd-date-range-picker/sd-date-range-picker.js +5 -5
  78. package/dist/collection/components/sd-dropdown-button/sd-dropdown-button.config.js +7 -3
  79. package/dist/collection/components/sd-dropdown-button/sd-dropdown-button.js +13 -11
  80. package/dist/collection/components/sd-field/sd-field.css +6 -2
  81. package/dist/collection/components/sd-field/sd-field.js +48 -22
  82. package/dist/collection/components/sd-file-picker/sd-file-picker.js +10 -5
  83. package/dist/collection/components/sd-floating-portal/sd-floating-portal.css +1 -3
  84. package/dist/collection/components/sd-floating-portal/sd-floating-portal.js +6 -6
  85. package/dist/collection/components/sd-form/sd-form.js +4 -4
  86. package/dist/collection/components/sd-ghost-button/sd-ghost-button.js +12 -10
  87. package/dist/collection/components/sd-guide/sd-guide.css +8 -172
  88. package/dist/collection/components/sd-guide/sd-guide.js +8 -6
  89. package/dist/collection/components/sd-icon/sd-icon.js +4 -4
  90. package/dist/collection/components/sd-input/sd-input.css +4 -2
  91. package/dist/collection/components/sd-input/sd-input.js +6 -6
  92. package/dist/collection/components/sd-key-value-table/sd-key-value-table.config.js +36 -0
  93. package/dist/collection/components/sd-key-value-table/sd-key-value-table.css +119 -0
  94. package/dist/collection/components/sd-key-value-table/sd-key-value-table.js +301 -0
  95. package/dist/collection/components/sd-linear-progress/sd-linear-progress.js +1 -1
  96. package/dist/collection/components/sd-loading-container/sd-loading-container.js +2 -2
  97. package/dist/collection/components/sd-loading-modal/sd-loading-modal.js +6 -3
  98. package/dist/collection/components/sd-modal-container/sd-modal-container.js +2 -2
  99. package/dist/collection/components/sd-number-input/sd-number-input.css +7 -0
  100. package/dist/collection/components/sd-number-input/sd-number-input.js +8 -5
  101. package/dist/collection/components/sd-pagination/sd-pagination.js +3 -3
  102. package/dist/collection/components/sd-popover/sd-popover.js +129 -36
  103. package/dist/collection/components/sd-popup/sd-popup.config.js +34 -0
  104. package/dist/collection/components/sd-popup/sd-popup.css +73 -0
  105. package/dist/collection/components/sd-popup/sd-popup.js +163 -0
  106. package/dist/collection/components/sd-portal/sd-portal.js +2 -2
  107. package/dist/collection/components/sd-radio/sd-radio.js +1 -1
  108. package/dist/collection/components/sd-radio-button/sd-radio-button.js +8 -5
  109. package/dist/collection/components/sd-radio-group/sd-radio-group.js +2 -2
  110. package/dist/collection/components/sd-select/sd-select-list-item/sd-select-list-item.js +7 -3
  111. package/dist/collection/components/sd-select/sd-select-list-item-search/sd-select-list-item-search.css +4 -4
  112. package/dist/collection/components/sd-select/sd-select-list-item-search/sd-select-list-item-search.js +7 -7
  113. package/dist/collection/components/sd-select/sd-select-listbox/sd-select-listbox.js +8 -8
  114. package/dist/collection/components/sd-select/sd-select-trigger/sd-select-trigger.js +9 -4
  115. package/dist/collection/components/sd-select/sd-select.js +6 -6
  116. package/dist/collection/components/sd-switch/sd-switch.js +1 -1
  117. package/dist/collection/components/sd-table/sd-table.config.js +6 -2
  118. package/dist/collection/components/sd-table/sd-table.css +30 -11
  119. package/dist/collection/components/sd-table/sd-table.js +233 -50
  120. package/dist/collection/components/sd-table/sd-table.stories.helpers.js +2 -3
  121. package/dist/collection/components/sd-table/sd-tbody/sd-tbody.js +5 -5
  122. package/dist/collection/components/sd-table/sd-td/sd-td.js +111 -9
  123. package/dist/collection/components/sd-table/sd-thead/sd-thead.js +30 -16
  124. package/dist/collection/components/sd-table/sd-tr/sd-tr.css +24 -1
  125. package/dist/collection/components/sd-table/sd-tr/sd-tr.js +116 -19
  126. package/dist/collection/components/sd-tabs/sd-tabs.js +7 -2
  127. package/dist/collection/components/sd-tag/sd-tag.config.js +43 -11
  128. package/dist/collection/components/sd-tag/sd-tag.js +13 -7
  129. package/dist/collection/components/sd-text-link/sd-text-link.css +1 -0
  130. package/dist/collection/components/sd-text-link/sd-text-link.js +10 -4
  131. package/dist/collection/components/sd-textarea/sd-textarea.css +3 -0
  132. package/dist/collection/components/sd-textarea/sd-textarea.js +2 -2
  133. package/dist/collection/components/sd-toast/sd-toast.config.js +14 -0
  134. package/dist/collection/components/sd-toast/sd-toast.css +3 -5
  135. package/dist/collection/components/sd-toast/sd-toast.js +52 -5
  136. package/dist/collection/components/sd-toast-container/sd-toast-container.js +4 -4
  137. package/dist/collection/components/sd-toggle/sd-toggle.js +1 -1
  138. package/dist/collection/components/sd-tooltip/sd-tooltip.js +77 -30
  139. package/dist/collection/utils/color/resolveColor.js +2 -2
  140. package/dist/collection/utils/dropdown-manager.js +1 -1
  141. package/dist/collection/utils/modal.js +1 -1
  142. package/dist/collection/utils/toast.js +4 -4
  143. package/dist/components/index.js +1 -1
  144. package/dist/components/p-2wB9cing.js +1 -0
  145. package/dist/components/p-B-sK7I83.js +1 -0
  146. package/dist/components/p-B3D43x7F.js +1 -0
  147. package/dist/components/p-B7mpdnNl.js +1 -0
  148. package/dist/components/{p-TwGlKfsC.js → p-BAcmO7w0.js} +1 -1
  149. package/dist/components/p-BL0ZcHK8.js +1 -0
  150. package/dist/components/p-BXCyVrle.js +1 -0
  151. package/dist/components/p-BY1LGlfc.js +1 -0
  152. package/dist/components/p-BjkROjjt.js +1 -0
  153. package/dist/components/p-Bm3W_eBv.js +1 -0
  154. package/dist/components/p-BnfUIhUj.js +1 -0
  155. package/dist/components/{p-Dcc2Vm6z.js → p-BorUSgEK.js} +1 -1
  156. package/dist/components/{p-Bvq0Vpln.js → p-BsM-fwYd.js} +1 -1
  157. package/dist/components/p-C5CH-s6a.js +1 -0
  158. package/dist/components/p-C7WLft_0.js +1 -0
  159. package/dist/components/p-CK9ciBIR.js +1 -0
  160. package/dist/components/p-CQI40kiY.js +1 -0
  161. package/dist/components/p-CRL7TjSB.js +1 -0
  162. package/dist/components/p-CdOHomUp.js +1 -0
  163. package/dist/components/p-Ch5Yu1qd.js +1 -0
  164. package/dist/components/p-Cktiasfd.js +1 -0
  165. package/dist/components/p-CsVAx6KV.js +1 -0
  166. package/dist/components/p-D0Jiw-Zk.js +1 -0
  167. package/dist/components/p-D5F7wCNo.js +1 -0
  168. package/dist/components/p-DBFgk0rX.js +1 -0
  169. package/dist/components/p-DFLCjX1a.js +1 -0
  170. package/dist/components/p-DL1ac1QS.js +1 -0
  171. package/dist/components/p-DdLntfiw.js +1 -0
  172. package/dist/components/p-DeQcDHpn.js +1 -0
  173. package/dist/components/p-DfK4DiDI.js +1 -0
  174. package/dist/components/p-DhTcn6jX.js +1 -0
  175. package/dist/components/p-Dl8TIEQu.js +1 -0
  176. package/dist/components/p-DyAnn9ea.js +1 -0
  177. package/dist/components/p-GBlVDmy4.js +1 -0
  178. package/dist/components/p-Jts7ueOa.js +1 -0
  179. package/dist/components/p-arZfxxPn.js +1 -0
  180. package/dist/components/p-mmdt-WnS.js +1 -0
  181. package/dist/components/p-nOCYbyW4.js +1 -0
  182. package/dist/components/p-teN3CfOr.js +1 -0
  183. package/dist/components/p-u8teDaMa.js +1 -0
  184. package/dist/components/p-wCNRlKLa.js +1 -0
  185. package/dist/components/sd-action-modal.js +1 -1
  186. package/dist/components/sd-badge.js +1 -1
  187. package/dist/components/sd-barcode-input.js +1 -1
  188. package/dist/components/sd-button.js +1 -1
  189. package/dist/components/sd-calendar.js +1 -1
  190. package/dist/components/sd-card.js +1 -1
  191. package/dist/components/sd-checkbox.js +1 -1
  192. package/dist/components/sd-chip.js +1 -1
  193. package/dist/components/sd-circle-progress.js +1 -1
  194. package/dist/components/sd-confirm-modal.js +1 -1
  195. package/dist/components/sd-date-box.js +1 -1
  196. package/dist/components/sd-date-picker-calendar.js +1 -1
  197. package/dist/components/sd-date-picker-trigger.js +1 -1
  198. package/dist/components/sd-date-picker.js +1 -1
  199. package/dist/components/sd-date-range-picker-calendar.js +1 -1
  200. package/dist/components/sd-date-range-picker.js +1 -1
  201. package/dist/components/sd-dropdown-button.js +1 -1
  202. package/dist/components/sd-field.js +1 -1
  203. package/dist/components/sd-file-picker.js +1 -1
  204. package/dist/components/sd-floating-portal.js +1 -1
  205. package/dist/components/sd-form.js +1 -1
  206. package/dist/components/sd-ghost-button.js +1 -1
  207. package/dist/components/sd-guide.js +1 -1
  208. package/dist/components/sd-icon.js +1 -1
  209. package/dist/components/sd-input.js +1 -1
  210. package/dist/components/sd-key-value-table.d.ts +11 -0
  211. package/dist/components/sd-key-value-table.js +1 -0
  212. package/dist/components/sd-linear-progress.js +1 -1
  213. package/dist/components/sd-loading-container.js +1 -1
  214. package/dist/components/sd-loading-modal.js +1 -1
  215. package/dist/components/sd-modal-container.js +1 -1
  216. package/dist/components/sd-number-input.js +1 -1
  217. package/dist/components/sd-pagination.js +1 -1
  218. package/dist/components/sd-popover.js +1 -1
  219. package/dist/components/{sd-button-v2.d.ts → sd-popup.d.ts} +4 -4
  220. package/dist/components/sd-popup.js +1 -0
  221. package/dist/components/sd-portal.js +1 -1
  222. package/dist/components/sd-radio-button.js +1 -1
  223. package/dist/components/sd-radio-group.js +1 -1
  224. package/dist/components/sd-radio.js +1 -1
  225. package/dist/components/sd-select-list-item-search.js +1 -1
  226. package/dist/components/sd-select-list-item.js +1 -1
  227. package/dist/components/sd-select-listbox.js +1 -1
  228. package/dist/components/sd-select-trigger.js +1 -1
  229. package/dist/components/sd-select.js +1 -1
  230. package/dist/components/sd-switch.js +1 -1
  231. package/dist/components/sd-table.js +1 -1
  232. package/dist/components/sd-tabs.js +1 -1
  233. package/dist/components/sd-tag.js +1 -1
  234. package/dist/components/sd-tbody.js +1 -1
  235. package/dist/components/sd-td.js +1 -1
  236. package/dist/components/sd-text-link.js +1 -1
  237. package/dist/components/sd-textarea.js +1 -1
  238. package/dist/components/sd-thead.js +1 -1
  239. package/dist/components/sd-toast-container.js +1 -1
  240. package/dist/components/sd-toast.js +1 -1
  241. package/dist/components/sd-toggle.js +1 -1
  242. package/dist/components/sd-tooltip.js +1 -1
  243. package/dist/components/sd-tr.js +1 -1
  244. package/dist/design-system/design-system.css +1 -1
  245. package/dist/design-system/design-system.esm.js +1 -1
  246. package/dist/design-system/index.esm.js +1 -1
  247. package/dist/design-system/p-04fdb4b1.entry.js +1 -0
  248. package/dist/design-system/p-05611ff7.entry.js +1 -0
  249. package/dist/design-system/p-0U6dRjlq.js +2 -0
  250. package/dist/design-system/{p-fe9cef6a.entry.js → p-0fe603a4.entry.js} +1 -1
  251. package/dist/design-system/p-100f5887.entry.js +1 -0
  252. package/dist/design-system/p-18c5ae1a.entry.js +1 -0
  253. package/dist/design-system/p-1baa05ae.entry.js +1 -0
  254. package/dist/design-system/p-2a1ef965.entry.js +1 -0
  255. package/dist/design-system/p-2c63404f.entry.js +1 -0
  256. package/dist/design-system/{p-33bc3176.entry.js → p-435ae69e.entry.js} +1 -1
  257. package/dist/design-system/p-43e97572.entry.js +1 -0
  258. package/dist/design-system/p-44d05570.entry.js +1 -0
  259. package/dist/design-system/p-501fae20.entry.js +1 -0
  260. package/dist/design-system/{p-ead3e688.entry.js → p-5705e6d6.entry.js} +1 -1
  261. package/dist/design-system/p-5cbaf1db.entry.js +1 -0
  262. package/dist/design-system/p-5ed0becf.entry.js +1 -0
  263. package/dist/design-system/p-5f1c39b8.entry.js +1 -0
  264. package/dist/design-system/p-66af0ba0.entry.js +1 -0
  265. package/dist/design-system/p-77690440.entry.js +1 -0
  266. package/dist/design-system/p-78cc0289.entry.js +1 -0
  267. package/dist/design-system/p-790165f8.entry.js +1 -0
  268. package/dist/design-system/p-80466582.entry.js +1 -0
  269. package/dist/design-system/{p-e5cebccd.entry.js → p-857c44e8.entry.js} +1 -1
  270. package/dist/design-system/{p-f522c91d.entry.js → p-87c868c3.entry.js} +1 -1
  271. package/dist/design-system/p-8db7d8f2.entry.js +1 -0
  272. package/dist/design-system/p-8ee990bd.entry.js +1 -0
  273. package/dist/design-system/p-8f22106e.entry.js +1 -0
  274. package/dist/design-system/p-BDjErF_K.js +1 -0
  275. package/dist/design-system/p-BnfUIhUj.js +1 -0
  276. package/dist/{components/p-DkJqVXpD.js → design-system/p-C29HUShl.js} +1 -1
  277. package/dist/design-system/{p-BxPyZJaz.js → p-Ce0cmS4R.js} +1 -1
  278. package/dist/design-system/p-CxOCk_ge.js +1 -0
  279. package/dist/design-system/p-GBlVDmy4.js +1 -0
  280. package/dist/design-system/p-a6545130.entry.js +1 -0
  281. package/dist/design-system/p-ae2d45a2.entry.js +1 -0
  282. package/dist/design-system/{p-797517b5.entry.js → p-aeccfb2b.entry.js} +1 -1
  283. package/dist/design-system/p-b0aad445.entry.js +1 -0
  284. package/dist/design-system/p-b3c144ff.entry.js +1 -0
  285. package/dist/design-system/p-caee95b0.entry.js +1 -0
  286. package/dist/design-system/p-d30c823e.entry.js +1 -0
  287. package/dist/design-system/{p-3f7bc660.entry.js → p-d3212544.entry.js} +1 -1
  288. package/dist/design-system/p-d8c41313.entry.js +1 -0
  289. package/dist/design-system/{p-6bfe3612.entry.js → p-de8bb9ba.entry.js} +1 -1
  290. package/dist/design-system/p-e2334c1c.entry.js +1 -0
  291. package/dist/design-system/p-f4d73a0c.entry.js +1 -0
  292. package/dist/design-system/p-fc973500.entry.js +1 -0
  293. package/dist/design-system/p-fe0a5368.entry.js +1 -0
  294. package/dist/design-system/p-mmdt-WnS.js +1 -0
  295. package/dist/esm/component.table-BnfUIhUj.js +64 -0
  296. package/dist/esm/design-system.js +3 -3
  297. package/dist/esm/{index-Cnwbjz1F.js → index-0U6dRjlq.js} +1 -1
  298. package/dist/esm/index.js +5 -5
  299. package/dist/esm/loader.js +3 -3
  300. package/dist/esm/{resolveColor-BxPyZJaz.js → resolveColor-Ce0cmS4R.js} +2 -2
  301. package/dist/esm/sd-action-modal.entry.js +3 -3
  302. package/dist/esm/sd-badge.entry.js +2 -3
  303. package/dist/esm/sd-barcode-input.entry.js +3 -3
  304. package/dist/esm/{sd-button-v2.config-CV4xelxV.js → sd-button.config-BDjErF_K.js} +88 -3
  305. package/dist/esm/{sd-button-v2_2.entry.js → sd-button_2.entry.js} +102 -85
  306. package/dist/esm/sd-calendar.entry.js +15 -15
  307. package/dist/esm/sd-card.entry.js +2 -2
  308. package/dist/esm/sd-checkbox.entry.js +4 -4
  309. package/dist/esm/sd-chip.entry.js +4 -4
  310. package/dist/esm/sd-circle-progress.entry.js +3 -3
  311. package/dist/esm/sd-confirm-modal_2.entry.js +19 -11
  312. package/dist/esm/sd-date-box.entry.js +9 -4
  313. package/dist/esm/{sd-date-picker-calendar.entry.js → sd-date-picker-calendar_2.entry.js} +59 -7
  314. package/dist/esm/{sd-date-picker.config-C2fDbE9d.js → sd-date-picker.config-B6cqMQaM.js} +1 -2
  315. package/dist/esm/sd-date-picker_7.entry.js +1227 -0
  316. package/dist/esm/sd-date-range-picker-calendar.entry.js +14 -14
  317. package/dist/esm/sd-dropdown-button.entry.js +21 -16
  318. package/dist/esm/{sd-button_4.entry.js → sd-field_3.entry.js} +48 -102
  319. package/dist/esm/sd-form.entry.js +5 -5
  320. package/dist/esm/sd-ghost-button.entry.js +12 -10
  321. package/dist/esm/sd-guide.entry.js +11 -11
  322. package/dist/esm/sd-key-value-table.entry.js +228 -0
  323. package/dist/esm/sd-linear-progress.entry.js +3 -3
  324. package/dist/esm/sd-loading-container.entry.js +3 -3
  325. package/dist/esm/sd-modal-container.entry.js +3 -3
  326. package/dist/esm/{sd-pagination_5.entry.js → sd-pagination_4.entry.js} +137 -325
  327. package/dist/esm/sd-popover.entry.js +18 -11
  328. package/dist/esm/sd-popup.entry.js +110 -0
  329. package/dist/esm/sd-portal.entry.js +3 -3
  330. package/dist/esm/sd-radio-button.entry.js +9 -6
  331. package/dist/esm/sd-radio.entry.js +2 -2
  332. package/dist/esm/sd-select-list-item_2.entry.js +156 -0
  333. package/dist/esm/sd-select.config-CxOCk_ge.js +165 -0
  334. package/dist/esm/{sd-select-list-item_4.entry.js → sd-select_3.entry.js} +281 -307
  335. package/dist/esm/sd-switch.entry.js +2 -2
  336. package/dist/esm/{sd-table.config-Bj-EEo7N.js → sd-table.config-B-VgXXT7.js} +16 -46
  337. package/dist/esm/sd-table.entry.js +188 -48
  338. package/dist/esm/sd-tabs.entry.js +8 -3
  339. package/dist/esm/sd-tag.entry.js +56 -21
  340. package/dist/esm/sd-td.entry.js +52 -10
  341. package/dist/esm/sd-text-link.entry.js +13 -5
  342. package/dist/esm/sd-toast-container.entry.js +5 -5
  343. package/dist/esm/sd-toast.entry.js +35 -5
  344. package/dist/esm/sd-toggle.entry.js +2 -2
  345. package/dist/esm/{system-CZ4ltUOw.js → system-GBlVDmy4.js} +4 -2
  346. package/dist/esm/{tooltipArrow-D8sr81Xw.js → tooltipArrow-O5LOsHae.js} +1 -1
  347. package/dist/types/components/assets/CheckboxCheck.d.ts +1 -0
  348. package/dist/types/components/assets/CheckboxIndeterminate.d.ts +1 -0
  349. package/dist/types/components/assets/index.d.ts +2 -0
  350. package/dist/types/components/sd-action-modal/sd-action-modal.d.ts +2 -2
  351. package/dist/types/components/sd-badge/sd-badge.d.ts +0 -1
  352. package/dist/types/components/{sd-button-v2/sd-button-v2.config.d.ts → sd-button/sd-button.config.d.ts} +9 -15
  353. package/dist/types/components/sd-button/sd-button.d.ts +11 -13
  354. package/dist/types/components/sd-confirm-modal/sd-confirm-modal.config.d.ts +3 -3
  355. package/dist/types/components/sd-confirm-modal/sd-confirm-modal.d.ts +2 -1
  356. package/dist/types/components/sd-dropdown-button/sd-dropdown-button.config.d.ts +6 -5
  357. package/dist/types/components/sd-dropdown-button/sd-dropdown-button.d.ts +1 -0
  358. package/dist/types/components/sd-field/sd-field.d.ts +1 -0
  359. package/dist/types/components/sd-key-value-table/sd-key-value-table.config.d.ts +105 -0
  360. package/dist/types/components/sd-key-value-table/sd-key-value-table.d.ts +38 -0
  361. package/dist/types/components/sd-loading-modal/sd-loading-modal.config.d.ts +2 -2
  362. package/dist/types/components/sd-loading-modal/sd-loading-modal.d.ts +1 -0
  363. package/dist/types/components/sd-modal-container/sd-modal-container.config.d.ts +1 -1
  364. package/dist/types/components/sd-popover/sd-popover.d.ts +16 -10
  365. package/dist/types/components/sd-popup/sd-popup.config.d.ts +30 -0
  366. package/dist/types/components/sd-popup/sd-popup.d.ts +11 -0
  367. package/dist/types/components/sd-table/constants.d.ts +2 -0
  368. package/dist/types/components/sd-table/sd-table.config.d.ts +4 -0
  369. package/dist/types/components/sd-table/sd-table.d.ts +21 -15
  370. package/dist/types/components/sd-table/sd-td/sd-td.d.ts +6 -0
  371. package/dist/types/components/sd-table/sd-tr/sd-tr.d.ts +9 -0
  372. package/dist/types/components/sd-tag/sd-tag.d.ts +2 -0
  373. package/dist/types/components/sd-toast/sd-toast.config.d.ts +5 -1
  374. package/dist/types/components/sd-toast/sd-toast.d.ts +2 -0
  375. package/dist/types/components/sd-toast-container/sd-toast-container.config.d.ts +2 -0
  376. package/dist/types/components/sd-tooltip/sd-tooltip.config.d.ts +2 -13
  377. package/dist/types/components/sd-tooltip/sd-tooltip.d.ts +6 -4
  378. package/dist/types/components.d.ts +278 -192
  379. package/dist/types/index.d.ts +1 -1
  380. package/dist/types/types/form.d.ts +1 -1
  381. package/dist/types/types/global.d.ts +14 -13
  382. package/dist/types/utils/toast.d.ts +1 -1
  383. package/hydrate/index.js +5513 -4761
  384. package/hydrate/index.mjs +5513 -4761
  385. package/package.json +111 -97
  386. package/readme.md +13 -7
  387. package/dist/cjs/component.button-cqV-iCG5.js +0 -90
  388. package/dist/cjs/sd-date-picker-trigger.cjs.entry.js +0 -51
  389. package/dist/cjs/sd-date-picker.cjs.entry.js +0 -117
  390. package/dist/cjs/sd-date-range-picker.cjs.entry.js +0 -123
  391. package/dist/cjs/sd-file-picker.cjs.entry.js +0 -244
  392. package/dist/cjs/sd-input.cjs.entry.js +0 -175
  393. package/dist/cjs/sd-number-input.cjs.entry.js +0 -409
  394. package/dist/cjs/sd-radio-group.cjs.entry.js +0 -46
  395. package/dist/cjs/sd-table.config-Cb0Ot3C6.js +0 -105
  396. package/dist/cjs/sd-textarea.cjs.entry.js +0 -146
  397. package/dist/collection/components/sd-button-v2/sd-button-v2.css +0 -125
  398. package/dist/collection/components/sd-button-v2/sd-button-v2.js +0 -273
  399. package/dist/components/p-B1XBwjCW.js +0 -1
  400. package/dist/components/p-B8jXOXtJ.js +0 -1
  401. package/dist/components/p-BE6TxbtX.js +0 -1
  402. package/dist/components/p-BJsHakU2.js +0 -1
  403. package/dist/components/p-BStczlLa.js +0 -1
  404. package/dist/components/p-BcMNA89i.js +0 -1
  405. package/dist/components/p-BheX6lAy.js +0 -1
  406. package/dist/components/p-BmYM7-4v.js +0 -1
  407. package/dist/components/p-BppjYHF6.js +0 -1
  408. package/dist/components/p-BwWDMpJc.js +0 -1
  409. package/dist/components/p-C-kw2p2a.js +0 -1
  410. package/dist/components/p-C5qZtNLl.js +0 -1
  411. package/dist/components/p-C7DajKYn.js +0 -1
  412. package/dist/components/p-CZ4ltUOw.js +0 -1
  413. package/dist/components/p-CeVMl_M9.js +0 -1
  414. package/dist/components/p-D1DpOp6M.js +0 -1
  415. package/dist/components/p-D3gjBBCU.js +0 -1
  416. package/dist/components/p-DC-6inj0.js +0 -1
  417. package/dist/components/p-DRF0He-x.js +0 -1
  418. package/dist/components/p-DegvQLTF.js +0 -1
  419. package/dist/components/p-Dey-lS6x.js +0 -1
  420. package/dist/components/p-DfH_fO01.js +0 -1
  421. package/dist/components/p-DngV3MT1.js +0 -1
  422. package/dist/components/p-EbjZr2OA.js +0 -1
  423. package/dist/components/p-LwWOleLJ.js +0 -1
  424. package/dist/components/p-Nvx13YlG.js +0 -1
  425. package/dist/components/p-ZMpCZhXP.js +0 -1
  426. package/dist/components/p-dNJIFthT.js +0 -1
  427. package/dist/components/p-q0VWISKA.js +0 -1
  428. package/dist/components/p-xnLvZ-xn.js +0 -1
  429. package/dist/components/sd-button-v2.js +0 -1
  430. package/dist/design-system/p-0356c195.entry.js +0 -1
  431. package/dist/design-system/p-045bc426.entry.js +0 -1
  432. package/dist/design-system/p-12dfd239.entry.js +0 -1
  433. package/dist/design-system/p-16d3a485.entry.js +0 -1
  434. package/dist/design-system/p-1706ed6f.entry.js +0 -1
  435. package/dist/design-system/p-182548f7.entry.js +0 -1
  436. package/dist/design-system/p-1a79edce.entry.js +0 -1
  437. package/dist/design-system/p-1cf87e87.entry.js +0 -1
  438. package/dist/design-system/p-25a08e98.entry.js +0 -1
  439. package/dist/design-system/p-2812b9ce.entry.js +0 -1
  440. package/dist/design-system/p-38f661ea.entry.js +0 -1
  441. package/dist/design-system/p-429dab5c.entry.js +0 -1
  442. package/dist/design-system/p-455dccf5.entry.js +0 -1
  443. package/dist/design-system/p-59313838.entry.js +0 -1
  444. package/dist/design-system/p-6af01ab0.entry.js +0 -1
  445. package/dist/design-system/p-70d4903f.entry.js +0 -1
  446. package/dist/design-system/p-767e99f9.entry.js +0 -1
  447. package/dist/design-system/p-7c370335.entry.js +0 -1
  448. package/dist/design-system/p-7fe8be6a.entry.js +0 -1
  449. package/dist/design-system/p-83b262dc.entry.js +0 -1
  450. package/dist/design-system/p-881adaa5.entry.js +0 -1
  451. package/dist/design-system/p-88d7303c.entry.js +0 -1
  452. package/dist/design-system/p-8a601e0f.entry.js +0 -1
  453. package/dist/design-system/p-B1XBwjCW.js +0 -1
  454. package/dist/design-system/p-BsrEibf7.js +0 -1
  455. package/dist/design-system/p-C5qZtNLl.js +0 -1
  456. package/dist/design-system/p-CZ4ltUOw.js +0 -1
  457. package/dist/design-system/p-Cnwbjz1F.js +0 -2
  458. package/dist/design-system/p-DnCBBIoq.js +0 -1
  459. package/dist/design-system/p-a82be987.entry.js +0 -1
  460. package/dist/design-system/p-b917c82a.entry.js +0 -1
  461. package/dist/design-system/p-b9f00eef.entry.js +0 -1
  462. package/dist/design-system/p-bcb53788.entry.js +0 -1
  463. package/dist/design-system/p-c24344ac.entry.js +0 -1
  464. package/dist/design-system/p-d76192bd.entry.js +0 -1
  465. package/dist/design-system/p-d9d8c51b.entry.js +0 -1
  466. package/dist/design-system/p-de67937d.entry.js +0 -1
  467. package/dist/design-system/p-ea5e6c2c.entry.js +0 -1
  468. package/dist/design-system/p-eeb1cac2.entry.js +0 -1
  469. package/dist/design-system/p-f1a74359.entry.js +0 -1
  470. package/dist/design-system/p-f44786a9.entry.js +0 -1
  471. package/dist/design-system/p-f69c7539.entry.js +0 -1
  472. package/dist/esm/component.button-B1XBwjCW.js +0 -88
  473. package/dist/esm/sd-date-picker-trigger.entry.js +0 -49
  474. package/dist/esm/sd-date-picker.entry.js +0 -115
  475. package/dist/esm/sd-date-range-picker.entry.js +0 -121
  476. package/dist/esm/sd-file-picker.entry.js +0 -242
  477. package/dist/esm/sd-input.entry.js +0 -173
  478. package/dist/esm/sd-number-input.entry.js +0 -407
  479. package/dist/esm/sd-radio-group.entry.js +0 -44
  480. package/dist/esm/sd-textarea.entry.js +0 -144
  481. package/dist/types/components/sd-button-v2/sd-button-v2.d.ts +0 -19
  482. /package/dist/components/{p-C2fDbE9d.js → p-B6cqMQaM.js} +0 -0
  483. /package/dist/design-system/{p-C2fDbE9d.js → p-B6cqMQaM.js} +0 -0
@@ -0,0 +1,1227 @@
1
+ import { r as registerInstance, c as createEvent, a as getElement, h } from './index-0U6dRjlq.js';
2
+ import { n as nanoid } from './index-CCwNgVmC.js';
3
+ import { D as DATEPICKER_COLORS, a as DATEPICKER_SIZE_MAP } from './sd-date-picker.config-B6cqMQaM.js';
4
+ import { i as inputTokens } from './component.textinput-ByhWX2NK.js';
5
+
6
+ const sdDatePickerCss = () => `sd-date-picker{display:inline-flex}sd-date-picker sd-portal{display:none}sd-date-picker .sd-date-picker{position:relative;width:100%;height:100%}`;
7
+
8
+ const SdDatePicker = class {
9
+ constructor(hostRef) {
10
+ registerInstance(this, hostRef);
11
+ this.update = createEvent(this, "sdUpdate", 7);
12
+ this.viewChange = createEvent(this, "sdViewChange", 7);
13
+ }
14
+ static CLOSE_ANIMATION_DURATION = 150;
15
+ get el() { return getElement(this); }
16
+ value = null;
17
+ size = 'sm';
18
+ placeholder = 'YYYY-MM-DD';
19
+ selectable;
20
+ disabled = false;
21
+ width = '';
22
+ // sd-field 공통 props
23
+ label = '';
24
+ labelWidth = '';
25
+ addonLabel = '';
26
+ addonAlign = 'start';
27
+ hint = '';
28
+ errorMessage = '';
29
+ rules = [];
30
+ error = false;
31
+ icon = undefined;
32
+ labelTooltip = '';
33
+ labelTooltipProps = null;
34
+ isOpen = false;
35
+ isAnimatingOut = false;
36
+ focused = false;
37
+ hovered = false;
38
+ update;
39
+ viewChange;
40
+ triggerRef;
41
+ formField;
42
+ closeAnimationTimer;
43
+ name = nanoid();
44
+ watchIsOpen(newValue) {
45
+ this.focused = newValue;
46
+ }
47
+ async sdValidate() {
48
+ return this.formField?.sdValidate();
49
+ }
50
+ async sdReset() {
51
+ return this.formField?.sdReset();
52
+ }
53
+ async sdResetValidate() {
54
+ return this.formField?.sdResetValidation();
55
+ }
56
+ closeDropdown() {
57
+ if (!this.isOpen)
58
+ return;
59
+ this.isOpen = false;
60
+ this.isAnimatingOut = true;
61
+ if (this.closeAnimationTimer)
62
+ clearTimeout(this.closeAnimationTimer);
63
+ this.closeAnimationTimer = setTimeout(() => {
64
+ this.isAnimatingOut = false;
65
+ }, SdDatePicker.CLOSE_ANIMATION_DURATION);
66
+ }
67
+ handleTriggerClick = () => {
68
+ if (this.disabled)
69
+ return;
70
+ if (this.isOpen) {
71
+ this.closeDropdown();
72
+ }
73
+ else {
74
+ if (this.closeAnimationTimer)
75
+ clearTimeout(this.closeAnimationTimer);
76
+ this.isAnimatingOut = false;
77
+ this.isOpen = true;
78
+ }
79
+ };
80
+ handleSelect = (e) => {
81
+ this.closeDropdown();
82
+ this.value = e.detail;
83
+ const nextValue = this.value;
84
+ requestAnimationFrame(() => {
85
+ this.update.emit(nextValue);
86
+ });
87
+ };
88
+ handleViewChange = (e) => {
89
+ this.viewChange.emit(e.detail);
90
+ };
91
+ disconnectedCallback() {
92
+ if (this.closeAnimationTimer)
93
+ clearTimeout(this.closeAnimationTimer);
94
+ }
95
+ render() {
96
+ const sizeTokens = DATEPICKER_SIZE_MAP[this.size] ?? DATEPICKER_SIZE_MAP.sm;
97
+ const cssVars = {
98
+ '--sd-system-size-field-sm-height': `${sizeTokens.height}px`,
99
+ '--sd-system-radius-field-sm': `${sizeTokens.radius}px`,
100
+ '--sd-system-color-field-border-default': DATEPICKER_COLORS.border.default,
101
+ '--sd-system-color-field-border-focus': DATEPICKER_COLORS.border.focus,
102
+ '--sd-system-color-field-bg-default': DATEPICKER_COLORS.bg.default,
103
+ };
104
+ return (h("sd-field", { key: '7678d58f741276e9848e05759f5c41f576e7fe66', name: this.name, label: this.label, labelWidth: this.labelWidth, addonLabel: this.addonLabel, addonAlign: this.addonAlign, hint: this.hint, errorMessage: this.errorMessage, width: this.width, rules: this.rules, error: this.error, disabled: this.disabled, focused: this.focused, hovered: this.hovered, size: this.size, icon: this.icon, labelTooltip: this.labelTooltip, labelTooltipProps: this.labelTooltipProps, ref: el => (this.formField = el), onMouseEnter: () => (this.hovered = true), onMouseLeave: () => (this.hovered = false), style: cssVars }, h("div", { key: '8b3d615b241860ec1fb314fa0eeef5f51ea32f43', class: "sd-date-picker", ref: el => {
105
+ this.triggerRef = el;
106
+ } }, h("sd-date-picker-trigger", { key: '43185c67462cf0cb559c918e5f709723bf4d5aee', displayText: this.value ?? '', placeholder: this.placeholder, disabled: this.disabled, size: this.size, onSdTriggerClick: this.handleTriggerClick })), (this.isOpen || this.isAnimatingOut) && (h("sd-portal", { key: '2cf151b52b3117de9c4d55bbc3c045b0a7b614e9', open: this.isOpen, parentRef: this.triggerRef, onSdClose: () => this.closeDropdown() }, h("sd-date-picker-calendar", { key: '9f77742d034dcb462eb1c4546b2c2a367544f97e', value: this.value, selectable: this.selectable, onSdSelect: this.handleSelect, onSdViewChange: this.handleViewChange })))));
107
+ }
108
+ static get watchers() { return {
109
+ "isOpen": [{
110
+ "watchIsOpen": 0
111
+ }]
112
+ }; }
113
+ };
114
+ SdDatePicker.style = sdDatePickerCss();
115
+
116
+ const sdDateRangePickerCss = () => `sd-date-range-picker{display:inline-flex}sd-date-range-picker sd-portal{display:none}sd-date-range-picker .sd-date-range-picker{position:relative;width:100%;height:100%}`;
117
+
118
+ const SdDateRangePicker = class {
119
+ constructor(hostRef) {
120
+ registerInstance(this, hostRef);
121
+ this.update = createEvent(this, "sdUpdate", 7);
122
+ this.viewChange = createEvent(this, "sdViewChange", 7);
123
+ }
124
+ static CLOSE_ANIMATION_DURATION = 150;
125
+ get el() { return getElement(this); }
126
+ value = null;
127
+ size = 'sm';
128
+ placeholder = 'YYYY-MM-DD ~ YYYY-MM-DD';
129
+ selectable;
130
+ maxRange;
131
+ disabled = false;
132
+ width = '';
133
+ // sd-field 공통 props
134
+ label = '';
135
+ labelWidth = '';
136
+ addonLabel = '';
137
+ addonAlign = 'start';
138
+ hint = '';
139
+ errorMessage = '';
140
+ rules = [];
141
+ error = false;
142
+ icon = undefined;
143
+ labelTooltip = '';
144
+ labelTooltipProps = null;
145
+ isOpen = false;
146
+ isAnimatingOut = false;
147
+ focused = false;
148
+ hovered = false;
149
+ update;
150
+ viewChange;
151
+ triggerRef;
152
+ formField;
153
+ closeAnimationTimer;
154
+ name = nanoid();
155
+ watchIsOpen(newValue) {
156
+ this.focused = newValue;
157
+ }
158
+ async sdValidate() {
159
+ return this.formField?.sdValidate();
160
+ }
161
+ async sdReset() {
162
+ return this.formField?.sdReset();
163
+ }
164
+ async sdResetValidate() {
165
+ return this.formField?.sdResetValidation();
166
+ }
167
+ closeDropdown() {
168
+ if (!this.isOpen)
169
+ return;
170
+ this.isOpen = false;
171
+ this.isAnimatingOut = true;
172
+ if (this.closeAnimationTimer)
173
+ clearTimeout(this.closeAnimationTimer);
174
+ this.closeAnimationTimer = setTimeout(() => {
175
+ this.isAnimatingOut = false;
176
+ }, SdDateRangePicker.CLOSE_ANIMATION_DURATION);
177
+ }
178
+ handleTriggerClick = () => {
179
+ if (this.disabled)
180
+ return;
181
+ if (this.isOpen) {
182
+ this.closeDropdown();
183
+ }
184
+ else {
185
+ if (this.closeAnimationTimer)
186
+ clearTimeout(this.closeAnimationTimer);
187
+ this.isAnimatingOut = false;
188
+ this.isOpen = true;
189
+ }
190
+ };
191
+ handleSelect = (e) => {
192
+ this.closeDropdown();
193
+ this.value = e.detail;
194
+ const nextValue = this.value;
195
+ requestAnimationFrame(() => {
196
+ this.update.emit(nextValue);
197
+ });
198
+ };
199
+ handleViewChange = (e) => {
200
+ this.viewChange.emit(e.detail);
201
+ };
202
+ get displayText() {
203
+ if (this.value == null || this.value[0] === '' || this.value[1] === '')
204
+ return '';
205
+ return `${this.value[0]} ~ ${this.value[1]}`;
206
+ }
207
+ disconnectedCallback() {
208
+ if (this.closeAnimationTimer)
209
+ clearTimeout(this.closeAnimationTimer);
210
+ }
211
+ render() {
212
+ const sizeTokens = DATEPICKER_SIZE_MAP[this.size] ?? DATEPICKER_SIZE_MAP.sm;
213
+ const cssVars = {
214
+ '--sd-system-size-field-sm-height': `${sizeTokens.height}px`,
215
+ '--sd-system-radius-field-sm': `${sizeTokens.radius}px`,
216
+ '--sd-system-color-field-border-default': DATEPICKER_COLORS.border.default,
217
+ '--sd-system-color-field-border-focus': DATEPICKER_COLORS.border.focus,
218
+ '--sd-system-color-field-bg-default': DATEPICKER_COLORS.bg.default,
219
+ };
220
+ return (h("sd-field", { key: '1c335b82235bc829f26b06d01c967d81268fc348', name: this.name, label: this.label, labelWidth: this.labelWidth, addonLabel: this.addonLabel, addonAlign: this.addonAlign, hint: this.hint, errorMessage: this.errorMessage, width: this.width, rules: this.rules, error: this.error, disabled: this.disabled, focused: this.focused, hovered: this.hovered, size: this.size, icon: this.icon, labelTooltip: this.labelTooltip, labelTooltipProps: this.labelTooltipProps, ref: el => (this.formField = el), onMouseEnter: () => (this.hovered = true), onMouseLeave: () => (this.hovered = false), style: cssVars }, h("div", { key: '495f6e88d01bc6f19e57e04152e84bff2d0415d4', class: "sd-date-range-picker", ref: el => {
221
+ this.triggerRef = el;
222
+ } }, h("sd-date-picker-trigger", { key: '59c2d6ecdd7724e361ac4f6222d34d9ceca7ffd3', displayText: this.displayText, placeholder: this.placeholder, disabled: this.disabled, size: this.size, onSdTriggerClick: this.handleTriggerClick })), (this.isOpen || this.isAnimatingOut) && (h("sd-portal", { key: '5ba7ab62c1205823fba496e984f4819dbb89064d', open: this.isOpen, parentRef: this.triggerRef, onSdClose: () => this.closeDropdown() }, h("sd-date-range-picker-calendar", { key: 'e6f84d99a4ceebee972900fd56593c18497cba9d', value: this.value, selectable: this.selectable, maxRange: this.maxRange, onSdSelect: this.handleSelect, onSdViewChange: this.handleViewChange })))));
223
+ }
224
+ static get watchers() { return {
225
+ "isOpen": [{
226
+ "watchIsOpen": 0
227
+ }]
228
+ }; }
229
+ };
230
+ SdDateRangePicker.style = sdDateRangePickerCss();
231
+
232
+ const filepicker = {
233
+ height: "28",
234
+ paddingX: "12",
235
+ gap: "8",
236
+ radius: "4",
237
+ typography: {
238
+ fontWeight: "400",
239
+ fontSize: "12",
240
+ lineHeight: "20"},
241
+ size: {
242
+ icon: "16"
243
+ },
244
+ text: {
245
+ "default": "#222222",
246
+ placeholder: "#AAAAAA",
247
+ disabled: "#888888"
248
+ },
249
+ icon: {
250
+ disabled: "#BBBBBB"
251
+ }
252
+ };
253
+ var filePickerTokens = {
254
+ filepicker: filepicker
255
+ };
256
+
257
+ const fp = filePickerTokens.filepicker;
258
+ const FILE_PICKER_LAYOUT = {
259
+ height: fp.height,
260
+ paddingX: fp.paddingX,
261
+ gap: fp.gap,
262
+ radius: fp.radius,
263
+ fontSize: fp.typography.fontSize,
264
+ lineHeight: fp.typography.lineHeight,
265
+ fontWeight: fp.typography.fontWeight,
266
+ iconSize: fp.size.icon};
267
+ const FILE_PICKER_COLORS = {
268
+ text: fp.text,
269
+ icon: {
270
+ default: '#888888', // TODO: 토큰 반영 후 교체
271
+ disabled: fp.icon.disabled,
272
+ },
273
+ };
274
+
275
+ const sdFilePickerCss = () => `sd-file-picker{display:inline-flex;width:100%}.sd-file-picker__content{width:100%;height:100%;display:flex;align-items:center;padding:0 var(--sd-file-picker-padding-x);gap:var(--sd-file-picker-gap);cursor:pointer;-webkit-user-select:none;user-select:none;position:relative;vertical-align:middle}.sd-file-picker__text{flex:1;min-width:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font-weight:var(--sd-file-picker-font-weight);font-size:var(--sd-file-picker-font-size);line-height:var(--sd-file-picker-line-height);color:var(--sd-file-picker-placeholder-color)}.sd-file-picker__text--active{color:var(--sd-file-picker-text-color)}.sd-file-picker__text--placeholder{color:var(--sd-file-picker-placeholder-color)}.sd-file-picker__icon{flex-shrink:0}.sd-file-picker__clear-icon{flex-shrink:0;cursor:pointer;transition:opacity 0.2s ease}.sd-file-picker__clear-icon:hover{opacity:0.7}.sd-file-picker__input{display:none}.sd-file-picker__tooltip{position:absolute;top:calc(100% - 4px);left:50%;transform:translate(-50%);z-index:998;white-space:nowrap;padding:8px 12px;background:rgba(0, 0, 0, 0.8);color:white;font-size:12px;line-height:18px;border-radius:4px;pointer-events:none}.sd-field--disabled .sd-file-picker__content{cursor:not-allowed}.sd-field--disabled .sd-file-picker__text{color:var(--sd-file-picker-disabled-color)}.sd-file-picker--inline .sd-file-picker__content{border:none;background-color:transparent;padding:0;height:auto}.sd-file-picker--inline .sd-file-picker__text{color:var(--sd-file-picker-placeholder-color)}.sd-file-picker--inline:hover:not(.sd-file-picker--inline-disabled) .sd-file-picker__text{color:var(--sd-file-picker-text-color)}.sd-file-picker--inline .sd-file-picker__text--active{color:var(--sd-file-picker-text-color)}.sd-file-picker--inline.sd-file-picker--inline-disabled .sd-file-picker__content{cursor:not-allowed}.sd-file-picker--inline.sd-file-picker--inline-disabled .sd-file-picker__text{color:var(--sd-file-picker-disabled-color)}`;
276
+
277
+ const SdFilePicker = class {
278
+ constructor(hostRef) {
279
+ registerInstance(this, hostRef);
280
+ this.update = createEvent(this, "sdUpdate", 7);
281
+ this.reject = createEvent(this, "sdReject", 7);
282
+ }
283
+ get el() { return getElement(this); }
284
+ value = null;
285
+ placeholder = 'Click to upload';
286
+ disabled = false;
287
+ inline = false;
288
+ multiple = false;
289
+ accept;
290
+ maxFileSize;
291
+ maxTotalSize;
292
+ maxFiles;
293
+ // sd-field 패스스루 props
294
+ name = nanoid();
295
+ label = '';
296
+ labelWidth = '';
297
+ addonLabel = '';
298
+ addonAlign = 'start';
299
+ hint = '';
300
+ errorMessage = '';
301
+ width = '';
302
+ rules;
303
+ error = false;
304
+ status;
305
+ icon = undefined;
306
+ labelTooltip = '';
307
+ labelTooltipProps = null;
308
+ focused = false;
309
+ hovered = false;
310
+ internalValue = null;
311
+ showTooltip = false;
312
+ fileInputRef;
313
+ fileNamesRef;
314
+ formField;
315
+ update;
316
+ reject;
317
+ valueChanged(newValue) {
318
+ this.internalValue = newValue;
319
+ }
320
+ componentDidLoad() {
321
+ this.checkOverflow();
322
+ }
323
+ componentDidUpdate() {
324
+ this.checkOverflow();
325
+ }
326
+ async sdValidate() {
327
+ return this.formField?.sdValidate() ?? Promise.resolve(true);
328
+ }
329
+ async sdReset() {
330
+ const clearedValue = this.multiple ? [] : null;
331
+ this.value = clearedValue;
332
+ this.internalValue = clearedValue;
333
+ if (this.fileInputRef) {
334
+ this.fileInputRef.value = '';
335
+ }
336
+ await this.formField?.sdResetValidation();
337
+ }
338
+ async sdResetValidate() {
339
+ await this.formField?.sdResetValidation();
340
+ }
341
+ toBytes(value) {
342
+ if (value == null)
343
+ return undefined;
344
+ return typeof value === 'string' ? Number(value) : value;
345
+ }
346
+ validateFiles(files) {
347
+ const maxFileSize = this.toBytes(this.maxFileSize);
348
+ const maxTotalSize = this.toBytes(this.maxTotalSize);
349
+ const maxFiles = this.maxFiles != null ? Number(this.maxFiles) : undefined;
350
+ if (maxFiles != null && files.length > maxFiles) {
351
+ return { accepted: [], rejected: files, reason: 'max-files' };
352
+ }
353
+ if (maxFileSize != null) {
354
+ const oversized = files.filter(f => f.size > maxFileSize);
355
+ if (oversized.length > 0) {
356
+ return { accepted: [], rejected: oversized, reason: 'max-file-size' };
357
+ }
358
+ }
359
+ if (maxTotalSize != null) {
360
+ const totalSize = files.reduce((sum, f) => sum + f.size, 0);
361
+ if (totalSize > maxTotalSize) {
362
+ return { accepted: [], rejected: files, reason: 'max-total-size' };
363
+ }
364
+ }
365
+ return { accepted: files, rejected: [] };
366
+ }
367
+ handleFileChange = (event) => {
368
+ const input = event.target;
369
+ const files = input.files;
370
+ if (!files || files.length === 0) {
371
+ return;
372
+ }
373
+ const fileArray = Array.from(files);
374
+ const { accepted, rejected, reason } = this.validateFiles(fileArray);
375
+ if (reason != null) {
376
+ this.reject?.emit({ files: rejected, reason });
377
+ if (this.fileInputRef) {
378
+ this.fileInputRef.value = '';
379
+ }
380
+ return;
381
+ }
382
+ if (this.multiple) {
383
+ this.internalValue = accepted;
384
+ }
385
+ else {
386
+ this.internalValue = accepted[0];
387
+ }
388
+ this.value = this.internalValue;
389
+ this.update?.emit(this.value);
390
+ };
391
+ handleClear = (event) => {
392
+ if (this.disabled)
393
+ return;
394
+ event.stopPropagation();
395
+ const clearedValue = this.multiple ? [] : null;
396
+ this.value = clearedValue;
397
+ this.internalValue = clearedValue;
398
+ this.update?.emit(clearedValue);
399
+ if (this.fileInputRef) {
400
+ this.fileInputRef.value = '';
401
+ }
402
+ };
403
+ handleClick = () => {
404
+ if (this.disabled)
405
+ return;
406
+ this.fileInputRef?.click();
407
+ };
408
+ hasFiles() {
409
+ if (!this.internalValue)
410
+ return false;
411
+ if (Array.isArray(this.internalValue)) {
412
+ return this.internalValue.length > 0;
413
+ }
414
+ return true;
415
+ }
416
+ getDisplayText() {
417
+ if (!this.hasFiles())
418
+ return this.placeholder ?? 'Click to upload';
419
+ if (Array.isArray(this.internalValue)) {
420
+ return this.internalValue.map(f => f.name).join(', ');
421
+ }
422
+ return this.internalValue?.name || (this.placeholder ?? 'Click to upload');
423
+ }
424
+ checkOverflow() {
425
+ if (!this.fileNamesRef)
426
+ return;
427
+ const isOverflowing = this.fileNamesRef.scrollWidth > this.fileNamesRef.clientWidth;
428
+ this.showTooltip = isOverflowing;
429
+ }
430
+ getIconColor() {
431
+ return this.disabled ? FILE_PICKER_COLORS.icon.disabled : FILE_PICKER_COLORS.icon.default;
432
+ }
433
+ render() {
434
+ const hasFiles = this.hasFiles();
435
+ const displayText = this.getDisplayText();
436
+ const cssVars = {
437
+ '--sd-file-picker-font-size': `${FILE_PICKER_LAYOUT.fontSize}px`,
438
+ '--sd-file-picker-line-height': `${FILE_PICKER_LAYOUT.lineHeight}px`,
439
+ '--sd-file-picker-font-weight': FILE_PICKER_LAYOUT.fontWeight,
440
+ '--sd-file-picker-padding-x': `${FILE_PICKER_LAYOUT.paddingX}px`,
441
+ '--sd-file-picker-gap': `${FILE_PICKER_LAYOUT.gap}px`,
442
+ '--sd-file-picker-text-color': FILE_PICKER_COLORS.text.default,
443
+ '--sd-file-picker-placeholder-color': FILE_PICKER_COLORS.text.placeholder,
444
+ '--sd-file-picker-disabled-color': FILE_PICKER_COLORS.text.disabled,
445
+ // sd-field 시스템 변수 override
446
+ '--sd-system-size-field-sm-height': `${FILE_PICKER_LAYOUT.height}px`,
447
+ '--sd-system-radius-field-sm': `${FILE_PICKER_LAYOUT.radius}px`,
448
+ };
449
+ const content = (h("div", { role: "button", tabindex: this.disabled ? -1 : 0, class: "sd-file-picker__content", onClick: this.handleClick, onKeyDown: e => {
450
+ if (e.key === 'Enter' || e.key === ' ') {
451
+ e.preventDefault();
452
+ this.handleClick();
453
+ }
454
+ } }, h("input", { ref: el => (this.fileInputRef = el), type: "file", class: "sd-file-picker__input", disabled: this.disabled, multiple: this.multiple, accept: this.accept, onInput: this.handleFileChange, "aria-label": this.placeholder ?? 'Click to upload' }), h("sd-icon", { name: "attachFile", size: Number(FILE_PICKER_LAYOUT.iconSize), color: this.getIconColor(), class: "sd-file-picker__icon" }), h("div", { ref: el => (this.fileNamesRef = el), class: {
455
+ 'sd-file-picker__text': true,
456
+ 'sd-file-picker__text--placeholder': !hasFiles,
457
+ 'sd-file-picker__text--active': hasFiles,
458
+ } }, displayText), !this.disabled && hasFiles && (h("sd-ghost-button", { icon: "close", size: "xxs", ariaLabel: "clear", disabled: this.disabled, class: "sd-file-picker__clear-icon", onClick: this.handleClear })), this.showTooltip && hasFiles && this.hovered && (h("div", { class: "sd-file-picker__tooltip" }, displayText))));
459
+ if (this.inline) {
460
+ return (h("div", { class: {
461
+ 'sd-file-picker--inline': true,
462
+ 'sd-file-picker--inline-disabled': this.disabled,
463
+ }, style: cssVars, onMouseEnter: () => (this.hovered = true), onMouseLeave: () => (this.hovered = false) }, content));
464
+ }
465
+ return (h("sd-field", { name: this.name, label: this.label, labelWidth: this.labelWidth, addonLabel: this.addonLabel, addonAlign: this.addonAlign, hint: this.hint, errorMessage: this.errorMessage, width: this.width, rules: this.rules, error: this.error, disabled: this.disabled, focused: this.focused, hovered: this.hovered, status: this.status, icon: this.icon, labelTooltip: this.labelTooltip, labelTooltipProps: this.labelTooltipProps, ref: el => (this.formField = el), onMouseEnter: () => (this.hovered = true), onMouseLeave: () => (this.hovered = false), style: cssVars }, content));
466
+ }
467
+ static get watchers() { return {
468
+ "value": [{
469
+ "valueChanged": 0
470
+ }]
471
+ }; }
472
+ };
473
+ SdFilePicker.style = sdFilePickerCss();
474
+
475
+ const sm$1 = inputTokens.textinput.sm;
476
+ const md$1 = inputTokens.textinput.md;
477
+ const INPUT_SIZE_MAP = {
478
+ sm: {
479
+ height: sm$1.height,
480
+ paddingX: sm$1.paddingX,
481
+ gap: sm$1.gap,
482
+ radius: sm$1.radius,
483
+ fontSize: sm$1.typography.fontSize,
484
+ lineHeight: sm$1.typography.lineHeight,
485
+ fontWeight: sm$1.typography.fontWeight,
486
+ },
487
+ md: {
488
+ height: md$1.height,
489
+ paddingX: md$1.paddingX,
490
+ gap: md$1.gap,
491
+ radius: md$1.radius,
492
+ fontSize: md$1.typography.fontSize,
493
+ lineHeight: md$1.typography.lineHeight,
494
+ fontWeight: md$1.typography.fontWeight,
495
+ },
496
+ };
497
+ const INPUT_COLORS = {
498
+ text: inputTokens.textinput.text,
499
+ icon: inputTokens.textinput.icon,
500
+ };
501
+
502
+ const sdInputCss = () => `sd-icon{display:inline-block;line-height:0}sd-icon .sd-icon--rotate-90{transform:rotate(90deg)}sd-icon .sd-icon--rotate-180{transform:rotate(180deg)}sd-icon .sd-icon--rotate-270{transform:rotate(270deg)}input:-webkit-autofill,input:-webkit-autofill:hover,input:-webkit-autofill:focus,input:-webkit-autofill:active{-webkit-text-fill-color:#000;-webkit-box-shadow:0 0 0px 1000px #fff inset;box-shadow:0 0 0px 1000px #fff inset;transition:background-color 5000s ease-in-out 0s}input:autofill,input:autofill:hover,input:autofill:focus,input:autofill:active{-webkit-text-fill-color:#000;-webkit-box-shadow:0 0 0px 1000px #fff inset;box-shadow:0 0 0px 1000px #fff inset;transition:background-color 5000s ease-in-out 0s}sd-input{display:inline-flex}sd-input .sd-input__content{width:100%;height:100%;display:flex;flex-flow:row nowrap;align-items:center;color:var(--sd-input-text-color);font-size:var(--sd-input-font-size);line-height:var(--sd-input-line-height);font-weight:var(--sd-input-font-weight);padding:0 var(--sd-input-padding-x);gap:var(--sd-input-gap)}sd-input .sd-input__content .sd-input__native{width:100%;height:100%;border:none;outline:none;background:transparent;font-size:inherit;line-height:inherit;font-weight:inherit;color:inherit}sd-input .sd-input__content .sd-input__native[disabled]{cursor:not-allowed;color:var(--sd-input-disabled-color)}sd-input .sd-input__content .sd-input__native[readonly]{color:var(--sd-system-color-field-text-read-only)}sd-input .sd-input__content .sd-input__native::placeholder{color:var(--sd-input-placeholder-color)}sd-input .sd-input__content .sd-input__clear-icon,sd-input .sd-input__content .sd-input__password-icon{flex-shrink:0}sd-input .sd-input__content .sd-input__native[disabled]~.sd-input__clear-icon,sd-input .sd-input__content .sd-input__native[disabled]~.sd-input__password-icon,sd-input .sd-input__content .sd-input__native[readonly]~.sd-input__clear-icon,sd-input .sd-input__content .sd-input__native[readonly]~.sd-input__password-icon{cursor:not-allowed;pointer-events:none}`;
503
+
504
+ const SdInput = class {
505
+ constructor(hostRef) {
506
+ registerInstance(this, hostRef);
507
+ this.input = createEvent(this, "sdUpdate", 7);
508
+ this.focus = createEvent(this, "sdFocus", 7);
509
+ this.blur = createEvent(this, "sdBlur", 7);
510
+ }
511
+ get host() { return getElement(this); }
512
+ value = null;
513
+ type = 'text';
514
+ size = 'sm';
515
+ addonLabel = '';
516
+ addonAlign = 'start';
517
+ placeholder = '입력해 주세요.';
518
+ disabled = false;
519
+ clearable = false;
520
+ width = '';
521
+ rules = [];
522
+ autoFocus = false;
523
+ autocomplete = '';
524
+ maxlength;
525
+ minlength;
526
+ inputmode;
527
+ enterkeyhint;
528
+ spellcheck = false;
529
+ status;
530
+ hint = '';
531
+ errorMessage = '';
532
+ inputClass = '';
533
+ readonly = false;
534
+ error = false;
535
+ focused = false;
536
+ hovered = false;
537
+ // props - label
538
+ label = '';
539
+ labelWidth = '';
540
+ icon = undefined;
541
+ labelTooltip = '';
542
+ labelTooltipProps = null;
543
+ // props - custom styles
544
+ inputStyle = {};
545
+ internalValue = null;
546
+ passwordVisible = false;
547
+ nativeEl = undefined;
548
+ formField;
549
+ name = nanoid();
550
+ input;
551
+ focus;
552
+ blur;
553
+ valueChanged(newValue) {
554
+ this.internalValue = newValue;
555
+ }
556
+ internalValueChanged(newValue) {
557
+ if (newValue !== this.value) {
558
+ this.value = newValue;
559
+ this.input?.emit(this.value);
560
+ }
561
+ }
562
+ async sdGetNativeElement() {
563
+ return this.nativeEl || null;
564
+ }
565
+ async sdValidate() {
566
+ this.formField?.sdValidate();
567
+ }
568
+ async sdReset() {
569
+ this.formField?.sdReset();
570
+ }
571
+ async sdResetValidate() {
572
+ this.formField?.sdResetValidation();
573
+ }
574
+ async sdFocus() {
575
+ this.formField?.sdFocus();
576
+ }
577
+ componentWillLoad() {
578
+ if (this.value != null && this.value !== '') {
579
+ this.internalValue = this.value;
580
+ }
581
+ }
582
+ componentDidLoad() {
583
+ if (this.autoFocus) {
584
+ this.nativeEl?.focus();
585
+ }
586
+ }
587
+ handleInput = (event) => {
588
+ const target = event.target;
589
+ this.internalValue = target.value;
590
+ };
591
+ handleFocus = async (type, event) => {
592
+ this.focused = type === 'focus';
593
+ if (type === 'blur') {
594
+ // Auto-validate on blur if rules exist
595
+ if (this.rules && this.rules.length > 0) {
596
+ await this.formField?.sdValidate();
597
+ }
598
+ this.blur?.emit(event);
599
+ }
600
+ else {
601
+ this.focus?.emit(event);
602
+ }
603
+ };
604
+ render() {
605
+ const sizeTokens = INPUT_SIZE_MAP[this.size] ?? INPUT_SIZE_MAP.sm;
606
+ const cssVars = {
607
+ // sd-input 자체 토큰
608
+ '--sd-input-font-size': `${sizeTokens.fontSize}px`,
609
+ '--sd-input-line-height': `${sizeTokens.lineHeight}px`,
610
+ '--sd-input-font-weight': sizeTokens.fontWeight,
611
+ '--sd-input-padding-x': `${sizeTokens.paddingX}px`,
612
+ '--sd-input-gap': `${sizeTokens.gap}px`,
613
+ '--sd-input-text-color': INPUT_COLORS.text.default,
614
+ '--sd-input-placeholder-color': INPUT_COLORS.text.placeholder,
615
+ '--sd-input-disabled-color': INPUT_COLORS.text.disabled,
616
+ '--sd-input-icon-color': INPUT_COLORS.icon.default,
617
+ // sd-field 시스템 변수 override (size별 높이/반경)
618
+ '--sd-system-size-field-sm-height': `${sizeTokens.height}px`,
619
+ '--sd-system-radius-field-sm': `${sizeTokens.radius}px`,
620
+ };
621
+ return (h("sd-field", { key: 'a81aefc3060587c77acf9f6de9f26f7f421b4c91', name: this.name, label: this.label, labelWidth: this.labelWidth, addonLabel: this.addonLabel, addonAlign: this.addonAlign, hint: this.hint, errorMessage: this.errorMessage, width: this.width, rules: this.rules, error: this.error, disabled: this.disabled, readonly: this.readonly, focused: this.focused, hovered: this.hovered, status: this.status, size: this.size, icon: this.icon, labelTooltip: this.labelTooltip, labelTooltipProps: this.labelTooltipProps, ref: el => (this.formField = el), onMouseEnter: () => (this.hovered = true), onMouseLeave: () => (this.hovered = false), style: cssVars }, h("label", { key: '7486a081cceed565d2624125e74cbde4a97a4d5c', class: "sd-input__content" }, h("slot", { key: 'cf65ff444baddbf20004ae3ef80c5a54564d7d6f', name: "prefix" }), h("input", { key: '468d342c1cd6f60f7ad573a8c4b0acd4d7424e13', name: this.name, ref: el => (this.nativeEl = el), class: `sd-input__native ${this.inputClass}`, type: this.type === 'password' && this.passwordVisible ? 'text' : (this.type ?? 'text'), value: this.internalValue || '', placeholder: this.placeholder ?? '입력해 주세요.', disabled: this.disabled, readonly: this.readonly, autofocus: this.autoFocus, autocomplete: this.autocomplete || undefined, maxlength: this.maxlength, minlength: this.minlength, inputmode: this.inputmode, enterkeyhint: this.enterkeyhint, spellcheck: this.spellcheck, onInput: this.handleInput, onFocus: event => this.handleFocus('focus', event), onBlur: event => this.handleFocus('blur', event), style: this.inputStyle }), h("slot", { key: '5de289a0767297fc1952dbcb26bbe256f2f0d6c4', name: "suffix" }), this.clearable && this.internalValue && !this.disabled && !this.readonly && (h("sd-ghost-button", { key: '2ef30f443a82492f1cdd56f812651605b4057fa2', icon: "close", ariaLabel: "clear", size: "xxs", disabled: this.disabled, class: "sd-input__clear-icon", onClick: async () => {
622
+ if (this.disabled || this.readonly)
623
+ return;
624
+ this.internalValue = '';
625
+ await this.formField?.sdValidate();
626
+ } })), this.type === 'password' && (h("sd-ghost-button", { key: 'a8cd4f37a0cea5512e080748310032256af9187d', icon: this.passwordVisible ? 'visibilityOn' : 'visibilityOff', ariaLabel: "visibility", size: "xxs", disabled: this.disabled || this.readonly, class: "sd-input__password-icon", onClick: () => {
627
+ if (this.disabled || this.readonly)
628
+ return;
629
+ this.passwordVisible = !this.passwordVisible;
630
+ } })))));
631
+ }
632
+ static get watchers() { return {
633
+ "value": [{
634
+ "valueChanged": 0
635
+ }],
636
+ "internalValue": [{
637
+ "internalValueChanged": 0
638
+ }]
639
+ }; }
640
+ };
641
+ SdInput.style = sdInputCss();
642
+
643
+ const numberInput = {
644
+ sm: {
645
+ height: "28",
646
+ paddingX: "6",
647
+ radius: "4",
648
+ typography: {
649
+ fontWeight: "400",
650
+ fontSize: "12",
651
+ lineHeight: "20"}},
652
+ md: {
653
+ height: "36",
654
+ paddingX: "8",
655
+ radius: "6",
656
+ typography: {
657
+ fontWeight: "400",
658
+ fontSize: "14",
659
+ lineHeight: "24"
660
+ }},
661
+ contents: {
662
+ gap: "4"
663
+ },
664
+ border: {
665
+ "default": "#AAAAAA",
666
+ focus: "#0075FF",
667
+ danger: "#FB4444"},
668
+ bg: {
669
+ "default": "#FFFFFF"},
670
+ text: {
671
+ "default": "#222222",
672
+ placeholder: "#AAAAAA",
673
+ disabled: "#888888"
674
+ },
675
+ hint: {
676
+ color: "#555555",
677
+ typography: {
678
+ fontSize: "12",
679
+ lineHeight: "20"}
680
+ },
681
+ errorMessage: {
682
+ color: "#E30000",
683
+ typography: {
684
+ fontSize: "12",
685
+ lineHeight: "20"}
686
+ },
687
+ stepper: {
688
+ sm: {
689
+ size: "20"
690
+ },
691
+ md: {
692
+ size: "24"
693
+ },
694
+ radius: "4",
695
+ bg: {
696
+ "default": "#EFF6FF",
697
+ disabled: "#EEEEEE"
698
+ },
699
+ icon: {
700
+ "default": "#0075FF",
701
+ disabled: "#BBBBBB"
702
+ }
703
+ }
704
+ };
705
+ var numberInputTokens = {
706
+ numberInput: numberInput
707
+ };
708
+
709
+ const sm = numberInputTokens.numberInput.sm;
710
+ const md = numberInputTokens.numberInput.md;
711
+ const NUMBER_INPUT_SIZE_MAP = {
712
+ sm: {
713
+ height: sm.height,
714
+ paddingX: sm.paddingX,
715
+ radius: sm.radius,
716
+ fontSize: sm.typography.fontSize,
717
+ lineHeight: sm.typography.lineHeight,
718
+ fontWeight: sm.typography.fontWeight,
719
+ },
720
+ md: {
721
+ height: md.height,
722
+ paddingX: md.paddingX,
723
+ radius: md.radius,
724
+ fontSize: md.typography.fontSize,
725
+ lineHeight: md.typography.lineHeight,
726
+ fontWeight: md.typography.fontWeight,
727
+ },
728
+ };
729
+ const NUMBER_INPUT_COLORS = {
730
+ border: numberInputTokens.numberInput.border,
731
+ bg: numberInputTokens.numberInput.bg,
732
+ text: numberInputTokens.numberInput.text,
733
+ };
734
+ const NUMBER_INPUT_STEPPER = {
735
+ sm: { size: numberInputTokens.numberInput.stepper.sm.size },
736
+ md: { size: numberInputTokens.numberInput.stepper.md.size },
737
+ radius: numberInputTokens.numberInput.stepper.radius,
738
+ bg: numberInputTokens.numberInput.stepper.bg,
739
+ icon: numberInputTokens.numberInput.stepper.icon,
740
+ };
741
+ const NUMBER_INPUT_HINT = numberInputTokens.numberInput.hint;
742
+ const NUMBER_INPUT_ERROR_MESSAGE = numberInputTokens.numberInput.errorMessage;
743
+ const NUMBER_INPUT_CONTENTS_GAP = numberInputTokens.numberInput.contents.gap;
744
+
745
+ const sdNumberInputCss = () => `sd-number-input{display:inline-flex}sd-number-input .sd-number-input__content{width:100%;height:100%;display:flex;flex-flow:row nowrap;align-items:center;gap:var(--sd-number-input-padding-x);color:var(--sd-number-input-text-color);font-size:var(--sd-number-input-font-size);line-height:var(--sd-number-input-line-height);font-weight:var(--sd-number-input-font-weight);padding:0 var(--sd-number-input-padding-x)}sd-number-input .sd-number-input__content--no-stepper{padding:0 calc(var(--sd-number-input-padding-x) * 2)}sd-number-input .sd-number-input__content .sd-number-input__native{width:100%;height:100%;min-width:0;border:none;outline:none;background:transparent;font-size:inherit;line-height:inherit;font-weight:inherit;color:inherit;padding-block:0;padding-inline:0}sd-number-input .sd-number-input__content .sd-number-input__native[disabled]{cursor:not-allowed;color:var(--sd-number-input-disabled-color)}sd-number-input .sd-number-input__content .sd-number-input__native[readonly]{color:var(--sd-system-color-field-text-read-only)}sd-number-input .sd-number-input__content .sd-number-input__native::placeholder{color:var(--sd-number-input-placeholder-color)}sd-number-input .sd-number-input__content .sd-number-input__prefix,sd-number-input .sd-number-input__content .sd-number-input__suffix{flex-shrink:0;white-space:nowrap;color:var(--sd-number-input-placeholder-color);font-size:inherit;line-height:inherit}sd-number-input .sd-number-input__content .sd-number-input__stepper{flex-shrink:0;width:var(--sd-number-input-stepper-size);height:var(--sd-number-input-stepper-size);border:none;border-radius:var(--sd-number-input-stepper-radius);background-color:var(--sd-number-input-stepper-bg);cursor:pointer;display:flex;align-items:center;justify-content:center;padding:0;margin:0;transition:background-color 0.15s ease}sd-number-input .sd-number-input__content .sd-number-input__stepper:hover:not(:disabled){filter:brightness(0.95)}sd-number-input .sd-number-input__content .sd-number-input__stepper:disabled{background-color:var(--sd-number-input-stepper-bg-disabled);cursor:not-allowed}`;
746
+
747
+ const SdNumberInput = class {
748
+ constructor(hostRef) {
749
+ registerInstance(this, hostRef);
750
+ this.update = createEvent(this, "sdUpdate", 7);
751
+ this.focus = createEvent(this, "sdFocus", 7);
752
+ this.blur = createEvent(this, "sdBlur", 7);
753
+ }
754
+ get el() { return getElement(this); }
755
+ size = 'sm';
756
+ min = Number.NEGATIVE_INFINITY;
757
+ max = Number.POSITIVE_INFINITY;
758
+ step = 1;
759
+ useButton = false;
760
+ useDecimal = false;
761
+ value = null;
762
+ label;
763
+ labelWidth = '';
764
+ addonLabel = '';
765
+ addonAlign = 'start';
766
+ placeholder = '입력해 주세요.';
767
+ disabled = false;
768
+ width;
769
+ rules = [];
770
+ autoFocus = false;
771
+ status;
772
+ hint = '';
773
+ errorMessage = '';
774
+ inputPrefix = '';
775
+ inputSuffix = '';
776
+ inputClass = '';
777
+ readonly = false;
778
+ inputStyle = {};
779
+ error = false;
780
+ focused = false;
781
+ hovered = false;
782
+ internalValue = null;
783
+ displayValue = '';
784
+ nativeEl = undefined;
785
+ formField;
786
+ name = nanoid();
787
+ update;
788
+ focus;
789
+ blur;
790
+ toNumber(val) {
791
+ if (val === null || val === undefined || val === '')
792
+ return null;
793
+ if (typeof val === 'number')
794
+ return isNaN(val) ? null : val;
795
+ if (typeof val === 'string')
796
+ return this.parseInput(val);
797
+ const num = Number(val);
798
+ return isNaN(num) ? null : num;
799
+ }
800
+ formatWithCommas(value) {
801
+ if (value === null || value === undefined || isNaN(value))
802
+ return '';
803
+ const isNegative = value < 0;
804
+ const absValue = Math.abs(value);
805
+ const [intPart, decPart] = absValue.toString().split('.');
806
+ const formatted = (+intPart).toLocaleString();
807
+ const result = isNegative ? '-' + formatted : formatted;
808
+ return decPart !== undefined && decPart !== '' ? result + '.' + decPart : String(result);
809
+ }
810
+ parseInput(input) {
811
+ if (input.trim() === '')
812
+ return null;
813
+ const cleaned = input.replace(/,/g, '').trim();
814
+ if (!/^-?(\d+\.?\d*|\d*\.\d+)$/.test(cleaned)) {
815
+ return null;
816
+ }
817
+ const parsed = parseFloat(cleaned);
818
+ if (isNaN(parsed))
819
+ return null;
820
+ if (!this.useDecimal && cleaned.includes('.')) {
821
+ return null;
822
+ }
823
+ return parsed;
824
+ }
825
+ clampMinMax(value) {
826
+ if (isNaN(value))
827
+ return 0;
828
+ return Math.min(Math.max(value, this.min), this.max);
829
+ }
830
+ updateDisplay() {
831
+ this.displayValue = this.formatWithCommas(this.internalValue);
832
+ }
833
+ isIncrementDisabled() {
834
+ if (this.disabled || this.readonly)
835
+ return true;
836
+ if (this.internalValue !== null) {
837
+ return this.internalValue >= this.max;
838
+ }
839
+ return false;
840
+ }
841
+ isDecrementDisabled() {
842
+ if (this.disabled || this.readonly)
843
+ return true;
844
+ if (this.internalValue !== null) {
845
+ return this.internalValue <= this.min;
846
+ }
847
+ return false;
848
+ }
849
+ valueChanged(newValue) {
850
+ const parsed = this.toNumber(newValue);
851
+ if (parsed !== null) {
852
+ this.internalValue = this.clampMinMax(parsed);
853
+ }
854
+ else {
855
+ this.internalValue = null;
856
+ }
857
+ this.updateDisplay();
858
+ }
859
+ internalValueChanged(newValue) {
860
+ this.updateDisplay();
861
+ if (newValue !== this.value) {
862
+ this.value = newValue;
863
+ this.update?.emit(newValue);
864
+ }
865
+ }
866
+ async sdValidate() {
867
+ this.formField?.sdValidate();
868
+ }
869
+ async sdReset() {
870
+ this.formField?.sdReset();
871
+ }
872
+ async sdResetValidate() {
873
+ this.formField?.sdResetValidation();
874
+ }
875
+ async sdFocus() {
876
+ this.formField?.sdFocus();
877
+ }
878
+ async sdGetNativeElement() {
879
+ return this.nativeEl || null;
880
+ }
881
+ componentWillLoad() {
882
+ const parsed = this.toNumber(this.value);
883
+ if (parsed !== null) {
884
+ this.internalValue = this.clampMinMax(parsed);
885
+ }
886
+ this.updateDisplay();
887
+ }
888
+ componentDidLoad() {
889
+ if (this.autoFocus) {
890
+ this.nativeEl?.focus();
891
+ }
892
+ }
893
+ // TODO: 현재 숫자를 크게 넣어서 숫자e+21등의 형식으로 변환되면 값이 바뀌지않음 수정 필요
894
+ handleInput = (event) => {
895
+ const target = event.target;
896
+ const inputValue = target.value;
897
+ if (inputValue === '') {
898
+ this.internalValue = null;
899
+ this.displayValue = '';
900
+ return;
901
+ }
902
+ const commasRemoved = inputValue.replace(/,/g, '');
903
+ const decimalCount = (commasRemoved.match(/\./g) || []).length;
904
+ if (decimalCount > 1) {
905
+ target.value = this.displayValue;
906
+ return;
907
+ }
908
+ if (commasRemoved === '-' || commasRemoved === '.' || commasRemoved === '-.') {
909
+ target.value = commasRemoved;
910
+ return;
911
+ }
912
+ if (commasRemoved.endsWith('.') && decimalCount === 1) {
913
+ const numberPart = commasRemoved.slice(0, -1);
914
+ const parsed = this.parseInput(numberPart);
915
+ if (parsed !== null) {
916
+ const formatted = this.formatWithCommas(parsed);
917
+ target.value = formatted + '.';
918
+ return;
919
+ }
920
+ }
921
+ const parsed = this.parseInput(commasRemoved);
922
+ if (parsed !== null) {
923
+ if (parsed < this.min) {
924
+ target.value = this.displayValue;
925
+ return;
926
+ }
927
+ if (parsed > this.max) {
928
+ target.value = this.displayValue;
929
+ return;
930
+ }
931
+ this.internalValue = parsed;
932
+ this.displayValue = this.formatWithCommas(parsed);
933
+ target.value = this.displayValue;
934
+ }
935
+ else {
936
+ target.value = this.displayValue;
937
+ }
938
+ };
939
+ handleFocus = (event) => {
940
+ this.focused = true;
941
+ this.focus?.emit(event);
942
+ };
943
+ handleBlur = async (event) => {
944
+ this.updateDisplay();
945
+ if (this.nativeEl) {
946
+ this.nativeEl.value = this.displayValue;
947
+ }
948
+ if (this.rules && this.rules.length > 0) {
949
+ await this.formField?.sdValidate();
950
+ }
951
+ this.focused = false;
952
+ this.blur?.emit(event);
953
+ };
954
+ handleKeyDown = (event) => {
955
+ if (event.key === 'ArrowUp') {
956
+ event.preventDefault();
957
+ this.handleIncrement();
958
+ }
959
+ else if (event.key === 'ArrowDown') {
960
+ event.preventDefault();
961
+ this.handleDecrement();
962
+ }
963
+ };
964
+ handleIncrement = () => {
965
+ if (this.isIncrementDisabled())
966
+ return;
967
+ const currentVal = this.internalValue ?? this.min ?? 0;
968
+ let nextVal = currentVal + this.step;
969
+ if (nextVal > this.max) {
970
+ nextVal = this.max;
971
+ }
972
+ if (nextVal === currentVal)
973
+ return;
974
+ this.internalValue = nextVal;
975
+ };
976
+ handleDecrement = () => {
977
+ if (this.isDecrementDisabled())
978
+ return;
979
+ const currentVal = this.internalValue ?? this.min ?? 0;
980
+ let nextVal = currentVal - this.step;
981
+ if (nextVal < this.min) {
982
+ nextVal = this.min;
983
+ }
984
+ if (nextVal === currentVal)
985
+ return;
986
+ this.internalValue = nextVal;
987
+ };
988
+ render() {
989
+ const sizeTokens = NUMBER_INPUT_SIZE_MAP[this.size] ?? NUMBER_INPUT_SIZE_MAP.sm;
990
+ const stepperSize = NUMBER_INPUT_STEPPER[this.size]?.size ?? NUMBER_INPUT_STEPPER.sm.size;
991
+ const iconSize = this.size === 'md' ? 14 : 12;
992
+ const cssVars = {
993
+ // 컴포넌트 로컬 토큰
994
+ '--sd-number-input-font-size': `${sizeTokens.fontSize}px`,
995
+ '--sd-number-input-line-height': `${sizeTokens.lineHeight}px`,
996
+ '--sd-number-input-font-weight': sizeTokens.fontWeight,
997
+ '--sd-number-input-padding-x': `${sizeTokens.paddingX}px`,
998
+ '--sd-number-input-text-color': NUMBER_INPUT_COLORS.text.default,
999
+ '--sd-number-input-placeholder-color': NUMBER_INPUT_COLORS.text.placeholder,
1000
+ '--sd-number-input-disabled-color': NUMBER_INPUT_COLORS.text.disabled,
1001
+ // 스테퍼 토큰
1002
+ '--sd-number-input-stepper-size': `${stepperSize}px`,
1003
+ '--sd-number-input-stepper-radius': `${NUMBER_INPUT_STEPPER.radius}px`,
1004
+ '--sd-number-input-stepper-bg': NUMBER_INPUT_STEPPER.bg.default,
1005
+ '--sd-number-input-stepper-bg-disabled': NUMBER_INPUT_STEPPER.bg.disabled,
1006
+ '--sd-number-input-stepper-icon-color': NUMBER_INPUT_STEPPER.icon.default,
1007
+ '--sd-number-input-stepper-icon-disabled': NUMBER_INPUT_STEPPER.icon.disabled,
1008
+ // sd-field 시스템 변수 오버라이드
1009
+ '--sd-system-size-field-sm-height': `${sizeTokens.height}px`,
1010
+ '--sd-system-radius-field-sm': `${sizeTokens.radius}px`,
1011
+ '--sd-system-color-field-border-default': NUMBER_INPUT_COLORS.border.default,
1012
+ '--sd-system-color-field-border-focus': NUMBER_INPUT_COLORS.border.focus,
1013
+ '--sd-system-color-field-border-danger': NUMBER_INPUT_COLORS.border.danger,
1014
+ '--sd-system-color-field-bg-default': NUMBER_INPUT_COLORS.bg.default,
1015
+ // 힌트/에러 메시지 오버라이드
1016
+ '--sd-textinput-input-text-error-message': NUMBER_INPUT_ERROR_MESSAGE.color,
1017
+ '--sd-textinput-input-error-message-typography-font-size': `${NUMBER_INPUT_ERROR_MESSAGE.typography.fontSize}px`,
1018
+ '--sd-textinput-input-error-message-typography-line-height': `${NUMBER_INPUT_ERROR_MESSAGE.typography.lineHeight}px`,
1019
+ '--sd-textinput-input-text-hint': NUMBER_INPUT_HINT.color,
1020
+ '--sd-textinput-input-hint-typography-font-size': `${NUMBER_INPUT_HINT.typography.fontSize}px`,
1021
+ '--sd-textinput-input-hint-typography-line-height': `${NUMBER_INPUT_HINT.typography.lineHeight}px`,
1022
+ '--sd-textinput-input-contents-gap': `${NUMBER_INPUT_CONTENTS_GAP}px`,
1023
+ };
1024
+ return (h("sd-field", { key: '543a3fa5d759f4c64222e4eeca4de142296f663e', name: this.name, label: this.label, labelWidth: this.labelWidth, addonLabel: this.addonLabel, addonAlign: this.addonAlign, hint: this.hint, errorMessage: this.errorMessage, width: this.width, rules: this.rules, error: this.error, disabled: this.disabled, readonly: this.readonly, focused: this.focused, hovered: this.hovered, status: this.status, size: this.size, ref: el => (this.formField = el), onMouseEnter: () => (this.hovered = true), onMouseLeave: () => (this.hovered = false), style: cssVars }, h("div", { key: '8d71a794e1c25f661d8260756f26ee6a47016aa9', class: {
1025
+ 'sd-number-input__content': true,
1026
+ 'sd-number-input__content--no-stepper': !this.useButton,
1027
+ } }, this.useButton && (h("button", { key: 'aaa21a743b73b1251780a9e03f40bef5765508d7', type: "button", class: "sd-number-input__stepper sd-number-input__stepper--decrement", disabled: this.isDecrementDisabled(), onClick: this.handleDecrement, tabindex: -1 }, h("sd-icon", { key: 'c94aa4c4dfb344de8c87b506eca7b02e7ffd8b0a', name: "minus", size: iconSize, color: this.isDecrementDisabled()
1028
+ ? NUMBER_INPUT_STEPPER.icon.disabled
1029
+ : NUMBER_INPUT_STEPPER.icon.default }))), this.inputPrefix && h("span", { key: '11b2efa4d6a665f03135adbb6a30b496deea820d', class: "sd-number-input__prefix" }, this.inputPrefix), h("input", { key: 'b58452e12a222c7adb0dd7be810db874788e63b0', name: this.name, ref: el => (this.nativeEl = el), class: `sd-number-input__native ${this.inputClass}`, type: "text", inputMode: "numeric", value: this.displayValue, placeholder: this.placeholder ?? '입력해 주세요.', disabled: this.disabled, readonly: this.readonly, autofocus: this.autoFocus, onInput: this.handleInput, onKeyDown: this.handleKeyDown, onFocus: this.handleFocus, onBlur: this.handleBlur, style: {
1030
+ textAlign: this.useButton ? 'center' : 'right',
1031
+ ...this.inputStyle,
1032
+ } }), this.inputSuffix && h("span", { key: 'c71e6fa80e99b9551d927b0958696dee2f278d85', class: "sd-number-input__suffix" }, this.inputSuffix), this.useButton && (h("button", { key: '620477a2710b32cba13433e7fd2c2ae59a20ce3c', type: "button", class: "sd-number-input__stepper sd-number-input__stepper--increment", disabled: this.isIncrementDisabled(), onClick: this.handleIncrement, tabindex: -1 }, h("sd-icon", { key: 'adb263a5d16743641429c611a006192677a2c0e0', name: "add", size: iconSize, color: this.isIncrementDisabled()
1033
+ ? NUMBER_INPUT_STEPPER.icon.disabled
1034
+ : NUMBER_INPUT_STEPPER.icon.default }))))));
1035
+ }
1036
+ static get watchers() { return {
1037
+ "value": [{
1038
+ "valueChanged": 0
1039
+ }],
1040
+ "internalValue": [{
1041
+ "internalValueChanged": 0
1042
+ }]
1043
+ }; }
1044
+ };
1045
+ SdNumberInput.style = sdNumberInputCss();
1046
+
1047
+ const sdRadioGroupCss = () => `sd-radio{display:inline-flex;width:fit-content;height:var(--sd-radio-line-height);line-height:0}sd-radio .sd-radio{cursor:pointer;display:inline-flex;align-items:center;gap:var(--sd-radio-gap);height:var(--sd-radio-line-height);max-height:var(--sd-radio-line-height)}sd-radio .sd-radio>input{position:absolute;width:0;height:0;opacity:0;pointer-events:none}sd-radio .sd-radio>input:focus-visible+.sd-radio__circle{box-shadow:0 0 0 2px white, 0 0 0 4px var(--sd-radio-checked-border);outline:none}sd-radio .sd-radio__circle{position:relative;width:var(--sd-radio-size);height:var(--sd-radio-size);border-radius:50%;border:var(--sd-radio-border-width) solid var(--sd-radio-unchecked-border);box-sizing:border-box;background:var(--sd-radio-unchecked-bg);display:inline-flex;flex-shrink:0}sd-radio .sd-radio__label{font-size:var(--sd-radio-font-size);font-weight:var(--sd-radio-font-weight);color:var(--sd-radio-label-color);line-height:var(--sd-radio-line-height)}sd-radio .sd-radio:hover:not(.sd-radio--disabled) .sd-radio__circle{background:var(--sd-radio-unchecked-bg-hover);border-color:var(--sd-radio-unchecked-border-hover)}sd-radio .sd-radio--checked .sd-radio__circle{border-color:var(--sd-radio-checked-border)}sd-radio .sd-radio--checked .sd-radio__circle::after{content:"";position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);width:var(--sd-radio-dot-size);height:var(--sd-radio-dot-size);border-radius:50%;background:var(--sd-radio-checked-dot)}sd-radio .sd-radio--disabled{cursor:not-allowed}sd-radio .sd-radio--disabled .sd-radio__circle{background:var(--sd-radio-disabled-bg);border-color:var(--sd-radio-disabled-border)}sd-radio .sd-radio--disabled.sd-radio--checked .sd-radio__circle::after{background:var(--sd-radio-disabled-dot)}sd-radio-group{display:inline-block}sd-radio-group .sd-radio-group{display:flex}sd-radio-group .sd-radio-group--vertical{flex-direction:column;gap:8px}sd-radio-group .sd-radio-group--horizontal{flex-direction:row;align-items:center;gap:20px}`;
1048
+
1049
+ const SdRadioGroup = class {
1050
+ constructor(hostRef) {
1051
+ registerInstance(this, hostRef);
1052
+ this.change = createEvent(this, "sdUpdate", 7);
1053
+ }
1054
+ value;
1055
+ options = [];
1056
+ direction = 'vertical';
1057
+ disabled = false;
1058
+ groupName;
1059
+ change;
1060
+ valueChanged(newValue) {
1061
+ this.value = newValue;
1062
+ }
1063
+ handleRadioChange = (optionValue) => {
1064
+ if (this.disabled)
1065
+ return;
1066
+ const matched = this.options.find(o => String(o.value) === String(optionValue));
1067
+ const resolved = matched ? matched.value : optionValue;
1068
+ this.value = resolved;
1069
+ this.change?.emit(resolved);
1070
+ };
1071
+ getGroupClasses() {
1072
+ const classes = ['sd-radio-group', `sd-radio-group--${this.direction ?? 'vertical'}`];
1073
+ return classes.join(' ');
1074
+ }
1075
+ render() {
1076
+ return (h("div", { key: 'c5404526e6a21258d616f6459499b636a6636384', class: this.getGroupClasses(), role: "radiogroup" }, this.options.map(option => {
1077
+ return (h("sd-radio", { key: `radio-${option.value}`, val: String(option.value), value: String(this.value), label: option.label, disabled: this.disabled || !!option.disabled, onSdUpdate: ({ detail }) => this.handleRadioChange(detail) }));
1078
+ })));
1079
+ }
1080
+ static get watchers() { return {
1081
+ "value": [{
1082
+ "valueChanged": 0
1083
+ }]
1084
+ }; }
1085
+ };
1086
+ SdRadioGroup.style = sdRadioGroupCss();
1087
+
1088
+ const TEXTAREA_TOKENS = {
1089
+ paddingX: inputTokens.textinput.sm.paddingX,
1090
+ paddingY: inputTokens.textinput.sm.paddingY,
1091
+ radius: inputTokens.textinput.sm.radius,
1092
+ fontSize: inputTokens.textinput.sm.typography.fontSize,
1093
+ lineHeight: inputTokens.textinput.sm.typography.lineHeight,
1094
+ fontWeight: inputTokens.textinput.sm.typography.fontWeight};
1095
+ const TEXTAREA_COLORS = {
1096
+ text: inputTokens.textinput.text,
1097
+ bg: inputTokens.textinput.bg,
1098
+ border: inputTokens.textinput.border,
1099
+ resizer: inputTokens.textinput.resizer,
1100
+ };
1101
+
1102
+ const sdTextareaCss = () => `sd-textarea{display:inline-flex}sd-textarea .sd-textarea__content{width:100%;display:flex}sd-textarea .sd-textarea__content .sd-textarea__native{width:100%;min-height:100px;border:none;outline:none;background:transparent;padding:var(--sd-textarea-padding-y) var(--sd-textarea-padding-x);font-family:inherit;font-size:var(--sd-textarea-font-size);line-height:var(--sd-textarea-line-height);font-weight:var(--sd-textarea-font-weight);color:var(--sd-textarea-text-color);resize:vertical}sd-textarea .sd-textarea__content .sd-textarea__native::placeholder{color:var(--sd-textarea-placeholder-color)}sd-textarea .sd-textarea__content .sd-textarea__native:disabled{cursor:not-allowed;color:var(--sd-textarea-disabled-color)}sd-textarea .sd-textarea__content .sd-textarea__native[readonly]{color:var(--sd-system-color-field-text-read-only)}`;
1103
+
1104
+ const SdTextarea = class {
1105
+ constructor(hostRef) {
1106
+ registerInstance(this, hostRef);
1107
+ this.input = createEvent(this, "sdUpdate", 7);
1108
+ this.focus = createEvent(this, "sdFocus", 7);
1109
+ this.blur = createEvent(this, "sdBlur", 7);
1110
+ }
1111
+ get host() { return getElement(this); }
1112
+ value = null;
1113
+ placeholder = '입력해 주세요.';
1114
+ disabled = false;
1115
+ readonly = false;
1116
+ autoFocus = false;
1117
+ textareaClass = '';
1118
+ textareaStyle = {};
1119
+ maxLength;
1120
+ rows;
1121
+ spellcheck = false;
1122
+ width = '';
1123
+ // props - sd-field
1124
+ label = '';
1125
+ labelWidth = '';
1126
+ addonLabel = '';
1127
+ addonAlign = 'start';
1128
+ hint = '';
1129
+ errorMessage = '';
1130
+ icon = undefined;
1131
+ labelTooltip = '';
1132
+ labelTooltipProps = null;
1133
+ rules = [];
1134
+ error = false;
1135
+ status;
1136
+ focused = false;
1137
+ hovered = false;
1138
+ internalValue = null;
1139
+ nativeEl = undefined;
1140
+ formField;
1141
+ name = nanoid();
1142
+ input;
1143
+ focus;
1144
+ blur;
1145
+ valueChanged(newValue) {
1146
+ this.internalValue = newValue;
1147
+ }
1148
+ internalValueChanged(newValue) {
1149
+ if (newValue !== this.value) {
1150
+ this.value = newValue;
1151
+ this.input?.emit(this.value);
1152
+ }
1153
+ }
1154
+ async sdGetNativeElement() {
1155
+ return this.nativeEl || null;
1156
+ }
1157
+ async sdValidate() {
1158
+ this.formField?.sdValidate();
1159
+ }
1160
+ async sdReset() {
1161
+ this.formField?.sdReset();
1162
+ }
1163
+ async sdResetValidate() {
1164
+ this.formField?.sdResetValidation();
1165
+ }
1166
+ async sdFocus() {
1167
+ this.formField?.sdFocus();
1168
+ }
1169
+ componentWillLoad() {
1170
+ if (this.value !== null && this.value !== undefined) {
1171
+ this.internalValue = this.value;
1172
+ }
1173
+ }
1174
+ componentDidLoad() {
1175
+ if (this.autoFocus) {
1176
+ this.nativeEl?.focus();
1177
+ }
1178
+ }
1179
+ handleInput = (event) => {
1180
+ const target = event.target;
1181
+ this.internalValue = target.value;
1182
+ };
1183
+ handleFocus = async (type, event) => {
1184
+ this.focused = type === 'focus';
1185
+ if (type === 'blur') {
1186
+ if (this.rules && this.rules.length > 0) {
1187
+ await this.formField?.sdValidate();
1188
+ }
1189
+ this.blur?.emit(event);
1190
+ }
1191
+ else {
1192
+ this.focus?.emit(event);
1193
+ }
1194
+ };
1195
+ render() {
1196
+ const cssVars = {
1197
+ '--sd-textarea-font-size': `${TEXTAREA_TOKENS.fontSize}px`,
1198
+ '--sd-textarea-line-height': `${TEXTAREA_TOKENS.lineHeight}px`,
1199
+ '--sd-textarea-font-weight': TEXTAREA_TOKENS.fontWeight,
1200
+ '--sd-textarea-padding-x': `${TEXTAREA_TOKENS.paddingX}px`,
1201
+ '--sd-textarea-padding-y': `${TEXTAREA_TOKENS.paddingY}px`,
1202
+ '--sd-textarea-radius': `${TEXTAREA_TOKENS.radius}px`,
1203
+ '--sd-textarea-text-color': TEXTAREA_COLORS.text.default,
1204
+ '--sd-textarea-placeholder-color': TEXTAREA_COLORS.text.placeholder,
1205
+ '--sd-textarea-disabled-color': TEXTAREA_COLORS.text.disabled,
1206
+ '--sd-textarea-bg-color': TEXTAREA_COLORS.bg.default,
1207
+ '--sd-textarea-disabled-bg-color': TEXTAREA_COLORS.bg.disabled,
1208
+ '--sd-textarea-border-color': TEXTAREA_COLORS.border.default,
1209
+ '--sd-textarea-resizer-color': TEXTAREA_COLORS.resizer.color,
1210
+ // sd-field 시스템 변수 override (textarea는 고정 높이가 아닌 auto)
1211
+ '--sd-system-size-field-sm-height': 'auto',
1212
+ '--sd-system-radius-field-sm': `${TEXTAREA_TOKENS.radius}px`,
1213
+ };
1214
+ return (h("sd-field", { key: '64595853405ae2a66231229516e93a74a4340ef0', name: this.name, label: this.label, labelWidth: this.labelWidth, addonLabel: this.addonLabel, addonAlign: this.addonAlign, hint: this.hint, errorMessage: this.errorMessage, width: this.width, rules: this.rules, error: this.error, disabled: this.disabled, readonly: this.readonly, focused: this.focused, hovered: this.hovered, status: this.status, icon: this.icon, labelTooltip: this.labelTooltip, labelTooltipProps: this.labelTooltipProps, ref: el => (this.formField = el), onMouseEnter: () => (this.hovered = true), onMouseLeave: () => (this.hovered = false), style: cssVars }, h("div", { key: 'b7cddedc733c83d4c50234559c02c5f220634008', class: "sd-textarea__content" }, h("textarea", { key: '2d1b852e6ba7b913901c07fce36ce30598f15e12', name: this.name, ref: el => (this.nativeEl = el), class: `sd-textarea__native ${this.textareaClass}`, value: this.internalValue || '', placeholder: this.placeholder ?? '입력해 주세요.', disabled: this.disabled, readOnly: this.readonly, autofocus: this.autoFocus, maxLength: this.maxLength, rows: this.rows, spellcheck: this.spellcheck, onInput: this.handleInput, onFocus: event => this.handleFocus('focus', event), onBlur: event => this.handleFocus('blur', event), style: this.textareaStyle }))));
1215
+ }
1216
+ static get watchers() { return {
1217
+ "value": [{
1218
+ "valueChanged": 0
1219
+ }],
1220
+ "internalValue": [{
1221
+ "internalValueChanged": 0
1222
+ }]
1223
+ }; }
1224
+ };
1225
+ SdTextarea.style = sdTextareaCss();
1226
+
1227
+ export { SdDatePicker as sd_date_picker, SdDateRangePicker as sd_date_range_picker, SdFilePicker as sd_file_picker, SdInput as sd_input, SdNumberInput as sd_number_input, SdRadioGroup as sd_radio_group, SdTextarea as sd_textarea };