@sellmate/design-system 1.20.1 → 1.22.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 (377) hide show
  1. package/dist/cjs/design-system.cjs.js +2 -2
  2. package/dist/cjs/{index-DXm0PH2A.js → index-C-F-JEv_.js} +1 -1
  3. package/dist/cjs/loader.cjs.js +2 -2
  4. package/dist/cjs/sd-action-modal.cjs.entry.js +8 -2
  5. package/dist/cjs/sd-badge.cjs.entry.js +3 -2
  6. package/dist/cjs/sd-barcode-input.cjs.entry.js +35 -2
  7. package/dist/cjs/sd-button_2.cjs.entry.js +16 -7
  8. package/dist/cjs/sd-calendar_2.cjs.entry.js +17 -6
  9. package/dist/cjs/sd-callout.cjs.entry.js +4 -2
  10. package/dist/cjs/sd-card.cjs.entry.js +4 -2
  11. package/dist/cjs/sd-checkbox.cjs.entry.js +21 -12
  12. package/dist/cjs/sd-chip-input.cjs.entry.js +76 -18
  13. package/dist/cjs/sd-chip.cjs.entry.js +19 -2
  14. package/dist/cjs/sd-circle-progress.cjs.entry.js +6 -2
  15. package/dist/cjs/sd-confirm-modal_2.cjs.entry.js +27 -4
  16. package/dist/cjs/sd-date-box.cjs.entry.js +13 -3
  17. package/dist/cjs/sd-date-picker_7.cjs.entry.js +209 -13
  18. package/dist/cjs/sd-date-range-picker-calendar.cjs.entry.js +7 -2
  19. package/dist/cjs/sd-divider.cjs.entry.js +1 -1
  20. package/dist/cjs/sd-dropdown-button.cjs.entry.js +11 -1
  21. package/dist/cjs/sd-field_3.cjs.entry.js +70 -12
  22. package/dist/cjs/sd-form.cjs.entry.js +10 -2
  23. package/dist/cjs/sd-ghost-button_3.cjs.entry.js +54 -15
  24. package/dist/cjs/sd-guide.cjs.entry.js +9 -3
  25. package/dist/cjs/sd-key-value-table.cjs.entry.js +3 -1
  26. package/dist/cjs/sd-linear-progress.cjs.entry.js +7 -4
  27. package/dist/cjs/sd-loading-container.cjs.entry.js +5 -3
  28. package/dist/cjs/sd-modal-container.cjs.entry.js +7 -1
  29. package/dist/cjs/sd-pagination_4.cjs.entry.js +121 -13
  30. package/dist/cjs/sd-popover.cjs.entry.js +21 -5
  31. package/dist/cjs/sd-popup.cjs.entry.js +7 -3
  32. package/dist/cjs/sd-radio-button.cjs.entry.js +8 -2
  33. package/dist/cjs/sd-radio.cjs.entry.js +7 -2
  34. package/dist/cjs/sd-select-list-item_2.cjs.entry.js +18 -7
  35. package/dist/cjs/sd-select_3.cjs.entry.js +56 -9
  36. package/dist/cjs/sd-switch.cjs.entry.js +6 -2
  37. package/dist/cjs/sd-table.cjs.entry.js +42 -7
  38. package/dist/cjs/sd-tabs.cjs.entry.js +8 -2
  39. package/dist/cjs/sd-td.cjs.entry.js +11 -2
  40. package/dist/cjs/sd-text-link.cjs.entry.js +13 -4
  41. package/dist/cjs/sd-toast-container.cjs.entry.js +11 -2
  42. package/dist/cjs/sd-toast.cjs.entry.js +12 -3
  43. package/dist/cjs/sd-toggle.cjs.entry.js +6 -2
  44. package/dist/cjs/{tooltipArrow-D3P3JC08.js → tooltipArrow-26hYtSrD.js} +1 -1
  45. package/dist/collection/components/assets/CaretDown.js +1 -1
  46. package/dist/collection/components/assets/CaretLeft.js +1 -1
  47. package/dist/collection/components/assets/CaretRight.js +1 -1
  48. package/dist/collection/components/assets/CaretUp.js +1 -1
  49. package/dist/collection/components/sd-action-modal/sd-action-modal.js +13 -7
  50. package/dist/collection/components/sd-badge/sd-badge.js +3 -2
  51. package/dist/collection/components/sd-barcode-input/sd-barcode-input.js +67 -34
  52. package/dist/collection/components/sd-button/sd-button.js +18 -10
  53. package/dist/collection/components/sd-calendar/sd-calendar.js +15 -9
  54. package/dist/collection/components/sd-callout/sd-callout.js +5 -3
  55. package/dist/collection/components/sd-card/sd-card.js +5 -3
  56. package/dist/collection/components/sd-checkbox/sd-checkbox.config.js +5 -3
  57. package/dist/collection/components/sd-checkbox/sd-checkbox.css +16 -0
  58. package/dist/collection/components/sd-checkbox/sd-checkbox.js +5 -3
  59. package/dist/collection/components/sd-chip/sd-chip.js +35 -18
  60. package/dist/collection/components/sd-chip-input/sd-chip-input.css +6 -0
  61. package/dist/collection/components/sd-chip-input/sd-chip-input.js +107 -49
  62. package/dist/collection/components/sd-circle-progress/sd-circle-progress.js +9 -5
  63. package/dist/collection/components/sd-confirm-modal/sd-confirm-modal.js +32 -17
  64. package/dist/collection/components/sd-date-box/sd-date-box.js +22 -12
  65. package/dist/collection/components/sd-date-picker/sd-date-picker-trigger/sd-date-picker-trigger.js +12 -7
  66. package/dist/collection/components/sd-date-picker/sd-date-picker.js +48 -25
  67. package/dist/collection/components/sd-date-range-picker/sd-date-range-picker-calendar/sd-date-range-picker-calendar.js +11 -6
  68. package/dist/collection/components/sd-date-range-picker/sd-date-range-picker.js +50 -26
  69. package/dist/collection/components/sd-dropdown-button/sd-dropdown-button.js +20 -10
  70. package/dist/collection/components/sd-field/sd-field.js +51 -28
  71. package/dist/collection/components/sd-file-picker/sd-file-picker.js +60 -30
  72. package/dist/collection/components/sd-floating-portal/sd-floating-portal.js +32 -11
  73. package/dist/collection/components/sd-form/sd-form.js +17 -9
  74. package/dist/collection/components/sd-ghost-button/sd-ghost-button.js +28 -13
  75. package/dist/collection/components/sd-guide/sd-guide.js +14 -8
  76. package/dist/collection/components/sd-icon/sd-icon.js +2 -1
  77. package/dist/collection/components/sd-input/sd-input.js +82 -42
  78. package/dist/collection/components/sd-key-value-table/sd-key-value-table.js +4 -2
  79. package/dist/collection/components/sd-linear-progress/sd-linear-progress.js +10 -7
  80. package/dist/collection/components/sd-loading-container/sd-loading-container.js +6 -4
  81. package/dist/collection/components/sd-loading-modal/sd-loading-modal.js +17 -9
  82. package/dist/collection/components/sd-modal-container/sd-modal-container.js +12 -6
  83. package/dist/collection/components/sd-number-input/sd-number-input.js +82 -43
  84. package/dist/collection/components/sd-pagination/sd-pagination.js +11 -7
  85. package/dist/collection/components/sd-popover/sd-popover.js +35 -19
  86. package/dist/collection/components/sd-popup/sd-popup.js +11 -7
  87. package/dist/collection/components/sd-portal/sd-portal.js +35 -14
  88. package/dist/collection/components/sd-radio/sd-radio.js +11 -6
  89. package/dist/collection/components/sd-radio-button/sd-radio-button.js +13 -7
  90. package/dist/collection/components/sd-radio-group/sd-radio-group.js +13 -7
  91. package/dist/collection/components/sd-select/sd-select-list-item/sd-select-list-item.js +16 -9
  92. package/dist/collection/components/sd-select/sd-select-list-item-search/sd-select-list-item-search.js +12 -8
  93. package/dist/collection/components/sd-select/sd-select-listbox/sd-select-listbox.js +22 -12
  94. package/dist/collection/components/sd-select/sd-select-trigger/sd-select-trigger.js +18 -10
  95. package/dist/collection/components/sd-select/sd-select.js +62 -33
  96. package/dist/collection/components/sd-switch/sd-switch.js +9 -5
  97. package/dist/collection/components/sd-table/sd-table.js +76 -41
  98. package/dist/collection/components/sd-table/sd-table.stories.helpers.js +97 -0
  99. package/dist/collection/components/sd-table/sd-tbody/sd-tbody.js +4 -3
  100. package/dist/collection/components/sd-table/sd-td/sd-td.js +19 -10
  101. package/dist/collection/components/sd-table/sd-thead/sd-thead.css +21 -0
  102. package/dist/collection/components/sd-table/sd-thead/sd-thead.js +113 -20
  103. package/dist/collection/components/sd-table/sd-tr/sd-tr.js +22 -11
  104. package/dist/collection/components/sd-tabs/sd-tabs.js +13 -7
  105. package/dist/collection/components/sd-tag/sd-tag.js +10 -7
  106. package/dist/collection/components/sd-text-link/sd-text-link.js +21 -12
  107. package/dist/collection/components/sd-textarea/sd-textarea.js +69 -35
  108. package/dist/collection/components/sd-toast/sd-toast.js +20 -11
  109. package/dist/collection/components/sd-toast-container/sd-toast-container.js +19 -10
  110. package/dist/collection/components/sd-toggle/sd-toggle.js +9 -5
  111. package/dist/collection/components/sd-tooltip/sd-tooltip.js +30 -16
  112. package/dist/components/index.js +1 -1
  113. package/dist/components/{p-CUR9smP5.js → p-58DLP3IW.js} +1 -1
  114. package/dist/components/{p-CQozoo2-.js → p-B-Igud6n.js} +1 -1
  115. package/dist/components/{p-BZfVV3gu.js → p-B0myARGe.js} +1 -1
  116. package/dist/components/{p-CTPImLDQ.js → p-B12iH3Zk.js} +1 -1
  117. package/dist/components/{p-CoqA9KgU.js → p-B2bF2KlS.js} +1 -1
  118. package/dist/components/{p-MJG6EZeP.js → p-BFlmHQm9.js} +1 -1
  119. package/dist/{design-system/p-L_He_WSA.js → components/p-BRmilX-4.js} +1 -1
  120. package/dist/components/{p-Dl89_4C3.js → p-BXRgi3NZ.js} +1 -1
  121. package/dist/components/{p-BjcGzaFR.js → p-Bm3NWPaP.js} +1 -1
  122. package/dist/components/p-BpQwjSB8.js +1 -0
  123. package/dist/components/{p-CRwvv7YM.js → p-BpjmheLG.js} +1 -1
  124. package/dist/components/{p-5imde6N9.js → p-Bric-SEs.js} +1 -1
  125. package/dist/components/{p-CB2A3pJ5.js → p-BwTsP0Ak.js} +1 -1
  126. package/dist/components/{p-9Z-q6kKD.js → p-C1QezE7u.js} +1 -1
  127. package/dist/components/p-CCCwPJ5p.js +1 -0
  128. package/dist/components/p-CCO1WtEj.js +1 -0
  129. package/dist/components/p-CEKu7cxA.js +1 -0
  130. package/dist/components/{p-CrT06Uwc.js → p-CHxVi6l1.js} +1 -1
  131. package/dist/components/{p-DNnI3Nru.js → p-Cdzn78dP.js} +1 -1
  132. package/dist/components/p-Cj_1bYZF.js +1 -0
  133. package/dist/components/{p-ZvI5A-_t.js → p-Cjf8PHEl.js} +1 -1
  134. package/dist/components/{p-CJ69QmR3.js → p-Co2ThnbG.js} +1 -1
  135. package/dist/components/{p-gOIeNT-Z.js → p-CwSlRPMm.js} +1 -1
  136. package/dist/components/p-D7StBSjK.js +1 -0
  137. package/dist/components/{p-Bz93hWXV.js → p-DFbj6d3L.js} +1 -1
  138. package/dist/components/{p-B5bya7Gp.js → p-DlXBFtBO.js} +1 -1
  139. package/dist/components/{p-Rwc_ltPn.js → p-Du_qPqW-.js} +1 -1
  140. package/dist/components/{p-DIlNesBH.js → p-DzAvlr8W.js} +1 -1
  141. package/dist/components/{p-D99vy8Ip.js → p-FrqOl9KZ.js} +1 -1
  142. package/dist/components/{p-uSEbiD29.js → p-JMuxVcTW.js} +1 -1
  143. package/dist/components/{p-DertIGhs.js → p-OjchKJGr.js} +1 -1
  144. package/dist/components/p-S2-XqY2R.js +1 -0
  145. package/dist/components/{p-DDAA-zcg.js → p-YCGkwgiM.js} +1 -1
  146. package/dist/components/{p-DZTxHJlP.js → p-ZvP2Ce6J.js} +1 -1
  147. package/dist/components/p-kRH2GOb0.js +1 -0
  148. package/dist/components/{p-FTvXz0-a.js → p-mcMbSkii.js} +1 -1
  149. package/dist/components/{p-BiBLp9_a.js → p-vPS2GNz3.js} +1 -1
  150. package/dist/components/sd-action-modal.js +1 -1
  151. package/dist/components/sd-badge.js +1 -1
  152. package/dist/components/sd-barcode-input.js +1 -1
  153. package/dist/components/sd-button.js +1 -1
  154. package/dist/components/sd-calendar.js +1 -1
  155. package/dist/components/sd-callout.js +1 -1
  156. package/dist/components/sd-card.js +1 -1
  157. package/dist/components/sd-checkbox.js +1 -1
  158. package/dist/components/sd-chip-input.js +1 -1
  159. package/dist/components/sd-chip.js +1 -1
  160. package/dist/components/sd-circle-progress.js +1 -1
  161. package/dist/components/sd-confirm-modal.js +1 -1
  162. package/dist/components/sd-date-box.js +1 -1
  163. package/dist/components/sd-date-picker-trigger.js +1 -1
  164. package/dist/components/sd-date-picker.js +1 -1
  165. package/dist/components/sd-date-range-picker-calendar.js +1 -1
  166. package/dist/components/sd-date-range-picker.js +1 -1
  167. package/dist/components/sd-divider.js +1 -1
  168. package/dist/components/sd-dropdown-button.js +1 -1
  169. package/dist/components/sd-field.js +1 -1
  170. package/dist/components/sd-file-picker.js +1 -1
  171. package/dist/components/sd-floating-portal.js +1 -1
  172. package/dist/components/sd-form.js +1 -1
  173. package/dist/components/sd-ghost-button.js +1 -1
  174. package/dist/components/sd-guide.js +1 -1
  175. package/dist/components/sd-icon.js +1 -1
  176. package/dist/components/sd-input.js +1 -1
  177. package/dist/components/sd-key-value-table.js +1 -1
  178. package/dist/components/sd-linear-progress.js +1 -1
  179. package/dist/components/sd-loading-container.js +1 -1
  180. package/dist/components/sd-loading-modal.js +1 -1
  181. package/dist/components/sd-modal-container.js +1 -1
  182. package/dist/components/sd-number-input.js +1 -1
  183. package/dist/components/sd-pagination.js +1 -1
  184. package/dist/components/sd-popover.js +1 -1
  185. package/dist/components/sd-popup.js +1 -1
  186. package/dist/components/sd-portal.js +1 -1
  187. package/dist/components/sd-radio-button.js +1 -1
  188. package/dist/components/sd-radio-group.js +1 -1
  189. package/dist/components/sd-radio.js +1 -1
  190. package/dist/components/sd-select-list-item-search.js +1 -1
  191. package/dist/components/sd-select-list-item.js +1 -1
  192. package/dist/components/sd-select-listbox.js +1 -1
  193. package/dist/components/sd-select-trigger.js +1 -1
  194. package/dist/components/sd-select.js +1 -1
  195. package/dist/components/sd-switch.js +1 -1
  196. package/dist/components/sd-table.js +1 -1
  197. package/dist/components/sd-tabs.js +1 -1
  198. package/dist/components/sd-tag.js +1 -1
  199. package/dist/components/sd-tbody.js +1 -1
  200. package/dist/components/sd-td.js +1 -1
  201. package/dist/components/sd-text-link.js +1 -1
  202. package/dist/components/sd-textarea.js +1 -1
  203. package/dist/components/sd-thead.js +1 -1
  204. package/dist/components/sd-toast-container.js +1 -1
  205. package/dist/components/sd-toast.js +1 -1
  206. package/dist/components/sd-toggle.js +1 -1
  207. package/dist/components/sd-tooltip.js +1 -1
  208. package/dist/components/sd-tr.js +1 -1
  209. package/dist/design-system/design-system.css +1 -1
  210. package/dist/design-system/design-system.esm.js +1 -1
  211. package/dist/design-system/p-14447dd5.entry.js +1 -0
  212. package/dist/design-system/{p-e9d1dbb5.entry.js → p-274dbc65.entry.js} +1 -1
  213. package/dist/design-system/{p-b291baab.entry.js → p-2ba0b35a.entry.js} +1 -1
  214. package/dist/design-system/{p-52f551a1.entry.js → p-2ca4902b.entry.js} +1 -1
  215. package/dist/design-system/p-2df32f8c.entry.js +1 -0
  216. package/dist/design-system/{p-cb80327c.entry.js → p-35da166a.entry.js} +1 -1
  217. package/dist/design-system/p-35e1e2fa.entry.js +1 -0
  218. package/dist/design-system/p-4bbc894b.entry.js +1 -0
  219. package/dist/design-system/{p-6ce68bf2.entry.js → p-4bc0ce52.entry.js} +1 -1
  220. package/dist/design-system/p-4c1559c8.entry.js +1 -0
  221. package/dist/design-system/{p-da4e2674.entry.js → p-4eeca0cb.entry.js} +1 -1
  222. package/dist/design-system/{p-646a7830.entry.js → p-4f69fde0.entry.js} +1 -1
  223. package/dist/design-system/{p-ccf1a3fc.entry.js → p-50b5cf37.entry.js} +1 -1
  224. package/dist/design-system/p-52e88677.entry.js +1 -0
  225. package/dist/design-system/{p-4acfc5f9.entry.js → p-552acf98.entry.js} +1 -1
  226. package/dist/design-system/{p-23006577.entry.js → p-563a8242.entry.js} +1 -1
  227. package/dist/design-system/{p-e3990243.entry.js → p-68687503.entry.js} +1 -1
  228. package/dist/design-system/{p-1f3c1cca.entry.js → p-6d8a4a23.entry.js} +1 -1
  229. package/dist/design-system/{p-d5032f31.entry.js → p-7c507d39.entry.js} +1 -1
  230. package/dist/design-system/{p-717eba5f.entry.js → p-88926a42.entry.js} +1 -1
  231. package/dist/design-system/{p-35d390f1.entry.js → p-90436be8.entry.js} +1 -1
  232. package/dist/design-system/{p-9289eb14.entry.js → p-99f33027.entry.js} +1 -1
  233. package/dist/design-system/{p-c47198fc.entry.js → p-9a010c12.entry.js} +1 -1
  234. package/dist/design-system/{p-54853a2b.entry.js → p-9dc0c2f9.entry.js} +1 -1
  235. package/dist/{components/p-Bg9XySrz.js → design-system/p-C7HJ-NfO.js} +2 -1
  236. package/dist/{components/p-0VCXAYrh.js → design-system/p-DUyBmuH_.js} +1 -1
  237. package/dist/design-system/{p-d5c3bac9.entry.js → p-a71a8b31.entry.js} +1 -1
  238. package/dist/design-system/{p-a4331364.entry.js → p-a80cc067.entry.js} +1 -1
  239. package/dist/design-system/{p-ae344950.entry.js → p-abcc9367.entry.js} +1 -1
  240. package/dist/design-system/p-ac81b46e.entry.js +1 -0
  241. package/dist/design-system/{p-08343698.entry.js → p-b881bbb6.entry.js} +1 -1
  242. package/dist/design-system/{p-2151e081.entry.js → p-bfba449b.entry.js} +1 -1
  243. package/dist/design-system/p-c684cd96.entry.js +1 -0
  244. package/dist/design-system/{p-b63b8df9.entry.js → p-c93c623f.entry.js} +1 -1
  245. package/dist/design-system/{p-98e0b332.entry.js → p-ccc85130.entry.js} +1 -1
  246. package/dist/design-system/{p-aa1c6202.entry.js → p-ce5df7ef.entry.js} +1 -1
  247. package/dist/design-system/{p-adfddf3b.entry.js → p-ce83eca1.entry.js} +1 -1
  248. package/dist/design-system/{p-7ed8c8f1.entry.js → p-d5b535ad.entry.js} +1 -1
  249. package/dist/design-system/{p-df7c721d.entry.js → p-e310f188.entry.js} +1 -1
  250. package/dist/design-system/p-e7d4b78e.entry.js +1 -0
  251. package/dist/design-system/{p-bdb7492c.entry.js → p-fc65bbe2.entry.js} +1 -1
  252. package/dist/design-system/{p-a5a586da.entry.js → p-ff726fad.entry.js} +1 -1
  253. package/dist/esm/design-system.js +3 -3
  254. package/dist/esm/{index-CAxodB5I.js → index-C7HJ-NfO.js} +1 -1
  255. package/dist/esm/loader.js +3 -3
  256. package/dist/esm/sd-action-modal.entry.js +8 -2
  257. package/dist/esm/sd-badge.entry.js +3 -2
  258. package/dist/esm/sd-barcode-input.entry.js +35 -2
  259. package/dist/esm/sd-button_2.entry.js +16 -7
  260. package/dist/esm/sd-calendar_2.entry.js +17 -6
  261. package/dist/esm/sd-callout.entry.js +4 -2
  262. package/dist/esm/sd-card.entry.js +4 -2
  263. package/dist/esm/sd-checkbox.entry.js +21 -12
  264. package/dist/esm/sd-chip-input.entry.js +76 -18
  265. package/dist/esm/sd-chip.entry.js +19 -2
  266. package/dist/esm/sd-circle-progress.entry.js +6 -2
  267. package/dist/esm/sd-confirm-modal_2.entry.js +27 -4
  268. package/dist/esm/sd-date-box.entry.js +13 -3
  269. package/dist/esm/sd-date-picker_7.entry.js +209 -13
  270. package/dist/esm/sd-date-range-picker-calendar.entry.js +7 -2
  271. package/dist/esm/sd-divider.entry.js +1 -1
  272. package/dist/esm/sd-dropdown-button.entry.js +11 -1
  273. package/dist/esm/sd-field_3.entry.js +70 -12
  274. package/dist/esm/sd-form.entry.js +10 -2
  275. package/dist/esm/sd-ghost-button_3.entry.js +54 -15
  276. package/dist/esm/sd-guide.entry.js +9 -3
  277. package/dist/esm/sd-key-value-table.entry.js +3 -1
  278. package/dist/esm/sd-linear-progress.entry.js +7 -4
  279. package/dist/esm/sd-loading-container.entry.js +5 -3
  280. package/dist/esm/sd-modal-container.entry.js +7 -1
  281. package/dist/esm/sd-pagination_4.entry.js +121 -13
  282. package/dist/esm/sd-popover.entry.js +21 -5
  283. package/dist/esm/sd-popup.entry.js +7 -3
  284. package/dist/esm/sd-radio-button.entry.js +8 -2
  285. package/dist/esm/sd-radio.entry.js +7 -2
  286. package/dist/esm/sd-select-list-item_2.entry.js +18 -7
  287. package/dist/esm/sd-select_3.entry.js +56 -9
  288. package/dist/esm/sd-switch.entry.js +6 -2
  289. package/dist/esm/sd-table.entry.js +42 -7
  290. package/dist/esm/sd-tabs.entry.js +8 -2
  291. package/dist/esm/sd-td.entry.js +11 -2
  292. package/dist/esm/sd-text-link.entry.js +13 -4
  293. package/dist/esm/sd-toast-container.entry.js +11 -2
  294. package/dist/esm/sd-toast.entry.js +12 -3
  295. package/dist/esm/sd-toggle.entry.js +6 -2
  296. package/dist/esm/{tooltipArrow-DLr6VvUK.js → tooltipArrow-Bgf3crs7.js} +1 -1
  297. package/dist/types/components/sd-action-modal/sd-action-modal.d.ts +6 -0
  298. package/dist/types/components/sd-badge/sd-badge.d.ts +1 -0
  299. package/dist/types/components/sd-barcode-input/sd-barcode-input.d.ts +33 -0
  300. package/dist/types/components/sd-button/sd-button.d.ts +8 -0
  301. package/dist/types/components/sd-calendar/sd-calendar.d.ts +6 -0
  302. package/dist/types/components/sd-callout/sd-callout.d.ts +2 -0
  303. package/dist/types/components/sd-card/sd-card.d.ts +2 -0
  304. package/dist/types/components/sd-checkbox/sd-checkbox.config.d.ts +2 -0
  305. package/dist/types/components/sd-chip/sd-chip.d.ts +17 -0
  306. package/dist/types/components/sd-chip-input/sd-chip-input.d.ts +33 -0
  307. package/dist/types/components/sd-circle-progress/sd-circle-progress.d.ts +4 -0
  308. package/dist/types/components/sd-confirm-modal/sd-confirm-modal.d.ts +15 -0
  309. package/dist/types/components/sd-date-box/sd-date-box.d.ts +10 -0
  310. package/dist/types/components/sd-date-picker/sd-date-picker-trigger/sd-date-picker-trigger.d.ts +5 -0
  311. package/dist/types/components/sd-date-picker/sd-date-picker.d.ts +23 -0
  312. package/dist/types/components/sd-date-range-picker/sd-date-range-picker-calendar/sd-date-range-picker-calendar.d.ts +5 -0
  313. package/dist/types/components/sd-date-range-picker/sd-date-range-picker.d.ts +24 -0
  314. package/dist/types/components/sd-dropdown-button/sd-dropdown-button.d.ts +10 -0
  315. package/dist/types/components/sd-field/sd-field.d.ts +23 -0
  316. package/dist/types/components/sd-file-picker/sd-file-picker.d.ts +30 -0
  317. package/dist/types/components/sd-floating-portal/sd-floating-portal.d.ts +12 -0
  318. package/dist/types/components/sd-form/sd-form.d.ts +8 -0
  319. package/dist/types/components/sd-ghost-button/sd-ghost-button.d.ts +7 -0
  320. package/dist/types/components/sd-guide/sd-guide.d.ts +6 -0
  321. package/dist/types/components/sd-icon/sd-icon.d.ts +1 -0
  322. package/dist/types/components/sd-input/sd-input.d.ts +40 -0
  323. package/dist/types/components/sd-key-value-table/sd-key-value-table.d.ts +2 -0
  324. package/dist/types/components/sd-linear-progress/sd-linear-progress.d.ts +4 -0
  325. package/dist/types/components/sd-loading-container/sd-loading-container.d.ts +2 -0
  326. package/dist/types/components/sd-loading-modal/sd-loading-modal.d.ts +8 -0
  327. package/dist/types/components/sd-modal-container/sd-modal-container.d.ts +6 -0
  328. package/dist/types/components/sd-number-input/sd-number-input.d.ts +39 -0
  329. package/dist/types/components/sd-pagination/sd-pagination.d.ts +4 -0
  330. package/dist/types/components/sd-popover/sd-popover.d.ts +16 -0
  331. package/dist/types/components/sd-popup/sd-popup.d.ts +5 -0
  332. package/dist/types/components/sd-portal/sd-portal.d.ts +13 -0
  333. package/dist/types/components/sd-radio/sd-radio.d.ts +5 -0
  334. package/dist/types/components/sd-radio-button/sd-radio-button.d.ts +6 -0
  335. package/dist/types/components/sd-radio-group/sd-radio-group.d.ts +6 -0
  336. package/dist/types/components/sd-select/sd-select-list-item/sd-select-list-item.d.ts +7 -0
  337. package/dist/types/components/sd-select/sd-select-list-item-search/sd-select-list-item-search.d.ts +4 -0
  338. package/dist/types/components/sd-select/sd-select-listbox/sd-select-listbox.d.ts +10 -0
  339. package/dist/types/components/sd-select/sd-select-trigger/sd-select-trigger.d.ts +8 -0
  340. package/dist/types/components/sd-select/sd-select.d.ts +29 -0
  341. package/dist/types/components/sd-switch/sd-switch.d.ts +4 -0
  342. package/dist/types/components/sd-table/constants.d.ts +1 -0
  343. package/dist/types/components/sd-table/sd-table.d.ts +35 -0
  344. package/dist/types/components/sd-table/sd-table.stories.helpers.d.ts +10 -0
  345. package/dist/types/components/sd-table/sd-tbody/sd-tbody.d.ts +1 -0
  346. package/dist/types/components/sd-table/sd-td/sd-td.d.ts +9 -0
  347. package/dist/types/components/sd-table/sd-thead/sd-thead.d.ts +21 -0
  348. package/dist/types/components/sd-table/sd-tr/sd-tr.d.ts +11 -0
  349. package/dist/types/components/sd-tabs/sd-tabs.d.ts +6 -0
  350. package/dist/types/components/sd-tag/sd-tag.d.ts +4 -0
  351. package/dist/types/components/sd-text-link/sd-text-link.d.ts +9 -0
  352. package/dist/types/components/sd-textarea/sd-textarea.d.ts +34 -0
  353. package/dist/types/components/sd-toast/sd-toast.d.ts +9 -0
  354. package/dist/types/components/sd-toast-container/sd-toast-container.d.ts +9 -0
  355. package/dist/types/components/sd-toggle/sd-toggle.d.ts +4 -0
  356. package/dist/types/components/sd-tooltip/sd-tooltip.d.ts +14 -0
  357. package/dist/types/components.d.ts +1827 -7
  358. package/hydrate/index.js +949 -146
  359. package/hydrate/index.mjs +949 -146
  360. package/package.json +1 -1
  361. package/dist/components/p-B7PHGGFH.js +0 -1
  362. package/dist/components/p-CLlAhEDc.js +0 -1
  363. package/dist/components/p-CXeOxSQ-.js +0 -1
  364. package/dist/components/p-CZfsknba.js +0 -1
  365. package/dist/components/p-CvSqieCH.js +0 -1
  366. package/dist/components/p-P2jWtk8J.js +0 -1
  367. package/dist/components/p-xkRWGISE.js +0 -1
  368. package/dist/design-system/p-17dcf0e4.entry.js +0 -1
  369. package/dist/design-system/p-316b8a08.entry.js +0 -1
  370. package/dist/design-system/p-5039241c.entry.js +0 -1
  371. package/dist/design-system/p-5eaa12af.entry.js +0 -1
  372. package/dist/design-system/p-9c38ee79.entry.js +0 -1
  373. package/dist/design-system/p-CAxodB5I.js +0 -2
  374. package/dist/design-system/p-c995e6c3.entry.js +0 -1
  375. package/dist/design-system/p-eef6d4a3.entry.js +0 -1
  376. package/dist/design-system/p-faf7b64c.entry.js +0 -1
  377. package/dist/design-system/p-fd7abbfa.entry.js +0 -1
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var index = require('./index-DXm0PH2A.js');
3
+ var index = require('./index-C-F-JEv_.js');
4
4
  var component_progress = require('./component.progress-Bmg3vAAy.js');
