@sellmate/design-system 0.0.55 → 1.0.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 (495) hide show
  1. package/dist/cjs/{select-keyboard-navigation-6fO_V4En.js → base-dropdown-event-Dc6AuxR4.js} +26 -26
  2. package/dist/cjs/base-dropdown-event-Dc6AuxR4.js.map +1 -0
  3. package/dist/cjs/design-system.cjs.js +2 -2
  4. package/dist/cjs/{index-B7tkxTye.js → index-D_J8ScR5.js} +3 -3
  5. package/dist/cjs/index-D_J8ScR5.js.map +1 -0
  6. package/dist/cjs/loader.cjs.js +2 -2
  7. package/dist/cjs/{resolveColor-DxvExwgo.js → resolveColor-B7Ku3IGq.js} +4 -5
  8. package/dist/{esm/resolveColor-BYf-ybt2.js.map → cjs/resolveColor-B7Ku3IGq.js.map} +1 -1
  9. package/dist/cjs/sd-badge.cjs.entry.js +4 -4
  10. package/dist/cjs/{sd-button_24.cjs.entry.js → sd-button_6.cjs.entry.js} +292 -2842
  11. package/dist/cjs/sd-card.cjs.entry.js +4 -4
  12. package/dist/cjs/sd-checkbox.cjs.entry.js +89 -0
  13. package/dist/cjs/sd-date-box.cjs.entry.js +10 -10
  14. package/dist/cjs/sd-date-picker.cjs.entry.js +5 -5
  15. package/dist/cjs/sd-date-range-picker.cjs.entry.js +8 -8
  16. package/dist/cjs/sd-field_3.cjs.entry.js +422 -0
  17. package/dist/cjs/sd-file-picker.cjs.entry.js +121 -0
  18. package/dist/cjs/sd-form.cjs.entry.js +74 -0
  19. package/dist/cjs/sd-guide.cjs.entry.js +81 -0
  20. package/dist/cjs/sd-loading-spinner_2.cjs.entry.js +195 -0
  21. package/dist/cjs/sd-modal-card.cjs.entry.js +8 -8
  22. package/dist/cjs/sd-number-input.cjs.entry.js +261 -0
  23. package/dist/cjs/sd-popover.cjs.entry.js +7 -7
  24. package/dist/cjs/sd-progress.cjs.entry.js +1 -1
  25. package/dist/cjs/sd-radio-button-group.cjs.entry.js +8 -21
  26. package/dist/cjs/sd-radio-group.cjs.entry.js +71 -0
  27. package/dist/cjs/sd-select-dropdown_3.cjs.entry.js +266 -0
  28. package/dist/cjs/sd-select-multiple-group.cjs.entry.js +446 -0
  29. package/dist/cjs/sd-select-multiple.cjs.entry.js +74 -152
  30. package/dist/cjs/sd-select-option-group.cjs.entry.js +69 -0
  31. package/dist/cjs/sd-table.cjs.entry.js +515 -85
  32. package/dist/cjs/sd-tabs.cjs.entry.js +66 -0
  33. package/dist/cjs/sd-tag.cjs.entry.js +57 -0
  34. package/dist/cjs/sd-toast-message.cjs.entry.js +61 -0
  35. package/dist/cjs/sd-toggle-button.cjs.entry.js +50 -0
  36. package/dist/cjs/sd-toggle.cjs.entry.js +46 -0
  37. package/dist/cjs/{tooltipArrow-8I9A3AOE.js → tooltipArrow-DU2DB2AD.js} +3 -3
  38. package/dist/cjs/{tooltipArrow-8I9A3AOE.js.map → tooltipArrow-DU2DB2AD.js.map} +1 -1
  39. package/dist/collection/collection-manifest.json +7 -8
  40. package/dist/collection/components/sd-badge/sd-badge.css +8 -9
  41. package/dist/collection/components/sd-badge/sd-badge.js +1 -2
  42. package/dist/collection/components/sd-badge/sd-badge.js.map +1 -1
  43. package/dist/collection/components/sd-button/sd-button.css +2 -1
  44. package/dist/collection/components/sd-button/sd-button.js +2 -34
  45. package/dist/collection/components/sd-button/sd-button.js.map +1 -1
  46. package/dist/collection/components/sd-card/sd-card.css +1 -3
  47. package/dist/collection/components/sd-card/sd-card.js +6 -6
  48. package/dist/collection/components/sd-card/sd-card.js.map +1 -1
  49. package/dist/collection/components/sd-checkbox/sd-checkbox.js +16 -16
  50. package/dist/collection/components/sd-checkbox/sd-checkbox.js.map +1 -1
  51. package/dist/collection/components/sd-date-box/sd-date-box.css +1 -0
  52. package/dist/collection/components/sd-date-box/sd-date-box.js +8 -8
  53. package/dist/collection/components/sd-date-box/sd-date-box.js.map +1 -1
  54. package/dist/collection/components/sd-date-picker/sd-date-picker.js +5 -5
  55. package/dist/collection/components/sd-date-picker/sd-date-picker.js.map +1 -1
  56. package/dist/collection/components/sd-date-range-picker/sd-date-range-picker.css +9 -6
  57. package/dist/collection/components/sd-date-range-picker/sd-date-range-picker.js +8 -8
  58. package/dist/collection/components/sd-date-range-picker/sd-date-range-picker.js.map +1 -1
  59. package/dist/collection/components/sd-field/sd-field.css +100 -0
  60. package/dist/collection/components/sd-field/sd-field.js +472 -0
  61. package/dist/collection/components/sd-field/sd-field.js.map +1 -0
  62. package/dist/collection/components/sd-file-picker/sd-file-picker.css +6 -0
  63. package/dist/collection/components/sd-file-picker/sd-file-picker.js +8 -8
  64. package/dist/collection/components/sd-file-picker/sd-file-picker.js.map +1 -1
  65. package/dist/collection/components/sd-floating-portal/sd-floating-portal.css +103 -0
  66. package/dist/collection/components/{sd-tooltip-portal/sd-tooltip-portal.js → sd-floating-portal/sd-floating-portal.js} +18 -9
  67. package/dist/collection/components/sd-floating-portal/sd-floating-portal.js.map +1 -0
  68. package/dist/collection/components/sd-form/sd-form.js +200 -0
  69. package/dist/collection/components/sd-form/sd-form.js.map +1 -0
  70. package/dist/collection/components/sd-guide/sd-guide.css +3 -2
  71. package/dist/collection/components/sd-guide/sd-guide.js +7 -8
  72. package/dist/collection/components/sd-guide/sd-guide.js.map +1 -1
  73. package/dist/collection/components/sd-icon/sd-icon.js +1 -1
  74. package/dist/collection/components/sd-input/sd-input.css +43 -100
  75. package/dist/collection/components/sd-input/sd-input.js +285 -114
  76. package/dist/collection/components/sd-input/sd-input.js.map +1 -1
  77. package/dist/collection/components/sd-modal-card/sd-modal-card.css +1 -0
  78. package/dist/collection/components/sd-modal-card/sd-modal-card.js +5 -5
  79. package/dist/collection/components/sd-modal-card/sd-modal-card.js.map +1 -1
  80. package/dist/collection/components/sd-number-input/sd-number-input.js +18 -84
  81. package/dist/collection/components/sd-number-input/sd-number-input.js.map +1 -1
  82. package/dist/collection/components/sd-pagination/sd-pagination.js +4 -3
  83. package/dist/collection/components/sd-pagination/sd-pagination.js.map +1 -1
  84. package/dist/collection/components/sd-popover/sd-popover.css +2 -2
  85. package/dist/collection/components/sd-popover/sd-popover.js +4 -5
  86. package/dist/collection/components/sd-popover/sd-popover.js.map +1 -1
  87. package/dist/collection/components/sd-portal/sd-portal.js +4 -4
  88. package/dist/collection/components/sd-portal/sd-portal.js.map +1 -1
  89. package/dist/collection/components/sd-radio-button-group/sd-radio-button-group.js +9 -30
  90. package/dist/collection/components/sd-radio-button-group/sd-radio-button-group.js.map +1 -1
  91. package/dist/collection/components/sd-radio-group/sd-radio-group.js +5 -5
  92. package/dist/collection/components/sd-radio-group/sd-radio-group.js.map +1 -1
  93. package/dist/collection/components/sd-select/sd-select-dropdown/sd-select-dropdown.css +52 -0
  94. package/dist/collection/components/sd-select/sd-select-dropdown/sd-select-dropdown.js +441 -0
  95. package/dist/collection/components/sd-select/sd-select-dropdown/sd-select-dropdown.js.map +1 -0
  96. package/dist/collection/components/sd-select/sd-select-option/sd-select-option.js +4 -4
  97. package/dist/collection/components/sd-select/sd-select-option/sd-select-option.js.map +1 -1
  98. package/dist/collection/components/sd-select/sd-select-search-input/sd-select-search-input.css +11 -3
  99. package/dist/collection/components/sd-select/sd-select-search-input/sd-select-search-input.js +15 -15
  100. package/dist/collection/components/sd-select/sd-select-search-input/sd-select-search-input.js.map +1 -1
  101. package/dist/collection/components/sd-select/sd-select.css +9 -97
  102. package/dist/collection/components/sd-select/sd-select.js +320 -219
  103. package/dist/collection/components/sd-select/sd-select.js.map +1 -1
  104. package/dist/collection/components/sd-select-multiple/sd-select-multiple.css +16 -102
  105. package/dist/collection/components/sd-select-multiple/sd-select-multiple.js +328 -179
  106. package/dist/collection/components/sd-select-multiple/sd-select-multiple.js.map +1 -1
  107. package/dist/collection/components/sd-select-multiple-group/sd-select-multiple-group.css +8 -45
  108. package/dist/collection/components/sd-select-multiple-group/sd-select-multiple-group.js +265 -47
  109. package/dist/collection/components/sd-select-multiple-group/sd-select-multiple-group.js.map +1 -1
  110. package/dist/collection/components/sd-select-multiple-group/sd-select-option-group/sd-select-option-group.js +3 -3
  111. package/dist/collection/components/sd-select-multiple-group/sd-select-option-group/sd-select-option-group.js.map +1 -1
  112. package/dist/collection/components/sd-table/sd-table.css +121 -30
  113. package/dist/collection/components/sd-table/sd-table.js +629 -92
  114. package/dist/collection/components/sd-table/sd-table.js.map +1 -1
  115. package/dist/collection/components/sd-tabs/sd-tabs.css +10 -7
  116. package/dist/collection/components/sd-tabs/sd-tabs.js +10 -17
  117. package/dist/collection/components/sd-tabs/sd-tabs.js.map +1 -1
  118. package/dist/collection/components/sd-tag/sd-tag.js +1 -1
  119. package/dist/collection/components/sd-textarea/sd-textarea.css +66 -0
  120. package/dist/collection/components/sd-textarea/sd-textarea.js +400 -0
  121. package/dist/collection/components/sd-textarea/sd-textarea.js.map +1 -0
  122. package/dist/collection/components/sd-toast-message/sd-toast-message.js +11 -11
  123. package/dist/collection/components/sd-toast-message/sd-toast-message.js.map +1 -1
  124. package/dist/collection/components/sd-toggle/sd-toggle.js +8 -14
  125. package/dist/collection/components/sd-toggle/sd-toggle.js.map +1 -1
  126. package/dist/collection/components/sd-toggle-button/sd-toggle-button.js +5 -5
  127. package/dist/collection/components/sd-toggle-button/sd-toggle-button.js.map +1 -1
  128. package/dist/collection/components/sd-tooltip/sd-tooltip.css +6 -65
  129. package/dist/collection/components/sd-tooltip/sd-tooltip.js +12 -29
  130. package/dist/collection/components/sd-tooltip/sd-tooltip.js.map +1 -1
  131. package/dist/collection/types/select.js.map +1 -1
  132. package/dist/components/index.js +1 -1
  133. package/dist/components/p-7xekTQRB.js +104 -0
  134. package/dist/components/p-7xekTQRB.js.map +1 -0
  135. package/dist/components/{p-BDkKpeVz.js → p-BKSlQGJv.js} +3 -3
  136. package/dist/components/{p-BDkKpeVz.js.map → p-BKSlQGJv.js.map} +1 -1
  137. package/dist/components/{p-njRAT-yp.js → p-CVMprLsE.js} +17 -15
  138. package/dist/components/p-CVMprLsE.js.map +1 -0
  139. package/dist/components/p-CdGD6AqM.js +92 -0
  140. package/dist/components/p-CdGD6AqM.js.map +1 -0
  141. package/dist/components/p-CpRkV7pg.js +201 -0
  142. package/dist/components/p-CpRkV7pg.js.map +1 -0
  143. package/dist/components/p-D2movWkD.js +289 -0
  144. package/dist/components/p-D2movWkD.js.map +1 -0
  145. package/dist/components/p-D54IEoI6.js +238 -0
  146. package/dist/components/p-D54IEoI6.js.map +1 -0
  147. package/dist/components/{p-D5BkkT2U.js → p-DbebUQwg.js} +7 -7
  148. package/dist/components/{p-D5BkkT2U.js.map → p-DbebUQwg.js.map} +1 -1
  149. package/dist/components/{p-BYf-ybt2.js → p-DcGvp3RM.js} +5 -5
  150. package/dist/components/p-DcGvp3RM.js.map +1 -0
  151. package/dist/components/{p-nqDJZ_gy.js → p-DdKGhMHk.js} +4 -4
  152. package/dist/components/{p-nqDJZ_gy.js.map → p-DdKGhMHk.js.map} +1 -1
  153. package/dist/components/{p-BxPT3VKO.js → p-DlJtPR_C.js} +12 -12
  154. package/dist/components/p-DlJtPR_C.js.map +1 -0
  155. package/dist/components/{p-vhe6g4Qt.js → p-DnQF6htq.js} +5 -5
  156. package/dist/components/{p-vhe6g4Qt.js.map → p-DnQF6htq.js.map} +1 -1
  157. package/dist/components/{p-BA38jFi5.js → p-DssRJcAn.js} +4 -4
  158. package/dist/components/{p-BA38jFi5.js.map → p-DssRJcAn.js.map} +1 -1
  159. package/dist/components/{p-B3H_uLbl.js → p-Dt-KAeBx.js} +3 -3
  160. package/dist/components/{p-B3H_uLbl.js.map → p-Dt-KAeBx.js.map} +1 -1
  161. package/dist/components/{p-DRGcUx0C.js → p-DxSmO6Tr.js} +8 -7
  162. package/dist/components/p-DxSmO6Tr.js.map +1 -0
  163. package/dist/components/{p-CWwMpVqI.js → p-JF61vPAh.js} +9 -9
  164. package/dist/components/p-JF61vPAh.js.map +1 -0
  165. package/dist/components/p-RhBqdixM.js +102 -0
  166. package/dist/components/p-RhBqdixM.js.map +1 -0
  167. package/dist/components/{p-CKhzpdPk.js → p-UZEmuyIR.js} +19 -19
  168. package/dist/components/p-UZEmuyIR.js.map +1 -0
  169. package/dist/components/{p-CQBrru3e.js → p-YLoygqPr.js} +3 -3
  170. package/dist/components/p-YLoygqPr.js.map +1 -0
  171. package/dist/components/p-s4Mg_xSz.js +260 -0
  172. package/dist/components/p-s4Mg_xSz.js.map +1 -0
  173. package/dist/components/{p-MRYVk6Qh.js → p-zvZtN3nR.js} +8 -8
  174. package/dist/components/{p-MRYVk6Qh.js.map → p-zvZtN3nR.js.map} +1 -1
  175. package/dist/components/sd-badge.js +5 -5
  176. package/dist/components/sd-badge.js.map +1 -1
  177. package/dist/components/sd-button.js +1 -1
  178. package/dist/components/sd-card.js +5 -5
  179. package/dist/components/sd-card.js.map +1 -1
  180. package/dist/components/sd-checkbox.js +1 -1
  181. package/dist/components/sd-date-box.js +1 -1
  182. package/dist/components/sd-date-picker.js +37 -13
  183. package/dist/components/sd-date-picker.js.map +1 -1
  184. package/dist/components/sd-date-range-picker.js +41 -17
  185. package/dist/components/sd-date-range-picker.js.map +1 -1
  186. package/dist/components/{sd-td.d.ts → sd-field.d.ts} +4 -4
  187. package/dist/components/sd-field.js +9 -0
  188. package/dist/components/sd-field.js.map +1 -0
  189. package/dist/components/sd-file-picker.js +10 -10
  190. package/dist/components/sd-file-picker.js.map +1 -1
  191. package/dist/components/{sd-table-backup.d.ts → sd-floating-portal.d.ts} +4 -4
  192. package/dist/components/sd-floating-portal.js +9 -0
  193. package/dist/components/sd-floating-portal.js.map +1 -0
  194. package/dist/components/{sd-th.d.ts → sd-form.d.ts} +4 -4
  195. package/dist/components/sd-form.js +99 -0
  196. package/dist/components/sd-form.js.map +1 -0
  197. package/dist/components/sd-guide.js +12 -13
  198. package/dist/components/sd-guide.js.map +1 -1
  199. package/dist/components/sd-icon.js +1 -1
  200. package/dist/components/sd-input.js +1 -1
  201. package/dist/components/sd-loading-spinner.js +1 -1
  202. package/dist/components/sd-modal-card.js +10 -10
  203. package/dist/components/sd-modal-card.js.map +1 -1
  204. package/dist/components/sd-number-input.js +19 -43
  205. package/dist/components/sd-number-input.js.map +1 -1
  206. package/dist/components/sd-pagination.js +1 -1
  207. package/dist/components/sd-popover.js +14 -15
  208. package/dist/components/sd-popover.js.map +1 -1
  209. package/dist/components/sd-portal.js +1 -1
  210. package/dist/components/sd-progress.js +1 -1
  211. package/dist/components/sd-radio-button-group.js +10 -26
  212. package/dist/components/sd-radio-button-group.js.map +1 -1
  213. package/dist/components/sd-radio-group.js +5 -5
  214. package/dist/components/sd-radio-group.js.map +1 -1
  215. package/dist/components/{sd-tbody.d.ts → sd-select-dropdown.d.ts} +4 -4
  216. package/dist/components/sd-select-dropdown.js +9 -0
  217. package/dist/components/sd-select-dropdown.js.map +1 -0
  218. package/dist/components/sd-select-multiple-group.js +97 -40
  219. package/dist/components/sd-select-multiple-group.js.map +1 -1
  220. package/dist/components/sd-select-multiple.js +133 -168
  221. package/dist/components/sd-select-multiple.js.map +1 -1
  222. package/dist/components/sd-select-option-group.js +1 -1
  223. package/dist/components/sd-select-option.js +1 -1
  224. package/dist/components/sd-select-search-input.js +1 -1
  225. package/dist/components/sd-select.js +1 -1
  226. package/dist/components/sd-table.js +555 -113
  227. package/dist/components/sd-table.js.map +1 -1
  228. package/dist/components/sd-tabs.js +13 -16
  229. package/dist/components/sd-tabs.js.map +1 -1
  230. package/dist/components/sd-tag.js +1 -1
  231. package/dist/components/{sd-tr.d.ts → sd-textarea.d.ts} +4 -4
  232. package/dist/components/sd-textarea.js +145 -0
  233. package/dist/components/sd-textarea.js.map +1 -0
  234. package/dist/components/sd-toast-message.js +14 -14
  235. package/dist/components/sd-toast-message.js.map +1 -1
  236. package/dist/components/sd-toggle-button.js +5 -5
  237. package/dist/components/sd-toggle-button.js.map +1 -1
  238. package/dist/components/sd-toggle.js +9 -11
  239. package/dist/components/sd-toggle.js.map +1 -1
  240. package/dist/components/sd-tooltip.js +1 -1
  241. package/dist/design-system/design-system.css +1 -1
  242. package/dist/design-system/design-system.esm.js +1 -1
  243. package/dist/design-system/p-02e23509.entry.js +2 -0
  244. package/dist/design-system/p-02e23509.entry.js.map +1 -0
  245. package/dist/design-system/p-0a2f733d.entry.js +2 -0
  246. package/dist/design-system/p-0a2f733d.entry.js.map +1 -0
  247. package/dist/design-system/p-0d3f019d.entry.js +2 -0
  248. package/dist/design-system/p-0d3f019d.entry.js.map +1 -0
  249. package/dist/design-system/p-15dd1289.entry.js +2 -0
  250. package/dist/design-system/p-15dd1289.entry.js.map +1 -0
  251. package/dist/design-system/p-216c6543.entry.js +2 -0
  252. package/dist/design-system/p-216c6543.entry.js.map +1 -0
  253. package/dist/design-system/p-2400d67b.entry.js +2 -0
  254. package/dist/design-system/p-2400d67b.entry.js.map +1 -0
  255. package/dist/design-system/p-282f4087.entry.js +2 -0
  256. package/dist/design-system/p-282f4087.entry.js.map +1 -0
  257. package/dist/design-system/{p-7b94b34e.entry.js → p-388d5b9f.entry.js} +2 -2
  258. package/dist/design-system/p-4d7bb5b6.entry.js +2 -0
  259. package/dist/design-system/p-4d7bb5b6.entry.js.map +1 -0
  260. package/dist/design-system/p-53972259.entry.js +2 -0
  261. package/dist/design-system/p-53972259.entry.js.map +1 -0
  262. package/dist/design-system/p-6277b220.entry.js +2 -0
  263. package/dist/design-system/p-6277b220.entry.js.map +1 -0
  264. package/dist/design-system/p-652c4d37.entry.js +2 -0
  265. package/dist/design-system/p-652c4d37.entry.js.map +1 -0
  266. package/dist/design-system/p-661c4553.entry.js +2 -0
  267. package/dist/design-system/p-661c4553.entry.js.map +1 -0
  268. package/dist/design-system/p-686958c5.entry.js +2 -0
  269. package/dist/design-system/p-686958c5.entry.js.map +1 -0
  270. package/dist/design-system/p-811c5aa4.entry.js +2 -0
  271. package/dist/design-system/p-811c5aa4.entry.js.map +1 -0
  272. package/dist/design-system/p-827ca975.entry.js +2 -0
  273. package/dist/design-system/p-827ca975.entry.js.map +1 -0
  274. package/dist/design-system/p-8df72aa2.entry.js +2 -0
  275. package/dist/design-system/p-8df72aa2.entry.js.map +1 -0
  276. package/dist/design-system/p-9d2459ed.entry.js +2 -0
  277. package/dist/design-system/p-9d2459ed.entry.js.map +1 -0
  278. package/dist/design-system/p-BShXSO5x.js +2 -0
  279. package/dist/design-system/p-BShXSO5x.js.map +1 -0
  280. package/dist/design-system/{p-7X2nzJWz.js → p-C3qNZ7Qh.js} +3 -3
  281. package/dist/design-system/p-C3qNZ7Qh.js.map +1 -0
  282. package/dist/design-system/{p-CdbtuKYR.js → p-DPxE68eG.js} +2 -2
  283. package/dist/design-system/{p-CdbtuKYR.js.map → p-DPxE68eG.js.map} +1 -1
  284. package/dist/design-system/{p-BYf-ybt2.js → p-DcGvp3RM.js} +2 -2
  285. package/dist/design-system/{p-BYf-ybt2.js.map → p-DcGvp3RM.js.map} +1 -1
  286. package/dist/design-system/p-a7d4c6bd.entry.js +2 -0
  287. package/dist/design-system/p-a7d4c6bd.entry.js.map +1 -0
  288. package/dist/design-system/p-ac29c52c.entry.js +2 -0
  289. package/dist/design-system/p-ac29c52c.entry.js.map +1 -0
  290. package/dist/design-system/{p-7a424f6b.entry.js → p-b0277422.entry.js} +2 -2
  291. package/dist/design-system/p-b0277422.entry.js.map +1 -0
  292. package/dist/design-system/p-c25c4bd6.entry.js +2 -0
  293. package/dist/design-system/p-c25c4bd6.entry.js.map +1 -0
  294. package/dist/design-system/p-c3061828.entry.js +2 -0
  295. package/dist/design-system/p-c3061828.entry.js.map +1 -0
  296. package/dist/design-system/p-cde56c79.entry.js +2 -0
  297. package/dist/design-system/{p-2c57bdea.entry.js.map → p-cde56c79.entry.js.map} +1 -1
  298. package/dist/design-system/p-d77422e4.entry.js +2 -0
  299. package/dist/design-system/p-d77422e4.entry.js.map +1 -0
  300. package/dist/design-system/p-dc410414.entry.js +2 -0
  301. package/dist/design-system/p-dc410414.entry.js.map +1 -0
  302. package/dist/design-system/p-f254b09a.entry.js +2 -0
  303. package/dist/design-system/p-f254b09a.entry.js.map +1 -0
  304. package/dist/design-system/p-f3287206.entry.js +2 -0
  305. package/dist/design-system/p-f3287206.entry.js.map +1 -0
  306. package/dist/esm/{select-keyboard-navigation-C2JaR3A6.js → base-dropdown-event-BShXSO5x.js} +26 -26
  307. package/dist/esm/base-dropdown-event-BShXSO5x.js.map +1 -0
  308. package/dist/esm/design-system.js +3 -3
  309. package/dist/esm/{index-7X2nzJWz.js → index-C3qNZ7Qh.js} +3 -3
  310. package/dist/esm/index-C3qNZ7Qh.js.map +1 -0
  311. package/dist/esm/loader.js +3 -3
  312. package/dist/esm/{resolveColor-BYf-ybt2.js → resolveColor-DcGvp3RM.js} +5 -5
  313. package/dist/{cjs/resolveColor-DxvExwgo.js.map → esm/resolveColor-DcGvp3RM.js.map} +1 -1
  314. package/dist/esm/sd-badge.entry.js +4 -4
  315. package/dist/esm/sd-badge.entry.js.map +1 -1
  316. package/dist/esm/{sd-button_24.entry.js → sd-button_6.entry.js} +291 -2823
  317. package/dist/esm/sd-card.entry.js +4 -4
  318. package/dist/esm/sd-card.entry.js.map +1 -1
  319. package/dist/esm/sd-checkbox.entry.js +87 -0
  320. package/dist/esm/sd-checkbox.entry.js.map +1 -0
  321. package/dist/esm/sd-date-box.entry.js +10 -10
  322. package/dist/esm/sd-date-box.entry.js.map +1 -1
  323. package/dist/esm/sd-date-picker.entry.js +5 -5
  324. package/dist/esm/sd-date-picker.entry.js.map +1 -1
  325. package/dist/esm/sd-date-range-picker.entry.js +8 -8
  326. package/dist/esm/sd-date-range-picker.entry.js.map +1 -1
  327. package/dist/esm/sd-field_3.entry.js +418 -0
  328. package/dist/esm/sd-file-picker.entry.js +119 -0
  329. package/dist/esm/sd-file-picker.entry.js.map +1 -0
  330. package/dist/esm/sd-form.entry.js +72 -0
  331. package/dist/esm/sd-form.entry.js.map +1 -0
  332. package/dist/esm/sd-guide.entry.js +79 -0
  333. package/dist/esm/sd-guide.entry.js.map +1 -0
  334. package/dist/esm/sd-loading-spinner_2.entry.js +192 -0
  335. package/dist/esm/sd-modal-card.entry.js +8 -8
  336. package/dist/esm/sd-modal-card.entry.js.map +1 -1
  337. package/dist/esm/sd-number-input.entry.js +259 -0
  338. package/dist/esm/sd-number-input.entry.js.map +1 -0
  339. package/dist/esm/sd-popover.entry.js +7 -7
  340. package/dist/esm/sd-popover.entry.js.map +1 -1
  341. package/dist/esm/sd-progress.entry.js +1 -1
  342. package/dist/esm/sd-radio-button-group.entry.js +8 -21
  343. package/dist/esm/sd-radio-button-group.entry.js.map +1 -1
  344. package/dist/esm/sd-radio-group.entry.js +69 -0
  345. package/dist/esm/sd-radio-group.entry.js.map +1 -0
  346. package/dist/esm/sd-select-dropdown_3.entry.js +262 -0
  347. package/dist/esm/sd-select-multiple-group.entry.js +444 -0
  348. package/dist/esm/sd-select-multiple-group.entry.js.map +1 -0
  349. package/dist/esm/sd-select-multiple.entry.js +72 -150
  350. package/dist/esm/sd-select-multiple.entry.js.map +1 -1
  351. package/dist/esm/sd-select-option-group.entry.js +67 -0
  352. package/dist/esm/sd-select-option-group.entry.js.map +1 -0
  353. package/dist/esm/sd-table.entry.js +515 -85
  354. package/dist/esm/sd-table.entry.js.map +1 -1
  355. package/dist/esm/sd-tabs.entry.js +64 -0
  356. package/dist/esm/sd-tabs.entry.js.map +1 -0
  357. package/dist/esm/sd-tag.entry.js +55 -0
  358. package/dist/esm/sd-tag.entry.js.map +1 -0
  359. package/dist/esm/sd-toast-message.entry.js +59 -0
  360. package/dist/esm/sd-toast-message.entry.js.map +1 -0
  361. package/dist/esm/sd-toggle-button.entry.js +48 -0
  362. package/dist/esm/sd-toggle-button.entry.js.map +1 -0
  363. package/dist/esm/sd-toggle.entry.js +44 -0
  364. package/dist/esm/sd-toggle.entry.js.map +1 -0
  365. package/dist/esm/{tooltipArrow-DFRZWz6D.js → tooltipArrow-Ck_14rXC.js} +3 -3
  366. package/dist/esm/{tooltipArrow-DFRZWz6D.js.map → tooltipArrow-Ck_14rXC.js.map} +1 -1
  367. package/dist/types/components/sd-button/sd-button.d.ts +0 -3
  368. package/dist/types/components/sd-card/sd-card.d.ts +1 -1
  369. package/dist/types/components/sd-checkbox/sd-checkbox.d.ts +2 -2
  370. package/dist/types/components/sd-date-box/sd-date-box.d.ts +2 -2
  371. package/dist/types/components/sd-date-picker/sd-date-picker.d.ts +1 -1
  372. package/dist/types/components/sd-date-range-picker/sd-date-range-picker.d.ts +1 -1
  373. package/dist/types/components/sd-field/sd-field.d.ts +34 -0
  374. package/dist/types/components/sd-file-picker/sd-file-picker.d.ts +1 -1
  375. package/dist/types/components/{sd-tooltip-portal/sd-tooltip-portal.d.ts → sd-floating-portal/sd-floating-portal.d.ts} +2 -2
  376. package/dist/types/components/sd-form/sd-form.d.ts +23 -0
  377. package/dist/types/components/sd-input/sd-input.d.ts +23 -14
  378. package/dist/types/components/sd-modal-card/sd-modal-card.d.ts +2 -2
  379. package/dist/types/components/sd-number-input/sd-number-input.d.ts +4 -14
  380. package/dist/types/components/sd-portal/sd-portal.d.ts +1 -1
  381. package/dist/types/components/sd-radio-button-group/sd-radio-button-group.d.ts +2 -4
  382. package/dist/types/components/sd-radio-group/sd-radio-group.d.ts +1 -1
  383. package/dist/types/components/sd-select/sd-select-dropdown/sd-select-dropdown.d.ts +41 -0
  384. package/dist/types/components/sd-select/sd-select-option/sd-select-option.d.ts +1 -1
  385. package/dist/types/components/sd-select/sd-select-search-input/sd-select-search-input.d.ts +4 -4
  386. package/dist/types/components/sd-select/sd-select.d.ts +28 -21
  387. package/dist/types/components/sd-select-multiple/sd-select-multiple.d.ts +26 -20
  388. package/dist/types/components/sd-select-multiple-group/sd-select-multiple-group.d.ts +19 -4
  389. package/dist/types/components/sd-table/sd-table.d.ts +62 -3
  390. package/dist/types/components/sd-tabs/sd-tabs.d.ts +1 -2
  391. package/dist/types/components/sd-textarea/sd-textarea.d.ts +32 -0
  392. package/dist/types/components/sd-toast-message/sd-toast-message.d.ts +3 -3
  393. package/dist/types/components/sd-toggle/sd-toggle.d.ts +1 -2
  394. package/dist/types/components/sd-toggle-button/sd-toggle-button.d.ts +1 -1
  395. package/dist/types/components/sd-tooltip/sd-tooltip.d.ts +14 -2
  396. package/dist/types/components.d.ts +705 -399
  397. package/dist/types/types/form.d.ts +1 -0
  398. package/dist/types/types/select.d.ts +1 -1
  399. package/hydrate/index.js +1394 -1322
  400. package/hydrate/index.mjs +1394 -1322
  401. package/package.json +4 -3
  402. package/dist/cjs/index-B7tkxTye.js.map +0 -1
  403. package/dist/cjs/sd-tbody_3.cjs.entry.js +0 -44
  404. package/dist/cjs/sd-td.cjs.entry.js +0 -26
  405. package/dist/cjs/select-keyboard-navigation-6fO_V4En.js.map +0 -1
  406. package/dist/collection/components/sd-table/sd-tbody/sd-tbody.css +0 -3
  407. package/dist/collection/components/sd-table/sd-tbody/sd-tbody.js +0 -18
  408. package/dist/collection/components/sd-table/sd-tbody/sd-tbody.js.map +0 -1
  409. package/dist/collection/components/sd-table/sd-td/sd-td.css +0 -9
  410. package/dist/collection/components/sd-table/sd-td/sd-td.js +0 -111
  411. package/dist/collection/components/sd-table/sd-td/sd-td.js.map +0 -1
  412. package/dist/collection/components/sd-table/sd-th/sd-th.css +0 -8
  413. package/dist/collection/components/sd-table/sd-th/sd-th.js +0 -18
  414. package/dist/collection/components/sd-table/sd-th/sd-th.js.map +0 -1
  415. package/dist/collection/components/sd-table/sd-tr/sd-tr.css +0 -3
  416. package/dist/collection/components/sd-table/sd-tr/sd-tr.js +0 -18
  417. package/dist/collection/components/sd-table/sd-tr/sd-tr.js.map +0 -1
  418. package/dist/collection/components/sd-table-backup/sd-table-backup.css +0 -309
  419. package/dist/collection/components/sd-table-backup/sd-table-backup.js +0 -1219
  420. package/dist/collection/components/sd-table-backup/sd-table-backup.js.map +0 -1
  421. package/dist/collection/components/sd-tooltip-portal/sd-tooltip-portal.js.map +0 -1
  422. package/dist/components/p-BESbtjDi.js +0 -102
  423. package/dist/components/p-BESbtjDi.js.map +0 -1
  424. package/dist/components/p-BLidMbc_.js +0 -34
  425. package/dist/components/p-BLidMbc_.js.map +0 -1
  426. package/dist/components/p-BYf-ybt2.js.map +0 -1
  427. package/dist/components/p-BxPT3VKO.js.map +0 -1
  428. package/dist/components/p-CKhzpdPk.js.map +0 -1
  429. package/dist/components/p-CQBrru3e.js.map +0 -1
  430. package/dist/components/p-CWwMpVqI.js.map +0 -1
  431. package/dist/components/p-CfKJNKMH.js +0 -175
  432. package/dist/components/p-CfKJNKMH.js.map +0 -1
  433. package/dist/components/p-DD9g6GYA.js +0 -34
  434. package/dist/components/p-DD9g6GYA.js.map +0 -1
  435. package/dist/components/p-DKoWHxRI.js +0 -34
  436. package/dist/components/p-DKoWHxRI.js.map +0 -1
  437. package/dist/components/p-DMqinLuj.js +0 -326
  438. package/dist/components/p-DMqinLuj.js.map +0 -1
  439. package/dist/components/p-DRGcUx0C.js.map +0 -1
  440. package/dist/components/p-DroKiQ6J.js +0 -121
  441. package/dist/components/p-DroKiQ6J.js.map +0 -1
  442. package/dist/components/p-QNYqIsvU.js +0 -78
  443. package/dist/components/p-QNYqIsvU.js.map +0 -1
  444. package/dist/components/p-njRAT-yp.js.map +0 -1
  445. package/dist/components/sd-table-backup.js +0 -802
  446. package/dist/components/sd-table-backup.js.map +0 -1
  447. package/dist/components/sd-tbody.js +0 -9
  448. package/dist/components/sd-tbody.js.map +0 -1
  449. package/dist/components/sd-td.js +0 -50
  450. package/dist/components/sd-td.js.map +0 -1
  451. package/dist/components/sd-th.js +0 -9
  452. package/dist/components/sd-th.js.map +0 -1
  453. package/dist/components/sd-tooltip-portal.d.ts +0 -11
  454. package/dist/components/sd-tooltip-portal.js +0 -9
  455. package/dist/components/sd-tooltip-portal.js.map +0 -1
  456. package/dist/components/sd-tr.js +0 -9
  457. package/dist/components/sd-tr.js.map +0 -1
  458. package/dist/design-system/p-0d2814dc.entry.js +0 -2
  459. package/dist/design-system/p-0d2814dc.entry.js.map +0 -1
  460. package/dist/design-system/p-27985b84.entry.js +0 -2
  461. package/dist/design-system/p-27985b84.entry.js.map +0 -1
  462. package/dist/design-system/p-2c57bdea.entry.js +0 -2
  463. package/dist/design-system/p-3bc4effa.entry.js +0 -2
  464. package/dist/design-system/p-3bc4effa.entry.js.map +0 -1
  465. package/dist/design-system/p-5acdd14a.entry.js +0 -2
  466. package/dist/design-system/p-5acdd14a.entry.js.map +0 -1
  467. package/dist/design-system/p-665c5c48.entry.js +0 -2
  468. package/dist/design-system/p-665c5c48.entry.js.map +0 -1
  469. package/dist/design-system/p-7X2nzJWz.js.map +0 -1
  470. package/dist/design-system/p-7a424f6b.entry.js.map +0 -1
  471. package/dist/design-system/p-97b271a7.entry.js +0 -2
  472. package/dist/design-system/p-97b271a7.entry.js.map +0 -1
  473. package/dist/design-system/p-9ade8cd7.entry.js +0 -2
  474. package/dist/design-system/p-9ade8cd7.entry.js.map +0 -1
  475. package/dist/design-system/p-C2JaR3A6.js +0 -2
  476. package/dist/design-system/p-C2JaR3A6.js.map +0 -1
  477. package/dist/design-system/p-b1b828e6.entry.js +0 -2
  478. package/dist/design-system/p-b1b828e6.entry.js.map +0 -1
  479. package/dist/design-system/p-de826a92.entry.js +0 -2
  480. package/dist/design-system/p-de826a92.entry.js.map +0 -1
  481. package/dist/design-system/p-e5065700.entry.js +0 -2
  482. package/dist/design-system/p-e5065700.entry.js.map +0 -1
  483. package/dist/design-system/p-fc3580fd.entry.js +0 -2
  484. package/dist/design-system/p-fc3580fd.entry.js.map +0 -1
  485. package/dist/esm/index-7X2nzJWz.js.map +0 -1
  486. package/dist/esm/sd-tbody_3.entry.js +0 -40
  487. package/dist/esm/sd-td.entry.js +0 -24
  488. package/dist/esm/sd-td.entry.js.map +0 -1
  489. package/dist/esm/select-keyboard-navigation-C2JaR3A6.js.map +0 -1
  490. package/dist/types/components/sd-table/sd-tbody/sd-tbody.d.ts +0 -3
  491. package/dist/types/components/sd-table/sd-td/sd-td.d.ts +0 -7
  492. package/dist/types/components/sd-table/sd-th/sd-th.d.ts +0 -3
  493. package/dist/types/components/sd-table/sd-tr/sd-tr.d.ts +0 -3
  494. package/dist/types/components/sd-table-backup/sd-table-backup.d.ts +0 -135
  495. /package/dist/design-system/{p-7b94b34e.entry.js.map → p-388d5b9f.entry.js.map} +0 -0