5
5
  var system = require('./system-MjrAugX-.js');
6
6
 
@@ -22,9 +22,13 @@ const SdLinearProgress = class {
22
22
  constructor(hostRef) {
23
23
  index.registerInstance(this, hostRef);
24
24
  }
25
+ /** true이면 진행률 없이 무한 애니메이션 표시 */
25
26
  indeterminate = false;
27
+ /** 진행률 (0–100) */
26
28
  value = 0;
29
+ /** 색상 타입 */
27
30
  type = 'primary';
31
+ /** 하단에 표시할 레이블 텍스트 */
28
32
  label;
29
33
  get clampedValue() {
30
34
  if (!Number.isFinite(this.value))
@@ -32,8 +36,7 @@ const SdLinearProgress = class {
32
36
  return Math.max(0, Math.min(100, this.value));
33
37
  }
34
38
  render() {
35
- const fillColor = LINEAR_PROGRESS_FILL_COLOR_MAP[this.type] ??
36
- LINEAR_PROGRESS_FILL_COLOR_MAP.primary;
39
+ const fillColor = LINEAR_PROGRESS_FILL_COLOR_MAP[this.type] ?? LINEAR_PROGRESS_FILL_COLOR_MAP.primary;
37
40
  const valueColor = this.clampedValue === 0 ? LINEAR_PROGRESS_COLORS.valueZero : fillColor;
38
41
  const hostStyle = {
39
42
  '--sd-linear-progress-track-color': LINEAR_PROGRESS_COLORS.track,
@@ -49,7 +52,7 @@ const SdLinearProgress = class {
49
52
  clipPath: `inset(0 ${100 - this.clampedValue}% 0 0)`,
50
53
  };
51
54
  const valueText = `${Math.round(this.clampedValue)}%`;
52
- return (index.h(index.Host, { key: '1e6aa9c81d3e9516a2f986d3f209df005de38f48', style: hostStyle }, index.h("div", { key: '06115d6245603c7ae54d892a23074f34db203592', class: 'sd-linear-progress__track' }, index.h("div", { key: '353549cb3c885cef86f114830599f375bfad8e50', class: 'sd-linear-progress__fill', style: fillStyle }), !this.indeterminate && (index.h("span", { key: '61afec063cd8f6ccaca27217fe7b599926245192', class: 'sd-linear-progress__value sd-linear-progress__value--on-track' }, valueText)), !this.indeterminate && (index.h("span", { key: 'fec238b0a6c73e06db3e53c019319a21b62e2836', class: 'sd-linear-progress__value sd-linear-progress__value--on-fill', style: valueOnFillStyle }, valueText))), this.label && index.h("span", { key: '668f63765b78c1047e3b850f3a17d6b2a1b9bfd4', class: 'sd-linear-progress__label' }, this.label)));
55
+ return (index.h(index.Host, { key: '232520f9e720d13e28bbac8f61864e943f03c12e', style: hostStyle }, index.h("div", { key: '6c5659e65da3f6d01c1029d9441f8619c304935c', class: "sd-linear-progress__track" }, index.h("div", { key: '81f1c5ca5e4422e33f5505eda07fd4a04b24465c', class: "sd-linear-progress__fill", style: fillStyle }), !this.indeterminate && (index.h("span", { key: 'd3542eddf302448742a3564c6f48d4d3f71d3733', class: "sd-linear-progress__value sd-linear-progress__value--on-track" }, valueText)), !this.indeterminate && (index.h("span", { key: 'f9c650167b1d9653a6745399226e480f15c19f65', class: "sd-linear-progress__value sd-linear-progress__value--on-fill", style: valueOnFillStyle }, valueText))), this.label && index.h("span", { key: 'fa8759f871902a4c3ebf0d982fe9b63d956a2f24', class: "sd-linear-progress__label" }, this.label)));
53
56
  }
54
57
  };
55
58
  SdLinearProgress.style = sdLinearProgressCss();
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var index = require('./index-DXm0PH2A.js');
3
+ var index = require('./index-C-F-JEv_.js');
4
4
 
5
5
  const sdLoadingContainerCss = () => `sd-loading-container .sd-loading-container{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;z-index:var(--sd-loading-container-z-index, 999);opacity:0;visibility:hidden;transition:opacity 0.2s ease, visibility 0s linear 0.2s;pointer-events:none}sd-loading-container .sd-loading-container--visible{opacity:1;visibility:visible;transition:opacity 0.2s ease, visibility 0s linear 0s;pointer-events:auto}sd-loading-container .sd-loading-container__backdrop{position:absolute;inset:0;background:rgba(0, 0, 0, 0.4)}sd-loading-container .sd-loading-container__content{position:relative;display:flex;flex-direction:column;align-items:center;gap:16px}sd-loading-container .sd-loading-container__message{margin:0;color:#ffffff;font-size:14px;font-weight:500;line-height:22px;text-align:center;max-width:400px;word-break:keep-all}`;
6
6
 
@@ -10,18 +10,20 @@ const SdLoadingContainer = class {
10
10
  }
11
11
  visible = false;
12
12
  message = '';
13
+ /** 로딩 오버레이를 표시합니다. */
13
14
  async show(options = {}) {
14
15
  this.message = options.message ?? '';
15
16
  this.visible = true;
16
17
  }
18
+ /** 로딩 오버레이를 숨깁니다. */
17
19
  async hide() {
18
20
  this.visible = false;
19
21
  }
20
22
  render() {
21
- return (index.h("div", { key: '6525405e4edafd9257be9887cca824a436b2807c', class: {
23
+ return (index.h("div", { key: 'b8efbc6422fded2472a6e575c9a7102375f90600', class: {
22
24
  'sd-loading-container': true,
23
25
  'sd-loading-container--visible': this.visible,
24
- }, "aria-hidden": this.visible ? 'false' : 'true' }, index.h("div", { key: 'd5f1e1e3df8b704d4a5dabe8cf7b50cc07a2699a', class: "sd-loading-container__backdrop" }), index.h("div", { key: '40dce62049e04a997b982ab65b47a755b6e917c7', class: "sd-loading-container__content" }, index.h("sd-circle-progress", { key: '9cb7a1ed52433f2d0982ceef1a298b1367a99dd4', indeterminate: true, type: "inverse" }), this.message && (index.h("p", { key: 'bc581b692122ef5553e4e8eb99056b89257eb6d9', class: "sd-loading-container__message" }, this.message)))));
26
+ }, "aria-hidden": this.visible ? 'false' : 'true' }, index.h("div", { key: '1ff327157be008e278636d49069945e553c1ecbd', class: "sd-loading-container__backdrop" }), index.h("div", { key: 'd55d2ab11528e35c04e8dd98f8c10d0f913a536e', class: "sd-loading-container__content" }, index.h("sd-circle-progress", { key: '29060ee18eb4e5a47bae25462abe11b8d5abfb0c', indeterminate: true, type: "inverse" }), this.message && index.h("p", { key: 'cf0478da282996ba4f7ecb920d8262181369af8a', class: "sd-loading-container__message" }, this.message))));
25
27
  }
26
28
  };
27
29
  SdLoadingContainer.style = sdLoadingContainerCss();
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var index = require('./index-DXm0PH2A.js');
3
+ var index = require('./index-C-F-JEv_.js');
4
4
  var modalStack = require('./modal-stack-DucFLON7.js');
5
5
 
6
6
  const sdModalContainerCss = () => `sd-modal-container{display:block}sd-modal-container .sd-modal-container{position:fixed;inset:0;z-index:var(--sd-modal-container-z-index, 997);pointer-events:none}sd-modal-container .sd-modal-container__layer{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;pointer-events:none}sd-modal-container .sd-modal-container__backdrop{position:absolute;inset:0;background:rgba(0, 0, 0, 0.4);opacity:0;transition:opacity 0.3s ease-out;pointer-events:none}sd-modal-container .sd-modal-container__backdrop--visible{opacity:1;pointer-events:auto}sd-modal-container .sd-modal-container__modal{position:relative;z-index:1;opacity:0;transform:scale(0);pointer-events:auto;transition:opacity 0.3s ease-out, transform 0.3s cubic-bezier(0.34, 1.56, 0.64, 1)}sd-modal-container .sd-modal-container__modal--visible{opacity:1;transform:scale(1)}sd-modal-container .sd-modal-container__modal--shake{animation:modal-shake 0.3s ease-out}@keyframes modal-shake{0%,100%{transform:scale(1)}25%{transform:scale(1.03)}50%{transform:scale(0.97)}75%{transform:scale(1.01)}}`;
@@ -13,9 +13,11 @@ const SdModalContainer = class {
13
13
  index.registerInstance(this, hostRef);
14
14
  }
15
15
  get el() { return index.getElement(this); }
16
+ /** 마지막 모달이 닫힐 때 자신을 DOM에서 제거할지 여부 */
16
17
  autoRemove = false;
17
18
  entries = [];
18
19
  layerRefs = new Map();
20
+ /** 확인 모달을 열고 모달 ID를 반환합니다. */
19
21
  async open(options, modalRef) {
20
22
  const id = `modal-${++modalIdCounter}`;
21
23
  const modalEl = this.createConfirmModal(id, options);
@@ -30,6 +32,7 @@ const SdModalContainer = class {
30
32
  });
31
33
  return id;
32
34
  }