@@ -0,0 +1,201 @@
1
+ import { p as proxyCustomElement, H, h, c as Host, t as transformTag } from './p-YLoygqPr.js';
2
+ import { d as defineCustomElement$4 } from './p-CdGD6AqM.js';
3
+ import { d as defineCustomElement$3 } from './p-CVMprLsE.js';
4
+ import { d as defineCustomElement$2 } from './p-DnQF6htq.js';
5
+ import { d as defineCustomElement$1 } from './p-7xekTQRB.js';
6
+
7
+ const sdFieldCss = () => `.sd-field{display:inline-flex;flex-flow:column nowrap;height:fit-content;width:fit-content}.sd-field *:focus,.sd-field *:focus-visible,.sd-field *:focus-within{outline:none !important}.sd-field:not(.sd-field--disabled):hover .sd-field__control{border:1px solid #0075ff !important;box-shadow:0px 0px 4px 0px rgba(0, 113, 255, 0.4)}.sd-field.sd-field--disabled{cursor:not-allowed}.sd-field.sd-field--disabled .sd-field__wrapper{cursor:not-allowed !important}.sd-field.sd-field--disabled .sd-field__wrapper .sd-field__label-inside{border-color:#cccccc;color:#888888;cursor:not-allowed !important}.sd-field.sd-field--disabled .sd-field__wrapper .sd-field__control{background-color:#eeeeee;border-color:#cccccc;color:#888888;cursor:not-allowed !important}.sd-field--has-label .sd-field__wrapper .sd-field__label{display:flex;align-items:center;margin-right:12px}.sd-field--has-label .sd-field__wrapper .sd-field__label__required-icon{margin-right:4px}.sd-field--has-label .sd-field__wrapper .sd-field__label__text{font-size:12px;line-height:20px;color:#333333;white-space:nowrap}.sd-field--has-label .sd-field__wrapper .sd-field__label__tooltip{margin-left:2px}.sd-field--has-label-inside .sd-field__wrapper .sd-field__label{margin-right:0;display:flex;align-items:center;justify-content:center;padding:3px 12px;border:1px solid #cccccc;border-right:none;border-radius:4px 0 0 4px;border-color:#aaaaaa;background-color:#f6f6f6}.sd-field__wrapper{width:var(--field-width, 200px);height:28px;display:flex;align-items:center;flex-flow:row nowrap;position:relative;color:#333333;cursor:pointer;-webkit-user-select:none;user-select:none}.sd-field__wrapper .sd-field__control{position:relative;width:100%;height:100%;display:flex;flex:1;border:1px solid #aaaaaa;border-radius:4px;background:white}.sd-field__wrapper .sd-field__control--label-inside{border-top-left-radius:0px;border-bottom-left-radius:0px}.sd-field--error:not(:hover) .sd-field__wrapper .sd-field__control{border:1px solid #fb4444 !important}.sd-field.sd-field--focus .sd-field__wrapper .sd-field__control,.sd-field.sd-field--hover .sd-field__wrapper .sd-field__control{border:1px solid #0075ff !important;box-shadow:0px 0px 4px 0px rgba(0, 113, 255, 0.4)}.sd-field .sd-field__error-message{color:#fb4444;font-size:12px;line-height:20px;margin-top:4px}`;
8
+
9
+ const FORM_PARENT_TAGS = [
10
+ 'sd-select',
11
+ 'sd-select-multiple',
12
+ 'sd-select-multiple-group',
13
+ 'sd-input',
14
+ 'sd-textarea',
15
+ ];
16
+ const SdField = /*@__PURE__*/ proxyCustomElement(class SdField extends H {
17
+ constructor(registerHost) {
18
+ super();
19
+ if (registerHost !== false) {
20
+ this.__registerHost();
21
+ }
22
+ }
23
+ get el() { return this; }
24
+ name = '';
25
+ rules = [];
26
+ error = false;
27
+ disabled = false;
28
+ hovered = false;
29
+ focused = false;
30
+ status;
31
+ // props - label
32
+ label = '';
33
+ insideLabel = false;
34
+ useLabelRequired = false;
35
+ labelTooltip = '';
36
+ labelTooltipProps = null;
37
+ errorMsg = '';
38
+ hostElement = null;
39
+ get value() {
40
+ return this.hostElement?.value ?? null;
41
+ }
42
+ get fieldStatus() {
43
+ let status = '';
44
+ if (!!this.disabled) {
45
+ status = 'disabled';
46
+ return `sd-field--${status}`;
47
+ }
48
+ if (!!this.focused) {
49
+ status = 'focus';
50
+ return `sd-field--${status}`;
51
+ }
52
+ if (!!this.hovered)
53
+ status = 'hover';
54
+ if (!!this.status)
55
+ status = this.status;
56
+ if (!!this.error)
57
+ status = 'error';
58
+ return status ? `sd-field--${status}` : '';
59
+ }
60
+ componentDidLoad() {
61
+ this.hostElement = this.findHostElement();
62
+ this.registerToForm();
63
+ }
64
+ disconnectedCallback() {
65
+ this.unregisterFromForm();
66
+ }
67
+ findHostElement() {
68
+ for (const tag of FORM_PARENT_TAGS) {
69
+ const parent = this.el.closest(tag);
70
+ if (parent && 'value' in parent) {
71
+ return parent;
72
+ }
73
+ }
74
+ return null;
75
+ }
76
+ registerToForm() {
77
+ if (!this.rules || this.rules.length === 0) {
78
+ console.warn('[sd-form-field] rules prop is required for sd-form integration');
79
+ return;
80
+ }
81
+ const formEl = this.el.closest('sd-form');
82
+ if (!formEl)
83
+ return;
84
+ formEl.componentOnReady().then(form => {
85
+ form.sdRegisterField(this);
86
+ });
87
+ }
88
+ unregisterFromForm() {
89
+ if (!this.name)
90
+ return;
91
+ const formEl = this.el.closest('sd-form');
92
+ formEl?.componentOnReady().then(form => {
93
+ form.sdUnregisterField(this.name);
94
+ });
95
+ }
96
+ async sdValidate() {
97
+ if (!this.rules || this.rules.length === 0)
98
+ return true;
99
+ for (const rule of this.rules) {
100
+ const result = rule(this.value ?? '');
101
+ if (result !== true) {
102
+ this.setError(true, result);
103
+ return false;
104
+ }
105
+ }
106
+ this.setError(false, '');
107
+ return true;
108
+ }
109
+ async sdReset() {
110
+ if (this.hostElement) {
111
+ this.hostElement.value = null;
112
+ }
113
+ this.setError(false, '');
114
+ }
115
+ async sdResetValidation() {
116
+ this.setError(false, '');
117
+ }
118
+ async sdFocus() {
119
+ this.hostElement?.focus?.();
120
+ this.hostElement?.scrollIntoView({ behavior: 'smooth', block: 'center' });
121
+ }
122
+ setError(error, errorMsg) {
123
+ this.errorMsg = errorMsg;
124
+ if (this.hostElement) {
125
+ this.hostElement.error = error;
126
+ }
127
+ }
128
+ render() {
129
+ return (h(Host, { key: '16609b3313318dfc4db917a32bd44e6e2cb2f4e7', class: {
130
+ 'sd-field': true,
131
+ 'sd-field--has-label': !!this.label,
132
+ 'sd-field--has-label-inside': !!this.label && this.insideLabel,
133
+ [this.fieldStatus]: !!this.fieldStatus,
134
+ } }, h("div", { key: '5c3056123cb54f8d6c26406ae76b13219d289f9c', class: "sd-field__wrapper" }, this.renderLabel(this.label), h("div", { key: '786bcd6ec3651bb226013474fae112c592ec6890', class: {
135
+ 'sd-field__control': true,
136
+ 'sd-field__control--label-inside ': !!this.label && this.insideLabel,
137
+ } }, h("slot", { key: '60ae2f97cc7225930df9d17958fe78d3dd8e01e3' }))), this.errorMsg && h("div", { key: '4984f7e64c6c6611063c46b5c7ea21a0ae0b5343', class: "sd-field__error-message" }, this.errorMsg)));
138
+ }
139
+ renderLabel(label) {
140
+ if (!label)
141
+ return null;
142
+ return (h("label", { class: { 'sd-field__label': true, 'sd-field__label-inside': this.insideLabel } }, this.useLabelRequired && (h("sd-icon", { name: "star", size: "10", color: "brilliantblue_75", class: "sd-field__label__required-icon" })), h("div", { class: "sd-field__label__text" }, label), this.labelTooltip && (h("sd-tooltip", { class: "sd-field__label__tooltip", ...this.labelTooltipProps }, h("div", { slot: "content" }, this.labelTooltip)))));
143
+ }
144
+ static get style() { return sdFieldCss(); }
145
+ }, [772, "sd-field", {
146
+ "name": [1],
147
+ "rules": [16],
148
+ "error": [1028],
149
+ "disabled": [1028],
150
+ "hovered": [1028],
151
+ "focused": [1028],
152
+ "status": [1],
153
+ "label": [1],
154
+ "insideLabel": [4, "inside-label"],
155
+ "useLabelRequired": [4, "use-label-required"],
156
+ "labelTooltip": [1, "label-tooltip"],
157
+ "labelTooltipProps": [16],
158
+ "errorMsg": [32],
159
+ "sdValidate": [64],
160
+ "sdReset": [64],
161
+ "sdResetValidation": [64],
162
+ "sdFocus": [64]
163
+ }]);
164
+ function defineCustomElement() {
165
+ if (typeof customElements === "undefined") {
166
+ return;
167
+ }
168
+ const components = ["sd-field", "sd-button", "sd-floating-portal", "sd-icon", "sd-tooltip"];
169
+ components.forEach(tagName => { switch (tagName) {
170
+ case "sd-field":
171
+ if (!customElements.get(transformTag(tagName))) {
172
+ customElements.define(transformTag(tagName), SdField);
173
+ }
174
+ break;
175
+ case "sd-button":
176
+ if (!customElements.get(transformTag(tagName))) {
177
+ defineCustomElement$4();
178
+ }
179
+ break;
180
+ case "sd-floating-portal":
181
+ if (!customElements.get(transformTag(tagName))) {
182
+ defineCustomElement$3();
183
+ }
184
+ break;
185
+ case "sd-icon":
186
+ if (!customElements.get(transformTag(tagName))) {
187
+ defineCustomElement$2();
188
+ }
189
+ break;
190
+ case "sd-tooltip":
191
+ if (!customElements.get(transformTag(tagName))) {
192
+ defineCustomElement$1();
193
+ }
194
+ break;
195
+ } });
196
+ }
197
+
198
+ export { SdField as S, defineCustomElement as d };
199
+ //# sourceMappingURL=p-CpRkV7pg.js.map
200
+
201
+ //# sourceMappingURL=p-CpRkV7pg.js.map
@@ -0,0 +1 @@
1
+ {"file":"p-CpRkV7pg.js","mappings":"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","names":["__stencil_proxyCustomElement","HTMLElement"],"sources":["src/components/sd-field/sd-field.scss?tag=sd-field","src/components/sd-field/sd-field.tsx"],"sourcesContent":["@import 'variables';\n\n.sd-field {\n display: inline-flex;\n flex-flow: column nowrap;\n height: fit-content;\n width: fit-content;\n\n *:focus,\n *:focus-visible,\n *:focus-within {\n outline: none !important;\n }\n\n &:not(.sd-field--disabled) {\n &:hover {\n .sd-field__control {\n border: 1px solid $brilliantblue_75 !important;\n box-shadow: 0px 0px 4px 0px #0071ff66;\n }\n }\n }\n\n &.sd-field--disabled {\n cursor: not-allowed;\n\n .sd-field__wrapper {\n cursor: not-allowed !important;\n .sd-field__label-inside {\n border-color: $grey_45;\n color: $grey_65;\n cursor: not-allowed !important;\n }\n\n .sd-field__control {\n background-color: $grey_20;\n border-color: $grey_45;\n color: $grey_65;\n cursor: not-allowed !important;\n }\n }\n }\n\n &--has-label {\n .sd-field__wrapper {\n .sd-field__label {\n display: flex;\n align-items: center;\n margin-right: 12px;\n\n &__required-icon {\n margin-right: 4px;\n }\n\n &__text {\n font-size: 12px;\n line-height: 20px;\n // font-weight: 500;\n color: $grey_90;\n white-space: nowrap;\n }\n\n &__tooltip {\n margin-left: 2px;\n }\n }\n }\n }\n\n &--has-label-inside {\n .sd-field__wrapper {\n .sd-field__label {\n margin-right: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 3px 12px;\n border: 1px solid $grey_45;\n border-right: none;\n border-radius: 4px 0 0 4px;\n border-color: $grey_55;\n background-color: $grey_10;\n }\n }\n }\n\n &__wrapper {\n width: var(--field-width, 200px);\n height: 28px;\n display: flex;\n align-items: center;\n flex-flow: row nowrap;\n position: relative;\n color: $grey_90;\n cursor: pointer;\n -webkit-user-select: none;\n user-select: none;\n\n .sd-field__control {\n position: relative;\n width: 100%;\n height: 100%;\n display: flex;\n flex: 1;\n border: 1px solid $grey_55;\n border-radius: 4px;\n background: white;\n\n &--label-inside {\n border-top-left-radius: 0px;\n border-bottom-left-radius: 0px;\n }\n }\n }\n\n &--error:not(:hover) {\n .sd-field__wrapper .sd-field__control {\n border: 1px solid $red_70 !important;\n }\n }\n\n &.sd-field--focus,\n &.sd-field--hover {\n .sd-field__wrapper .sd-field__control {\n border: 1px solid $brilliantblue_75 !important;\n box-shadow: 0px 0px 4px 0px #0071ff66;\n }\n }\n\n .sd-field__error-message {\n color: $red_70;\n font-size: 12px;\n line-height: 20px;\n margin-top: 4px;\n }\n}\n","import { h, Component, Host, Element, Prop, State, Method } from '@stencil/core';\nimport { ValidatableField } from '../sd-form/sd-form';\nimport { Rule } from '../../types/form';\nimport { SdTooltipProps } from '../sd-tooltip/sd-tooltip';\n\nconst FORM_PARENT_TAGS = [\n 'sd-select',\n 'sd-select-multiple',\n 'sd-select-multiple-group',\n 'sd-input',\n 'sd-textarea',\n];\n\ninterface FormHostElement extends HTMLElement {\n value: any;\n error?: boolean;\n errorMsg?: string;\n}\n\n@Component({ tag: 'sd-field', styleUrl: 'sd-field.scss' })\nexport class SdField implements ValidatableField {\n @Element() el!: HTMLElement;\n\n @Prop() name: string = '';\n @Prop() rules?: Rule[] = [];\n\n @Prop({ mutable: true }) error?: boolean = false;\n @Prop({ mutable: true }) disabled?: boolean = false;\n @Prop({ mutable: true }) hovered?: boolean = false;\n @Prop({ mutable: true }) focused?: boolean = false;\n @Prop() status?: 'default' | 'pass' | 'error';\n\n // props - label\n @Prop() label: string = '';\n @Prop() insideLabel: boolean = false;\n @Prop() useLabelRequired: boolean = false;\n @Prop() labelTooltip: string = '';\n @Prop() labelTooltipProps: SdTooltipProps | null = null;\n\n @State() errorMsg: string = '';\n\n private hostElement: FormHostElement | null = null;\n\n get value() {\n return this.hostElement?.value ?? null;\n }\n\n get fieldStatus() {\n let status = '';\n\n if (!!this.disabled) {\n status = 'disabled';\n return `sd-field--${status}`;\n }\n\n if (!!this.focused) {\n status = 'focus';\n return `sd-field--${status}`;\n }\n\n if (!!this.hovered) status = 'hover';\n if (!!this.status) status = this.status;\n if (!!this.error) status = 'error';\n return status ? `sd-field--${status}` : '';\n }\n\n componentDidLoad() {\n this.hostElement = this.findHostElement();\n this.registerToForm();\n }\n\n disconnectedCallback() {\n this.unregisterFromForm();\n }\n\n private findHostElement(): FormHostElement | null {\n for (const tag of FORM_PARENT_TAGS) {\n const parent = this.el.closest<FormHostElement>(tag);\n if (parent && 'value' in parent) {\n return parent;\n }\n }\n return null;\n }\n\n private registerToForm() {\n if (!this.rules || this.rules.length === 0) {\n console.warn('[sd-form-field] rules prop is required for sd-form integration');\n return;\n }\n\n const formEl = this.el.closest<HTMLSdFormElement>('sd-form');\n if (!formEl) return;\n\n formEl.componentOnReady().then(form => {\n form.sdRegisterField(this);\n });\n }\n\n private unregisterFromForm() {\n if (!this.name) return;\n\n const formEl = this.el.closest<HTMLSdFormElement>('sd-form');\n formEl?.componentOnReady().then(form => {\n form.sdUnregisterField(this.name);\n });\n }\n\n @Method()\n async sdValidate(): Promise<boolean> {\n if (!this.rules || this.rules.length === 0) return true;\n\n for (const rule of this.rules) {\n const result = rule(this.value ?? '');\n if (result !== true) {\n this.setError(true, result);\n return false;\n }\n }\n this.setError(false, '');\n return true;\n }\n\n @Method()\n async sdReset() {\n if (this.hostElement) {\n this.hostElement.value = null;\n }\n this.setError(false, '');\n }\n\n @Method()\n async sdResetValidation() {\n this.setError(false, '');\n }\n\n @Method()\n async sdFocus() {\n this.hostElement?.focus?.();\n this.hostElement?.scrollIntoView({ behavior: 'smooth', block: 'center' });\n }\n\n private setError(error: boolean, errorMsg: string) {\n this.errorMsg = errorMsg;\n\n if (this.hostElement) {\n this.hostElement.error = error;\n }\n }\n\n render() {\n return (\n <Host\n class={{\n 'sd-field': true,\n 'sd-field--has-label': !!this.label,\n 'sd-field--has-label-inside': !!this.label && this.insideLabel,\n [this.fieldStatus]: !!this.fieldStatus,\n }}\n >\n <div class=\"sd-field__wrapper\">\n {this.renderLabel(this.label)}\n <div\n class={{\n 'sd-field__control': true,\n 'sd-field__control--label-inside ': !!this.label && this.insideLabel,\n }}\n >\n <slot></slot>\n </div>\n </div>\n {this.errorMsg && <div class=\"sd-field__error-message\">{this.errorMsg}</div>}\n </Host>\n );\n }\n\n private renderLabel(label?: string) {\n if (!label) return null;\n\n return (\n <label class={{ 'sd-field__label': true, 'sd-field__label-inside': this.insideLabel }}>\n {this.useLabelRequired && (\n <sd-icon\n name=\"star\"\n size=\"10\"\n color=\"brilliantblue_75\"\n class=\"sd-field__label__required-icon\"\n ></sd-icon>\n )}\n <div class=\"sd-field__label__text\">{label}</div>\n {this.labelTooltip && (\n <sd-tooltip class=\"sd-field__label__tooltip\" {...this.labelTooltipProps}>\n <div slot=\"content\">{this.labelTooltip}</div>\n </sd-tooltip>\n )}\n </label>\n );\n }\n}\n"],"version":3}
@@ -0,0 +1,289 @@
1
+ import { p as proxyCustomElement, d as createEvent, h, t as transformTag } from './p-YLoygqPr.js';
2
+ import { B as BaseDropdownEvent, S as SelectKeyboardNavigation } from './p-Dt-KAeBx.js';
3
+ import { d as defineCustomElement$b } from './p-CdGD6AqM.js';
4
+ import { d as defineCustomElement$a } from './p-UZEmuyIR.js';
5
+ import { d as defineCustomElement$9 } from './p-CpRkV7pg.js';
6
+ import { d as defineCustomElement$8 } from './p-CVMprLsE.js';
7
+ import { d as defineCustomElement$7 } from './p-DnQF6htq.js';
8
+ import { d as defineCustomElement$6 } from './p-D54IEoI6.js';
9
+ import { d as defineCustomElement$5 } from './p-DbebUQwg.js';
10
+ import { d as defineCustomElement$4 } from './p-s4Mg_xSz.js';
11
+ import { d as defineCustomElement$3 } from './p-JF61vPAh.js';
12
+ import { d as defineCustomElement$2 } from './p-RhBqdixM.js';
13
+ import { d as defineCustomElement$1 } from './p-7xekTQRB.js';
14
+
15
+ const sdSelectCss = () => `sd-select{display:inline-flex;flex-flow:column nowrap;width:fit-content;height:fit-content}sd-select *:focus,sd-select *:focus-visible,sd-select *:focus-within{outline:none !important}sd-select .sd-select{width:100%}sd-select .sd-select .sd-select__trigger{padding:4px 28px 4px 12px;display:flex;width:100%;height:100%;align-items:center}sd-select .sd-select .sd-select__trigger .sd-select__value{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:20px;font-size:12px;font-weight:400;text-align:left}sd-select .sd-select .sd-select__trigger .sd-select__clear{margin:0 4px;width:8px;height:8px;background-color:transparent;outline:none;border:none}sd-select .sd-select .sd-select__arrow{position:absolute;top:8px;right:8px;width:12px;height:12px;color:#888888;transition:transform 0.3s ease;margin-left:8px}sd-select .sd-select .sd-select__arrow--open{transform:rotate(180deg)}`;
16
+
17
+ const SdSelect = /*@__PURE__*/ proxyCustomElement(class SdSelect extends BaseDropdownEvent {
18
+ constructor(registerHost) {
19
+ super(false);
20
+ if (registerHost !== false) {
21
+ this.__registerHost();
22
+ }
23
+ this.update = createEvent(this, "sdUpdate");
24
+ this.dropDownShow = createEvent(this, "sdDropDownShow");
25
+ }
26
+ get el() { return this; }
27
+ // props
28
+ value = null;
29
+ options = [];
30
+ placeholder = '선택';
31
+ optionPlaceholder = '옵션이 없습니다.';
32
+ width = '200px';
33
+ dropdownHeight = '260px';
34
+ autoFocus = false;
35
+ disabled = false;
36
+ clearable = false;
37
+ searchable = false;
38
+ // props - label
39
+ label = '';
40
+ insideLabel = false;
41
+ useLabelRequired = false;
42
+ labelTooltip = '';
43
+ labelTooltipProps = null;
44
+ // props - form
45
+ name;
46
+ rules = [];
47
+ error = false;
48
+ // props - custom slots
49
+ optionRenderer;
50
+ // states
51
+ isOpen = false;
52
+ itemIndex = -1;
53
+ isScrolled = false;
54
+ // events
55
+ update;
56
+ dropDownShow;
57
+ selectRef;
58
+ triggerRef;
59
+ formField;
60
+ filteredOptions = this.options;
61
+ dropDownWidth = this.width;
62
+ async sdOpen() {
63
+ this.isOpen = true;
64
+ }
65
+ async sdValidate() {
66
+ this.formField?.sdValidate();
67
+ }
68
+ async sdReset() {
69
+ this.formField?.sdReset();
70
+ }
71
+ async sdResetValidate() {
72
+ this.formField?.sdResetValidation();
73
+ }
74
+ async sdFocus() {
75
+ this.formField?.sdFocus();
76
+ }
77
+ async valueChanged() {
78
+ const selectedOption = this.getSelectedOption();
79
+ this.update?.emit({ value: selectedOption?.value || null, option: selectedOption || null });
80
+ }
81
+ async isOpenChanged() {
82
+ // Base class의 이벤트 관리 호출 - 다른 select와의 이벤트 충돌 방지
83
+ this.onDropdownToggle(this.isOpen);
84
+ this.dropDownShow?.emit({ isOpen: this.isOpen });
85
+ if (this.isOpen === false) {
86
+ await this.formField?.sdValidate();
87
+ }
88
+ }
89
+ componentWillLoad() {
90
+ this.initializeEvent(); // global dropdown Manager에 등록 + 이벤트 핸들러 초기화
91
+ }
92
+ componentDidLoad() {
93
+ if (this.autoFocus) {
94
+ this.selectRef?.focus();
95
+ }
96
+ }
97
+ // render 이후 label을 제외한 trigger의 너비를 기준으로 dropdown 너비 설정
98
+ componentDidRender() {
99
+ const trigger = this.triggerRef;
100
+ const rect = trigger?.getBoundingClientRect();
101
+ this.dropDownWidth = rect?.width ? `${rect.width}px` : this.width;
102
+ }
103
+ disconnectedCallback() {
104
+ this.cleanupEvent(); // global dropdown Manager에서 제거 + 이벤트 정리
105
+ }
106
+ handleDocumentClick(event) {
107
+ if (!this.selectRef?.contains(event.target)) {
108
+ this.isOpen = false;
109
+ }
110
+ }
111
+ handleDocumentKeydown(keyboardEvent) {
112
+ keyboardEvent.stopPropagation();
113
+ const targetKey = ['ArrowDown', 'ArrowUp', 'Enter', 'Escape'];
114
+ if (!targetKey.includes(keyboardEvent.key))
115
+ return;
116
+ keyboardEvent.preventDefault();
117
+ switch (keyboardEvent.key) {
118
+ case 'ArrowDown':
119
+ case 'ArrowUp':
120
+ const keyboardNavigation = new SelectKeyboardNavigation(this.searchable, this.filteredOptions);
121
+ const nextIndex = keyboardNavigation.getNextIndex(this.itemIndex, keyboardEvent.key);
122
+ this.itemIndex = nextIndex;
123
+ break;
124
+ case 'Enter':
125
+ const selectedOption = this.filteredOptions[this.itemIndex];
126
+ if (selectedOption && !selectedOption.disabled) {
127
+ this.value = selectedOption.value;
128
+ this.isOpen = false;
129
+ }
130
+ break;
131
+ case 'Escape':
132
+ this.isOpen = false;
133
+ break;
134
+ }
135
+ }
136
+ getSelectedOption() {
137
+ return this.options.find(option => option.value === this.value);
138
+ }
139
+ closeDropdown() {
140
+ this.isOpen = false;
141
+ }
142
+ handleTriggerClick = (event) => {
143
+ event.stopPropagation();
144
+ if (!this.disabled) {
145
+ this.isOpen = !this.isOpen;
146
+ this.dropDownShow?.emit({ isOpen: this.isOpen });
147
+ }
148
+ };
149
+ handleOptionClick = (detail) => {
150
+ const { option, event } = detail;
151
+ event.stopPropagation();
152
+ if (!option.disabled) {
153
+ this.value = option.value;
154
+ this.isOpen = false;
155
+ }
156
+ };
157
+ render() {
158
+ return (h("sd-field", { key: '507736637b3b7acee4bfef07eac7175c5e196c86', label: this.label, name: this.name, rules: this.rules, error: this.error, disabled: this.disabled, useLabelRequired: this.useLabelRequired, insideLabel: this.insideLabel, labelTooltip: this.labelTooltip, labelTooltipProps: this.labelTooltipProps, ref: el => (this.formField = el), style: { '--field-width': this.width || '200px' } }, h("div", { key: 'd905202201f5977d04a929af507653900af3ee75', class: {
159
+ 'sd-select': true,
160
+ 'sd-select--disabled': this.disabled,
161
+ 'sd-select--error': !!this.error,
162
+ 'sd-select--label': !!this.label,
163
+ }, ref: el => (this.selectRef = el) }, this.renderTrigger(), this.renderDropdown())));
164
+ }
165
+ renderTrigger() {
166
+ const selectedOption = this.getSelectedOption();
167
+ return (h("div", { class: "sd-select__trigger", tabindex: this.disabled ? -1 : 0, onClick: this.handleTriggerClick, ref: el => (this.triggerRef = el) }, h("span", { class: "sd-select__value" }, selectedOption ? selectedOption.label : this.placeholder), this.clearable && selectedOption && !this.disabled && (h("sd-icon", { key: "clear-icon", name: "close", size: 10, color: "#888", class: "sd-select__clear", onClick: async (event) => {
168
+ event.stopPropagation();
169
+ this.value = null;
170
+ await this.formField?.sdValidate();
171
+ } })), h("sd-icon", { key: "arrow-icon", name: "arrowDown", color: "#888", class: { 'sd-select__arrow': true, 'sd-select__arrow--open': this.isOpen } })));
172
+ }
173
+ renderDropdown() {
174
+ if (this.isOpen === false)
175
+ return null;
176
+ const parentRef = (this.selectRef?.querySelector('.sd-select__trigger') ||
177
+ this.selectRef);
178
+ return (h("sd-portal", { open: this.isOpen, parentRef: parentRef, onSdClose: this.closeDropdown }, h("sd-select-dropdown", { value: this.value, options: this.options, itemIndex: this.itemIndex, width: this.dropDownWidth, dropdownHeight: this.dropdownHeight, searchable: this.searchable, optionPlaceholder: this.optionPlaceholder, onSdOptionClick: ({ detail }) => this.handleOptionClick(detail), onSdOptionFiltered: ({ detail }) => (this.filteredOptions = detail) })));
179
+ }
180
+ static get watchers() { return {
181
+ "value": ["valueChanged"],
182
+ "isOpen": ["isOpenChanged"]
183
+ }; }
184
+ static get style() { return sdSelectCss(); }
185
+ }, [768, "sd-select", {
186
+ "value": [1032],
187
+ "options": [1040],
188
+ "placeholder": [1],
189
+ "optionPlaceholder": [1, "option-placeholder"],
190
+ "width": [1],
191
+ "dropdownHeight": [1, "dropdown-height"],
192
+ "autoFocus": [4, "auto-focus"],
193
+ "disabled": [4],
194
+ "clearable": [4],
195
+ "searchable": [4],
196
+ "label": [1],
197
+ "insideLabel": [4, "inside-label"],
198
+ "useLabelRequired": [4, "use-label-required"],
199
+ "labelTooltip": [1, "label-tooltip"],
200
+ "labelTooltipProps": [16],
201
+ "name": [1],
202
+ "rules": [16],
203
+ "error": [4],
204
+ "optionRenderer": [16],
205
+ "isOpen": [32],
206
+ "itemIndex": [32],
207
+ "isScrolled": [32],
208
+ "sdOpen": [64],
209
+ "sdValidate": [64],
210
+ "sdReset": [64],
211
+ "sdResetValidate": [64],
212
+ "sdFocus": [64]
213
+ }, undefined, {
214
+ "value": ["valueChanged"],
215
+ "isOpen": ["isOpenChanged"]
216
+ }]);
217
+ function defineCustomElement() {
218
+ if (typeof customElements === "undefined") {
219
+ return;
220
+ }
221
+ const components = ["sd-select", "sd-button", "sd-checkbox", "sd-field", "sd-floating-portal", "sd-icon", "sd-input", "sd-portal", "sd-select-dropdown", "sd-select-option", "sd-select-search-input", "sd-tooltip"];
222
+ components.forEach(tagName => { switch (tagName) {
223
+ case "sd-select":
224
+ if (!customElements.get(transformTag(tagName))) {
225
+ customElements.define(transformTag(tagName), SdSelect);
226
+ }
227
+ break;
228
+ case "sd-button":
229
+ if (!customElements.get(transformTag(tagName))) {
230
+ defineCustomElement$b();
231
+ }
232
+ break;
233
+ case "sd-checkbox":
234
+ if (!customElements.get(transformTag(tagName))) {
235
+ defineCustomElement$a();
236
+ }
237
+ break;
238
+ case "sd-field":
239
+ if (!customElements.get(transformTag(tagName))) {
240
+ defineCustomElement$9();
241
+ }
242
+ break;
243
+ case "sd-floating-portal":
244
+ if (!customElements.get(transformTag(tagName))) {
245
+ defineCustomElement$8();
246
+ }
247
+ break;
248
+ case "sd-icon":
249
+ if (!customElements.get(transformTag(tagName))) {
250
+ defineCustomElement$7();
251
+ }
252
+ break;
253
+ case "sd-input":
254
+ if (!customElements.get(transformTag(tagName))) {
255
+ defineCustomElement$6();
256
+ }
257
+ break;
258
+ case "sd-portal":
259
+ if (!customElements.get(transformTag(tagName))) {
260
+ defineCustomElement$5();
261
+ }
262
+ break;
263
+ case "sd-select-dropdown":
264
+ if (!customElements.get(transformTag(tagName))) {
265
+ defineCustomElement$4();
266
+ }
267
+ break;
268
+ case "sd-select-option":
269
+ if (!customElements.get(transformTag(tagName))) {
270
+ defineCustomElement$3();
271
+ }
272
+ break;
273
+ case "sd-select-search-input":
274
+ if (!customElements.get(transformTag(tagName))) {
275
+ defineCustomElement$2();
276
+ }
277
+ break;
278
+ case "sd-tooltip":
279
+ if (!customElements.get(transformTag(tagName))) {
280
+ defineCustomElement$1();
281
+ }
282
+ break;
283
+ } });
284
+ }
285
+
286
+ export { SdSelect as S, defineCustomElement as d };
287
+ //# sourceMappingURL=p-D2movWkD.js.map
288
+
289
+ //# sourceMappingURL=p-D2movWkD.js.map
@@ -0,0 +1 @@
1
+ {"file":"p-D2movWkD.js","mappings":"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","names":["__stencil_proxyCustomElement"],"sources":["src/components/sd-select/sd-select.scss?tag=sd-select","src/components/sd-select/sd-select.tsx"],"sourcesContent":["@import 'variables';\n@import 'extend';\n\nsd-select {\n display: inline-flex;\n flex-flow: column nowrap;\n width: fit-content;\n height: fit-content;\n\n *:focus,\n *:focus-visible,\n *:focus-within {\n outline: none !important;\n }\n\n .sd-select {\n width: 100%;\n\n .sd-select__trigger {\n padding: 4px 28px 4px 12px;\n display: flex;\n width: 100%;\n height: 100%;\n align-items: center;\n\n .sd-select__value {\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n line-height: 20px;\n font-size: 12px;\n font-weight: 400;\n text-align: left;\n }\n\n .sd-select__clear {\n margin: 0 4px;\n width: 8px;\n height: 8px;\n background-color: transparent;\n outline: none;\n border: none;\n }\n }\n\n .sd-select__arrow {\n position: absolute;\n top: 8px;\n right: 8px;\n width: 12px;\n height: 12px;\n color: $grey_65;\n transition: transform 0.3s ease;\n margin-left: 8px;\n\n &--open {\n transform: rotate(180deg);\n }\n }\n }\n}\n","import {\n Component,\n Event,\n EventEmitter,\n Prop,\n State,\n h,\n Element,\n Watch,\n Method,\n} from '@stencil/core';\nimport { BaseDropdownEvent } from '../../utils/base-dropdown-event';\nimport { SelectKeyboardNavigation } from '../../utils/select-keyboard-navigation';\nimport { SdTooltipProps } from '../sd-tooltip/sd-tooltip';\nimport { Rule } from '../../components';\n\nexport interface SelectOption {\n value: string | number;\n label: string;\n disabled?: boolean;\n}\n\nexport type SelectGroupOptionType = 'group' | 'subgroup' | 'item' | 'all';\n\nexport interface SelectOptionGroup extends SelectOption {\n type: SelectGroupOptionType;\n parent?: string;\n}\n\nexport interface SelectStyleProps {\n containerStyle?: { [key: string]: string };\n triggerStyle?: { [key: string]: string };\n dropdownStyle?: { [key: string]: string };\n optionStyle?: { [key: string]: string };\n labelStyle?: { [key: string]: string };\n}\n\nexport interface SelectEvents {\n sdUpdate: {\n value: string | number | null;\n option: SelectOption | null;\n };\n dropDownShow: { isOpen: boolean };\n}\n\nexport interface SelectMultipleEvents extends Pick<SelectEvents, 'dropDownShow' | 'dropDownShow'> {\n sdUpdate: SelectOption[] | null;\n}\n\n@Component({\n tag: 'sd-select',\n styleUrl: 'sd-select.scss',\n})\nexport class SdSelect extends BaseDropdownEvent {\n @Element() el!: HTMLElement;\n\n // props\n @Prop({ mutable: true }) value: string | number | null = null;\n @Prop({ mutable: true }) options: SelectOption[] = [];\n @Prop() placeholder: string = '선택';\n @Prop() optionPlaceholder: string = '옵션이 없습니다.';\n @Prop() width: string = '200px';\n @Prop() dropdownHeight: string = '260px';\n @Prop() autoFocus: boolean = false;\n @Prop() disabled: boolean = false;\n @Prop() clearable: boolean = false;\n @Prop() searchable: boolean = false;\n\n // props - label\n @Prop() label: string = '';\n @Prop() insideLabel: boolean = false;\n @Prop() useLabelRequired: boolean = false;\n @Prop() labelTooltip: string = '';\n @Prop() labelTooltipProps: SdTooltipProps | null = null;\n\n // props - form\n @Prop() name?: string;\n @Prop() rules?: Rule[] = [];\n @Prop() error?: boolean = false;\n\n // props - custom slots\n @Prop() optionRenderer?: (option: SelectOption, index: number, isSelected: boolean) => any;\n\n // states\n @State() isOpen: boolean = false;\n @State() itemIndex: number = -1;\n @State() isScrolled: boolean = false;\n\n // events\n @Event({ eventName: 'sdUpdate' }) update?: EventEmitter<SelectEvents['sdUpdate']>;\n @Event({ eventName: 'sdDropDownShow' }) dropDownShow?: EventEmitter<SelectEvents['dropDownShow']>;\n\n private selectRef?: HTMLElement;\n private triggerRef?: HTMLElement;\n private formField?: HTMLSdFieldElement;\n private filteredOptions = this.options;\n private dropDownWidth: string = this.width;\n\n @Method()\n async sdOpen() {\n this.isOpen = true;\n }\n\n @Method()\n async sdValidate() {\n this.formField?.sdValidate();\n }\n\n @Method()\n async sdReset() {\n this.formField?.sdReset();\n }\n\n @Method()\n async sdResetValidate() {\n this.formField?.sdResetValidation();\n }\n\n @Method()\n async sdFocus() {\n this.formField?.sdFocus();\n }\n\n @Watch('value')\n async valueChanged() {\n const selectedOption = this.getSelectedOption();\n this.update?.emit({ value: selectedOption?.value || null, option: selectedOption || null });\n }\n\n @Watch('isOpen')\n async isOpenChanged() {\n // Base class의 이벤트 관리 호출 - 다른 select와의 이벤트 충돌 방지\n this.onDropdownToggle(this.isOpen);\n this.dropDownShow?.emit({ isOpen: this.isOpen });\n\n if (this.isOpen === false) {\n await this.formField?.sdValidate();\n }\n }\n\n componentWillLoad() {\n this.initializeEvent(); // global dropdown Manager에 등록 + 이벤트 핸들러 초기화\n }\n\n componentDidLoad() {\n if (this.autoFocus) {\n this.selectRef?.focus();\n }\n }\n\n // render 이후 label을 제외한 trigger의 너비를 기준으로 dropdown 너비 설정\n componentDidRender() {\n const trigger = this.triggerRef;\n const rect = trigger?.getBoundingClientRect();\n this.dropDownWidth = rect?.width ? `${rect.width}px` : this.width;\n }\n\n disconnectedCallback() {\n this.cleanupEvent(); // global dropdown Manager에서 제거 + 이벤트 정리\n }\n\n protected handleDocumentClick(event: Event): void {\n if (!this.selectRef?.contains(event.target as Node)) {\n this.isOpen = false;\n }\n }\n\n protected handleDocumentKeydown(keyboardEvent: KeyboardEvent): void {\n keyboardEvent.stopPropagation();\n const targetKey = ['ArrowDown', 'ArrowUp', 'Enter', 'Escape'];\n if (!targetKey.includes(keyboardEvent.key)) return;\n\n keyboardEvent.preventDefault();\n switch (keyboardEvent.key) {\n case 'ArrowDown':\n case 'ArrowUp':\n const keyboardNavigation = new SelectKeyboardNavigation(this.searchable, this.filteredOptions);\n const nextIndex = keyboardNavigation.getNextIndex(this.itemIndex, keyboardEvent.key);\n this.itemIndex = nextIndex;\n break;\n case 'Enter':\n const selectedOption = this.filteredOptions[this.itemIndex];\n if (selectedOption && !selectedOption.disabled) {\n this.value = selectedOption.value;\n this.isOpen = false;\n }\n break;\n case 'Escape':\n this.isOpen = false;\n break;\n }\n }\n\n private getSelectedOption(): SelectOption | undefined {\n return this.options.find(option => option.value === this.value);\n }\n\n closeDropdown() {\n this.isOpen = false;\n }\n\n handleTriggerClick = (event: Event) => {\n event.stopPropagation();\n\n if (!this.disabled) {\n this.isOpen = !this.isOpen;\n this.dropDownShow?.emit({ isOpen: this.isOpen });\n }\n };\n\n handleOptionClick = (detail: { option: SelectOption; event: Event }) => {\n const { option, event } = detail;\n event.stopPropagation();\n\n if (!option.disabled) {\n this.value = option.value;\n this.isOpen = false;\n }\n };\n\n render() {\n return (\n <sd-field\n label={this.label}\n name={this.name}\n rules={this.rules}\n error={this.error}\n disabled={this.disabled}\n useLabelRequired={this.useLabelRequired}\n insideLabel={this.insideLabel}\n labelTooltip={this.labelTooltip}\n labelTooltipProps={this.labelTooltipProps}\n ref={el => (this.formField = el)}\n style={{ '--field-width': this.width || '200px' }}\n >\n <div\n class={{\n 'sd-select': true,\n 'sd-select--disabled': this.disabled,\n 'sd-select--error': !!this.error,\n 'sd-select--label': !!this.label,\n }}\n ref={el => (this.selectRef = el)}\n >\n {this.renderTrigger()}\n {this.renderDropdown()}\n </div>\n </sd-field>\n );\n }\n\n private renderTrigger() {\n const selectedOption = this.getSelectedOption();\n return (\n <div\n class=\"sd-select__trigger\"\n tabindex={this.disabled ? -1 : 0}\n onClick={this.handleTriggerClick}\n ref={el => (this.triggerRef = el)}\n >\n <span class=\"sd-select__value\">{selectedOption ? selectedOption.label : this.placeholder}</span>\n {this.clearable && selectedOption && !this.disabled && (\n <sd-icon\n key=\"clear-icon\"\n name=\"close\"\n size={10}\n color=\"#888\"\n class=\"sd-select__clear\"\n onClick={async event => {\n event.stopPropagation();\n this.value = null;\n await this.formField?.sdValidate();\n }}\n ></sd-icon>\n )}\n\n <sd-icon\n key=\"arrow-icon\"\n name=\"arrowDown\"\n color=\"#888\"\n class={{ 'sd-select__arrow': true, 'sd-select__arrow--open': this.isOpen }}\n ></sd-icon>\n </div>\n );\n }\n\n private renderDropdown() {\n if (this.isOpen === false) return null;\n\n const parentRef = (this.selectRef?.querySelector('.sd-select__trigger') ||\n this.selectRef) as HTMLElement;\n\n return (\n <sd-portal open={this.isOpen} parentRef={parentRef} onSdClose={this.closeDropdown}>\n <sd-select-dropdown\n value={this.value}\n options={this.options}\n itemIndex={this.itemIndex}\n width={this.dropDownWidth}\n dropdownHeight={this.dropdownHeight}\n searchable={this.searchable}\n optionPlaceholder={this.optionPlaceholder}\n onSdOptionClick={({ detail }) => this.handleOptionClick(detail)}\n onSdOptionFiltered={({ detail }) => (this.filteredOptions = detail)}\n ></sd-select-dropdown>\n </sd-portal>\n );\n }\n}\n"],"version":3}