35
+ /** 로딩 모달을 열고 모달 ID를 반환합니다. */
33
36
  async openLoading(options, modalRef) {
34
37
  const id = `modal-${++modalIdCounter}`;
35
38
  const modalEl = this.createLoadingModal(id, options);
@@ -44,6 +47,7 @@ const SdModalContainer = class {
44
47
  });
45
48
  return id;
46
49
  }
50
+ /** 커스텀 엘리먼트를 모달로 등록하고 모달 ID를 반환합니다. */
47
51
  async createCustom(element, options, modalRef) {
48
52
  const id = `modal-${++modalIdCounter}`;
49
53
  element.setAttribute('data-modal-id', id);
@@ -89,12 +93,14 @@ const SdModalContainer = class {
89
93
  modalStack.unregisterModal(entry.id);
90
94
  }
91
95
  }
96
+ /** 지정한 ID의 모달을 닫습니다. */
92
97
  async dismissById(id, reason) {
93
98
  const entry = this.entries.find(e => e.id === id);
94
99
  if (!entry)
95
100
  return;
96
101
  this.requestDismiss(id, reason);
97
102
  }
103
+ /** 열려있는 모달의 props를 동적으로 업데이트합니다. */
98
104
  async update(id, props) {
99
105
  const entry = this.entries.find(e => e.id === id && !e.closing);
100
106
  if (!entry)
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var index = require('./index-DXm0PH2A.js');
3
+ var index = require('./index-C-F-JEv_.js');
4
4
  var constants = require('./constants-DJRV1upE.js');
5
5
  var sdTable_config = require('./sd-table.config-B7MuRLoR.js');
6
6
  require('./component.table-DIxmbGBT.js');
@@ -80,9 +80,13 @@ const SdPagination = class {
80
80
  index.registerInstance(this, hostRef);
81
81
  this.pageChange = index.createEvent(this, "sdPageChange", 7);
82
82
  }
83
+ /** 현재 페이지 번호 */
83
84
  currentPage = 1;
85
+ /** 마지막 페이지 번호 */
84
86
  lastPage = 1;
87
+ /** true이면 현재/마지막 페이지만 표시하는 단순 모드 */
85
88
  simple = false;
89
+ /** 페이지가 변경될 때 새 페이지 번호를 전달합니다. */
86
90
  pageChange;
87
91
  get pageNumbers() {
88
92
  const start = Math.floor((this.currentPage - 1) / PER_PAGE) * PER_PAGE + 1;
@@ -154,13 +158,13 @@ const SdPagination = class {
154
158
  '--sd-pagination-bg-selected': PAGINATION_COLORS.bgSelected,
155
159
  '--sd-pagination-item-width': `${this.buttonWidth}px`,
156
160
  };
157
- return (index.h("div", { key: '8a2219bbc3a17951ed66501e7246f230f0495e74', class: {
161
+ return (index.h("div", { key: '733bf7952c4e38a65a1042c6a8784d6502c81667', class: {
158
162
  'sd-pagination': true,
159
163
  'sd-pagination--simple': this.simple,
160
- }, style: cssVars }, index.h("div", { key: '7e9ddb98aff7506fc3b6053d84c1be211e3d1ff7', class: "sd-pagination__group sd-pagination__group--prev" }, this.renderPrevButtons()), this.simple ? (index.h("div", { class: "sd-pagination__info" }, index.h("span", { class: "sd-pagination__current" }, this.currentPage), index.h("span", { class: "sd-pagination__divider" }, "/"), index.h("span", { class: "sd-pagination__last" }, this.lastPage))) : (index.h("div", { class: "sd-pagination__numbers" }, this.pageNumbers.map(n => (index.h("button", { type: "button", "aria-current": this.currentPage === n ? 'page' : undefined, class: {
164
+ }, style: cssVars }, index.h("div", { key: '4c23bdfb9a58950a04107fc4b4c921bbafa4e601', class: "sd-pagination__group sd-pagination__group--prev" }, this.renderPrevButtons()), this.simple ? (index.h("div", { class: "sd-pagination__info" }, index.h("span", { class: "sd-pagination__current" }, this.currentPage), index.h("span", { class: "sd-pagination__divider" }, "/"), index.h("span", { class: "sd-pagination__last" }, this.lastPage))) : (index.h("div", { class: "sd-pagination__numbers" }, this.pageNumbers.map(n => (index.h("button", { type: "button", "aria-current": this.currentPage === n ? 'page' : undefined, class: {
161
165
  'sd-pagination__item': true,
162
166
  'sd-pagination__item--selected': this.currentPage === n,
163
- }, onClick: () => this.handlePageChange(n) }, n))))), index.h("div", { key: '937554ea8d3ae71da85e2c1f49d82c99658141f0', class: "sd-pagination__group sd-pagination__group--next" }, this.renderNextButtons())));
167
+ }, onClick: () => this.handlePageChange(n) }, n))))), index.h("div", { key: 'a0406c1f9cd13970d47f25ed88095ac1c684203c', class: "sd-pagination__group sd-pagination__group--next" }, this.renderNextButtons())));
164
168
  }
165
169
  };
166
170
  SdPagination.style = sdPaginationCss();
@@ -172,6 +176,7 @@ const SdTbody = class {
172
176
  index.registerInstance(this, hostRef);
173
177
  }
174
178
  get el() { return index.getElement(this); }
179
+ /** 렌더링할 행 데이터 목록 */
175
180
  rows = [];
176
181
  tableId = '';
177
182
  topSpacerHeight = 0;
@@ -215,9 +220,9 @@ const SdTbody = class {
215
220
  }
216
221
  }
217
222
  render() {
218
- return (index.h(index.Host, { key: 'ae49b4a7e18afd3d44d07e7da6c3663a6a043796', slot: `${this.tableId}-body` }, index.h("tbody", { key: '7275cf9214f6917c5437b8a72a06cde3ca48dc8c', class: { tbody: true } }, [
223
+ return (index.h(index.Host, { key: '0f85168b22221551714f3c75bd12c366538cc5ec', slot: `${this.tableId}-body` }, index.h("tbody", { key: 'f9a8528d40c51988cfbca2c349905dafdafce8d3', class: { tbody: true } }, [
219
224
  this.topSpacerHeight > 0 && (index.h("tr", { key: "spacer-top", class: "tbody__spacer", style: { height: `${this.topSpacerHeight}px`, display: 'block' } })),
220
- index.h("slot", { key: '6455be878c24df5371e094fbfe9687ddb992e0e6' }),
225
+ index.h("slot", { key: '7ecfe2f730b4c909d394fdee2d9aa015c5410cb4' }),
221
226
  this.bottomSpacerHeight > 0 && (index.h("tr", { key: "spacer-bottom", class: "tbody__spacer", style: { height: `${this.bottomSpacerHeight}px`, display: 'block' } })),
222
227
  ])));
223
228
  }
@@ -229,7 +234,7 @@ const SdTbody = class {
229
234
  };
230
235
  SdTbody.style = sdTbodyCss();
231
236
 
232
- const sdTheadCss = () => `sd-thead{display:contents}sd-thead *{box-sizing:border-box}.thead{display:table-header-group;height:var(--table-header-height, 36px)}.thead--sticky{position:sticky;top:0;z-index:120}.tr{display:table-row;width:100%}.th{display:table-cell;background:var(--table-header-bg, #F5FAFF);height:var(--table-header-height, 36px);padding:0 var(--table-header-padding-x, 16px);font-family:var(--table-header-font-family, inherit);font-weight:var(--table-header-font-weight, 500);font-size:var(--table-header-font-size, 12px);line-height:var(--table-header-line-height, 20px);text-decoration:var(--table-header-text-decoration, none);vertical-align:middle;border-bottom:var(--table-border-width, 1px) solid var(--table-border-color, #E1E1E1);-webkit-user-select:none;user-select:none;position:relative;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;word-break:keep-all}.th--selected{position:relative;width:var(--table-selectable-width, 48px) !important;max-width:var(--table-selectable-width, 48px) !important;min-width:var(--table-selectable-width, 48px) !important;text-align:center}.th--selected sd-checkbox label{position:relative}.th--selected sd-checkbox label:before{content:"";position:absolute;inset:-6px}.th.sticky-left{position:sticky;background-color:var(--table-header-bg, #F5FAFF);z-index:110 !important;left:var(--sticky-left-offset, 0)}.th.sticky-right{position:sticky;background-color:var(--table-header-bg, #F5FAFF);z-index:110 !important;right:var(--sticky-right-offset, 0)}.th.sticky-left-edge:after{content:"";position:absolute;top:0;left:100%;right:-20px;width:20px;height:100%;z-index:101 !important;box-shadow:inset 12px 0 20px -25px;opacity:0;pointer-events:none;transition:opacity 0.2s}.th.sticky-right-edge:after{content:"";position:absolute;top:0;left:-20px;width:20px;height:100%;z-index:101 !important;box-shadow:inset -12px 0 20px -25px;opacity:0;pointer-events:none;transition:opacity 0.2s}.th.sticky-left-edge.is-scrolled-left{overflow:visible}.th.sticky-left-edge.is-scrolled-left:after{opacity:1}.th.sticky-right-edge.is-scrolled-right{overflow:visible}.th.sticky-right-edge.is-scrolled-right:after{opacity:1}.th__content{display:flex;flex-flow:row nowrap;align-items:center;gap:var(--table-header-gap, 4px)}.th__content--left{justify-content:flex-start}.th__content--center{justify-content:center}.th__content--right{justify-content:flex-end}.th__content--label{white-space:nowrap;text-overflow:ellipsis;word-break:keep-all}.th__bar{position:absolute;top:50%;right:0;transform:translateY(-50%);width:var(--table-border-width, 1px);height:var(--table-header-resizer-height, 16px);z-index:3;background-color:var(--table-header-resizer-color, #CCCCCC)}.th__resizer{position:absolute;top:50%;right:0;transform:translateY(-50%);width:4px;height:var(--table-header-resizer-height, 16px);cursor:col-resize;z-index:3;border-left:var(--table-border-width, 1px) solid var(--table-header-resizer-color, #CCCCCC);border-right:var(--table-border-width, 1px) solid var(--table-header-resizer-color, #CCCCCC)}.th__resizer--left{right:auto;left:0}`;
237
+ const sdTheadCss = () => `sd-thead{display:contents}sd-thead *{box-sizing:border-box}.thead{display:table-header-group;height:var(--table-header-height, 36px)}.thead--sticky{position:sticky;top:0;z-index:120}.tr{display:table-row;width:100%}.th{display:table-cell;background:var(--table-header-bg, #F5FAFF);height:var(--table-header-height, 36px);padding:0 var(--table-header-padding-x, 16px);font-family:var(--table-header-font-family, inherit);font-weight:var(--table-header-font-weight, 500);font-size:var(--table-header-font-size, 12px);line-height:var(--table-header-line-height, 20px);text-decoration:var(--table-header-text-decoration, none);vertical-align:middle;border-bottom:var(--table-border-width, 1px) solid var(--table-border-color, #E1E1E1);-webkit-user-select:none;user-select:none;position:relative;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;word-break:keep-all}.th--selected{position:relative;width:var(--table-selectable-width, 48px) !important;max-width:var(--table-selectable-width, 48px) !important;min-width:var(--table-selectable-width, 48px) !important;text-align:center}.th--selected sd-checkbox label{position:relative}.th--selected sd-checkbox label:before{content:"";position:absolute;inset:-6px}.th.sticky-left{position:sticky;background-color:var(--table-header-bg, #F5FAFF);z-index:110 !important;left:var(--sticky-left-offset, 0)}.th.sticky-right{position:sticky;background-color:var(--table-header-bg, #F5FAFF);z-index:110 !important;right:var(--sticky-right-offset, 0)}.th.sticky-left-edge:after{content:"";position:absolute;top:0;left:100%;right:-20px;width:20px;height:100%;z-index:101 !important;box-shadow:inset 12px 0 20px -25px;opacity:0;pointer-events:none;transition:opacity 0.2s}.th.sticky-right-edge:after{content:"";position:absolute;top:0;left:-20px;width:20px;height:100%;z-index:101 !important;box-shadow:inset -12px 0 20px -25px;opacity:0;pointer-events:none;transition:opacity 0.2s}.th.sticky-left-edge.is-scrolled-left{overflow:visible}.th.sticky-left-edge.is-scrolled-left:after{opacity:1}.th.sticky-right-edge.is-scrolled-right{overflow:visible}.th.sticky-right-edge.is-scrolled-right:after{opacity:1}.th__content{display:flex;flex-flow:row nowrap;align-items:center;gap:var(--table-header-gap, 4px)}.th__content--left{justify-content:flex-start}.th__content--center{justify-content:center}.th__content--right{justify-content:flex-end}.th__content--label{white-space:nowrap;text-overflow:ellipsis;word-break:keep-all}.th__bar{position:absolute;top:50%;right:0;transform:translateY(-50%);width:var(--table-border-width, 1px);height:var(--table-header-resizer-height, 16px);z-index:3;background-color:var(--table-header-resizer-color, #CCCCCC)}.th__dropdown-trigger{display:flex;align-items:center;justify-content:center;flex-shrink:0;width:16px;height:16px;padding:0;border:none;background:transparent;cursor:pointer;color:inherit;border-radius:2px}.th__dropdown-trigger sd-icon{transition:transform 0.15s ease}.th__dropdown-trigger--open sd-icon{transform:rotate(180deg)}.th__resizer{position:absolute;top:50%;right:0;transform:translateY(-50%);width:4px;height:var(--table-header-resizer-height, 16px);cursor:col-resize;z-index:3;border-left:var(--table-border-width, 1px) solid var(--table-header-resizer-color, #CCCCCC);border-right:var(--table-border-width, 1px) solid var(--table-header-resizer-color, #CCCCCC)}.th__resizer--left{right:auto;left:0}`;
233
238
 
234
239
  const SdThead = class {
235
240
  constructor(hostRef) {
@@ -237,15 +242,25 @@ const SdThead = class {
237
242
  this.sdColumnSort = index.createEvent(this, "sdColumnSort", 7);
238
243
  }
239
244
  get el() { return index.getElement(this); }
245
+ /** 테이블 컬럼 목록 */
240
246
  columns;
247
+ /** 행 선택 기능 사용 여부 */
241
248
  selectable;
249
+ /** 컬럼 너비 조절 가능 여부 */
242
250
  resizable;
251
+ /** 고정 컬럼 설정 */
243
252
  stickyColumn;
253
+ /** 헤더 고정 여부 */
244
254
  stickyHeader;
255
+ /** 좌측 스크롤 여부 */
245
256
  scrolledLeft;
257
+ /** 우측 스크롤 여부 */
246
258
  scrolledRight;
259
+ /** 전체 선택 체크박스용 행 데이터 */
247
260
  rows = [];
261
+ /** 컬럼 너비 목록 */
248
262
  columnWidths = [];
263
+ /** 컬럼 정렬 버튼 클릭 시 발생합니다. */
249
264
  sdColumnSort;
250
265
  tableId = '';
251
266
  _columns = [];
@@ -255,14 +270,29 @@ const SdThead = class {
255
270
  _stickyHeader = false;
256
271
  _scrolledLeft = false;
257
272
  _scrolledRight = false;
273
+ dropdownOpenMap = {};
258
274
  tableEl = null;
275
+ dropdownRefs = {};
276
+ dropdownThRefs = {};
277
+ dropdownPortals = {};
259
278
  handleColumnsChange(newCols) {
260
279
  if (Array.isArray(newCols) && (this.columnWidths ?? []).length === 0) {
261
280
  this.columnWidths = newCols.map(c => (c.autoWidth ? 0 : parseInt(c.width || '120', 10)));
262
281
  }
263
282
  }
283
+ disconnectedCallback() {
284
+ const portals = this.dropdownPortals ?? {};
285
+ Object.values(portals).forEach(portal => {
286
+ if (portal?.parentNode != null)
287
+ portal.parentNode.removeChild(portal);
288
+ });
289
+ }
264
290
  componentWillLoad() {
265
291
  this.syncTableContext();
292
+ this.dropdownOpenMap = this.dropdownOpenMap ?? {};
293
+ this.dropdownRefs = this.dropdownRefs ?? {};
294
+ this.dropdownThRefs = this.dropdownThRefs ?? {};
295
+ this.dropdownPortals = this.dropdownPortals ?? {};
266
296
  this.columnWidths = Array.isArray(this.columnWidths) ? this.columnWidths : [];
267
297
  this.resolveConfig();
268
298
  if ((this.columnWidths ?? []).length === 0) {
@@ -272,6 +302,36 @@ const SdThead = class {
272
302
  componentDidLoad() {
273
303
  this.syncTableContext();
274
304
  this.resolveConfig();
305
+ this.initDropdownPortals();
306
+ }
307
+ // sd-portal을 body에 붙여 CSS transform 영향 없이 정확한 위치에 패널을 표시한다.
308
+ // <slot>을 render에 두지 않고 직접 DOM 이동(slot 속성 제거)으로 Stencil 슬롯 에뮬레이션 충돌을 피한다.
309
+ initDropdownPortals() {
310
+ const cols = this._columns ?? [];
311
+ const hasDropdownCols = cols.filter(c => c.hasDropdown === true);
312
+ if (hasDropdownCols.length === 0)
313
+ return;
314
+ for (const col of hasDropdownCols) {
315
+ const colName = col.name;
316
+ // 이미 포탈이 생성된 컬럼은 건너뜀 (refreshConfig 재호출 대비)
317
+ if ((this.dropdownPortals ?? {})[colName] != null)
318
+ continue;
319
+ const slotContent = this.el.querySelector(`[slot="dropdown-${colName}"]`);
320
+ if (slotContent == null)
321
+ continue;
322
+ // slot 속성 제거: Stencil 슬롯 에뮬레이션이 재배포하지 못하게 한다
323
+ slotContent.removeAttribute('slot');
324
+ const portal = document.createElement('sd-portal');
325
+ portal.parentRef = this.dropdownThRefs[colName] ?? null;
326
+ portal.open = false;
327
+ // 첫 open 전까지 포탈 호스트 자체를 숨긴다.
328
+ // moveSlotContent()가 open=true 시 children을 독립 wrapper div로 이동하므로 이후 동작에 영향 없음.
329
+ portal.style.display = 'none';
330
+ portal.addEventListener('sdClose', () => this.closeDropdown(colName));
331
+ portal.appendChild(slotContent);
332
+ document.body.appendChild(portal);
333
+ this.dropdownPortals[colName] = portal;
334
+ }
275
335
  }
276
336
  syncTableContext() {
277
337
  // sd-table이 shadow:true이므로 fallback content로 렌더되면 closest가 경계를 못 넘는다.
@@ -311,12 +371,16 @@ const SdThead = class {
311
371
  this.columnWidths = [];
312
372
  }
313
373
  }
374
+ /** 테이블 설정을 다시 불러옵니다. */
314
375
  async refreshConfig() {
315
376
  this.resolveConfig();
377
+ this.initDropdownPortals();
316
378
  }
379
+ /** 컬럼 너비를 업데이트합니다. */
317
380
  async setColumnWidths(widths) {
318
381
  this.columnWidths = Array.isArray(widths) ? widths : [];
319
382
  }
383
+ /** 전체 선택 체크박스 상태를 갱신합니다. */
320
384
  async refreshSelection() {
321
385
  const checkbox = this.el.querySelector('sd-checkbox');
322
386
  if (checkbox) {
@@ -355,6 +419,28 @@ const SdThead = class {
355
419
  handleColumnSort = (col) => {
356
420
  this.sdColumnSort.emit({ column: col });
357
421
  };
422
+ toggleDropdown(name) {
423
+ const isOpen = this.dropdownOpenMap[name] !== true;
424
+ const portals = this.dropdownPortals ?? {};
425
+ const newMap = { ...this.dropdownOpenMap };
426
+ // _columns 기준으로 순회: portals가 비어도 dropdownOpenMap은 항상 갱신됨
427
+ for (const col of (this._columns ?? []).filter(c => c.hasDropdown === true)) {
428
+ const shouldBeOpen = col.name === name ? isOpen : false;
429
+ newMap[col.name] = shouldBeOpen;
430
+ const portal = portals[col.name];
431
+ if (portal != null)
432
+ portal.open = shouldBeOpen;
433
+ }
434
+ this.dropdownOpenMap = newMap;
435
+ }
436
+ closeDropdown(name) {
437
+ if (this.dropdownOpenMap[name] !== true)
438
+ return;
439
+ this.dropdownOpenMap = { ...this.dropdownOpenMap, [name]: false };
440
+ const portal = (this.dropdownPortals ?? {})[name];
441
+ if (portal != null)
442
+ portal.open = false;
443
+ }
358
444
  handleSelectAll(checked) {
359
445
  const nextChecked = !!checked;
360
446
  const safeRows = Array.isArray(this.rows) ? this.rows : [];
@@ -371,6 +457,8 @@ const SdThead = class {
371
457
  }
372
458
  render() {
373
459
  const safeRows = Array.isArray(this.rows) ? this.rows : [];
460
+ const dropdownOpenMap = this.dropdownOpenMap ?? {};
461
+ const dropdownRefs = this.dropdownRefs ?? {};
374
462
  const stickyLeftCount = this._stickyColumn.left || 0;
375
463
  const stickyRightCount = this._stickyColumn.right || 0;
376
464
  const stickyLeftCols = this.visibleColumns.slice(0, stickyLeftCount);
@@ -392,22 +480,25 @@ const SdThead = class {
392
480
  '--table-border-color': sdTable_config.TABLE_BORDER.color,
393
481
  '--table-border-width': `${sdTable_config.TABLE_BORDER.width}px`,
394
482
  };
395
- return (index.h(index.Host, { key: 'c25f6f9704c079d4cb93da7e65c8c15b6dedcb67', slot: `${this.tableId}-head`, style: headStyle }, index.h("thead", { key: 'd91019378caafa2ec32dfa838eaa4d1fe815fb0d', class: {
483
+ return (index.h(index.Host, { key: '947f5e5b0e59e7e6f8a73e4fd44dbfa646cb630a', slot: `${this.tableId}-head`, style: headStyle }, index.h("thead", { key: '2e0ffbfe9d96528c6e0082d4883fa462a18831d6', class: {
396
484
  'thead': true,
397
485
  'thead--sticky': this._stickyHeader,
398
- } }, index.h("tr", { key: '84e581f5c564693d356f56525f57d6b1da211442', class: "tr" }, this._selectable && (index.h("th", { key: 'fb92e978229c32d560f46af4e90e0980c9c0a213', class: {
486
+ } }, index.h("tr", { key: '5843a18e1548bc6546e447d4c9213375116af0e9', class: "tr" }, this._selectable && (index.h("th", { key: '914024ca35874747e39f1819337cd4ad1cbe733d', class: {
399
487
  'th': true,
400
488
  'th--selected': true,
401
489
  'sticky-left': true,
402
490
  'sticky-left-edge': stickyLeftCount === 0,
403
491
  'is-scrolled-left': stickyLeftCount === 0 && this._scrolledLeft,
404
- }, style: { '--sticky-left-offset': '0px' } }, index.h("sd-checkbox", { key: '157f59b56a4ef2a8529318c8beaf6f59b91e12f0', value: this.getIsAllChecked(), disabled: safeRows.length === 0, onSdUpdate: (e) => this.handleSelectAll(e.detail) }), index.h("div", { key: 'b65e099ebe4940b26cc251961e66a375400f2379', class: "th__bar" }))), stickyLeftCols.map((col, idx) => (index.h("th", { key: col.name, class: {
492
+ }, style: { '--sticky-left-offset': '0px' } }, index.h("sd-checkbox", { key: 'e07232f1f5fa02589573ddaae53ebdadbdb97674', value: this.getIsAllChecked(), disabled: safeRows.length === 0, onSdUpdate: (e) => this.handleSelectAll(e.detail) }), index.h("div", { key: '08b504cfd4f420e76e91d649eed28c7068517044', class: "th__bar" }))), stickyLeftCols.map((col, idx) => (index.h("th", { key: col.name, class: {
405
493
  'th': true,
406
494
  [`${col.thClass}`]: Boolean(col.thClass),
407
495
  'sticky-left': true,
408
496
  'sticky-left-edge': idx === stickyLeftCount - 1,
409
497
  'is-scrolled-left': idx === stickyLeftCount - 1 && this._scrolledLeft,
410
- }, style: { ...col.thStyle, ...this.getStickyStyle(idx) } }, index.h("div", { class: `th__content th__content--${col.align || 'left'}` }, index.h("div", { class: "th__content--label" }, col.label), col.icon && (index.h("sd-icon", { name: col.icon, size: "12", color: sdTable_config.resolveTableIconColor(col.icon, col.iconColor) })), col.sort && (index.h("sd-icon", { name: sdTable_config.resolveSortIconName(col.sort), size: "12", color: sdTable_config.resolveTableIconColor(sdTable_config.resolveSortIconName(col.sort), col.iconColor), onClick: () => this.handleColumnSort(col), style: { cursor: 'pointer' } })), col.tooltip && (index.h("sd-tooltip", { ...col.tooltipOptions }, index.h("div", { slot: "content" }, col.tooltip.map(text => (index.h("p", null, text))))))), this._resizable && idx !== lastColIdx && (
498
+ }, style: { ...col.thStyle, ...this.getStickyStyle(idx) }, ref: col.hasDropdown === true ? (el => { this.dropdownThRefs[col.name] = el; }) : undefined }, index.h("div", { class: `th__content th__content--${col.align || 'left'}` }, index.h("div", { class: "th__content--label" }, col.label), col.icon && (index.h("sd-icon", { name: col.icon, size: "12", color: sdTable_config.resolveTableIconColor(col.icon, col.iconColor) })), col.sort && (index.h("sd-icon", { name: sdTable_config.resolveSortIconName(col.sort), size: "12", color: sdTable_config.resolveTableIconColor(sdTable_config.resolveSortIconName(col.sort), col.iconColor), onClick: () => this.handleColumnSort(col), style: { cursor: 'pointer' } })), col.tooltip && (index.h("sd-tooltip", { ...col.tooltipOptions }, index.h("div", { slot: "content" }, col.tooltip.map(text => (index.h("p", null, text)))))), col.hasDropdown === true && (index.h("button", { class: {
499
+ 'th__dropdown-trigger': true,
500
+ 'th__dropdown-trigger--open': dropdownOpenMap[col.name] === true,
501
+ }, ref: el => { dropdownRefs[col.name] = el; }, onClick: () => this.toggleDropdown(col.name), "aria-haspopup": "listbox", "aria-expanded": dropdownOpenMap[col.name] === true ? 'true' : 'false' }, index.h("sd-icon", { name: "chevronDown", size: "12" })))), this._resizable && idx !== lastColIdx && (
411
502
  // column resize 는 마우스 드래그 전용 인터랙션이라 키보드 핸들러를 두지 않는다.
412
503
  // eslint-disable-next-line jsx-a11y/no-static-element-interactions
413
504
  index.h("div", { class: "th__resizer", onMouseDown: (evt) => this.handleResize(idx, evt) }))))), middleCols.map((col, relativeIdx) => {
@@ -415,7 +506,10 @@ const SdThead = class {
415
506
  return (index.h("th", { key: col.name, class: {
416
507
  th: true,
417
508
  [`${col.thClass}`]: Boolean(col.thClass),
418
- }, style: { ...col.thStyle, ...this.getStickyStyle(actualColIdx) } }, index.h("div", { class: `th__content th__content--${col.align || 'left'}` }, index.h("div", { class: "th__content--label" }, col.label), col.icon && (index.h("sd-icon", { name: col.icon, size: "12", color: sdTable_config.resolveTableIconColor(col.icon, col.iconColor) })), col.sort && (index.h("sd-icon", { name: sdTable_config.resolveSortIconName(col.sort), size: "12", color: sdTable_config.resolveTableIconColor(sdTable_config.resolveSortIconName(col.sort), col.iconColor), onClick: () => this.handleColumnSort(col), style: { cursor: 'pointer' } })), col.tooltip && (index.h("sd-tooltip", { ...col.tooltipOptions }, index.h("div", { slot: "content" }, col.tooltip.map(text => (index.h("p", null, text))))))), this._resizable && actualColIdx !== lastColIdx && (
509
+ }, style: { ...col.thStyle, ...this.getStickyStyle(actualColIdx) }, ref: col.hasDropdown === true ? (el => { this.dropdownThRefs[col.name] = el; }) : undefined }, index.h("div", { class: `th__content th__content--${col.align || 'left'}` }, index.h("div", { class: "th__content--label" }, col.label), col.icon && (index.h("sd-icon", { name: col.icon, size: "12", color: sdTable_config.resolveTableIconColor(col.icon, col.iconColor) })), col.sort && (index.h("sd-icon", { name: sdTable_config.resolveSortIconName(col.sort), size: "12", color: sdTable_config.resolveTableIconColor(sdTable_config.resolveSortIconName(col.sort), col.iconColor), onClick: () => this.handleColumnSort(col), style: { cursor: 'pointer' } })), col.tooltip && (index.h("sd-tooltip", { ...col.tooltipOptions }, index.h("div", { slot: "content" }, col.tooltip.map(text => (index.h("p", null, text)))))), col.hasDropdown === true && (index.h("button", { class: {
510
+ 'th__dropdown-trigger': true,
511
+ 'th__dropdown-trigger--open': this.dropdownOpenMap[col.name] === true,
512
+ }, ref: el => { this.dropdownRefs[col.name] = el; }, onClick: () => this.toggleDropdown(col.name), "aria-haspopup": "listbox", "aria-expanded": this.dropdownOpenMap[col.name] === true ? 'true' : 'false' }, index.h("sd-icon", { name: "chevronDown", size: "12" })))), this._resizable && actualColIdx !== lastColIdx && (
419
513
  // column resize 는 마우스 드래그 전용 인터랙션이라 키보드 핸들러를 두지 않는다.
420
514
  // eslint-disable-next-line jsx-a11y/no-static-element-interactions
421
515
  index.h("div", { class: "th__resizer", onMouseDown: (evt) => this.handleResize(actualColIdx, evt) }))));
@@ -427,7 +521,10 @@ const SdThead = class {
427
521
  'sticky-right': true,
428
522
  'sticky-right-edge': relativeIdx === 0,
429
523
  'is-scrolled-right': relativeIdx === 0 && this._scrolledRight,
430
- }, style: { ...col.thStyle, ...this.getStickyStyle(actualColIdx) } }, index.h("div", { class: `th__content th__content--${col.align || 'left'}` }, index.h("div", { class: "th__content--label" }, col.label), col.icon && (index.h("sd-icon", { name: col.icon, size: "12", color: sdTable_config.resolveTableIconColor(col.icon, col.iconColor) })), col.sort && (index.h("sd-icon", { name: sdTable_config.resolveSortIconName(col.sort), size: "12", color: sdTable_config.resolveTableIconColor(sdTable_config.resolveSortIconName(col.sort), col.iconColor), onClick: () => this.handleColumnSort(col), style: { cursor: 'pointer' } })), col.tooltip && (index.h("sd-tooltip", { ...col.tooltipOptions }, index.h("div", { slot: "content" }, col.tooltip.map(text => (index.h("p", null, text))))))), this._resizable && (
524
+ }, style: { ...col.thStyle, ...this.getStickyStyle(actualColIdx) }, ref: col.hasDropdown === true ? (el => { this.dropdownThRefs[col.name] = el; }) : undefined }, index.h("div", { class: `th__content th__content--${col.align || 'left'}` }, index.h("div", { class: "th__content--label" }, col.label), col.icon && (index.h("sd-icon", { name: col.icon, size: "12", color: sdTable_config.resolveTableIconColor(col.icon, col.iconColor) })), col.sort && (index.h("sd-icon", { name: sdTable_config.resolveSortIconName(col.sort), size: "12", color: sdTable_config.resolveTableIconColor(sdTable_config.resolveSortIconName(col.sort), col.iconColor), onClick: () => this.handleColumnSort(col), style: { cursor: 'pointer' } })), col.tooltip && (index.h("sd-tooltip", { ...col.tooltipOptions }, index.h("div", { slot: "content" }, col.tooltip.map(text => (index.h("p", null, text)))))), col.hasDropdown === true && (index.h("button", { class: {
525
+ 'th__dropdown-trigger': true,
526
+ 'th__dropdown-trigger--open': this.dropdownOpenMap[col.name] === true,
527
+ }, ref: el => { this.dropdownRefs[col.name] = el; }, onClick: () => this.toggleDropdown(col.name), "aria-haspopup": "listbox", "aria-expanded": this.dropdownOpenMap[col.name] === true ? 'true' : 'false' }, index.h("sd-icon", { name: "chevronDown", size: "12" })))), this._resizable && (
431
528
  // column resize 는 마우스 드래그 전용 인터랙션이라 키보드 핸들러를 두지 않는다.
432
529
  // eslint-disable-next-line jsx-a11y/no-static-element-interactions
433
530
  index.h("div", { class: "th__resizer th__resizer--left", onMouseDown: (evt) => this.handleResize(actualColIdx, evt, true) }))));
@@ -448,11 +545,17 @@ const SdTr = class {
448
545
  index.registerInstance(this, hostRef);
449
546
  }
450
547
  get el() { return index.getElement(this); }
548
+ /** 테이블 컬럼 목록 */
451
549
  columns;
550
+ /** 행 선택 기능 사용 여부 */
452
551
  selectable;
552
+ /** 고정 컬럼 설정 */
453
553
  stickyColumn;
554
+ /** 행 식별 키 */
454
555
  rowKey = '';
556
+ /** 행 데이터 객체 */
455
557
  row = {};
558
+ /** 구분선 높이 (4 또는 6px, null이면 일반 행) */
456
559
  separator = null;
457
560
  tableId = '';
458
561
  columnWidths = [];
@@ -505,12 +608,15 @@ const SdTr = class {
505
608
  this.columnWidths = [...config.columnWidths];
506
609
  }
507
610
  }
611
+ /** 테이블 설정을 다시 불러옵니다. */
508
612
  async refreshConfig() {
509
613
  this.resolveConfig();
510
614
  }
615
+ /** 셀 병합 버전을 갱신해 td를 재렌더링합니다. */
511
616
  async bumpSpansVersion() {
512
617
  this.spansVersion = this.spansVersion + 1;
513
618
  }
619
+ /** 페이지네이션에 따른 행 표시 여부를 갱신합니다. */
514
620
  async updateVisibility() {
515
621
  this.updateVisibilitySync();
516
622
  }
@@ -523,9 +629,11 @@ const SdTr = class {
523
629
  }
524
630
  this.isVisible = rowIndex >= pageInfo.startIndex && rowIndex < pageInfo.endIndex;
525
631
  }
632
+ /** 컬럼 너비를 업데이트합니다. */
526
633
  async setColumnWidths(widths) {
527
634
  this.columnWidths = widths;
528
635
  }
636
+ /** 체크박스 선택 상태를 갱신합니다. */
529
637
  async refreshSelection() {
530
638
  const checkbox = this.el.querySelector('sd-checkbox');
531
639
  if (checkbox) {
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var index = require('./index-DXm0PH2A.js');
4
- var tooltipArrow = require('./tooltipArrow-D3P3JC08.js');
3
+ var index = require('./index-C-F-JEv_.js');
4
+ var tooltipArrow = require('./tooltipArrow-26hYtSrD.js');
5
5
 
6
6
  const popover = {
7
7
  "default": {
@@ -18,22 +18,38 @@ const SdPopover = class {
18
18
  this.showChange = index.createEvent(this, "sdShowChange", 7);
19
19
  }
20
20
  get el() { return index.getElement(this); }
21
+ /** 팝오버 표시 여부 */
21
22
  show = false;
23
+ /** 팝오버를 표시할 방향 */
22
24
  placement = 'bottom';
25
+ /** 아이콘 트리거 색상 */
23
26
  color = '#01BB4B';
27
+ /** 아이콘 트리거 아이콘명 */
24
28
  icon = 'helpOutline';
29
+ /** 아이콘 트리거 크기 */
25
30
  iconSize = 12;
31
+ /** 버튼 트리거 레이블 (있으면 아이콘 대신 버튼 렌더링) */
26
32
  label = '';
33
+ /** 버튼 트리거 프리셋 */
27
34
  name = 'primary_sm';
35
+ /** 버튼 트리거 우측 아이콘 */
28
36
  rightIcon;
37
+ /** 스크린리더용 접근성 레이블 */
29
38
  ariaLabel = '';
39
+ /** 비활성 상태 여부 */
30
40
  disabled = false;
41
+ /** 버튼 type 속성 */
31
42
  type = 'button';
43
+ /** 팝오버 메뉴 제목 */
32
44
  menuTitle;
45
+ /** 팝오버 하단 좌측 링크 옵션 */
33
46
  leftLink;
47
+ /** 팝오버 하단 버튼 옵션 */
34
48
  button;
49
+ /** 팝오버 메뉴에 추가할 클래스 */
35
50
  menuClass = '';
36
51
  slotContentHTML = '';
52
+ /** 팝오버 표시 상태가 바뀔 때 발생합니다. */
37
53
  showChange;
38
54
  buttonEl;
39
55
  setShow = (next) => {
@@ -68,17 +84,17 @@ const SdPopover = class {
68
84
  const leftLink = this.leftLink;
69
85
  const button = this.button;
70
86
  const hasFooter = !!leftLink || !!button;
71
- return (index.h(index.Fragment, { key: '649e07ee45d3e7e5f72a438ef2939bfe6d3c56e4' }, this.label !== '' ? (index.h("sd-button", { ref: el => (this.buttonEl = el), name: this.name ?? 'primary_sm', label: this.label, icon: icon, rightIcon: this.rightIcon, ariaLabel: this.ariaLabel || this.label || icon || 'Open popover', disabled: this.disabled, type: this.type ?? 'button', class: "sd-popover", onSdClick: () => this.setShow(!this.show) })) : (index.h("sd-icon", { ref: el => (this.buttonEl = el), name: icon, size: iconSize, color: color, class: "sd-popover", onClick: () => this.setShow(!this.show) })), this.show && (index.h("sd-floating-portal", { key: '486d1859387b0c8cc82646ab5e7b6800792ca2be', parentRef: this.buttonEl, onSdClose: this.handleClose, placement: placement, offset: this.popoverOffset }, index.h("div", { key: '4418e064c76478a5b4dfd2fb69d11e1603a22530', class: {
87
+ return (index.h(index.Fragment, { key: '94fcf54c8b20ffd1bcf2c7f540de31e1f41154fa' }, this.label !== '' ? (index.h("sd-button", { ref: el => (this.buttonEl = el), name: this.name ?? 'primary_sm', label: this.label, icon: icon, rightIcon: this.rightIcon, ariaLabel: this.ariaLabel || this.label || icon || 'Open popover', disabled: this.disabled, type: this.type ?? 'button', class: "sd-popover", onSdClick: () => this.setShow(!this.show) })) : (index.h("sd-icon", { ref: el => (this.buttonEl = el), name: icon, size: iconSize, color: color, class: "sd-popover", onClick: () => this.setShow(!this.show) })), this.show && (index.h("sd-floating-portal", { key: '9f1585f2d268452f3d5c713e30ff865c3fc5fbac', parentRef: this.buttonEl, onSdClose: this.handleClose, placement: placement, offset: this.popoverOffset }, index.h("div", { key: '2cd2103f56c45364df5db9b73a2d89447b7c2bcc', class: {
72
88
  'sd-floating-menu': true,
73
89
  'sd-floating-menu--popover': true,
74
90
  [`sd-floating-menu--${placement}`]: true,
75
91
  [menuClass]: menuClass !== '',
76
92
  }, style: {
77
93
  '--sd-floating-bg': popoverTokens.popover.default.bg,
78
- } }, index.h("i", { key: 'a181ce40ae957e77be7c8f9b10e6f1fe8190cd52', class: `sd-floating-menu__arrow sd-floating-menu__arrow--${placement}` }, index.h(tooltipArrow.TooltipArrow, { key: '323bca17c3c245063cbd1ac55ed64bf6f6df9e3e' })), index.h("div", { key: '06e98cf6e888dc66a6a700710669c61ac9d9c494', class: "sd-floating-menu__content" }, this.menuTitle && index.h("div", { key: '831ca9893ccafcad8e0858fb28269428ebac6a07', class: "sd-floating-menu__title" }, this.menuTitle), this.slotContentHTML && (index.h("div", { key: 'cdd2eafe18d5b0b44f10dbebbb68ed9d010173b1', class: "sd-floating-menu__messages", innerHTML: this.slotContentHTML })), hasFooter && (index.h("div", { key: '8149044a08de968ef38f432ee3303d969b49eace', class: {
94
+ } }, index.h("i", { key: '5fd6c333790d3bb45bf4d43391ed1457d5eb54c3', class: `sd-floating-menu__arrow sd-floating-menu__arrow--${placement}` }, index.h(tooltipArrow.TooltipArrow, { key: '062b11e3b6cee1e87f20064ab62a589a23f3eb26' })), index.h("div", { key: 'b863abd8e31c8ce0dfddfdb25b6a49be69f34da1', class: "sd-floating-menu__content" }, this.menuTitle && index.h("div", { key: '1873c595d7ad91b3a7c71d979414820694c23ff5', class: "sd-floating-menu__title" }, this.menuTitle), this.slotContentHTML && (index.h("div", { key: '7a197b43d34a59ec298ed5e733cae0f3390c87a3', class: "sd-floating-menu__messages", innerHTML: this.slotContentHTML })), hasFooter && (index.h("div", { key: 'be9034b4150421be08c17978beba643e73c5568d', class: {
79
95
  'sd-floating-menu__buttons': true,
80
96
  'sd-floating-menu__buttons--with-link': !!leftLink,
81
- } }, leftLink && (index.h("sd-text-link", { key: '4c7e9c2b4fe8664b3af375a3c89b1cd50d64a9c3', class: "sd-floating-menu__left-link", label: leftLink.label, icon: leftLink.icon ?? '', iconColor: leftLink.iconColor ?? '', rightArrow: leftLink.rightArrow ?? 'none', underline: !!leftLink.underline, disabled: !!leftLink.disabled, onSdClick: leftLink.onClick })), button && (index.h("sd-button", { key: '730d867339257f168c11d7d1417c9d28a408f462', name: button.name ?? 'secondary_xs', label: button.label, icon: button.icon, rightIcon: button.rightIcon, ariaLabel: button.ariaLabel || button.label || button.icon || 'Open popover', disabled: button.disabled, type: button.type, onSdClick: button.onClick }))))), index.h("sd-ghost-button", { key: '7a1f2edf0a601c0dfa91b4a02405c815d3257214', class: "sd-floating-menu__close-button", icon: "close", ariaLabel: "close", size: "xs", onClick: this.handleClose }))))));
97
+ } }, leftLink && (index.h("sd-text-link", { key: '890a163609b8544450ad1b8c009648d73ef0d269', class: "sd-floating-menu__left-link", label: leftLink.label, icon: leftLink.icon ?? '', iconColor: leftLink.iconColor ?? '', rightArrow: leftLink.rightArrow ?? 'none', underline: !!leftLink.underline, disabled: !!leftLink.disabled, onSdClick: leftLink.onClick })), button && (index.h("sd-button", { key: '128270add7ea99f7c9f61abe9f2a113f152465d8', name: button.name ?? 'secondary_xs', label: button.label, icon: button.icon, rightIcon: button.rightIcon, ariaLabel: button.ariaLabel || button.label || button.icon || 'Open popover', disabled: button.disabled, type: button.type, onSdClick: button.onClick }))))), index.h("sd-ghost-button", { key: 'bc4c4d982da8fe72c85cd4ae7ba6cd2e09154164', class: "sd-floating-menu__close-button", icon: "close", ariaLabel: "close", size: "xs", onClick: this.handleClose }))))));
82
98
  }
83
99
  };
84
100
  SdPopover.style = sdPopoverCss();
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var index = require('./index-DXm0PH2A.js');
3
+ var index = require('./index-C-F-JEv_.js');
4
4
  var system = require('./system-MjrAugX-.js');
5
5
 
6
6
  const popup$1 = {
@@ -74,12 +74,16 @@ const SdPopup = class {
74
74
  index.registerInstance(this, hostRef);
75
75
  this.submit = index.createEvent(this, "sdSubmit", 7);
76
76
  }
77
+ /** 팝업 헤더에 표시할 제목 */
77
78
  popupTitle = '';
79
+ /** 팝업 타입 */
78
80
  type = 'default';
79
81
  // 기본 footer 표시가 자연스러운 UX. prop 이름 변경(hideFooter 등)은 public API breaking 이라 별도 이슈로 분리.
80
- // eslint-disable-next-line stencil/ban-default-true
82
+ /** 하단 footer 영역 표시 여부 */
81
83
  useFooter = true;
84
+ /** 확인 버튼 커스텀 props */
82
85
  submitButtonProps;
86
+ /** 확인 버튼 클릭 시 발생합니다. */
83
87
  submit;
84
88
  render() {
85
89
  const cssVars = {
@@ -105,7 +109,7 @@ const SdPopup = class {
105
109
  ...DEFAULT_SUBMIT_BUTTON_PROPS,
106
110
  ...this.submitButtonProps,
107
111
  };
108
- return (index.h("div", { key: 'fd14b75d27d3006978ceae9287486d9716bbbf5a', class: `sd-popup sd-popup--${this.type}`, style: cssVars }, index.h("header", { key: 'ac0222dc9512b99cd1d1b4684b9775cd462f39fa', class: "sd-popup__header" }, index.h("h2", { key: 'a11bea9fac5828161090d09d06d6e1c54c390392', class: "sd-popup__title" }, this.popupTitle)), index.h("div", { key: 'ced8961a853cdf014d602c235cfc839a648fb19e', class: "sd-popup__body" }, index.h("slot", { key: '142807fd74e8b32a31ffb7ed8f3dfdcb07a6a1ba' })), this.useFooter && (index.h("footer", { key: '35a6b42e82ec13890b4fa56bda5b9781adeff229', class: "sd-popup__footer" }, index.h("div", { key: '44b2471e0f302bd001fdf1e1d72485dff4af094f', class: "sd-popup__footer-slot sd-popup__footer-slot--left" }, index.h("slot", { key: 'd1c8e29b60eb7ce86639e336c99a48a67437103a', name: "footer-left" })), index.h("sd-button", { key: '67b0a8530cae73e344cdae2ac0cb48fa3bdf4827', ...submitButtonProps, class: "sd-popup__submit", onSdClick: () => this.submit.emit() })))));
112
+ return (index.h("div", { key: '4455120f02fc1df1b1661062a22f3d82508627c4', class: `sd-popup sd-popup--${this.type}`, style: cssVars }, index.h("header", { key: '96a5e7cdc21fa239e4275f4b57379f36246048f4', class: "sd-popup__header" }, index.h("h2", { key: 'cdf8d05561f470fef31c46e6508e1e0c41aa7fa9', class: "sd-popup__title" }, this.popupTitle)), index.h("div", { key: 'ddb32332f8822634f544f2fa5a246c5f37c7fcc2', class: "sd-popup__body" }, index.h("slot", { key: '8f36daf8c918da6babcbb4383957e979930bfd73' })), this.useFooter && (index.h("footer", { key: '2b84ed134a8d53633bb4feb7ab423e58955dfdae', class: "sd-popup__footer" }, index.h("div", { key: '95e55875b38102ff809e752a3cc647dc830699a9', class: "sd-popup__footer-slot sd-popup__footer-slot--left" }, index.h("slot", { key: 'fbd86c77e1117018793279c9b90fd8e2f6db4934', name: "footer-left" })), index.h("sd-button", { key: 'e8710c15d20e52d0476e7f656e800cda008187d8', ...submitButtonProps, class: "sd-popup__submit", onSdClick: () => this.submit.emit() })))));
109
113
  }
110
114
  };
111
115
  SdPopup.style = sdPopupCss();
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var index = require('./index-DXm0PH2A.js');
3
+ var index = require('./index-C-F-JEv_.js');
4
4
 
5
5
  const radioButton = {
6
6
  xs: {
@@ -104,11 +104,17 @@ const SdRadioButton = class {
104
104
  index.registerInstance(this, hostRef);
105
105
  this.change = index.createEvent(this, "sdUpdate", 7);
106
106
  }
107
+ /** 현재 선택된 값 */
107
108
  value;
109
+ /** 라디오 버튼 옵션 목록 */
108
110
  options = [];
111
+ /** 버튼 크기 */
109
112
  size = 'sm';
113
+ /** 비활성 상태 여부 */
110
114
  disabled = false;
115
+ /** input name 속성 (없으면 자동 생성) */
111
116
  name;
117
+ /** 선택 값이 변경될 때 발생합니다. */
112
118
  change;
113
119
  componentWillLoad() {
114
120
  this.size ??= 'sm';
@@ -178,7 +184,7 @@ const SdRadioButton = class {
178
184
  '--sd-radio-button-content-select': RADIO_BUTTON_COLORS.content.select,
179
185
  '--sd-radio-button-content-disabled': RADIO_BUTTON_COLORS.content.disabled,
180
186
  };
181
- return (index.h("div", { key: 'b916d790862409f8b8e1da566f049daadfc4e5e2', class: this.getGroupClasses(), style: cssVars, role: "radiogroup", "aria-disabled": this.disabled.toString() }, this.options.map(option => {
187
+ return (index.h("div", { key: 'c0ed4c6927bd32a7335e003856de4b43ead97b1c', class: this.getGroupClasses(), style: cssVars, role: "radiogroup", "aria-disabled": this.disabled.toString() }, this.options.map(option => {
182
188
  const isSelected = this.isOptionSelected(option);
183
189
  const isDisabled = this.isOptionDisabled(option);
184
190
  return (index.h("label", { key: `radio-${option.value}`, class: this.getButtonClasses(option), "aria-label": option.label || 'radio option', "data-label": option.label }, index.h("input", { type: "radio", name: this.groupName, value: option.value.toString(), checked: isSelected, disabled: isDisabled, onInput: () => this.handleRadioChange(option.value, option.disabled) }), option.label && index.h("span", { class: "sd-radio-button__label" }, option.label)));