bromcom-ui-next 0.1.30 → 0.1.31

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 (546) hide show
  1. package/dist/bromcom-ui/bcm-accordion-group.entry.esm.js.map +1 -1
  2. package/dist/bromcom-ui/bcm-accordion.entry.esm.js.map +1 -1
  3. package/dist/bromcom-ui/bcm-alert.entry.esm.js.map +1 -1
  4. package/dist/bromcom-ui/bcm-avatar.entry.esm.js.map +1 -1
  5. package/dist/bromcom-ui/bcm-badge.entry.esm.js.map +1 -1
  6. package/dist/bromcom-ui/bcm-basic-badge.entry.esm.js.map +1 -1
  7. package/dist/bromcom-ui/bcm-button-group.entry.esm.js.map +1 -1
  8. package/dist/bromcom-ui/bcm-button.entry.esm.js.map +1 -0
  9. package/dist/bromcom-ui/bcm-checkbox.entry.esm.js.map +1 -1
  10. package/dist/bromcom-ui/bcm-chip.entry.esm.js.map +1 -1
  11. package/dist/bromcom-ui/bcm-divider.entry.esm.js.map +1 -1
  12. package/dist/bromcom-ui/bcm-drawer.entry.esm.js.map +1 -0
  13. package/dist/bromcom-ui/bcm-dropdown-item.entry.esm.js.map +1 -1
  14. package/dist/bromcom-ui/bcm-dropdown.entry.esm.js.map +1 -1
  15. package/dist/bromcom-ui/bcm-file-upload.entry.esm.js.map +1 -0
  16. package/dist/bromcom-ui/bcm-input.entry.esm.js.map +1 -1
  17. package/dist/bromcom-ui/bcm-linked.entry.esm.js.map +1 -0
  18. package/dist/bromcom-ui/bcm-modal.entry.esm.js.map +1 -0
  19. package/dist/bromcom-ui/bcm-pop-confirm.entry.esm.js.map +1 -0
  20. package/dist/bromcom-ui/bcm-popover.entry.esm.js.map +1 -0
  21. package/dist/bromcom-ui/bcm-radio-group.entry.esm.js.map +1 -1
  22. package/dist/bromcom-ui/bcm-radio.entry.esm.js.map +1 -1
  23. package/dist/bromcom-ui/bcm-segment.bcm-segmented-picker.entry.esm.js.map +1 -0
  24. package/dist/bromcom-ui/bcm-shortcut.entry.esm.js.map +1 -1
  25. package/dist/bromcom-ui/bcm-switch.entry.esm.js.map +1 -1
  26. package/dist/bromcom-ui/bcm-tab.entry.esm.js.map +1 -0
  27. package/dist/bromcom-ui/bcm-tabs.entry.esm.js.map +1 -1
  28. package/dist/bromcom-ui/bcm-text.entry.esm.js.map +1 -1
  29. package/dist/bromcom-ui/bcm-textarea.entry.esm.js.map +1 -1
  30. package/dist/bromcom-ui/bcm-tooltip.entry.esm.js.map +1 -0
  31. package/dist/bromcom-ui/bromcom-ui.esm.js +1 -1
  32. package/dist/bromcom-ui/global/global.js +33 -30
  33. package/dist/bromcom-ui/p-010219cf.entry.js +2 -0
  34. package/dist/bromcom-ui/p-010219cf.entry.js.map +1 -0
  35. package/dist/bromcom-ui/p-01a4e00b.entry.js +2 -0
  36. package/dist/bromcom-ui/p-01a4e00b.entry.js.map +1 -0
  37. package/dist/bromcom-ui/p-14c63d61.entry.js +2 -0
  38. package/dist/bromcom-ui/p-14c63d61.entry.js.map +1 -0
  39. package/dist/bromcom-ui/p-20a94dec.entry.js +2 -0
  40. package/dist/bromcom-ui/p-20a94dec.entry.js.map +1 -0
  41. package/dist/bromcom-ui/p-398620c2.entry.js +2 -0
  42. package/dist/bromcom-ui/p-398620c2.entry.js.map +1 -0
  43. package/dist/bromcom-ui/p-3b898f90.entry.js +2 -0
  44. package/dist/bromcom-ui/p-3b898f90.entry.js.map +1 -0
  45. package/dist/bromcom-ui/p-43c85c84.entry.js +2 -0
  46. package/dist/bromcom-ui/p-43c85c84.entry.js.map +1 -0
  47. package/dist/bromcom-ui/p-4e6661a5.entry.js +2 -0
  48. package/dist/bromcom-ui/p-4e6661a5.entry.js.map +1 -0
  49. package/dist/bromcom-ui/p-52bb0cdc.entry.js +2 -0
  50. package/dist/bromcom-ui/p-52bb0cdc.entry.js.map +1 -0
  51. package/dist/bromcom-ui/p-61c1c1c8.entry.js +2 -0
  52. package/dist/bromcom-ui/p-61c1c1c8.entry.js.map +1 -0
  53. package/dist/bromcom-ui/p-82e4c5f2.entry.js +2 -0
  54. package/dist/bromcom-ui/p-82e4c5f2.entry.js.map +1 -0
  55. package/dist/bromcom-ui/p-86f85963.entry.js +2 -0
  56. package/dist/bromcom-ui/p-86f85963.entry.js.map +1 -0
  57. package/dist/bromcom-ui/p-9249c1d1.entry.js +2 -0
  58. package/dist/bromcom-ui/p-9249c1d1.entry.js.map +1 -0
  59. package/dist/bromcom-ui/p-B6Ppbs5O.js +3 -0
  60. package/dist/bromcom-ui/p-B6Ppbs5O.js.map +1 -0
  61. package/dist/bromcom-ui/p-DBDSgIvP.js +2 -0
  62. package/dist/bromcom-ui/p-DBDSgIvP.js.map +1 -0
  63. package/dist/bromcom-ui/p-DaE0ZLar.js +2 -0
  64. package/dist/bromcom-ui/p-DaE0ZLar.js.map +1 -0
  65. package/dist/bromcom-ui/p-a25d1cef.entry.js +2 -0
  66. package/dist/bromcom-ui/p-a25d1cef.entry.js.map +1 -0
  67. package/dist/bromcom-ui/p-a4cb2e79.entry.js +2 -0
  68. package/dist/bromcom-ui/p-a4cb2e79.entry.js.map +1 -0
  69. package/dist/bromcom-ui/p-a68925b4.entry.js +2 -0
  70. package/dist/bromcom-ui/p-a68925b4.entry.js.map +1 -0
  71. package/dist/bromcom-ui/p-a750186c.entry.js +2 -0
  72. package/dist/bromcom-ui/p-a750186c.entry.js.map +1 -0
  73. package/dist/bromcom-ui/p-ac768b56.entry.js +2 -0
  74. package/dist/bromcom-ui/p-ac768b56.entry.js.map +1 -0
  75. package/dist/bromcom-ui/p-b0b193e6.entry.js +2 -0
  76. package/dist/bromcom-ui/p-b0b193e6.entry.js.map +1 -0
  77. package/dist/bromcom-ui/p-bf4409ca.entry.js +2 -0
  78. package/dist/bromcom-ui/p-bf4409ca.entry.js.map +1 -0
  79. package/dist/bromcom-ui/p-c57fb29b.entry.js +2 -0
  80. package/dist/bromcom-ui/p-c57fb29b.entry.js.map +1 -0
  81. package/dist/bromcom-ui/{p-1507908f.entry.js → p-ccc310aa.entry.js} +2 -2
  82. package/dist/bromcom-ui/p-ccc310aa.entry.js.map +1 -0
  83. package/dist/bromcom-ui/p-d4ee962d.entry.js +2 -0
  84. package/dist/bromcom-ui/p-d4ee962d.entry.js.map +1 -0
  85. package/dist/bromcom-ui/p-e25a2f7a.entry.js +2 -0
  86. package/dist/bromcom-ui/p-e25a2f7a.entry.js.map +1 -0
  87. package/dist/bromcom-ui/p-e5b0b2ad.entry.js +2 -0
  88. package/dist/bromcom-ui/p-e5b0b2ad.entry.js.map +1 -0
  89. package/dist/bromcom-ui/p-e70d784d.entry.js +2 -0
  90. package/dist/bromcom-ui/p-e70d784d.entry.js.map +1 -0
  91. package/dist/bromcom-ui/p-e9fa3a22.entry.js +2 -0
  92. package/dist/bromcom-ui/p-e9fa3a22.entry.js.map +1 -0
  93. package/dist/bromcom-ui/p-ef281184.entry.js +2 -0
  94. package/dist/bromcom-ui/p-ef281184.entry.js.map +1 -0
  95. package/dist/bromcom-ui/{p-496014ca.entry.js → p-fb6f616c.entry.js} +2 -2
  96. package/dist/bromcom-ui/p-fb6f616c.entry.js.map +1 -0
  97. package/dist/bromcom-ui/p-fd31c70c.entry.js +2 -0
  98. package/dist/bromcom-ui/p-fd31c70c.entry.js.map +1 -0
  99. package/dist/bromcom-ui/p-nf_HKsGq.js +2 -0
  100. package/dist/bromcom-ui/{p-CUvT12BL.js.map → p-nf_HKsGq.js.map} +1 -1
  101. package/dist/cjs/base-choice-control-EmA4JRjR.js +54 -0
  102. package/dist/cjs/base-choice-control-EmA4JRjR.js.map +1 -0
  103. package/dist/cjs/bcm-accordion-group.cjs.entry.js +20 -18
  104. package/dist/cjs/bcm-accordion-group.entry.cjs.js.map +1 -1
  105. package/dist/cjs/bcm-accordion.cjs.entry.js +73 -56
  106. package/dist/cjs/bcm-accordion.entry.cjs.js.map +1 -1
  107. package/dist/cjs/bcm-alert.cjs.entry.js +21 -21
  108. package/dist/cjs/bcm-alert.entry.cjs.js.map +1 -1
  109. package/dist/cjs/bcm-avatar.cjs.entry.js +22 -12
  110. package/dist/cjs/bcm-avatar.entry.cjs.js.map +1 -1
  111. package/dist/cjs/bcm-badge.cjs.entry.js +114 -82
  112. package/dist/cjs/bcm-badge.entry.cjs.js.map +1 -1
  113. package/dist/cjs/bcm-basic-badge.cjs.entry.js +73 -59
  114. package/dist/cjs/bcm-basic-badge.entry.cjs.js.map +1 -1
  115. package/dist/cjs/bcm-button-group.cjs.entry.js +36 -24
  116. package/dist/cjs/bcm-button-group.entry.cjs.js.map +1 -1
  117. package/dist/cjs/bcm-button.cjs.entry.js +338 -0
  118. package/dist/cjs/bcm-button.entry.cjs.js.map +1 -0
  119. package/dist/cjs/bcm-checkbox.cjs.entry.js +284 -174
  120. package/dist/cjs/bcm-checkbox.entry.cjs.js.map +1 -1
  121. package/dist/cjs/bcm-chip.cjs.entry.js +38 -35
  122. package/dist/cjs/bcm-chip.entry.cjs.js.map +1 -1
  123. package/dist/cjs/bcm-divider.cjs.entry.js +55 -55
  124. package/dist/cjs/bcm-divider.entry.cjs.js.map +1 -1
  125. package/dist/cjs/bcm-drawer.cjs.entry.js +332 -0
  126. package/dist/cjs/bcm-drawer.entry.cjs.js.map +1 -0
  127. package/dist/cjs/bcm-dropdown-item.cjs.entry.js +36 -33
  128. package/dist/cjs/bcm-dropdown-item.entry.cjs.js.map +1 -1
  129. package/dist/cjs/bcm-dropdown.cjs.entry.js +18 -17
  130. package/dist/cjs/bcm-dropdown.entry.cjs.js.map +1 -1
  131. package/dist/cjs/bcm-file-upload.cjs.entry.js +552 -0
  132. package/dist/cjs/bcm-file-upload.entry.cjs.js.map +1 -0
  133. package/dist/cjs/bcm-input.cjs.entry.js +250 -158
  134. package/dist/cjs/bcm-input.entry.cjs.js.map +1 -1
  135. package/dist/cjs/bcm-linked.cjs.entry.js +452 -0
  136. package/dist/cjs/bcm-linked.entry.cjs.js.map +1 -0
  137. package/dist/cjs/bcm-modal.cjs.entry.js +360 -0
  138. package/dist/cjs/bcm-modal.entry.cjs.js.map +1 -0
  139. package/dist/cjs/bcm-pop-confirm.cjs.entry.js +381 -0
  140. package/dist/cjs/bcm-pop-confirm.entry.cjs.js.map +1 -0
  141. package/dist/cjs/bcm-popover.cjs.entry.js +451 -0
  142. package/dist/cjs/bcm-popover.entry.cjs.js.map +1 -0
  143. package/dist/cjs/bcm-radio-group.cjs.entry.js +103 -80
  144. package/dist/cjs/bcm-radio-group.entry.cjs.js.map +1 -1
  145. package/dist/cjs/bcm-radio.cjs.entry.js +239 -106
  146. package/dist/cjs/bcm-radio.entry.cjs.js.map +1 -1
  147. package/dist/cjs/bcm-segment.bcm-segmented-picker.entry.cjs.js.map +1 -0
  148. package/dist/cjs/bcm-segment_2.cjs.entry.js +335 -0
  149. package/dist/cjs/bcm-shortcut.cjs.entry.js +5 -4
  150. package/dist/cjs/bcm-shortcut.entry.cjs.js.map +1 -1
  151. package/dist/cjs/bcm-switch.cjs.entry.js +281 -148
  152. package/dist/cjs/bcm-switch.entry.cjs.js.map +1 -1
  153. package/dist/cjs/bcm-tab.cjs.entry.js +44 -0
  154. package/dist/cjs/bcm-tab.entry.cjs.js.map +1 -0
  155. package/dist/cjs/bcm-tabs.cjs.entry.js +191 -237
  156. package/dist/cjs/bcm-tabs.entry.cjs.js.map +1 -1
  157. package/dist/cjs/bcm-text.cjs.entry.js +86 -85
  158. package/dist/cjs/bcm-text.entry.cjs.js.map +1 -1
  159. package/dist/cjs/bcm-textarea.cjs.entry.js +224 -154
  160. package/dist/cjs/bcm-textarea.entry.cjs.js.map +1 -1
  161. package/dist/cjs/bcm-tooltip.cjs.entry.js +414 -0
  162. package/dist/cjs/bcm-tooltip.entry.cjs.js.map +1 -0
  163. package/dist/cjs/bromcom-ui.cjs.js +2 -2
  164. package/dist/cjs/floating-ui.dom-S9nP6zZt.js +1622 -0
  165. package/dist/{bromcom-ui/floating-ui.dom-ltNPqX34.js.map → cjs/floating-ui.dom-S9nP6zZt.js.map} +1 -1
  166. package/dist/cjs/{index-CmYzUr-k.js → index-1Qal-onT.js} +111 -33
  167. package/dist/cjs/index-1Qal-onT.js.map +1 -0
  168. package/dist/cjs/loader.cjs.js +2 -2
  169. package/dist/cjs/{validation-messages-BjfpSEWk.js → validation-messages-DieKlSG4.js} +6 -7
  170. package/dist/{esm/validation-messages-CUvT12BL.js.map → cjs/validation-messages-DieKlSG4.js.map} +1 -1
  171. package/dist/collection/collection-manifest.json +4 -5
  172. package/dist/collection/components/_shared/form/base-choice-control.js +90 -0
  173. package/dist/collection/components/_shared/form/base-choice-control.js.map +1 -0
  174. package/dist/collection/components/_shared/form/base-form-control.js +115 -0
  175. package/dist/collection/components/_shared/form/base-form-control.js.map +1 -0
  176. package/dist/collection/components/accordion/accordion.component.js +72 -55
  177. package/dist/collection/components/accordion/accordion.component.js.map +1 -1
  178. package/dist/collection/components/accordion/accordion.css +1 -1
  179. package/dist/collection/components/accordion-group/accordion-group.component.js +20 -18
  180. package/dist/collection/components/accordion-group/accordion-group.component.js.map +1 -1
  181. package/dist/collection/components/alert/alert.component.js +19 -21
  182. package/dist/collection/components/alert/alert.component.js.map +1 -1
  183. package/dist/collection/components/alert/alert.css +1 -1
  184. package/dist/collection/components/avatar/avatar.component.js +20 -12
  185. package/dist/collection/components/avatar/avatar.component.js.map +1 -1
  186. package/dist/collection/components/avatar/avatar.css +1 -1
  187. package/dist/collection/components/badge/badge.component.js +111 -81
  188. package/dist/collection/components/badge/badge.component.js.map +1 -1
  189. package/dist/collection/components/badge/badge.css +1 -1
  190. package/dist/collection/components/basic-badge/basic-badge.component.js +70 -58
  191. package/dist/collection/components/basic-badge/basic-badge.component.js.map +1 -1
  192. package/dist/collection/components/basic-badge/basic-badge.css +1 -1
  193. package/dist/collection/components/button/button.component.js +105 -84
  194. package/dist/collection/components/button/button.component.js.map +1 -1
  195. package/dist/collection/components/button/button.css +1 -1
  196. package/dist/collection/components/button-group/button-group.component.js +34 -23
  197. package/dist/collection/components/button-group/button-group.component.js.map +1 -1
  198. package/dist/collection/components/button-group/button-group.css +1 -1
  199. package/dist/collection/components/checkbox/checkbox.component.js +355 -236
  200. package/dist/collection/components/checkbox/checkbox.component.js.map +1 -1
  201. package/dist/collection/components/checkbox/checkbox.css +1 -1
  202. package/dist/collection/components/chip/chip.component.js +35 -34
  203. package/dist/collection/components/chip/chip.component.js.map +1 -1
  204. package/dist/collection/components/chip/chip.css +1 -1
  205. package/dist/collection/components/divider/divider.component.js +53 -55
  206. package/dist/collection/components/divider/divider.component.js.map +1 -1
  207. package/dist/collection/components/drawer/drawer.component.js +168 -144
  208. package/dist/collection/components/drawer/drawer.component.js.map +1 -1
  209. package/dist/collection/components/dropdown/dropdown.component.js +16 -16
  210. package/dist/collection/components/dropdown/dropdown.component.js.map +1 -1
  211. package/dist/collection/components/dropdown/dropdown.css +1 -1
  212. package/dist/collection/components/dropdown-item/dropdown-item.component.js +34 -32
  213. package/dist/collection/components/dropdown-item/dropdown-item.component.js.map +1 -1
  214. package/dist/collection/components/dropdown-item/dropdown-item.css +1 -1
  215. package/dist/collection/components/input/input.component.js +241 -155
  216. package/dist/collection/components/input/input.component.js.map +1 -1
  217. package/dist/collection/components/linked/linked.component.js +160 -138
  218. package/dist/collection/components/linked/linked.component.js.map +1 -1
  219. package/dist/collection/components/linked/linked.css +1 -1
  220. package/dist/collection/components/modal/modal.component.js +180 -156
  221. package/dist/collection/components/modal/modal.component.js.map +1 -1
  222. package/dist/collection/components/pop-confirm/pop-confirm.component.js +190 -159
  223. package/dist/collection/components/pop-confirm/pop-confirm.component.js.map +1 -1
  224. package/dist/collection/components/pop-confirm/pop-confirm.css +1 -1
  225. package/dist/collection/components/popover/popover.component.js +240 -212
  226. package/dist/collection/components/popover/popover.component.js.map +1 -1
  227. package/dist/collection/components/popover/popover.css +1 -1
  228. package/dist/collection/components/radio/radio.component.js +282 -106
  229. package/dist/collection/components/radio/radio.component.js.map +1 -1
  230. package/dist/collection/components/radio-group/radio-group.component.js +102 -80
  231. package/dist/collection/components/radio-group/radio-group.component.js.map +1 -1
  232. package/dist/collection/components/segmented-picker/segment.component.js +228 -0
  233. package/dist/collection/components/segmented-picker/segment.component.js.map +1 -0
  234. package/dist/collection/components/segmented-picker/segment.css +1 -0
  235. package/dist/collection/components/segmented-picker/segmented-picker.component.js +354 -139
  236. package/dist/collection/components/segmented-picker/segmented-picker.component.js.map +1 -1
  237. package/dist/collection/components/segmented-picker/segmented-picker.css +1 -1
  238. package/dist/collection/components/shortcut/shortcut.js +4 -5
  239. package/dist/collection/components/shortcut/shortcut.js.map +1 -1
  240. package/dist/collection/components/switch/switch.component.js +350 -280
  241. package/dist/collection/components/switch/switch.component.js.map +1 -1
  242. package/dist/collection/components/switch/switch.css +1 -1
  243. package/dist/collection/components/tabs/bcm-tab.css +1 -0
  244. package/dist/collection/components/tabs/bcm-tabs.css +1 -1
  245. package/dist/collection/components/tabs/tab.component.js +169 -0
  246. package/dist/collection/components/tabs/tab.component.js.map +1 -0
  247. package/dist/collection/components/tabs/tabs.component.js +221 -352
  248. package/dist/collection/components/tabs/tabs.component.js.map +1 -1
  249. package/dist/collection/components/text/text.component.js +84 -85
  250. package/dist/collection/components/text/text.component.js.map +1 -1
  251. package/dist/collection/components/text/text.css +1 -1
  252. package/dist/collection/components/textarea/textarea.component.js +216 -153
  253. package/dist/collection/components/textarea/textarea.component.js.map +1 -1
  254. package/dist/collection/components/tooltip/tooltip.component.js +164 -154
  255. package/dist/collection/components/tooltip/tooltip.component.js.map +1 -1
  256. package/dist/collection/components/upload/file-upload.component.js +905 -0
  257. package/dist/collection/components/upload/file-upload.component.js.map +1 -0
  258. package/dist/collection/components/upload/file-upload.css +1 -0
  259. package/dist/collection/global/global.js +33 -30
  260. package/dist/collection/utils/i18n.js +3 -4
  261. package/dist/collection/utils/i18n.js.map +1 -1
  262. package/dist/collection/utils/slot/check-slot-content.js +1 -2
  263. package/dist/collection/utils/slot/check-slot-content.js.map +1 -1
  264. package/dist/collection/utils/validation-messages.js +1 -1
  265. package/dist/collection/utils/validation-messages.js.map +1 -1
  266. package/dist/components/bcm-accordion-group.js +19 -17
  267. package/dist/components/bcm-accordion-group.js.map +1 -1
  268. package/dist/components/bcm-accordion.js +72 -55
  269. package/dist/components/bcm-accordion.js.map +1 -1
  270. package/dist/components/bcm-alert.js +1 -114
  271. package/dist/components/bcm-alert.js.map +1 -1
  272. package/dist/components/bcm-avatar.js +22 -12
  273. package/dist/components/bcm-avatar.js.map +1 -1
  274. package/dist/components/bcm-badge.js +1 -1
  275. package/dist/components/bcm-basic-badge.js +72 -58
  276. package/dist/components/bcm-basic-badge.js.map +1 -1
  277. package/dist/components/bcm-button-group.js +35 -23
  278. package/dist/components/bcm-button-group.js.map +1 -1
  279. package/dist/components/bcm-button.js +1 -1
  280. package/dist/components/bcm-checkbox.js +296 -184
  281. package/dist/components/bcm-checkbox.js.map +1 -1
  282. package/dist/components/bcm-chip.js +37 -34
  283. package/dist/components/bcm-chip.js.map +1 -1
  284. package/dist/components/bcm-divider.js +54 -54
  285. package/dist/components/bcm-divider.js.map +1 -1
  286. package/dist/components/bcm-drawer.js +169 -144
  287. package/dist/components/bcm-drawer.js.map +1 -1
  288. package/dist/components/bcm-dropdown-item.js +35 -32
  289. package/dist/components/bcm-dropdown-item.js.map +1 -1
  290. package/dist/components/bcm-dropdown.js +19 -18
  291. package/dist/components/bcm-dropdown.js.map +1 -1
  292. package/dist/components/{bcm-tabs-content.d.ts → bcm-file-upload.d.ts} +4 -4
  293. package/dist/components/bcm-file-upload.js +593 -0
  294. package/dist/components/bcm-file-upload.js.map +1 -0
  295. package/dist/components/bcm-input.js +244 -158
  296. package/dist/components/bcm-input.js.map +1 -1
  297. package/dist/components/bcm-linked.js +1 -1
  298. package/dist/components/bcm-modal.js +181 -156
  299. package/dist/components/bcm-modal.js.map +1 -1
  300. package/dist/components/bcm-pop-confirm.js +192 -160
  301. package/dist/components/bcm-pop-confirm.js.map +1 -1
  302. package/dist/components/bcm-popover.js +242 -213
  303. package/dist/components/bcm-popover.js.map +1 -1
  304. package/dist/components/bcm-radio-group.js +102 -79
  305. package/dist/components/bcm-radio-group.js.map +1 -1
  306. package/dist/components/bcm-radio.js +241 -108
  307. package/dist/components/bcm-radio.js.map +1 -1
  308. package/dist/components/{bcm-tabs-list.d.ts → bcm-segment.d.ts} +4 -4
  309. package/dist/components/bcm-segment.js +110 -0
  310. package/dist/components/bcm-segment.js.map +1 -0
  311. package/dist/components/bcm-segmented-picker.js +234 -115
  312. package/dist/components/bcm-segmented-picker.js.map +1 -1
  313. package/dist/components/bcm-shortcut.js +4 -3
  314. package/dist/components/bcm-shortcut.js.map +1 -1
  315. package/dist/components/bcm-switch.js +292 -156
  316. package/dist/components/bcm-switch.js.map +1 -1
  317. package/dist/components/{bcm-tabs-trigger.d.ts → bcm-tab.d.ts} +4 -4
  318. package/dist/components/bcm-tab.js +71 -0
  319. package/dist/components/bcm-tab.js.map +1 -0
  320. package/dist/components/bcm-tabs.js +196 -247
  321. package/dist/components/bcm-tabs.js.map +1 -1
  322. package/dist/components/bcm-text.js +85 -84
  323. package/dist/components/bcm-text.js.map +1 -1
  324. package/dist/components/bcm-textarea.js +218 -154
  325. package/dist/components/bcm-textarea.js.map +1 -1
  326. package/dist/components/bcm-tooltip.js +164 -153
  327. package/dist/components/bcm-tooltip.js.map +1 -1
  328. package/dist/components/index.js +105 -32
  329. package/dist/components/index.js.map +1 -1
  330. package/dist/components/p-5_TgtzQU.js +119 -0
  331. package/dist/components/p-5_TgtzQU.js.map +1 -0
  332. package/dist/components/p-RlBWOSgL.js +179 -0
  333. package/dist/components/p-RlBWOSgL.js.map +1 -0
  334. package/dist/components/p-SERXqWcS.js +51 -0
  335. package/dist/components/p-SERXqWcS.js.map +1 -0
  336. package/dist/components/{p-CUvT12BL.js → p-nf_HKsGq.js} +6 -7
  337. package/dist/components/p-nf_HKsGq.js.map +1 -0
  338. package/dist/components/{p-CsIBm0J5.js → p-xQIzBLsS.js} +108 -85
  339. package/dist/components/p-xQIzBLsS.js.map +1 -0
  340. package/dist/components/{p-6VLsKZvR.js → p-z9ESseGb.js} +163 -140
  341. package/dist/components/p-z9ESseGb.js.map +1 -0
  342. package/dist/esm/base-choice-control-CKR8UdZ6.js +52 -0
  343. package/dist/esm/base-choice-control-CKR8UdZ6.js.map +1 -0
  344. package/dist/esm/bcm-accordion-group.entry.js +20 -18
  345. package/dist/esm/bcm-accordion-group.entry.js.map +1 -1
  346. package/dist/esm/bcm-accordion.entry.js +73 -56
  347. package/dist/esm/bcm-accordion.entry.js.map +1 -1
  348. package/dist/esm/bcm-alert.entry.js +21 -21
  349. package/dist/esm/bcm-alert.entry.js.map +1 -1
  350. package/dist/esm/bcm-avatar.entry.js +22 -12
  351. package/dist/esm/bcm-avatar.entry.js.map +1 -1
  352. package/dist/esm/bcm-badge.entry.js +114 -82
  353. package/dist/esm/bcm-badge.entry.js.map +1 -1
  354. package/dist/esm/bcm-basic-badge.entry.js +73 -59
  355. package/dist/esm/bcm-basic-badge.entry.js.map +1 -1
  356. package/dist/esm/bcm-button-group.entry.js +36 -24
  357. package/dist/esm/bcm-button-group.entry.js.map +1 -1
  358. package/dist/esm/bcm-button.entry.js +336 -0
  359. package/dist/esm/bcm-button.entry.js.map +1 -0
  360. package/dist/esm/bcm-checkbox.entry.js +284 -174
  361. package/dist/esm/bcm-checkbox.entry.js.map +1 -1
  362. package/dist/esm/bcm-chip.entry.js +38 -35
  363. package/dist/esm/bcm-chip.entry.js.map +1 -1
  364. package/dist/esm/bcm-divider.entry.js +55 -55
  365. package/dist/esm/bcm-divider.entry.js.map +1 -1
  366. package/dist/esm/bcm-drawer.entry.js +330 -0
  367. package/dist/esm/bcm-drawer.entry.js.map +1 -0
  368. package/dist/esm/bcm-dropdown-item.entry.js +36 -33
  369. package/dist/esm/bcm-dropdown-item.entry.js.map +1 -1
  370. package/dist/esm/bcm-dropdown.entry.js +18 -17
  371. package/dist/esm/bcm-dropdown.entry.js.map +1 -1
  372. package/dist/esm/bcm-file-upload.entry.js +550 -0
  373. package/dist/esm/bcm-file-upload.entry.js.map +1 -0
  374. package/dist/esm/bcm-input.entry.js +250 -158
  375. package/dist/esm/bcm-input.entry.js.map +1 -1
  376. package/dist/esm/bcm-linked.entry.js +450 -0
  377. package/dist/esm/bcm-linked.entry.js.map +1 -0
  378. package/dist/esm/bcm-modal.entry.js +358 -0
  379. package/dist/esm/bcm-modal.entry.js.map +1 -0
  380. package/dist/esm/bcm-pop-confirm.entry.js +379 -0
  381. package/dist/esm/bcm-pop-confirm.entry.js.map +1 -0
  382. package/dist/esm/bcm-popover.entry.js +449 -0
  383. package/dist/esm/bcm-popover.entry.js.map +1 -0
  384. package/dist/esm/bcm-radio-group.entry.js +103 -80
  385. package/dist/esm/bcm-radio-group.entry.js.map +1 -1
  386. package/dist/esm/bcm-radio.entry.js +239 -106
  387. package/dist/esm/bcm-radio.entry.js.map +1 -1
  388. package/dist/esm/bcm-segment.bcm-segmented-picker.entry.js.map +1 -0
  389. package/dist/esm/bcm-segment_2.entry.js +332 -0
  390. package/dist/esm/bcm-shortcut.entry.js +5 -4
  391. package/dist/esm/bcm-shortcut.entry.js.map +1 -1
  392. package/dist/esm/bcm-switch.entry.js +281 -148
  393. package/dist/esm/bcm-switch.entry.js.map +1 -1
  394. package/dist/esm/bcm-tab.entry.js +42 -0
  395. package/dist/esm/bcm-tab.entry.js.map +1 -0
  396. package/dist/esm/bcm-tabs.entry.js +191 -237
  397. package/dist/esm/bcm-tabs.entry.js.map +1 -1
  398. package/dist/esm/bcm-text.entry.js +86 -85
  399. package/dist/esm/bcm-text.entry.js.map +1 -1
  400. package/dist/esm/bcm-textarea.entry.js +224 -154
  401. package/dist/esm/bcm-textarea.entry.js.map +1 -1
  402. package/dist/esm/bcm-tooltip.entry.js +412 -0
  403. package/dist/esm/bcm-tooltip.entry.js.map +1 -0
  404. package/dist/esm/bromcom-ui.js +3 -3
  405. package/dist/esm/floating-ui.dom-DBDSgIvP.js +1615 -0
  406. package/dist/esm/floating-ui.dom-DBDSgIvP.js.map +1 -0
  407. package/dist/esm/{index-CRwAh9Np.js → index-B6Ppbs5O.js} +111 -34
  408. package/dist/esm/index-B6Ppbs5O.js.map +1 -0
  409. package/dist/esm/loader.js +3 -3
  410. package/dist/esm/{validation-messages-CUvT12BL.js → validation-messages-nf_HKsGq.js} +6 -7
  411. package/dist/{cjs/validation-messages-BjfpSEWk.js.map → esm/validation-messages-nf_HKsGq.js.map} +1 -1
  412. package/dist/types/components/_shared/form/base-choice-control.d.ts +15 -0
  413. package/dist/types/components/_shared/form/base-form-control.d.ts +11 -0
  414. package/dist/types/components/checkbox/checkbox.component.d.ts +89 -71
  415. package/dist/types/components/input/input.component.d.ts +5 -0
  416. package/dist/types/components/radio/radio.component.d.ts +21 -0
  417. package/dist/types/components/segmented-picker/segment.component.d.ts +42 -0
  418. package/dist/types/components/segmented-picker/segmented-picker.component.d.ts +91 -24
  419. package/dist/types/components/switch/switch.component.d.ts +83 -43
  420. package/dist/types/components/tabs/tab.component.d.ts +33 -0
  421. package/dist/types/components/tabs/tabs.component.d.ts +51 -64
  422. package/dist/types/components/textarea/textarea.component.d.ts +5 -0
  423. package/dist/types/components/upload/file-upload.component.d.ts +107 -0
  424. package/dist/types/components.d.ts +830 -382
  425. package/package.json +2 -2
  426. package/dist/bromcom-ui/_commonjsHelpers-CvGrISen.js.map +0 -1
  427. package/dist/bromcom-ui/bcm-button.bcm-drawer.bcm-linked.bcm-modal.bcm-pop-confirm.bcm-popover.bcm-tooltip.entry.esm.js.map +0 -1
  428. package/dist/bromcom-ui/bcm-segmented-picker-option.entry.esm.js.map +0 -1
  429. package/dist/bromcom-ui/bcm-segmented-picker.entry.esm.js.map +0 -1
  430. package/dist/bromcom-ui/bcm-tabs-content.entry.esm.js.map +0 -1
  431. package/dist/bromcom-ui/bcm-tabs-list.entry.esm.js.map +0 -1
  432. package/dist/bromcom-ui/bcm-tabs-trigger.entry.esm.js.map +0 -1
  433. package/dist/bromcom-ui/generate-id-Crb5QsB-.js.map +0 -1
  434. package/dist/bromcom-ui/index-40rmUZjU.js.map +0 -1
  435. package/dist/bromcom-ui/index-BCaJmHBB.js.map +0 -1
  436. package/dist/bromcom-ui/p-0c7c6896.entry.js +0 -2
  437. package/dist/bromcom-ui/p-0c7c6896.entry.js.map +0 -1
  438. package/dist/bromcom-ui/p-11d0e649.entry.js +0 -2
  439. package/dist/bromcom-ui/p-11d0e649.entry.js.map +0 -1
  440. package/dist/bromcom-ui/p-12f38632.entry.js +0 -2
  441. package/dist/bromcom-ui/p-12f38632.entry.js.map +0 -1
  442. package/dist/bromcom-ui/p-13cbd1f5.entry.js +0 -2
  443. package/dist/bromcom-ui/p-13cbd1f5.entry.js.map +0 -1
  444. package/dist/bromcom-ui/p-1507908f.entry.js.map +0 -1
  445. package/dist/bromcom-ui/p-1ce9913f.entry.js +0 -2
  446. package/dist/bromcom-ui/p-1ce9913f.entry.js.map +0 -1
  447. package/dist/bromcom-ui/p-206d767e.entry.js +0 -2
  448. package/dist/bromcom-ui/p-206d767e.entry.js.map +0 -1
  449. package/dist/bromcom-ui/p-3cf7a7f4.entry.js +0 -2
  450. package/dist/bromcom-ui/p-3cf7a7f4.entry.js.map +0 -1
  451. package/dist/bromcom-ui/p-4505feba.entry.js +0 -2
  452. package/dist/bromcom-ui/p-4505feba.entry.js.map +0 -1
  453. package/dist/bromcom-ui/p-496014ca.entry.js.map +0 -1
  454. package/dist/bromcom-ui/p-4a932cd3.entry.js +0 -2
  455. package/dist/bromcom-ui/p-4a932cd3.entry.js.map +0 -1
  456. package/dist/bromcom-ui/p-4e554b8d.entry.js +0 -2
  457. package/dist/bromcom-ui/p-4e554b8d.entry.js.map +0 -1
  458. package/dist/bromcom-ui/p-57c4c4c4.entry.js +0 -2
  459. package/dist/bromcom-ui/p-57c4c4c4.entry.js.map +0 -1
  460. package/dist/bromcom-ui/p-61293ab2.entry.js +0 -2
  461. package/dist/bromcom-ui/p-61293ab2.entry.js.map +0 -1
  462. package/dist/bromcom-ui/p-61789456.entry.js +0 -2
  463. package/dist/bromcom-ui/p-61789456.entry.js.map +0 -1
  464. package/dist/bromcom-ui/p-65d0f188.entry.js +0 -2
  465. package/dist/bromcom-ui/p-65d0f188.entry.js.map +0 -1
  466. package/dist/bromcom-ui/p-83f707dc.entry.js +0 -2
  467. package/dist/bromcom-ui/p-83f707dc.entry.js.map +0 -1
  468. package/dist/bromcom-ui/p-8ba02e7e.entry.js +0 -2
  469. package/dist/bromcom-ui/p-8ba02e7e.entry.js.map +0 -1
  470. package/dist/bromcom-ui/p-9e9bf32e.entry.js +0 -2
  471. package/dist/bromcom-ui/p-9e9bf32e.entry.js.map +0 -1
  472. package/dist/bromcom-ui/p-CRwAh9Np.js +0 -3
  473. package/dist/bromcom-ui/p-CRwAh9Np.js.map +0 -1
  474. package/dist/bromcom-ui/p-CUvT12BL.js +0 -2
  475. package/dist/bromcom-ui/p-c87a6acf.entry.js +0 -2
  476. package/dist/bromcom-ui/p-c87a6acf.entry.js.map +0 -1
  477. package/dist/bromcom-ui/p-e0e235a8.entry.js +0 -2
  478. package/dist/bromcom-ui/p-e0e235a8.entry.js.map +0 -1
  479. package/dist/bromcom-ui/p-e1ce8b55.entry.js +0 -2
  480. package/dist/bromcom-ui/p-e1ce8b55.entry.js.map +0 -1
  481. package/dist/bromcom-ui/p-e4dddb0b.entry.js +0 -2
  482. package/dist/bromcom-ui/p-e4dddb0b.entry.js.map +0 -1
  483. package/dist/bromcom-ui/p-f9426924.entry.js +0 -2
  484. package/dist/bromcom-ui/p-f9426924.entry.js.map +0 -1
  485. package/dist/bromcom-ui/p-faa0e62c.entry.js +0 -2
  486. package/dist/bromcom-ui/p-faa0e62c.entry.js.map +0 -1
  487. package/dist/bromcom-ui/p-fcb4399f.entry.js +0 -2
  488. package/dist/bromcom-ui/p-fcb4399f.entry.js.map +0 -1
  489. package/dist/bromcom-ui/tv-SlGJ5EfR.js.map +0 -1
  490. package/dist/bromcom-ui/validation-messages-CUvT12BL.js.map +0 -1
  491. package/dist/cjs/bcm-button.bcm-drawer.bcm-linked.bcm-modal.bcm-pop-confirm.bcm-popover.bcm-tooltip.entry.cjs.js.map +0 -1
  492. package/dist/cjs/bcm-button_7.cjs.entry.js +0 -4131
  493. package/dist/cjs/bcm-segmented-picker-option.cjs.entry.js +0 -105
  494. package/dist/cjs/bcm-segmented-picker-option.entry.cjs.js.map +0 -1
  495. package/dist/cjs/bcm-segmented-picker.cjs.entry.js +0 -142
  496. package/dist/cjs/bcm-segmented-picker.entry.cjs.js.map +0 -1
  497. package/dist/cjs/bcm-tabs-content.cjs.entry.js +0 -18
  498. package/dist/cjs/bcm-tabs-content.entry.cjs.js.map +0 -1
  499. package/dist/cjs/bcm-tabs-list.cjs.entry.js +0 -82
  500. package/dist/cjs/bcm-tabs-list.entry.cjs.js.map +0 -1
  501. package/dist/cjs/bcm-tabs-trigger.cjs.entry.js +0 -120
  502. package/dist/cjs/bcm-tabs-trigger.entry.cjs.js.map +0 -1
  503. package/dist/cjs/index-CmYzUr-k.js.map +0 -1
  504. package/dist/collection/components/segmented-picker/segmented-picker-option.component.js +0 -253
  505. package/dist/collection/components/segmented-picker/segmented-picker-option.component.js.map +0 -1
  506. package/dist/collection/components/segmented-picker/segmented-picker-option.css +0 -1
  507. package/dist/collection/components/tabs/tabs-content.component.js +0 -46
  508. package/dist/collection/components/tabs/tabs-content.component.js.map +0 -1
  509. package/dist/collection/components/tabs/tabs-content.css +0 -1
  510. package/dist/collection/components/tabs/tabs-list.component.js +0 -133
  511. package/dist/collection/components/tabs/tabs-list.component.js.map +0 -1
  512. package/dist/collection/components/tabs/tabs-list.css +0 -1
  513. package/dist/collection/components/tabs/tabs-trigger.component.js +0 -267
  514. package/dist/collection/components/tabs/tabs-trigger.component.js.map +0 -1
  515. package/dist/collection/components/tabs/tabs-trigger.css +0 -1
  516. package/dist/components/bcm-segmented-picker-option.d.ts +0 -11
  517. package/dist/components/bcm-segmented-picker-option.js +0 -133
  518. package/dist/components/bcm-segmented-picker-option.js.map +0 -1
  519. package/dist/components/bcm-tabs-content.js +0 -41
  520. package/dist/components/bcm-tabs-content.js.map +0 -1
  521. package/dist/components/bcm-tabs-list.js +0 -106
  522. package/dist/components/bcm-tabs-list.js.map +0 -1
  523. package/dist/components/bcm-tabs-trigger.js +0 -148
  524. package/dist/components/bcm-tabs-trigger.js.map +0 -1
  525. package/dist/components/p-6VLsKZvR.js.map +0 -1
  526. package/dist/components/p-CUvT12BL.js.map +0 -1
  527. package/dist/components/p-CaemikSK.js +0 -147
  528. package/dist/components/p-CaemikSK.js.map +0 -1
  529. package/dist/components/p-CsIBm0J5.js.map +0 -1
  530. package/dist/esm/bcm-button.bcm-drawer.bcm-linked.bcm-modal.bcm-pop-confirm.bcm-popover.bcm-tooltip.entry.js.map +0 -1
  531. package/dist/esm/bcm-button_7.entry.js +0 -4123
  532. package/dist/esm/bcm-segmented-picker-option.entry.js +0 -103
  533. package/dist/esm/bcm-segmented-picker-option.entry.js.map +0 -1
  534. package/dist/esm/bcm-segmented-picker.entry.js +0 -140
  535. package/dist/esm/bcm-segmented-picker.entry.js.map +0 -1
  536. package/dist/esm/bcm-tabs-content.entry.js +0 -16
  537. package/dist/esm/bcm-tabs-content.entry.js.map +0 -1
  538. package/dist/esm/bcm-tabs-list.entry.js +0 -80
  539. package/dist/esm/bcm-tabs-list.entry.js.map +0 -1
  540. package/dist/esm/bcm-tabs-trigger.entry.js +0 -118
  541. package/dist/esm/bcm-tabs-trigger.entry.js.map +0 -1
  542. package/dist/esm/index-CRwAh9Np.js.map +0 -1
  543. package/dist/types/components/segmented-picker/segmented-picker-option.component.d.ts +0 -30
  544. package/dist/types/components/tabs/tabs-content.component.d.ts +0 -13
  545. package/dist/types/components/tabs/tabs-list.component.d.ts +0 -20
  546. package/dist/types/components/tabs/tabs-trigger.component.d.ts +0 -49
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bcm-drawer.entry.esm.js","sources":["src/components/drawer/drawer.css?tag=bcm-drawer&encapsulation=shadow","src/components/drawer/drawer.component.tsx"],"sourcesContent":[":host {\n display: contents;\n}\n\n/* Backdrop fade animation */\n[part='dialog']::backdrop {\n animation: backdrop-fade-in 200ms ease-out;\n}\n\n@keyframes backdrop-fade-in {\n from {\n opacity: 0;\n }\n to {\n opacity: 0.5;\n }\n}\n\n/* Simple slide animations - 20px movement */\n[part='drawer'] {\n transition: transform 200ms ease-out;\n}\n\n/* Left position animations */\n:host([position='left']) [part='drawer'] {\n transform: translateX(-20px);\n}\n\n:host([position='left'][open]) [part='drawer'] {\n transform: translateX(0);\n}\n\n/* Right position animations */\n:host([position='right']) [part='drawer'] {\n transform: translateX(20px);\n}\n\n:host([position='right'][open]) [part='drawer'] {\n transform: translateX(0);\n}\n\n/* Top position animations */\n:host([position='top']) [part='drawer'] {\n transform: translateY(-20px);\n}\n\n:host([position='top'][open]) [part='drawer'] {\n transform: translateY(0);\n}\n\n/* Bottom position animations */\n:host([position='bottom']) [part='drawer'] {\n transform: translateY(20px);\n}\n\n:host([position='bottom'][open]) [part='drawer'] {\n transform: translateY(0);\n}\n","import { Component, Prop, h, Element, Event, EventEmitter, Method, Watch, Listen, State } from '@stencil/core';\nimport { tv } from '@utils/tv';\nimport { DrawerPosition, DrawerSize } from './types';\n\n/**\n * @component BcmDrawer\n * @description A slide-in panel component built on the native HTML Dialog API.\n * Ideal for navigation menus, forms, and contextual information that slides in from any edge of the screen.\n *\n * @slot - Main content area of the drawer\n * @slot header - Custom header content (overrides headerText prop)\n * @slot helper - Custom helper text content (overrides helper-text prop)\n * @slot footer - Footer content for action buttons\n *\n * @part dialog - The native dialog element\n * @part container - The container wrapper for positioning\n * @part drawer - The main drawer panel\n * @part header - The header section\n * @part header-content - The content wrapper inside header\n * @part title - The title heading element\n * @part helper-text - The helper text paragraph\n * @part close-button - The close button in header\n * @part content - The main content area\n * @part footer - The footer section\n *\n * @example\n * ```html\n * <!-- Basic usage -->\n * <bcm-drawer open header-text=\"Menu\" position=\"left\">\n * <nav>\n * <a href=\"/home\">Home</a>\n * <a href=\"/about\">About</a>\n * </nav>\n * </bcm-drawer>\n *\n * <!-- Custom size and position -->\n * <bcm-drawer size=\"large\" position=\"right\">\n * <div slot=\"header\">Settings</div>\n * <form>...</form>\n * <div slot=\"footer\">\n * <button data-dismiss>Cancel</button>\n * <button>Save</button>\n * </div>\n * </bcm-drawer>\n *\n * <!-- Custom size with CSS units -->\n * <bcm-drawer size=\"600px\" position=\"bottom\">\n * <p>Custom height drawer</p>\n * </bcm-drawer>\n *\n * <!-- Programmatic usage -->\n * <bcm-drawer id=\"myDrawer\">Content</bcm-drawer>\n * <script>\n * document.getElementById('myDrawer').show();\n * </script>\n * ```\n */\n@Component({\n tag: 'bcm-drawer',\n styleUrl: 'drawer.css',\n shadow: true,\n})\nexport class BcmDrawer {\n @Element() host: HTMLBcmDrawerElement;\n\n private dialogRef?: HTMLDialogElement;\n\n /**\n * Controls whether the drawer is open or closed\n */\n @Prop({ mutable: true, reflect: true }) open: boolean = false;\n\n /**\n * The size of the drawer. Can be a preset value or a custom CSS size\n * - For left/right drawers:\n * - 'small': 320px\n * - 'medium': 480px\n * - 'large': 1064px\n * - For top/bottom drawers:\n * - 'small': 40vh\n * - 'medium': 60vh\n * - 'large': 90vh\n * - Custom values: Any valid CSS size (e.g., '600px', '50%', '30rem', '80vw')\n */\n @Prop() size: DrawerSize = 'medium';\n\n /**\n * The position where the drawer slides in from\n * - 'left': Slides from the left edge\n * - 'right': Slides from the right edge\n * - 'top': Slides from the top edge\n * - 'bottom': Slides from the bottom edge\n */\n @Prop({ reflect: true }) position: DrawerPosition = 'right';\n\n /**\n * Makes the drawer take full width (for left/right) or full height (for top/bottom)\n */\n @Prop({ attribute: 'full-width' }) fullWidth: boolean = false;\n\n /**\n * Makes the drawer take the full screen (100vw x 100vh)\n */\n @Prop({ attribute: 'full-screen' }) fullScreen: boolean = false;\n\n /**\n * Controls backdrop behavior\n * - true: Shows backdrop, drawer can be closed by clicking outside\n * - false: No backdrop\n * - 'static': Shows backdrop but prevents closing by clicking outside (triggers shake animation)\n */\n @Prop() backdrop: boolean | 'static' = true;\n\n /**\n * Text to display in the drawer header\n */\n @Prop() headerText?: string;\n\n /**\n * Helper text to display below the header title\n */\n @Prop({ attribute: 'helper-text' }) helperText?: string;\n\n /**\n * Hides the header section completely\n */\n @Prop({ attribute: 'no-header' }) noHeader: boolean = false;\n\n /**\n * Hides the footer section completely\n */\n @Prop({ attribute: 'no-footer' }) noFooter: boolean = false;\n\n /**\n * Allows closing the drawer by clicking on the backdrop\n */\n @Prop({ attribute: 'close-on-backdrop' }) closeOnBackdrop: boolean = true;\n\n /**\n * Allows closing the drawer by pressing the Escape key\n */\n @Prop({ attribute: 'close-on-escape' }) closeOnEscape: boolean = true;\n\n @State() shake: boolean = false;\n\n /**\n * Emitted after the drawer has opened\n */\n @Event() bcmOpen: EventEmitter<void>;\n\n /**\n * Emitted after the drawer has closed\n */\n @Event() bcmClose: EventEmitter<void>;\n\n /**\n * Emitted before the drawer opens. Can be cancelled by calling event.preventDefault()\n */\n @Event({ cancelable: true }) bcmBeforeOpen: EventEmitter<void>;\n\n /**\n * Emitted before the drawer closes. Can be cancelled by calling event.preventDefault()\n */\n @Event({ cancelable: true }) bcmBeforeClose: EventEmitter<void>;\n\n private drawerClass = tv({\n slots: {\n dialog:\n 'bcm-ui-element fixed inset-0 m-0 p-0 w-full max-w-full h-full max-h-full border-none bg-transparent backdrop:bg-color-default-dark backdrop:opacity-50',\n container: 'fixed inset-0 flex overflow-hidden',\n drawer: 'relative bg-color-base text-color-default shadow-2xl flex flex-col',\n header: 'flex justify-between items-start bg-color-base text-color-default border-color-default border-solid border-0 py-3 px-4',\n headerContent: 'flex-1 min-w-0 flex items-center gap-2',\n title: 'font-semibold m-0 text-size-6 text-color-header',\n helperText: 'text-size-5 text-color-placeholder m-0',\n closeButton:\n 'text-size-5 font-medium text-color-default bg-transparent border-none p-0 h-6 w-6 rounded hover:bg-color-default-hover cursor-pointer active:bg-color-active transition-colors flex-shrink-0 outline-none focus-visible:ring',\n content: 'flex-grow overflow-y-auto p-4',\n footer: 'flex items-center justify-end gap-2 py-3 px-4',\n },\n variants: {\n position: {\n left: {\n container: 'justify-start',\n drawer: 'h-full',\n header: 'border-b',\n },\n right: {\n container: 'justify-end',\n drawer: 'h-full',\n header: 'border-b',\n },\n top: {\n container: 'items-start',\n drawer: 'w-full',\n header: 'border-b',\n },\n bottom: {\n container: 'items-end',\n drawer: 'w-full',\n header: 'border-t',\n },\n },\n fullScreen: {\n true: {\n drawer: 'w-screen h-screen max-w-none max-h-none',\n container: 'p-0',\n },\n },\n shake: {\n true: {\n drawer: 'animate-shake',\n },\n },\n noHeader: {\n true: {\n header: 'hidden',\n },\n },\n noFooter: {\n true: {\n footer: 'hidden',\n },\n },\n },\n });\n\n @Watch('open')\n handleOpenChange(isOpen: boolean) {\n if (isOpen) {\n const event = this.bcmBeforeOpen.emit();\n if (event.defaultPrevented) {\n this.open = false;\n return;\n }\n\n if (this.dialogRef) {\n if (!this.dialogRef.open) {\n this.dialogRef.showModal();\n }\n }\n\n this.bcmOpen.emit();\n } else {\n const event = this.bcmBeforeClose.emit();\n if (event.defaultPrevented) {\n this.open = true;\n return;\n }\n\n if (this.dialogRef && this.dialogRef.open) {\n this.dialogRef.close();\n }\n this.bcmClose.emit();\n }\n }\n\n @Listen('click', { capture: true })\n handleClick(event: MouseEvent) {\n const path = event.composedPath() as HTMLElement[];\n const dismissElement = path.find(el => el.hasAttribute?.('data-dismiss'));\n\n if (dismissElement) {\n this.hide();\n event.preventDefault();\n event.stopPropagation();\n }\n }\n\n\n /**\n * Programmatically opens the drawer\n */\n @Method()\n async show(): Promise<void> {\n this.open = true;\n }\n\n /**\n * Programmatically closes the drawer\n */\n @Method()\n async hide(): Promise<void> {\n this.open = false;\n }\n\n /**\n * Toggles the drawer open/closed state\n */\n @Method()\n async toggle(): Promise<void> {\n this.open = !this.open;\n }\n\n private shakeDrawer() {\n this.shake = true;\n setTimeout(() => {\n this.shake = false;\n }, 300);\n }\n\n private handleBackdropClick = (event: MouseEvent) => {\n const target = event.target as HTMLElement;\n // Check if click is on the container (backdrop area), not on drawer content\n if (target.getAttribute('part') === 'container') {\n if (this.backdrop === 'static') {\n this.shakeDrawer();\n } else if (this.closeOnBackdrop) {\n this.hide();\n }\n }\n };\n\n private handleDialogCancel = (event: Event) => {\n event.preventDefault();\n if (this.backdrop === 'static') {\n this.shakeDrawer();\n // Force dialog to stay open for static backdrop\n requestAnimationFrame(() => {\n if (this.dialogRef && !this.dialogRef.open && this.open) {\n this.dialogRef.showModal();\n }\n });\n } else if (this.closeOnEscape) {\n this.hide();\n }\n };\n\n private handleDrawerClick = (e: MouseEvent) => {\n e.stopPropagation();\n };\n\n componentDidLoad() {\n if (this.open && this.dialogRef) {\n this.dialogRef.showModal();\n }\n }\n\n disconnectedCallback() {\n if (this.dialogRef && this.open) {\n this.dialogRef.close();\n }\n }\n\n private getDrawerStyle() {\n const style: { [key: string]: string } = {};\n\n if (this.fullScreen) {\n style.width = '100vw';\n style.height = '100vh';\n style.maxWidth = 'none';\n style.maxHeight = 'none';\n return style;\n }\n\n if (this.fullWidth) {\n if (this.position === 'left' || this.position === 'right') {\n style.width = '100vw';\n } else {\n style.height = '100vh';\n }\n return style;\n }\n\n // Check if size is a custom value (contains px, %, rem, etc.)\n const isCustomSize = this.size && (this.size.includes('px') || this.size.includes('%') || this.size.includes('rem') || this.size.includes('em') || this.size.includes('vw') || this.size.includes('vh'));\n\n if (this.position === 'left' || this.position === 'right') {\n if (isCustomSize) {\n style.width = this.size;\n } else {\n switch (this.size) {\n case 'small':\n style.width = '320px';\n break;\n case 'medium':\n style.width = '480px';\n break;\n case 'large':\n style.width = '1064px';\n break;\n }\n }\n } else {\n if (isCustomSize) {\n style.height = this.size;\n } else {\n switch (this.size) {\n case 'small':\n style.height = '40vh';\n break;\n case 'medium':\n style.height = '60vh';\n break;\n case 'large':\n style.height = '90vh';\n break;\n }\n }\n }\n\n return style;\n }\n\n render() {\n const { dialog, container, drawer, header, headerContent, title, helperText, closeButton, content, footer } = this.drawerClass({\n position: this.position,\n fullScreen: this.fullScreen,\n shake: this.shake,\n noHeader: this.noHeader,\n noFooter: this.noFooter,\n });\n\n return (\n <dialog\n ref={el => (this.dialogRef = el)}\n part=\"dialog\"\n class={dialog()}\n onClick={this.handleBackdropClick}\n onCancel={this.handleDialogCancel}\n aria-labelledby=\"drawer-title\"\n aria-describedby={this.helperText ? 'drawer-helper' : undefined}\n aria-modal=\"true\"\n >\n <div part=\"container\" class={container()}>\n <div part=\"drawer\" class={drawer()} style={this.getDrawerStyle()} role=\"document\" onClick={this.handleDrawerClick}>\n {!this.noHeader && (\n <div part=\"header\" class={header()}>\n <div part=\"header-content\" class={headerContent()}>\n <h2 id=\"drawer-title\" part=\"title\" class={title()}>\n <slot name=\"header\">{this.headerText}</slot>\n </h2>\n {this.helperText && (\n <p id=\"drawer-helper\" part=\"helper-text\" class={helperText()}>\n <slot name=\"helper\">{this.helperText}</slot>\n </p>\n )}\n </div>\n <button part=\"close-button\" class={closeButton()} onClick={() => this.hide()} aria-label=\"Close drawer\" type=\"button\">\n <bcm-icon name=\"fa-solid fa-xmark\"></bcm-icon>\n </button>\n </div>\n )}\n\n <div part=\"content\" class={content()}>\n <slot />\n </div>\n\n {!this.noFooter && (\n <div part=\"footer\" class={footer()}>\n <slot name=\"footer\" />\n </div>\n )}\n </div>\n </div>\n </dialog>\n );\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"bcm-dropdown-item.entry.esm.js","sources":["src/components/dropdown-item/dropdown-item.css?tag=bcm-dropdown-item&encapsulation=shadow","src/components/dropdown-item/dropdown-item.component.tsx"],"sourcesContent":[":host {\n display: inline-block;\n width: 100%;\n}\n\n::slotted([slot='left-content']) {\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: 8px;\n}\n\n::slotted([slot='right-content']) {\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: 8px;\n}\n","import { Component, ComponentInterface, h, Prop, Event, EventEmitter, Element } from '@stencil/core';\nimport { tv } from '@utils/tv';\n\n@Component({\n tag: 'bcm-dropdown-item',\n styleUrl: 'dropdown-item.css',\n shadow: true,\n})\nexport class DropdownItem implements ComponentInterface {\n @Element() host: HTMLElement;\n @Prop() text: string;\n @Prop() icon: string;\n @Prop() rightIcons: string[];\n @Prop({ reflect: true }) selected: boolean = false;\n @Prop({ reflect: true }) error: boolean = false;\n @Prop({ reflect: true }) disabled: boolean = false;\n\n @Event({\n composed: false,\n bubbles: false,\n cancelable: true,\n eventName: 'bcmDropDownItemChange',\n })\n bcmDropDownItemChange: EventEmitter<any>;\n\n private handleClick() {\n this.selected = true;\n this.bcmDropDownItemChange.emit({\n element: this.host,\n selected: this.selected,\n });\n }\n\n private dropdownItemClass = tv(\n {\n base: 'dropdown-item bcm-ui-element bcm-ui-content-display flex flex-row gap-2 py-2 px-4 cursor-pointer text-color',\n variants: {\n selected: {\n true: 'bg-[var(--bcm-ui-color-background-base-active)] hover:bg-[var(--bcm-ui-color-background-base-active)]',\n false: 'hover:bg-[var(--bcm-ui-color-background-base-hover)]',\n },\n error: {\n true: 'bg-[var(--bcm-ui-color-background-palette-red-default)] hover:bg-[var(--bcm-ui-color-background-palette-red-default)]',\n false: '',\n },\n disabled: {\n true: '', // should be discuss with ux team\n false: '',\n },\n },\n defaultVariants: {\n selected: false,\n error: false,\n disabled: false,\n },\n },\n {\n twMerge: false,\n },\n );\n\n render() {\n return (\n <div\n aria-checked={this.selected}\n class={this.dropdownItemClass({\n selected: this.selected,\n error: this.error,\n })}\n onClick={() => this.handleClick()}\n >\n <slot name=\"left-content\">{this.icon && <bcm-icon icon-name={this.icon}></bcm-icon>}</slot>\n <div class=\"flex flex-row text-pretty w-full\">\n <slot>{this.text}</slot>\n </div>\n <slot name=\"right-content\">\n {this.rightIcons?.map(icon => (\n <bcm-icon icon-name={icon}></bcm-icon>\n ))}\n </slot>\n </div>\n );\n }\n}\n"],"names":[],"mappings":";;;AAAA,MAAM,eAAe,GAAG,86CAA86C;;MCQz7C,YAAY,GAAA,MAAA;AALzB,IAAA,WAAA,CAAA,OAAA,EAAA;;;AAU2B,QAAA,IAAQ,CAAA,QAAA,GAAY,KAAK;AACzB,QAAA,IAAK,CAAA,KAAA,GAAY,KAAK;AACtB,QAAA,IAAQ,CAAA,QAAA,GAAY,KAAK;AAkB1C,QAAA,IAAiB,CAAA,iBAAA,GAAG,EAAE,CAC5B;AACE,YAAA,IAAI,EAAE,6GAA6G;AACnH,YAAA,QAAQ,EAAE;AACR,gBAAA,QAAQ,EAAE;AACR,oBAAA,IAAI,EAAE,uGAAuG;AAC7G,oBAAA,KAAK,EAAE,sDAAsD;AAC9D,iBAAA;AACD,gBAAA,KAAK,EAAE;AACL,oBAAA,IAAI,EAAE,uHAAuH;AAC7H,oBAAA,KAAK,EAAE,EAAE;AACV,iBAAA;AACD,gBAAA,QAAQ,EAAE;oBACR,IAAI,EAAE,EAAE;AACR,oBAAA,KAAK,EAAE,EAAE;AACV,iBAAA;AACF,aAAA;AACD,YAAA,eAAe,EAAE;AACf,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,KAAK,EAAE,KAAK;AACZ,gBAAA,QAAQ,EAAE,KAAK;AAChB,aAAA;SACF,EACD;AACE,YAAA,OAAO,EAAE,KAAK;AACf,SAAA,CACF;AAwBF;IA1DS,WAAW,GAAA;AACjB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,QAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC;YAC9B,OAAO,EAAE,IAAI,CAAC,IAAI;YAClB,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACxB,SAAA,CAAC;;IA+BJ,MAAM,GAAA;;QACJ,QACE,CACgB,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,cAAA,EAAA,IAAI,CAAC,QAAQ,EAC3B,KAAK,EAAE,IAAI,CAAC,iBAAiB,CAAC;gBAC5B,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,KAAK,EAAE,IAAI,CAAC,KAAK;AAClB,aAAA,CAAC,EACF,OAAO,EAAE,MAAM,IAAI,CAAC,WAAW,EAAE,EAAA,EAEjC,CAAA,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAM,IAAI,EAAC,cAAc,EAAA,EAAE,IAAI,CAAC,IAAI,IAAI,CAAqB,CAAA,UAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,WAAA,EAAA,IAAI,CAAC,IAAI,GAAa,CAAQ,EAC3F,CAAK,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAC,kCAAkC,EAAA,EAC3C,CAAA,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,EAAO,IAAI,CAAC,IAAI,CAAQ,CACpB,EACN,CAAM,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,IAAI,EAAC,eAAe,EACvB,EAAA,CAAA,EAAA,GAAA,IAAI,CAAC,UAAU,MAAE,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAA,GAAG,CAAC,IAAI,KACxB,CAAA,CAAA,UAAA,EAAA,EAAA,WAAA,EAAqB,IAAI,EAAA,CAAa,CACvC,CAAC,CACG,CACH;;;;;;;;"}
1
+ {"version":3,"file":"bcm-dropdown-item.entry.esm.js","sources":["src/components/dropdown-item/dropdown-item.css?tag=bcm-dropdown-item&encapsulation=shadow","src/components/dropdown-item/dropdown-item.component.tsx"],"sourcesContent":[":host {\n display: inline-block;\n width: 100%;\n}\n\n::slotted([slot='left-content']) {\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: 8px;\n}\n\n::slotted([slot='right-content']) {\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: 8px;\n}\n","import { Component, ComponentInterface, h, Prop, Event, EventEmitter, Element } from '@stencil/core';\nimport { tv } from '@utils/tv';\n\n@Component({\n tag: 'bcm-dropdown-item',\n styleUrl: 'dropdown-item.css',\n shadow: true,\n})\nexport class DropdownItem implements ComponentInterface {\n @Element() host: HTMLElement;\n @Prop() text: string;\n @Prop() icon: string;\n @Prop() rightIcons: string[];\n @Prop({ reflect: true }) selected: boolean = false;\n @Prop({ reflect: true }) error: boolean = false;\n @Prop({ reflect: true }) disabled: boolean = false;\n\n @Event({\n composed: false,\n bubbles: false,\n cancelable: true,\n eventName: 'bcmDropDownItemChange',\n })\n bcmDropDownItemChange: EventEmitter<any>;\n\n private handleClick() {\n this.selected = true;\n this.bcmDropDownItemChange.emit({\n element: this.host,\n selected: this.selected,\n });\n }\n\n private dropdownItemClass = tv(\n {\n base: 'dropdown-item bcm-ui-element bcm-ui-content-display flex flex-row gap-2 py-2 px-4 cursor-pointer text-color',\n variants: {\n selected: {\n true: 'bg-[var(--bcm-ui-color-background-base-active)] hover:bg-[var(--bcm-ui-color-background-base-active)]',\n false: 'hover:bg-[var(--bcm-ui-color-background-base-hover)]',\n },\n error: {\n true: 'bg-[var(--bcm-ui-color-background-palette-red-default)] hover:bg-[var(--bcm-ui-color-background-palette-red-default)]',\n false: '',\n },\n disabled: {\n true: '', // should be discuss with ux team\n false: '',\n },\n },\n defaultVariants: {\n selected: false,\n error: false,\n disabled: false,\n },\n },\n {\n twMerge: false,\n },\n );\n\n render() {\n return (\n <div\n aria-checked={this.selected}\n class={this.dropdownItemClass({\n selected: this.selected,\n error: this.error,\n })}\n onClick={() => this.handleClick()}\n >\n <slot name=\"left-content\">{this.icon && <bcm-icon icon-name={this.icon}></bcm-icon>}</slot>\n <div class=\"flex flex-row text-pretty w-full\">\n <slot>{this.text}</slot>\n </div>\n <slot name=\"right-content\">\n {this.rightIcons?.map(icon => (\n <bcm-icon icon-name={icon}></bcm-icon>\n ))}\n </slot>\n </div>\n );\n }\n}\n"],"names":[],"mappings":";;;AAAA,MAAM,eAAe,GAAG,s5CAAs5C;;MCQj6C,YAAY,GAAA,MAAA;;;;;;AAEf,IAAA,IAAI;AACJ,IAAA,IAAI;AACJ,IAAA,UAAU;IACO,QAAQ,GAAY,KAAK;IACzB,KAAK,GAAY,KAAK;IACtB,QAAQ,GAAY,KAAK;AAQlD,IAAA,qBAAqB;IAEb,WAAW,GAAA;AACjB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,QAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC;YAC9B,OAAO,EAAE,IAAI,CAAC,IAAI;YAClB,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACxB,SAAA,CAAC;;IAGI,iBAAiB,GAAG,EAAE,CAC5B;AACE,QAAA,IAAI,EAAE,6GAA6G;AACnH,QAAA,QAAQ,EAAE;AACR,YAAA,QAAQ,EAAE;AACR,gBAAA,IAAI,EAAE,uGAAuG;AAC7G,gBAAA,KAAK,EAAE,sDAAsD;AAC9D,aAAA;AACD,YAAA,KAAK,EAAE;AACL,gBAAA,IAAI,EAAE,uHAAuH;AAC7H,gBAAA,KAAK,EAAE,EAAE;AACV,aAAA;AACD,YAAA,QAAQ,EAAE;gBACR,IAAI,EAAE,EAAE;AACR,gBAAA,KAAK,EAAE,EAAE;AACV,aAAA;AACF,SAAA;AACD,QAAA,eAAe,EAAE;AACf,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,QAAQ,EAAE,KAAK;AAChB,SAAA;KACF,EACD;AACE,QAAA,OAAO,EAAE,KAAK;AACf,KAAA,CACF;IAED,MAAM,GAAA;QACJ,QACE,CACgB,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,cAAA,EAAA,IAAI,CAAC,QAAQ,EAC3B,KAAK,EAAE,IAAI,CAAC,iBAAiB,CAAC;gBAC5B,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,KAAK,EAAE,IAAI,CAAC,KAAK;aAClB,CAAC,EACF,OAAO,EAAE,MAAM,IAAI,CAAC,WAAW,EAAE,EAAA,EAEjC,CAAA,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAM,IAAI,EAAC,cAAc,EAAA,EAAE,IAAI,CAAC,IAAI,IAAI,CAAqB,CAAA,UAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,WAAA,EAAA,IAAI,CAAC,IAAI,GAAa,CAAQ,EAC3F,CAAK,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAC,kCAAkC,EAAA,EAC3C,CAAA,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,EAAO,IAAI,CAAC,IAAI,CAAQ,CACpB,EACN,CAAM,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,IAAI,EAAC,eAAe,EAAA,EACvB,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,IAAI,KACxB,CAAA,CAAA,UAAA,EAAA,EAAA,WAAA,EAAqB,IAAI,EAAA,CAAa,CACvC,CAAC,CACG,CACH;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"bcm-dropdown.entry.esm.js","sources":["src/components/dropdown/dropdown.css?tag=bcm-dropdown&encapsulation=shadow","src/components/dropdown/dropdown.component.tsx"],"sourcesContent":["/* :host {\n --dropdown-box-min-weight: 32px;\n --dropdown-box-max-width: 384px;\n --dropdown-box-max-height: 384px;\n --dropdown-box-background-color: var(--bcm-ui-color-background-basic-panel);\n} */\n/* \n.scroll {\n height: 140px;\n width: 140px;\n overflow-y: auto;\n}\n\n.scroll:active::-webkit-scrollbar-thumb,\n.scroll:focus::-webkit-scrollbar-thumb,\n.scroll:hover::-webkit-scrollbar-thumb {\n visibility: visible;\n}\n.scroll::-webkit-scrollbar-thumb {\n background-color: darkgrey;\n visibility: hidden;\n}\n\n.scroll::-webkit-scrollbar {\n width: 8px;\n height: 8px;\n} */\n","import { Component, ComponentInterface, h, Prop, State, Element, Host, Event, EventEmitter, Listen } from '@stencil/core';\nimport { tv } from '@utils/tv';\n\n@Component({\n tag: 'bcm-dropdown',\n styleUrl: 'dropdown.css',\n shadow: true,\n})\nexport class Dropdown implements ComponentInterface {\n @Element() host: HTMLElement;\n\n @Prop() text?: string;\n\n @State() dropdownItems: HTMLBcmDropdownItemElement[] = [];\n\n @Event({\n composed: false,\n bubbles: false,\n cancelable: true,\n eventName: 'bcmDropdownChange',\n })\n bcmDropdownChange: EventEmitter<any>;\n\n @Listen('bcmDropDownItemChange', { capture: true })\n handleDropdownItemChange(event: CustomEvent) {\n const { element, selected } = event?.detail;\n\n this.dropdownItems?.forEach(item => {\n if (item != element) {\n item.selected = false;\n }\n });\n\n this.bcmDropdownChange.emit({\n element: element,\n selected,\n });\n }\n\n private dropdownClass = tv({\n base: 'dropdown flex flex-col items-center min-w-10 shadow-3 max-w-64 max-h-64 w-full bg-color-basic-panel rounded-lg py-1.5 overflow-y-auto',\n });\n\n private handleSlotChange = () => {\n this.dropdownItems = Array.from(this.host.querySelectorAll('bcm-dropdown-item'));\n\n if (this.dropdownItems.length === 0) {\n console.warn('No dropdown items found in dropdown component');\n }\n };\n\n render() {\n return (\n <Host>\n <bcm-linked trigger=\"click\" placement=\"bottom-start\">\n <bcm-button kind=\"outline\" slot=\"trigger\">\n <span part=\"text\">{this.text}</span>\n </bcm-button>\n <div part=\"dropdown-container\" class={this.dropdownClass()}>\n <slot onSlotchange={this.handleSlotChange}></slot>\n </div>\n </bcm-linked>\n </Host>\n );\n }\n}\n"],"names":[],"mappings":";;;AAAA,MAAM,WAAW,GAAG,2yBAA2yB;;MCQlzB,QAAQ,GAAA,MAAA;AALrB,IAAA,WAAA,CAAA,OAAA,EAAA;;;AAUW,QAAA,IAAa,CAAA,aAAA,GAAiC,EAAE;AA0BjD,QAAA,IAAa,CAAA,aAAA,GAAG,EAAE,CAAC;AACzB,YAAA,IAAI,EAAE,uIAAuI;AAC9I,SAAA,CAAC;AAEM,QAAA,IAAgB,CAAA,gBAAA,GAAG,MAAK;AAC9B,YAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,CAAC;YAEhF,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;AACnC,gBAAA,OAAO,CAAC,IAAI,CAAC,+CAA+C,CAAC;;AAEjE,SAAC;AAgBF;AAzCC,IAAA,wBAAwB,CAAC,KAAkB,EAAA;;QACzC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,KAAK,KAAA,IAAA,IAAL,KAAK,KAAA,MAAA,GAAA,MAAA,GAAL,KAAK,CAAE,MAAM;QAE3C,CAAA,EAAA,GAAA,IAAI,CAAC,aAAa,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,OAAO,CAAC,IAAI,IAAG;AACjC,YAAA,IAAI,IAAI,IAAI,OAAO,EAAE;AACnB,gBAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;;AAEzB,SAAC,CAAC;AAEF,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;AAC1B,YAAA,OAAO,EAAE,OAAO;YAChB,QAAQ;AACT,SAAA,CAAC;;IAeJ,MAAM,GAAA;QACJ,QACE,EAAC,IAAI,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,EACH,CAAA,CAAA,YAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAY,OAAO,EAAC,OAAO,EAAC,SAAS,EAAC,cAAc,EAAA,EAClD,CAAA,CAAA,YAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAY,IAAI,EAAC,SAAS,EAAC,IAAI,EAAC,SAAS,EAAA,EACvC,CAAM,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,IAAI,EAAC,MAAM,EAAA,EAAE,IAAI,CAAC,IAAI,CAAQ,CACzB,EACb,CAAK,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,IAAI,EAAC,oBAAoB,EAAC,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,EAAA,EACxD,CAAM,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,YAAY,EAAE,IAAI,CAAC,gBAAgB,GAAS,CAC9C,CACK,CACR;;;;;;;;"}
1
+ {"version":3,"file":"bcm-dropdown.entry.esm.js","sources":["src/components/dropdown/dropdown.css?tag=bcm-dropdown&encapsulation=shadow","src/components/dropdown/dropdown.component.tsx"],"sourcesContent":["/* :host {\n --dropdown-box-min-weight: 32px;\n --dropdown-box-max-width: 384px;\n --dropdown-box-max-height: 384px;\n --dropdown-box-background-color: var(--bcm-ui-color-background-basic-panel);\n} */\n/* \n.scroll {\n height: 140px;\n width: 140px;\n overflow-y: auto;\n}\n\n.scroll:active::-webkit-scrollbar-thumb,\n.scroll:focus::-webkit-scrollbar-thumb,\n.scroll:hover::-webkit-scrollbar-thumb {\n visibility: visible;\n}\n.scroll::-webkit-scrollbar-thumb {\n background-color: darkgrey;\n visibility: hidden;\n}\n\n.scroll::-webkit-scrollbar {\n width: 8px;\n height: 8px;\n} */\n","import { Component, ComponentInterface, h, Prop, State, Element, Host, Event, EventEmitter, Listen } from '@stencil/core';\nimport { tv } from '@utils/tv';\n\n@Component({\n tag: 'bcm-dropdown',\n styleUrl: 'dropdown.css',\n shadow: true,\n})\nexport class Dropdown implements ComponentInterface {\n @Element() host: HTMLElement;\n\n @Prop() text?: string;\n\n @State() dropdownItems: HTMLBcmDropdownItemElement[] = [];\n\n @Event({\n composed: false,\n bubbles: false,\n cancelable: true,\n eventName: 'bcmDropdownChange',\n })\n bcmDropdownChange: EventEmitter<any>;\n\n @Listen('bcmDropDownItemChange', { capture: true })\n handleDropdownItemChange(event: CustomEvent) {\n const { element, selected } = event?.detail;\n\n this.dropdownItems?.forEach(item => {\n if (item != element) {\n item.selected = false;\n }\n });\n\n this.bcmDropdownChange.emit({\n element: element,\n selected,\n });\n }\n\n private dropdownClass = tv({\n base: 'dropdown flex flex-col items-center min-w-10 shadow-3 max-w-64 max-h-64 w-full bg-color-basic-panel rounded-lg py-1.5 overflow-y-auto',\n });\n\n private handleSlotChange = () => {\n this.dropdownItems = Array.from(this.host.querySelectorAll('bcm-dropdown-item'));\n\n if (this.dropdownItems.length === 0) {\n console.warn('No dropdown items found in dropdown component');\n }\n };\n\n render() {\n return (\n <Host>\n <bcm-linked trigger=\"click\" placement=\"bottom-start\">\n <bcm-button kind=\"outline\" slot=\"trigger\">\n <span part=\"text\">{this.text}</span>\n </bcm-button>\n <div part=\"dropdown-container\" class={this.dropdownClass()}>\n <slot onSlotchange={this.handleSlotChange}></slot>\n </div>\n </bcm-linked>\n </Host>\n );\n }\n}\n"],"names":[],"mappings":";;;AAAA,MAAM,WAAW,GAAG,m0BAAm0B;;MCQ10B,QAAQ,GAAA,MAAA;;;;;;AAGX,IAAA,IAAI;IAEH,aAAa,GAAiC,EAAE;AAQzD,IAAA,iBAAiB;AAGjB,IAAA,wBAAwB,CAAC,KAAkB,EAAA;QACzC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,MAAM;AAE3C,QAAA,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,IAAI,IAAG;AACjC,YAAA,IAAI,IAAI,IAAI,OAAO,EAAE;AACnB,gBAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;;AAEzB,SAAC,CAAC;AAEF,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;AAC1B,YAAA,OAAO,EAAE,OAAO;YAChB,QAAQ;AACT,SAAA,CAAC;;IAGI,aAAa,GAAG,EAAE,CAAC;AACzB,QAAA,IAAI,EAAE,uIAAuI;AAC9I,KAAA,CAAC;IAEM,gBAAgB,GAAG,MAAK;AAC9B,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,CAAC;QAEhF,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;AACnC,YAAA,OAAO,CAAC,IAAI,CAAC,+CAA+C,CAAC;;AAEjE,KAAC;IAED,MAAM,GAAA;QACJ,QACE,EAAC,IAAI,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,EACH,CAAA,CAAA,YAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAY,OAAO,EAAC,OAAO,EAAC,SAAS,EAAC,cAAc,EAAA,EAClD,CAAA,CAAA,YAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAY,IAAI,EAAC,SAAS,EAAC,IAAI,EAAC,SAAS,EAAA,EACvC,CAAM,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,IAAI,EAAC,MAAM,EAAA,EAAE,IAAI,CAAC,IAAI,CAAQ,CACzB,EACb,CAAK,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,IAAI,EAAC,oBAAoB,EAAC,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,EAAA,EACxD,CAAM,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,YAAY,EAAE,IAAI,CAAC,gBAAgB,GAAS,CAC9C,CACK,CACR;;;;;;;"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bcm-file-upload.entry.esm.js","sources":["src/components/upload/file-upload.css?tag=bcm-file-upload&encapsulation=shadow","src/components/upload/file-upload.component.tsx"],"sourcesContent":[":host {\n display: block;\n}\n","import {\n Component,\n Prop,\n State,\n h,\n Element,\n Event,\n EventEmitter,\n AttachInternals,\n ComponentInterface,\n Fragment,\n Watch,\n Host,\n} from '@stencil/core';\nimport { tv } from '@utils/tv';\n\nexport type BcmUploadStatus = 'uploading' | 'uploaded' | 'error';\n\nexport interface BcmUploadItem {\n id: string;\n file: File;\n status: BcmUploadStatus;\n progress?: number;\n}\n\nexport interface BcmUploadErrorMessages {\n /**\n * Error message shown when a file exceeds the maxSize limit.\n */\n maxSize?: string;\n\n /**\n * Error message shown when file type is not allowed by `accept`.\n */\n type?: string;\n\n /**\n * Error message shown when `maxFileCount` is exceeded.\n */\n maxFileCount?: string;\n\n /**\n * Error message used for `required` validation when no file is selected.\n */\n required?: string;\n}\n\n/**\n * @component BcmFileUpload\n * @description A fully featured drag-and-drop file uploader component.\n * Supports form-associated behavior, validation, custom size limits,\n * accepted file type filtering, multiple file selection, progress tracking,\n * upload canceling, file removal, and accessibility events (focus/blur).\n *\n * Upload progress is currently simulated locally. The `uploadUrl` prop\n * is reserved for future real HTTP upload integration and has no effect yet.\n *\n * @example Basic usage\n * <bcm-file-upload name=\"report\" label=\"Upload Report\"></bcm-file-upload>\n *\n * @example Multiple files\n * <bcm-file-upload name=\"attachments\" multiple></bcm-file-upload>\n *\n * @example Custom max size and accepted formats\n * <bcm-file-upload\n * name=\"medicalFiles\"\n * accept=\".pdf,.jpg\"\n * maxSize={5}\n * ></bcm-file-upload>\n *\n * @prop {string} name\n * The name of the form field used when the component is inside a `<form>`.\n * Supports automatic FormData generation including:\n * - single upload: name=\"file\"\n * - multiple upload: name=\"file[0], file[1], ...\"\n *\n * @prop {string} label\n * Optional label shown above the upload zone.\n *\n * @prop {string} caption\n * Optional helper text rendered below the file list. Example: “Max size 5MB”.\n *\n * @prop {boolean} multiple\n * Allows selecting and uploading multiple files at once.\n *\n * @prop {string} accept\n * Comma-separated list of allowed file extensions.\n * Example: \".pdf,.xls,.png\".\n *\n * @prop {number} maxSize\n * Maximum allowed size per file (in MB). If exceeded, an error alert appears.\n *\n * @prop {boolean} required\n * Enables form validation — at least one file must be uploaded.\n * Validity integrates with native `<form>` using ElementInternals.\n *\n * @prop {boolean} disabled\n * Makes the uploader non-interactive: no clicking, no drag-and-drop.\n *\n * @prop {\"medium\" | \"small\"} size\n * Controls spacing, typography, and visual density of the upload zone.\n *\n * @prop {string} uploadUrl\n * Reserved for future backend upload integration.\n * Currently has no effect and does not trigger any HTTP requests.\n *\n * @prop {number} maxFileCount\n * Optional limit for how many files can be selected in total.\n * Only applied when `multiple` is true.\n * If exceeded, new files are ignored and a max-file-count error is shown.\n *\n * @prop {BcmUploadErrorMessages} customErrorMessages\n * Optional override for all error messages:\n * - maxSize: file too large\n * - type: unsupported file type\n * - maxFileCount: too many files selected\n * - required: no file selected while required\n *\n *\n * @event {EventEmitter<File[]>} bcmFileChange\n * Fired whenever the component's internal file list changes.\n * Emits an array of the current File objects.\n *\n * @event {EventEmitter<BcmUploadItem>} bcmFileRemoved\n * Fired when the user removes a file from the list.\n *\n * @event {EventEmitter<BcmUploadItem>} bcmUploadCanceled\n * Fired when an upload is canceled before completion.\n *\n * @event {EventEmitter<FocusEvent>} bcmFocus\n * Fired when upload zone receives keyboard or mouse focus.\n *\n * @event {EventEmitter<FocusEvent>} bcmBlur\n * Fired when upload zone loses focus.\n *\n *\n * @csspart upload-zone\n * The root clickable drop area for file selection or drag-and-drop.\n *\n * @csspart file-list\n * The container wrapping rendered file rows.\n *\n * @csspart file-row\n * A single file entry including its name, actions, and progress bar.\n *\n * @csspart remove-btn\n * The remove action button inside uploaded file rows.\n *\n * @csspart cancel-btn\n * The cancel upload button during uploading progress.\n *\n * @csspart download-btn\n * The download button for already uploaded files.\n *\n * @csspart label\n * The external label text displayed above the component.\n *\n * @csspart caption\n * Helper or informative caption displayed below the uploaded list.\n */\n\nconst uploadClasses = tv({\n slots: {\n container: 'bcm-ui-element flex flex-col gap-2 w-full max-w-64',\n label: 'text-size-4 font-medium text-color-label',\n\n // Upload Zone\n zone: [\n 'relative rounded border border-dashed transition-all duration-200 ease-in-out',\n 'px-4 py-4 select-none',\n 'border-color-default bg-color-basic-masterpage',\n 'flex items-center justify-center',\n ],\n zoneActive: 'border-color-primary bg-color-soft-blue',\n\n iconContainer: 'flex items-center justify-center shrink-0',\n iconSizeClass: 'text-size-10',\n\n zoneTextWrapper: 'flex flex-col flex-1 min-w-0',\n\n zoneTextMain: 'text-size-4 text-color-default font-medium',\n zoneLink: 'text-color-primary hover:underline',\n zoneTextSub: 'text-size-3 text-color-caption',\n\n // File List\n list: 'flex flex-col gap-3',\n\n // File Row\n fileRow: [\n 'flex flex-col items-center gap-2 rounded border transition-colors min-w-0 px-3 py-1.5',\n 'bg-color-default border-color-default',\n ],\n fileIcon: 'flex items-center justify-center rounded bg-color-soft-blue shrink-0',\n fileNameWrapper: 'flex flex-col flex-1 min-w-0',\n fileTitle: 'text-size-4 font-medium text-color-default',\n fileName: 'text-size-4 text-color-default truncate',\n\n // Progress\n progressWrapper: 'flex items-center gap-3 w-full',\n progressBar: 'h-full bg-color-primary rounded transition-all duration-300 ease-out',\n percent: 'text-size-4 font-medium text-color-caption min-w-[3ch] text-right',\n\n // Actions\n actions: 'flex items-center gap-2',\n iconBtn: [\n 'size-4 rounded-full flex items-center justify-center transition-colors cursor-pointer appearance-none',\n 'text-color-icon-default hover:bg-color-default-hover border-none',\n ],\n\n caption: 'text-size-3 text-color-caption',\n },\n\n variants: {\n size: {\n medium: {\n zone: 'flex-col text-center gap-2',\n iconContainer: 'h-10 w-[50px]',\n zoneTextWrapper: 'items-center gap-1',\n },\n small: {\n zone: 'px-3 py-4 gap-2 flex-row text-left',\n iconContainer: 'size-8',\n iconSizeClass: 'text-size-8',\n zoneTextWrapper: 'items-start gap-1',\n label: 'text-size-3',\n caption: 'text-size-2',\n },\n },\n disabled: {\n true: 'opacity-60 cursor-not-allowed',\n false: '',\n },\n },\n compoundVariants: [\n {\n disabled: true,\n class: {\n zone: 'bg-color-disabled border-color-disabled cursor-not-allowed',\n zoneTextMain: 'text-color-disabled',\n zoneTextSub: 'text-color-disabled',\n zoneLink:\n 'text-color-disabled cursor-not-allowed no-underline hover:no-underline',\n },\n },\n {\n disabled: false,\n class: {\n zone: 'cursor-pointer',\n },\n },\n ],\n defaultVariants: {\n size: 'medium',\n disabled: false,\n },\n});\n\n@Component({\n tag: 'bcm-file-upload',\n styleUrl: 'file-upload.css',\n shadow: true,\n formAssociated: true,\n})\nexport class BcmFileUpload implements ComponentInterface {\n @Element() host!: HTMLElement;\n @AttachInternals() internals!: ElementInternals;\n\n private fileInput?: HTMLInputElement;\n private uploadTimer?: number;\n\n // Focus target for validation errors and keyboard focus\n private uploadZoneRef?: HTMLDivElement;\n\n @Prop() name: string = 'file';\n @Prop() label: string = '';\n @Prop() caption?: string = '';\n @Prop() multiple: boolean = false;\n @Prop() accept: string = '.xls,.pdf';\n @Prop({ mutable: true }) maxSize: number = 2; // MB\n @Prop() required: boolean = false;\n @Prop() disabled: boolean = false;\n @Prop() size: 'medium' | 'small' = 'medium';\n\n /**\n * Reserved for future backend upload integration.\n * Currently does not affect component behavior.\n */\n @Prop() uploadUrl?: string;\n\n /**\n * Maximum number of files allowed in total.\n * Only applied when `multiple` is true.\n */\n @Prop() maxFileCount?: number;\n\n /**\n * Allows consumers to override default error messages.\n */\n @Prop() customErrorMessages?: BcmUploadErrorMessages;\n\n @State() private files: BcmUploadItem[] = [];\n @State() private dragActive = false;\n @State() private maxSizeError = false;\n @State() private typeError = false;\n @State() private maxFileCountError = false;\n\n // Emits when file list changes\n @Event({\n composed: false,\n bubbles: false,\n cancelable: true,\n })\n bcmFileChange!: EventEmitter<File[]>;\n\n // Emits when a file is removed\n @Event({\n composed: false,\n bubbles: false,\n cancelable: true,\n })\n bcmFileRemoved!: EventEmitter<BcmUploadItem>;\n\n // Emits when an upload is canceled\n @Event({\n composed: false,\n bubbles: false,\n cancelable: true,\n })\n bcmUploadCanceled!: EventEmitter<BcmUploadItem>;\n\n // Emits when the upload zone receives focus\n @Event({\n composed: false,\n bubbles: false,\n cancelable: true,\n })\n bcmFocus!: EventEmitter<FocusEvent>;\n\n // Emits when the upload zone loses focus\n @Event({\n composed: false,\n bubbles: false,\n cancelable: true,\n })\n bcmBlur!: EventEmitter<FocusEvent>;\n\n private internalMaxSizeInBytes: number = this.maxSize * 1024 * 1024;\n\n componentWillLoad(): void {\n this.internalMaxSizeInBytes = this.maxSize * 1024 * 1024;\n this.updateFormValueAndValidity();\n }\n\n disconnectedCallback() {\n // Clear interval when component is removed from the DOM\n if (this.uploadTimer) {\n window.clearInterval(this.uploadTimer);\n this.uploadTimer = undefined;\n }\n }\n\n @Watch('maxSize')\n handleMaxSizeChange() {\n this.internalMaxSizeInBytes = this.maxSize * 1024 * 1024;\n }\n\n /**\n * Normalize and check a file against the `accept` attribute.\n */\n private isFileAccepted(file: File): boolean {\n if (!this.accept) return true;\n\n const extension = '.' + (file.name.split('.').pop() || '').toLowerCase();\n const accepted = this.accept\n .toLowerCase()\n .split(',')\n .map(x => x.trim())\n .filter(Boolean); // e.g. ['.pdf', '.jpg', '.png']\n\n return accepted.includes(extension);\n }\n\n /**\n * Update form value and validity state for form-associated behavior.\n */\n private updateFormValueAndValidity() {\n if (!this.internals) return;\n\n if (!this.files.length) {\n this.internals.setFormValue(null);\n\n if (this.required) {\n const msg =\n this.customErrorMessages?.required ||\n 'Please upload at least one file.';\n\n this.internals.setValidity(\n { valueMissing: true },\n msg,\n // Use upload zone if available, otherwise host as the validation anchor\n this.uploadZoneRef ?? this.host,\n );\n } else {\n this.internals.setValidity({});\n }\n\n return;\n }\n\n const formData = new FormData();\n this.files.forEach((item, index) => {\n const key = this.multiple ? `${this.name}[${index}]` : this.name;\n formData.append(key, item.file);\n });\n\n this.internals.setFormValue(formData);\n this.internals.setValidity({});\n }\n\n private emitChange() {\n this.bcmFileChange.emit(this.files.map(f => f.file));\n }\n\n /**\n * Simulate upload progress. Replace with real upload logic if needed.\n */\n private startFakeUpload() {\n if (this.uploadTimer) {\n window.clearInterval(this.uploadTimer);\n }\n\n this.uploadTimer = window.setInterval(() => {\n let anyUploading = false;\n\n this.files = this.files.map(item => {\n if (item.status !== 'uploading') return item;\n\n anyUploading = true;\n const current = item.progress ?? 0;\n const next = Math.min(current + 15, 100);\n\n if (next >= 100) {\n return { ...item, status: 'uploaded', progress: undefined };\n }\n\n return { ...item, progress: next };\n });\n\n if (!anyUploading && this.uploadTimer) {\n window.clearInterval(this.uploadTimer);\n this.uploadTimer = undefined;\n this.updateFormValueAndValidity();\n this.emitChange();\n }\n }, 300);\n }\n\n /**\n * Add files from input or drop.\n */\n private addFiles(fileList: FileList | null) {\n if (!fileList || this.disabled) return;\n\n const newItems: BcmUploadItem[] = [];\n let hasSizeError = false;\n let hasTypeError = false;\n\n Array.from(fileList).forEach(file => {\n if (!this.isFileAccepted(file)) {\n hasTypeError = true;\n return;\n }\n\n if (file.size > this.internalMaxSizeInBytes) {\n hasSizeError = true;\n return;\n }\n\n newItems.push({\n id: crypto.randomUUID(),\n file,\n status: 'uploading',\n progress: 0,\n });\n });\n\n this.maxSizeError = hasSizeError;\n this.typeError = hasTypeError;\n this.maxFileCountError = false;\n\n // If there are no valid files, just update validity and exit.\n if (!newItems.length) {\n this.updateFormValueAndValidity();\n this.emitChange();\n return;\n }\n\n let merged: BcmUploadItem[];\n\n if (this.multiple) {\n if (typeof this.maxFileCount === 'number') {\n const remaining = this.maxFileCount - this.files.length;\n\n if (remaining <= 0) {\n this.maxFileCountError = true;\n this.updateFormValueAndValidity();\n this.emitChange();\n return;\n }\n\n const acceptedNew = newItems.slice(0, Math.max(0, remaining));\n if (acceptedNew.length < newItems.length) {\n this.maxFileCountError = true;\n }\n\n merged = [...this.files, ...acceptedNew];\n } else {\n merged = [...this.files, ...newItems];\n }\n } else {\n // single file mode → only take first new item\n merged = [newItems[0]];\n }\n\n this.files = merged;\n\n this.updateFormValueAndValidity();\n this.emitChange();\n\n // Only fake upload for now\n this.startFakeUpload();\n }\n\n private removeFile(item: BcmUploadItem) {\n this.files = this.files.filter(f => f.id !== item.id);\n this.bcmFileRemoved.emit(item);\n this.updateFormValueAndValidity();\n this.emitChange();\n }\n\n private cancelUpload(item: BcmUploadItem) {\n this.files = this.files.filter(f => f.id !== item.id);\n this.bcmUploadCanceled.emit(item);\n this.updateFormValueAndValidity();\n this.emitChange();\n }\n\n private onFileInputChange = (event: Event) => {\n const input = event.target as HTMLInputElement;\n this.addFiles(input.files);\n // Reset input so the same file can be selected again\n input.value = '';\n };\n\n private downloadFile(file: File) {\n const url = URL.createObjectURL(file);\n const a = document.createElement('a');\n a.href = url;\n a.download = file.name;\n a.click();\n URL.revokeObjectURL(url);\n }\n\n private handleDrop(ev: DragEvent) {\n ev.preventDefault();\n this.dragActive = false;\n if (this.disabled) return;\n\n const files = ev.dataTransfer?.files || null;\n if (!files || files.length === 0) return;\n\n const first = files.item(0);\n if (!first || !this.isFileAccepted(first)) {\n this.typeError = true;\n return;\n }\n\n this.addFiles(files);\n }\n\n private handleDragOver(ev: DragEvent) {\n ev.preventDefault();\n if (this.disabled) return;\n this.dragActive = true;\n }\n\n private handleDragLeave(ev: DragEvent) {\n ev.preventDefault();\n this.dragActive = false;\n }\n\n private openFileDialog = () => {\n if (this.disabled) return;\n this.fileInput?.click();\n };\n\n formResetCallback() {\n this.files = [];\n this.maxSizeError = false;\n this.typeError = false;\n this.maxFileCountError = false;\n\n if (this.uploadTimer) {\n window.clearInterval(this.uploadTimer);\n this.uploadTimer = undefined;\n }\n\n this.updateFormValueAndValidity();\n this.emitChange();\n }\n\n /**\n * When the browser or user calls element.focus(),\n * move focus to the upload zone.\n */\n public focus(options?: FocusOptions) {\n this.uploadZoneRef?.focus(options);\n }\n\n private handleFocus = (event: FocusEvent) => {\n this.bcmFocus.emit(event);\n };\n\n private handleBlur = (event: FocusEvent) => {\n this.bcmBlur.emit(event);\n };\n\n private renderErrors() {\n if (!this.maxSizeError && !this.typeError && !this.maxFileCountError) {\n return null;\n }\n\n const acceptedFormats = this.accept\n .replace(/\\./g, '')\n .toUpperCase()\n .replace(/,/g, ', ');\n\n const maxSizeMsg =\n this.customErrorMessages?.maxSize ||\n 'File size exceeds the maximum allowed limit.';\n\n const typeMsg =\n this.customErrorMessages?.type ||\n `Unsupported file type. Allowed formats: ${acceptedFormats}`;\n\n const maxFileCountMsg =\n this.customErrorMessages?.maxFileCount ||\n 'You have reached the maximum number of files.';\n\n return (\n <div class=\"w-full space-y-1\">\n {this.maxSizeError && (\n <bcm-alert\n status=\"error\"\n size=\"small\"\n dismissible\n onBcmDismiss={() => (this.maxSizeError = false)}\n >\n {maxSizeMsg}\n </bcm-alert>\n )}\n\n {this.typeError && (\n <bcm-alert\n status=\"error\"\n size=\"small\"\n dismissible\n onBcmDismiss={() => (this.typeError = false)}\n >\n {typeMsg}\n </bcm-alert>\n )}\n\n {this.maxFileCountError && (\n <bcm-alert\n status=\"error\"\n size=\"small\"\n dismissible\n onBcmDismiss={() => (this.maxFileCountError = false)}\n >\n {maxFileCountMsg}\n </bcm-alert>\n )}\n </div>\n );\n }\n\n private renderUploadZone() {\n const classes = uploadClasses({ size: this.size, disabled: this.disabled });\n const {\n zone,\n zoneActive,\n iconContainer,\n iconSizeClass,\n zoneTextWrapper,\n zoneTextMain,\n zoneTextSub,\n zoneLink,\n } = classes;\n\n const zoneClasses = [zone(), this.dragActive && zoneActive()]\n .filter(Boolean)\n .join(' ');\n\n const maxMb = Math.round(this.internalMaxSizeInBytes / (1024 * 1024));\n const iconColorClass = this.dragActive\n ? 'text-color-primary'\n : 'text-color-icon-default';\n\n return (\n <div\n ref={el => (this.uploadZoneRef = el as HTMLDivElement)}\n tabindex={this.disabled ? undefined : 0}\n part=\"upload-zone\"\n class={zoneClasses}\n onClick={this.openFileDialog}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n onDragOver={ev => this.handleDragOver(ev)}\n onDragLeave={ev => this.handleDragLeave(ev)}\n onDrop={ev => this.handleDrop(ev)}\n >\n <div class={iconContainer()}>\n <bcm-icon\n name=\"fa-solid fa-cloud-arrow-up\"\n class={`${iconColorClass} ${iconSizeClass()}`}\n ></bcm-icon>\n </div>\n\n <div class={zoneTextWrapper()}>\n <div class={zoneTextMain()}>\n Drag &amp; Drop{' '}\n <span class=\"text-color-helper\">or </span>\n <a\n class={zoneLink()}\n onClick={e => {\n e.preventDefault();\n this.openFileDialog();\n }}\n >\n Choose File\n </a>\n </div>\n <div class={zoneTextSub()}>\n Max: {maxMb}MB Formats:{' '}\n {this.accept.replace(/\\./g, '').toUpperCase().replace(/,/g, ', ')}\n </div>\n </div>\n\n <input\n ref={el => (this.fileInput = el as HTMLInputElement)}\n type=\"file\"\n hidden\n accept={this.accept}\n multiple={this.multiple}\n disabled={this.disabled}\n onChange={this.onFileInputChange}\n />\n </div>\n );\n }\n\n private renderFileRow(item: BcmUploadItem) {\n const { percent, actions, iconBtn, fileRow, fileTitle } = uploadClasses({\n size: this.size,\n disabled: this.disabled,\n });\n const isUploading = item?.status === 'uploading';\n\n return (\n <div part=\"file-row\" class={fileRow()} title={item?.file?.name}>\n <div class=\"flex items-center justify-between w-full gap-2 min-w-0\">\n <div class=\"flex items-center gap-1.5 min-w-0 flex-1 flex-shrink\">\n <div class=\"flex items-center rounded bg-color-default shrink-0 text-size-3 text-color-caption\">\n <bcm-icon name=\"fa-regular fa-file\"></bcm-icon>\n </div>\n <span class={fileTitle() + ' truncate'}>{item?.file?.name}</span>\n </div>\n\n <div class={actions() + ' flex-shrink-0'}>\n {item.status === 'uploaded' && (\n <Fragment>\n <button\n type=\"button\"\n part=\"download-btn\"\n class={iconBtn()}\n onClick={() => this.downloadFile(item.file)}\n title=\"Download\"\n >\n <bcm-icon\n name=\"fa-regular fa-download\"\n class=\"text-size-4\"\n ></bcm-icon>\n </button>\n\n <button\n type=\"button\"\n part=\"remove-btn\"\n class={iconBtn()}\n onClick={() => this.removeFile(item)}\n title=\"Remove\"\n >\n <bcm-icon\n name=\"fa-regular fa-trash\"\n class=\"text-size-4\"\n ></bcm-icon>\n </button>\n </Fragment>\n )}\n\n {isUploading && (\n <button\n type=\"button\"\n part=\"cancel-btn\"\n class={\n 'text-color-default bg-transparent hover:bg-color-default-hover text-size-4 cursor-pointer flex items-center justify-center size-5 rounded-full border-none'\n }\n onClick={() => this.cancelUpload(item)}\n title=\"Cancel\"\n >\n <bcm-icon\n name=\"fa-regular fa-xmark\"\n class=\"text-size-4\"\n ></bcm-icon>\n </button>\n )}\n </div>\n </div>\n\n {isUploading && (\n <div class=\"flex items-center gap-3 w-full min-w-0\">\n <div class=\"h-1.5 flex-1 rounded-full bg-color-surface-default overflow-hidden\">\n <div\n class=\"h-full bg-color-primary rounded-full transition-all duration-300 ease-out\"\n style={{ width: `${item.progress ?? 0}%` }}\n />\n </div>\n <span class={percent()}>{item.progress ?? 0}%</span>\n </div>\n )}\n </div>\n );\n }\n\n render() {\n const { container, label, list, caption } = uploadClasses({\n size: this.size,\n disabled: this.disabled,\n });\n\n return (\n <Host tabindex=\"-1\">\n <div class={container()}>\n {this.label && (\n <label part=\"label\" class={label()}>\n {this.label}\n </label>\n )}\n\n {this.renderUploadZone()}\n\n {this.renderErrors()}\n\n {this.files.length > 0 && (\n <div part=\"file-list\" class={list()}>\n {this.files.map(item => this.renderFileRow(item))}\n </div>\n )}\n\n {this.caption && (\n <span part=\"caption\" class={caption()}>\n {this.caption}\n </span>\n )}\n </div>\n </Host>\n );\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"bcm-input.entry.esm.js","sources":["src/utils/slot/check-slot-content.ts","src/components/input/input.scss?tag=bcm-input&encapsulation=shadow","src/components/input/input.component.tsx"],"sourcesContent":["/**\n * Checks if a named slot has any content\n * @param element - The host element (component instance)\n * @param slotName - Name of the slot to check\n * @returns boolean indicating if the slot has any assigned nodes\n */\nexport const checkSlotContent = (element: HTMLElement, slotName: string): boolean => {\n const slot = element.shadowRoot?.querySelector(`slot[name=\"${slotName}\"]`) as HTMLSlotElement;\n if (!slot) return false;\n\n const assignedNodes = slot.assignedNodes();\n return assignedNodes.length > 0;\n};\n",":host {\n display: inline-block;\n}\n\n:host([full-width]) {\n width: 100%;\n}\n","import { Component, Prop, h, Event, EventEmitter, Method, State, Watch, Element } from '@stencil/core';\nimport { InputSize, InputStatus, InputType } from './types';\nimport { tv } from '@utils/tv';\nimport classNames from 'classnames';\nimport { generateId } from '../../utils/id/generate-id';\nimport { checkSlotContent } from '../../utils/slot/check-slot-content';\nimport { getValidationMessage, setValidationMessages, defaultValidationMessages } from '../../utils/validation-messages';\n\n@Component({\n tag: 'bcm-input',\n styleUrl: 'input.scss',\n shadow: true,\n})\nexport class BcmInput {\n @Element() el: HTMLElement;\n private inputRef: HTMLInputElement;\n\n @State() isFocused = false;\n @State() validationMessage: string;\n @State() isValid = true;\n @State() internalStatus: InputStatus = 'default';\n @State() internalErrorMessage: string;\n @State() isPasswordVisible = false;\n\n /** Input value */\n @Prop({ mutable: true, reflect: true })\n value: string = '';\n\n /** Input placeholder text */\n @Prop()\n placeholder?: string;\n\n /** Input name */\n @Prop()\n name?: string;\n\n /** Input id */\n @Prop({ attribute: 'id', reflect: true })\n _id?: string = generateId('input');\n\n /** Controls the input size */\n @Prop()\n size: InputSize = 'medium';\n\n /** Defines the input's status/state */\n @Prop()\n status: InputStatus = 'default';\n\n /** Full width input */\n @Prop({ attribute: 'full-width', reflect: true })\n fullWidth = false;\n\n /** HTML input type */\n @Prop()\n type: InputType = 'text';\n\n /** Whether the input is disabled */\n @Prop()\n disabled = false;\n\n /** Whether the input is readonly */\n @Prop()\n readonly = false;\n\n /** Whether the input is required */\n @Prop()\n required = false;\n\n /** Input autocomplete attribute */\n @Prop()\n autocomplete?: string;\n\n /** Min length for text input */\n @Prop()\n minLength?: number;\n\n /** Max length for text input */\n @Prop()\n maxLength?: number;\n\n /** Min value for number input */\n @Prop()\n min?: number;\n\n /** Max value for number input */\n @Prop()\n max?: number;\n\n /** Step value for number input */\n @Prop()\n step?: number;\n\n /** Pattern for validation */\n @Prop()\n pattern?: string;\n\n /** Input label for accessibility */\n @Prop()\n label?: string;\n\n /** Error message to display */\n @Prop()\n errorMessage?: string;\n\n /** Caption text to display below input */\n @Prop()\n captionText?: string;\n\n /** ID of associated label element */\n @Prop()\n labelledby?: string;\n\n /** ID of associated caption/error text element */\n @Prop()\n describedby?: string;\n\n /** Prefix icon class name */\n @Prop()\n prefixIcon?: string;\n\n /** Suffix icon class name */\n @Prop()\n suffixIcon?: string;\n\n /** Whether to use native form validation\n * If false, component will handle validation internally\n */\n @Prop()\n useNativeValidation = true;\n\n /** Custom validation function */\n @Prop()\n validator?: (value: string) => string | undefined;\n\n @Event({\n composed: false,\n bubbles: false,\n cancelable: true,\n })\n bcmInput: EventEmitter<InputEvent>;\n\n @Event({\n composed: false,\n bubbles: false,\n cancelable: true,\n })\n bcmChange: EventEmitter<Event>;\n\n @Event({\n composed: false,\n bubbles: false,\n cancelable: true,\n })\n bcmFocus: EventEmitter<FocusEvent>;\n\n @Event({\n composed: false,\n bubbles: false,\n cancelable: true,\n })\n bcmBlur: EventEmitter<FocusEvent>;\n\n @Event({\n composed: false,\n bubbles: false,\n cancelable: true,\n })\n bcmKeyDown: EventEmitter<KeyboardEvent>;\n\n @Event({\n composed: false,\n bubbles: false,\n cancelable: true,\n })\n bcmKeyUp: EventEmitter<KeyboardEvent>;\n\n @Watch('value')\n handleValueChange(newValue: string) {\n if (this.inputRef) {\n this.inputRef.value = newValue;\n }\n }\n\n @Watch('status')\n watchStatus(newValue: InputStatus) {\n this.internalStatus = newValue;\n }\n\n @Watch('errorMessage')\n watchErrorMessage(newValue: string) {\n this.internalErrorMessage = newValue;\n }\n\n @Method()\n async setFocus() {\n this.inputRef?.focus();\n }\n\n @Method()\n async setBlur() {\n this.inputRef?.blur();\n }\n\n @Method()\n async select() {\n this.inputRef?.select();\n }\n\n /** Sets locale and messages for all inputs */\n @Method()\n async setLocale(locale: string, messages: Record<string, string>) {\n // Set messages and update validation immediately\n setValidationMessages(locale, messages);\n\n // Mevcut validasyon mesajını güncelle\n if (!this.isValid) {\n this.validateInput();\n }\n }\n\n componentWillLoad() {\n // I18n için default mesajları set et\n setValidationMessages('en', defaultValidationMessages);\n this.internalStatus = this.status;\n this.internalErrorMessage = this.errorMessage;\n }\n\n private validateInput(): void {\n if (!this.inputRef) return;\n\n // Reset validation state\n this.isValid = true;\n this.validationMessage = '';\n\n const value = this.inputRef.value;\n\n // Required check\n if (this.required && !value) {\n this.isValid = false;\n this.validationMessage = getValidationMessage('required');\n this.internalStatus = 'error';\n this.internalErrorMessage = this.validationMessage;\n return;\n }\n\n // Minimum length check\n else if (this.minLength && value.length < this.minLength) {\n this.isValid = false;\n this.validationMessage = getValidationMessage('minlength', { min: this.minLength });\n }\n // Maximum length check\n else if (this.maxLength && value.length > this.maxLength) {\n this.isValid = false;\n this.validationMessage = getValidationMessage('maxlength', { max: this.maxLength });\n }\n // Pattern check\n else if (this.pattern && !new RegExp(this.pattern).test(value)) {\n this.isValid = false;\n this.validationMessage = getValidationMessage('pattern');\n }\n // Email check\n else if (this.type === 'email' && value && !/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(value)) {\n this.isValid = false;\n this.validationMessage = getValidationMessage('email');\n }\n // Number range check\n else if (this.type === 'number' && value) {\n const numValue = parseFloat(value);\n if (this.min !== undefined && numValue < this.min) {\n this.isValid = false;\n this.validationMessage = getValidationMessage('min', { min: this.min });\n } else if (this.max !== undefined && numValue > this.max) {\n this.isValid = false;\n this.validationMessage = getValidationMessage('max', { max: this.max });\n }\n }\n\n // Update component state\n this.internalStatus = this.isValid ? 'default' : 'error';\n this.internalErrorMessage = this.validationMessage;\n }\n\n private onInput = (event: InputEvent) => {\n const input = event.target as HTMLInputElement;\n this.value = input.value;\n this.bcmInput.emit(event);\n this.validateInput();\n };\n\n private onChange = (event: Event) => {\n this.bcmChange.emit(event);\n };\n\n private onFocus = (event: FocusEvent) => {\n this.isFocused = true;\n this.bcmFocus.emit(event);\n };\n\n private onBlur = (event: FocusEvent) => {\n this.isFocused = false;\n this.bcmBlur.emit(event);\n this.validateInput();\n };\n\n private onKeyDown = (event: KeyboardEvent) => {\n this.bcmKeyDown.emit(event);\n };\n\n private onKeyUp = (event: KeyboardEvent) => {\n this.bcmKeyUp.emit(event);\n };\n\n private hasSlotContent(slotName: string): boolean {\n return checkSlotContent(this.el, slotName);\n }\n\n private styleClass = tv(\n {\n slots: {\n base: [\n 'bcm-input bcm-input__container',\n 'bg-[--bcm-ui-color-background-base-default]',\n 'text-[--bcm-ui-color-text-default]',\n 'border border-solid rounded',\n 'flex items-center justify-between',\n 'transition-colors duration-200',\n 'px-2',\n ],\n inputClass: [\n 'input',\n 'w-full flex-1',\n 'border-0 outline-0 bg-transparent',\n 'appearance-none text-ellipsis',\n 'text-[--bcm-ui-color-text-default] placeholder:text-[--bcm-ui-color-text-placeholder] placeholder:font-normal',\n 'font-sans antialiased font-medium',\n 'px-1',\n '[appearance:textfield][&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none',\n ],\n },\n variants: {\n size: {\n small: {\n base: '',\n inputClass: 'text-size-4 py-px',\n },\n medium: {\n base: '',\n inputClass: 'text-size-5 leading-6 py-1',\n },\n large: {\n base: '',\n inputClass: 'text-size-6 py-2',\n },\n },\n status: {\n default: {\n base: ['border-[--bcm-ui-color-border-default]', 'hover:border-[--bcm-ui-color-border-primary]', 'has-[:focus]:border-[--bcm-ui-color-border-primary]'],\n },\n error: {\n base: ['border-[--bcm-ui-color-border-error]', 'hover:border-[--bcm-ui-color-border-error]', 'has-[:focus]:border-[--bcm-ui-color-border-error]'],\n },\n success: {\n base: ['border-[--bcm-ui-color-border-success]', 'hover:border-[--bcm-ui-color-border-success]', 'has-[:focus]:border-[--bcm-ui-color-border-success]'],\n },\n warning: {\n base: ['border-[--bcm-ui-color-border-warning]', 'hover:border-[--bcm-ui-color-border-warning]', 'has-[:focus]:border-[--bcm-ui-color-border-warning]'],\n },\n info: {\n base: ['border-[--bcm-ui-color-border-info]', 'hover:border-[--bcm-ui-color-border-info]', 'has-[:focus]:border-[--bcm-ui-color-border-info]'],\n },\n },\n fullWidth: {\n true: 'full-width w-full',\n },\n disabled: {\n true: 'disabled cursor-not-allowed',\n false: '',\n },\n focused: {\n true: {\n base: '',\n },\n },\n },\n defaultVariants: {\n size: 'medium',\n status: 'default',\n fullWidth: false,\n disabled: false,\n focused: false,\n },\n },\n {\n twMerge: false,\n },\n );\n\n private getDefaultIconForType(): string | undefined {\n return; // TODO: Will be implemented later\n // return defaultIcons[this.type as keyof typeof defaultIcons];\n }\n\n private togglePasswordVisibility = () => {\n this.isPasswordVisible = !this.isPasswordVisible;\n this.inputRef.type = this.isPasswordVisible ? 'text' : 'password';\n };\n\n private PasswordToggleButton = () => {\n if (this.type !== 'password' || this.disabled || this.readonly || this.value?.length === 0) return null;\n return (\n <button class=\"appearance-none flex items-center w-6 h-full justify-center\" onClick={this.togglePasswordVisibility} type=\"button\">\n <bcm-icon name={this.isPasswordVisible ? 'fa-eye-slash fa-regular' : 'fa-regular fa-eye'} size={this.iconSize}></bcm-icon>\n </button>\n );\n };\n\n private iconSize = {\n small: 14,\n medium: 16,\n large: 18,\n }[this.size];\n\n render() {\n const inputId = this._id + '-input' || this.name;\n\n const { base, inputClass } = this.styleClass({\n size: this.size,\n status: this.internalStatus,\n fullWidth: this.fullWidth,\n disabled: this.disabled,\n focused: this.isFocused,\n });\n\n return (\n <div class=\"bcm-ui-element\">\n {this.label && (\n <label\n class={classNames(\n 'input-label font-medium',\n {\n 'text-color-label': !this.disabled,\n 'text-color-disabled': this.disabled,\n },\n {\n 'text-size-3': this.size === 'small',\n 'text-size-4': this.size === 'medium',\n 'text-size-5': this.size === 'large',\n },\n )}\n htmlFor={inputId}\n >\n <slot name=\"label\">{this.label}</slot>\n {this.required && <span>*</span>}\n </label>\n )}\n\n <div class={base()}>\n {(this.hasSlotContent('prefix') || this.prefixIcon || this.getDefaultIconForType()) && (\n <div class=\"flex items-center gap-2 px-2\">\n {(this.prefixIcon || this.getDefaultIconForType()) && (\n <bcm-icon class=\"prefix-icon\" icon-name={this.prefixIcon || this.getDefaultIconForType()} size={this.iconSize}></bcm-icon>\n )}\n <slot name=\"prefix\"></slot>\n </div>\n )}\n <input\n ref={el => (this.inputRef = el)}\n id={inputId}\n class={inputClass()}\n type={this.type}\n name={this.name}\n disabled={this.disabled}\n readonly={this.readonly}\n required={this.required}\n placeholder={this.placeholder}\n autocomplete={this.autocomplete}\n minlength={this.minLength}\n maxlength={this.maxLength}\n min={this.min}\n max={this.max}\n step={this.step}\n pattern={this.pattern}\n aria-invalid={this.status === 'error'}\n aria-required={this.required}\n aria-labelledby={this.labelledby}\n aria-describedby={this.describedby}\n value={this.value}\n onInput={this.onInput}\n onChange={this.onChange}\n onFocus={this.onFocus}\n onBlur={this.onBlur}\n onKeyDown={this.onKeyDown}\n onKeyUp={this.onKeyUp}\n />\n {(this.hasSlotContent('suffix') || this.suffixIcon) && (\n <div class=\"flex items-center gap-2 px-2\">\n <slot name=\"suffix\"></slot>\n {this.suffixIcon && <bcm-icon class=\"suffix-icon\" icon-name={this.suffixIcon} size={this.iconSize}></bcm-icon>}\n </div>\n )}\n {/* {this.type === 'password' && this.value?.length > 0 && !this.disabled && ( \n // <bcm-icon\n // class=\"password-toggle-icon cursor-pointer\"\n // icon-name={this.isPasswordVisible ? 'fa-regular fa-eye-slash' : 'fa-regular fa-eye'}\n // size={iconSize}\n // onClick={this.togglePasswordVisibility}\n // ></bcm-icon>\n // )}*/}\n {this.PasswordToggleButton()}\n </div>\n {(this.captionText || this.internalErrorMessage || this.validationMessage) && (\n <div\n class={classNames(\n 'input-caption-text font-regular mt-1',\n {\n 'text-[--bcm-ui-color-text-caption]': !this.disabled && this.internalStatus === 'default',\n 'text-[--bcm-ui-color-text-error]': !this.disabled && (this.internalStatus === 'error' || !this.isValid),\n 'text-[--bcm-ui-color-text-success]': !this.disabled && this.internalStatus === 'success',\n 'text-[--bcm-ui-color-text-warning]': !this.disabled && this.internalStatus === 'warning',\n 'text-[--bcm-ui-color-text-info]': !this.disabled && this.internalStatus === 'info',\n 'text-[--bcm-ui-color-text-disabled]': this.disabled,\n },\n {\n 'text-size-3': this.size === 'small',\n 'text-size-4': this.size === 'medium',\n 'text-size-5': this.size === 'large',\n },\n )}\n >\n {!this.isValid ? this.validationMessage : this.internalStatus === 'error' ? this.internalErrorMessage : this.captionText}\n </div>\n )}\n </div>\n );\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bcm-input.entry.esm.js","sources":["src/utils/slot/check-slot-content.ts","src/components/input/input.scss?tag=bcm-input&encapsulation=shadow","src/components/input/input.component.tsx"],"sourcesContent":["/**\n * Checks if a named slot has any content\n * @param element - The host element (component instance)\n * @param slotName - Name of the slot to check\n * @returns boolean indicating if the slot has any assigned nodes\n */\nexport const checkSlotContent = (element: HTMLElement, slotName: string): boolean => {\n const slot = element.shadowRoot?.querySelector(`slot[name=\"${slotName}\"]`) as HTMLSlotElement;\n if (!slot) return false;\n\n const assignedNodes = slot.assignedNodes();\n return assignedNodes.length > 0;\n};\n",":host {\n display: inline-block;\n}\n\n:host([full-width]) {\n width: 100%;\n}\n","import { Component, Prop, h, Event, EventEmitter, Method, State, Watch, Element, AttachInternals } from '@stencil/core';\nimport { InputSize, InputStatus, InputType } from './types';\nimport { tv } from '@utils/tv';\nimport classNames from 'classnames';\nimport { generateId } from '../../utils/id/generate-id';\nimport { checkSlotContent } from '../../utils/slot/check-slot-content';\nimport { getValidationMessage, setValidationMessages, defaultValidationMessages } from '../../utils/validation-messages';\n\n@Component({\n tag: 'bcm-input',\n styleUrl: 'input.scss',\n shadow: true,\n formAssociated: true,\n})\nexport class BcmInput {\n @Element() el: HTMLElement;\n private inputRef: HTMLInputElement;\n\n @State() isFocused = false;\n @State() validationMessage: string;\n @State() isValid = true;\n @State() internalStatus: InputStatus = 'default';\n @State() internalErrorMessage: string;\n @State() isPasswordVisible = false;\n\n /** Input value */\n @Prop({ mutable: true, reflect: true })\n value: string = '';\n\n /** Input placeholder text */\n @Prop()\n placeholder?: string;\n\n /** Input name */\n @Prop()\n name?: string;\n\n /** Input id */\n @Prop({ attribute: 'id', reflect: true })\n _id?: string = generateId('input');\n\n /** Controls the input size */\n @Prop()\n size: InputSize = 'medium';\n\n /** Defines the input's status/state */\n @Prop()\n status: InputStatus = 'default';\n\n /** Full width input */\n @Prop({ attribute: 'full-width', reflect: true })\n fullWidth = false;\n\n /** HTML input type */\n @Prop()\n type: InputType = 'text';\n\n /** Whether the input is disabled */\n @Prop()\n disabled = false;\n\n /** Whether the input is readonly */\n @Prop()\n readonly = false;\n\n /** Whether the input is required */\n @Prop()\n required = false;\n\n /** Input autocomplete attribute */\n @Prop()\n autocomplete?: string;\n\n /** Min length for text input */\n @Prop()\n minLength?: number;\n\n /** Max length for text input */\n @Prop()\n maxLength?: number;\n\n /** Min value for number input */\n @Prop()\n min?: number;\n\n /** Max value for number input */\n @Prop()\n max?: number;\n\n /** Step value for number input */\n @Prop()\n step?: number;\n\n /** Pattern for validation */\n @Prop()\n pattern?: string;\n\n /** Input label for accessibility */\n @Prop()\n label?: string;\n\n /** Error message to display */\n @Prop()\n errorMessage?: string;\n\n /** Caption text to display below input */\n @Prop()\n captionText?: string;\n\n /** ID of associated label element */\n @Prop()\n labelledby?: string;\n\n /** ID of associated caption/error text element */\n @Prop()\n describedby?: string;\n\n /** Prefix icon class name */\n @Prop()\n prefixIcon?: string;\n\n /** Suffix icon class name */\n @Prop()\n suffixIcon?: string;\n\n /** Whether to use native form validation\n * If false, component will handle validation internally\n */\n @Prop()\n useNativeValidation = true;\n\n /** Custom validation function */\n @Prop()\n validator?: (value: string) => string | undefined;\n\n @AttachInternals() internals: ElementInternals;\n\n @Event({\n composed: false,\n bubbles: false,\n cancelable: true,\n })\n bcmInput: EventEmitter<InputEvent>;\n\n @Event({\n composed: false,\n bubbles: false,\n cancelable: true,\n })\n bcmChange: EventEmitter<Event>;\n\n @Event({\n composed: false,\n bubbles: false,\n cancelable: true,\n })\n bcmFocus: EventEmitter<FocusEvent>;\n\n @Event({\n composed: false,\n bubbles: false,\n cancelable: true,\n })\n bcmBlur: EventEmitter<FocusEvent>;\n\n @Event({\n composed: false,\n bubbles: false,\n cancelable: true,\n })\n bcmKeyDown: EventEmitter<KeyboardEvent>;\n\n @Event({\n composed: false,\n bubbles: false,\n cancelable: true,\n })\n bcmKeyUp: EventEmitter<KeyboardEvent>;\n\n @Watch('value')\n handleValueChange(newValue: string) {\n if (this.inputRef) {\n this.inputRef.value = newValue;\n }\n if (this.internals) {\n this.internals.setFormValue(newValue ?? '');\n }\n }\n\n @Watch('status')\n watchStatus(newValue: InputStatus) {\n this.internalStatus = newValue;\n }\n\n @Watch('errorMessage')\n watchErrorMessage(newValue: string) {\n this.internalErrorMessage = newValue;\n }\n\n @Method()\n async setFocus() {\n this.inputRef?.focus();\n }\n\n @Method()\n async setBlur() {\n this.inputRef?.blur();\n }\n\n @Method()\n async select() {\n this.inputRef?.select();\n }\n\n /**\n * When the parent <form> is reset, reset input state as well.\n */\n formResetCallback() {\n this.value = '';\n this.isValid = true;\n this.validationMessage = '';\n this.internalStatus = 'default';\n this.internalErrorMessage = '';\n\n if (this.inputRef) {\n this.inputRef.value = '';\n }\n\n if (this.internals) {\n this.internals.setFormValue('');\n this.internals.setValidity({});\n }\n }\n\n /** Sets locale and messages for all inputs */\n @Method()\n async setLocale(locale: string, messages: Record<string, string>) {\n // Set messages and update validation immediately\n setValidationMessages(locale, messages);\n\n if (!this.isValid) {\n this.validateInput();\n }\n }\n\n componentWillLoad() {\n setValidationMessages('en', defaultValidationMessages);\n this.internalStatus = this.status;\n this.internalErrorMessage = this.errorMessage;\n\n if (this.internals) {\n this.internals.setFormValue(this.value ?? '');\n }\n }\n\n private validateInput(): void {\n if (!this.inputRef) return;\n\n // Reset validation state\n this.isValid = true;\n this.validationMessage = '';\n let validityFlags: ValidityStateFlags = {};\n\n const value = this.inputRef.value;\n\n if (this.validator) {\n const customError = this.validator(value);\n if (customError) {\n this.isValid = false;\n this.validationMessage = customError;\n validityFlags = { customError: true };\n }\n }\n // Required check\n if (this.required && !value) {\n this.isValid = false;\n this.validationMessage = getValidationMessage('required');\n this.internalStatus = 'error';\n this.internalErrorMessage = this.validationMessage;\n validityFlags = { valueMissing: true };\n }\n\n // Minimum length check\n else if (this.minLength && value.length < this.minLength) {\n this.isValid = false;\n this.validationMessage = getValidationMessage('minlength', { min: this.minLength });\n validityFlags = { tooShort: true };\n }\n // Maximum length check\n else if (this.maxLength && value.length > this.maxLength) {\n this.isValid = false;\n this.validationMessage = getValidationMessage('maxlength', { max: this.maxLength });\n validityFlags = { tooLong: true };\n }\n // Pattern check\n else if (this.pattern && !new RegExp(this.pattern).test(value)) {\n this.isValid = false;\n this.validationMessage = getValidationMessage('pattern');\n validityFlags = { patternMismatch: true };\n }\n // Email check\n else if (this.type === 'email' && value && !/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(value)) {\n this.isValid = false;\n this.validationMessage = getValidationMessage('email');\n validityFlags = { typeMismatch: true };\n }\n // Number range check\n else if (this.type === 'number' && value) {\n const numValue = parseFloat(value);\n if (this.min !== undefined && numValue < this.min) {\n this.isValid = false;\n this.validationMessage = getValidationMessage('min', { min: this.min });\n validityFlags = { rangeUnderflow: true };\n } else if (this.max !== undefined && numValue > this.max) {\n this.isValid = false;\n this.validationMessage = getValidationMessage('max', { max: this.max });\n validityFlags = { rangeOverflow: true };\n }\n }\n\n // Update component state\n this.internalStatus = this.isValid ? 'default' : 'error';\n this.internalErrorMessage = this.validationMessage;\n\n if (this.internals) {\n if (this.isValid) {\n this.internals.setValidity({});\n } else {\n this.internals.setValidity(validityFlags, this.validationMessage || '', this.el);\n }\n }\n }\n\n private onInput = (event: InputEvent) => {\n const input = event.target as HTMLInputElement;\n this.value = input.value;\n this.internals.setFormValue(this.value);\n this.bcmInput.emit(event);\n this.validateInput();\n };\n\n private onChange = (event: Event) => {\n this.bcmChange.emit(event);\n };\n\n private onFocus = (event: FocusEvent) => {\n this.isFocused = true;\n this.bcmFocus.emit(event);\n };\n\n private onBlur = (event: FocusEvent) => {\n this.isFocused = false;\n this.bcmBlur.emit(event);\n this.validateInput();\n };\n\n private onKeyDown = (event: KeyboardEvent) => {\n this.bcmKeyDown.emit(event);\n };\n\n private onKeyUp = (event: KeyboardEvent) => {\n this.bcmKeyUp.emit(event);\n };\n\n private hasSlotContent(slotName: string): boolean {\n return checkSlotContent(this.el, slotName);\n }\n\n private styleClass = tv(\n {\n slots: {\n base: [\n 'bcm-input bcm-input__container',\n 'bg-[--bcm-ui-color-background-base-default]',\n 'text-[--bcm-ui-color-text-default]',\n 'border border-solid rounded',\n 'flex items-center justify-between',\n 'transition-colors duration-200',\n 'px-2',\n ],\n inputClass: [\n 'input',\n 'w-full flex-1',\n 'border-0 outline-0 bg-transparent',\n 'appearance-none text-ellipsis',\n 'text-[--bcm-ui-color-text-default] placeholder:text-[--bcm-ui-color-text-placeholder] placeholder:font-normal',\n 'font-sans antialiased font-medium',\n 'px-1',\n '[appearance:textfield][&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none',\n ],\n },\n variants: {\n size: {\n small: {\n base: '',\n inputClass: 'text-size-4 py-px',\n },\n medium: {\n base: '',\n inputClass: 'text-size-5 leading-6 py-1',\n },\n large: {\n base: '',\n inputClass: 'text-size-6 py-2',\n },\n },\n status: {\n default: {\n base: ['border-[--bcm-ui-color-border-default]', 'hover:border-[--bcm-ui-color-border-primary]', 'has-[:focus]:border-[--bcm-ui-color-border-primary]'],\n },\n error: {\n base: ['border-[--bcm-ui-color-border-error]', 'hover:border-[--bcm-ui-color-border-error]', 'has-[:focus]:border-[--bcm-ui-color-border-error]'],\n },\n success: {\n base: ['border-[--bcm-ui-color-border-success]', 'hover:border-[--bcm-ui-color-border-success]', 'has-[:focus]:border-[--bcm-ui-color-border-success]'],\n },\n warning: {\n base: ['border-[--bcm-ui-color-border-warning]', 'hover:border-[--bcm-ui-color-border-warning]', 'has-[:focus]:border-[--bcm-ui-color-border-warning]'],\n },\n info: {\n base: ['border-[--bcm-ui-color-border-info]', 'hover:border-[--bcm-ui-color-border-info]', 'has-[:focus]:border-[--bcm-ui-color-border-info]'],\n },\n },\n fullWidth: {\n true: 'full-width w-full',\n },\n disabled: {\n true: 'disabled cursor-not-allowed',\n false: '',\n },\n focused: {\n true: {\n base: '',\n },\n },\n },\n defaultVariants: {\n size: 'medium',\n status: 'default',\n fullWidth: false,\n disabled: false,\n focused: false,\n },\n },\n {\n twMerge: false,\n },\n );\n\n private getDefaultIconForType(): string | undefined {\n return; // TODO: Will be implemented later\n // return defaultIcons[this.type as keyof typeof defaultIcons];\n }\n\n private togglePasswordVisibility = () => {\n this.isPasswordVisible = !this.isPasswordVisible;\n this.inputRef.type = this.isPasswordVisible ? 'text' : 'password';\n };\n\n private PasswordToggleButton = () => {\n if (this.type !== 'password' || this.disabled || this.readonly || this.value?.length === 0) return null;\n return (\n <button class=\"appearance-none flex items-center w-6 h-full justify-center\" onClick={this.togglePasswordVisibility} type=\"button\">\n <bcm-icon name={this.isPasswordVisible ? 'fa-eye-slash fa-regular' : 'fa-regular fa-eye'} size={this.iconSize}></bcm-icon>\n </button>\n );\n };\n\n private iconSize = {\n small: 14,\n medium: 16,\n large: 18,\n }[this.size];\n\n render() {\n const inputId = this._id + '-input' || this.name;\n\n const { base, inputClass } = this.styleClass({\n size: this.size,\n status: this.internalStatus,\n fullWidth: this.fullWidth,\n disabled: this.disabled,\n focused: this.isFocused,\n });\n\n return (\n <div class=\"bcm-ui-element\">\n {this.label && (\n <label\n class={classNames(\n 'input-label font-medium',\n {\n 'text-color-label': !this.disabled,\n 'text-color-disabled': this.disabled,\n },\n {\n 'text-size-3': this.size === 'small',\n 'text-size-4': this.size === 'medium',\n 'text-size-5': this.size === 'large',\n },\n )}\n htmlFor={inputId}\n >\n <slot name=\"label\">{this.label}</slot>\n {this.required && <span>*</span>}\n </label>\n )}\n\n <div class={base()}>\n {(this.hasSlotContent('prefix') || this.prefixIcon || this.getDefaultIconForType()) && (\n <div class=\"flex items-center gap-2 px-2\">\n {(this.prefixIcon || this.getDefaultIconForType()) && (\n <bcm-icon class=\"prefix-icon\" icon-name={this.prefixIcon || this.getDefaultIconForType()} size={this.iconSize}></bcm-icon>\n )}\n <slot name=\"prefix\"></slot>\n </div>\n )}\n <input\n ref={el => (this.inputRef = el)}\n id={inputId}\n class={inputClass()}\n type={this.type}\n name={this.name}\n disabled={this.disabled}\n readonly={this.readonly}\n required={this.required}\n placeholder={this.placeholder}\n autocomplete={this.autocomplete}\n minlength={this.minLength}\n maxlength={this.maxLength}\n min={this.min}\n max={this.max}\n step={this.step}\n pattern={this.pattern}\n aria-invalid={this.status === 'error'}\n aria-required={this.required}\n aria-labelledby={this.labelledby}\n aria-describedby={this.describedby}\n value={this.value}\n onInput={this.onInput}\n onChange={this.onChange}\n onFocus={this.onFocus}\n onBlur={this.onBlur}\n onKeyDown={this.onKeyDown}\n onKeyUp={this.onKeyUp}\n />\n {(this.hasSlotContent('suffix') || this.suffixIcon) && (\n <div class=\"flex items-center gap-2 px-2\">\n <slot name=\"suffix\"></slot>\n {this.suffixIcon && <bcm-icon class=\"suffix-icon\" icon-name={this.suffixIcon} size={this.iconSize}></bcm-icon>}\n </div>\n )}\n {/* {this.type === 'password' && this.value?.length > 0 && !this.disabled && ( \n // <bcm-icon\n // class=\"password-toggle-icon cursor-pointer\"\n // icon-name={this.isPasswordVisible ? 'fa-regular fa-eye-slash' : 'fa-regular fa-eye'}\n // size={iconSize}\n // onClick={this.togglePasswordVisibility}\n // ></bcm-icon>\n // )}*/}\n {this.PasswordToggleButton()}\n </div>\n {(this.captionText || this.internalErrorMessage || this.validationMessage) && (\n <div\n class={classNames(\n 'input-caption-text font-regular mt-1',\n {\n 'text-[--bcm-ui-color-text-caption]': !this.disabled && this.internalStatus === 'default',\n 'text-[--bcm-ui-color-text-error]': !this.disabled && (this.internalStatus === 'error' || !this.isValid),\n 'text-[--bcm-ui-color-text-success]': !this.disabled && this.internalStatus === 'success',\n 'text-[--bcm-ui-color-text-warning]': !this.disabled && this.internalStatus === 'warning',\n 'text-[--bcm-ui-color-text-info]': !this.disabled && this.internalStatus === 'info',\n 'text-[--bcm-ui-color-text-disabled]': this.disabled,\n },\n {\n 'text-size-3': this.size === 'small',\n 'text-size-4': this.size === 'medium',\n 'text-size-5': this.size === 'large',\n },\n )}\n >\n {!this.isValid ? this.validationMessage : this.internalStatus === 'error' ? this.internalErrorMessage : this.captionText}\n </div>\n )}\n </div>\n );\n }\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bcm-linked.entry.esm.js","sources":["src/components/linked/linked.css?tag=bcm-linked&encapsulation=shadow","src/components/linked/linked.component.tsx"],"sourcesContent":[":host {\n display: inline-block;\n}\n\n/* Popover API base styles */\n[popover] {\n position: absolute;\n margin: 0;\n border: none;\n padding: 0;\n overflow: visible;\n background: transparent;\n}\n\n/* Animation properties */\n[popover] {\n transition:\n opacity 150ms ease-out,\n transform 150ms ease-out,\n display 150ms ease-out allow-discrete,\n overlay 150ms ease-out allow-discrete;\n opacity: 0;\n transform: scale(0.95);\n}\n\n/* Open state */\n[popover]:popover-open {\n opacity: 1;\n transform: scale(1);\n}\n\n/* Starting style for entry animation */\n@starting-style {\n [popover]:popover-open {\n opacity: 0;\n transform: scale(0.95);\n }\n}\n\n/* Arrow positioning based on placement */\n[data-placement^='top'] [part='arrow'] {\n bottom: -4px;\n border-top: none;\n border-left: none;\n}\n\n[data-placement^='bottom'] [part='arrow'] {\n top: -4px;\n border-bottom: none;\n border-right: none;\n}\n\n[data-placement^='left'] [part='arrow'] {\n right: -4px;\n border-bottom: none;\n border-left: none;\n}\n\n[data-placement^='right'] [part='arrow'] {\n left: -4px;\n border-top: none;\n border-right: none;\n}\n","import { Component, ComponentInterface, Prop, Element, State, h, Event, EventEmitter, Watch, Method, Host, Listen } from '@stencil/core';\nimport { computePosition, shift, offset, autoUpdate, flip, arrow, type Placement } from '@floating-ui/dom';\nimport { tv } from '@utils/tv';\n\nexport type TriggerType = 'hover' | 'click' | 'focus' | 'manual';\n\n/**\n * @component BcmLinked\n * @description A flexible linked floating element component that displays contextual content relative to a trigger element.\n * Built on the native Popover API for top-layer rendering and Floating UI for intelligent positioning.\n * Supports different trigger types (click, hover, focus, manual) and comprehensive event system.\n *\n * @example Basic Click Trigger\n * <bcm-linked trigger=\"click\">\n * <button slot=\"trigger\">Click Me</button>\n * <div>Floating content here</div>\n * </bcm-linked>\n *\n * @example Hover Trigger with Delays\n * <bcm-linked trigger=\"hover\" show-delay=\"200\" hide-delay=\"100\">\n * <span slot=\"trigger\">Hover Me</span>\n * <div>This appears on hover</div>\n * </bcm-linked>\n *\n * @example Manual Control\n * <bcm-linked id=\"my-linked\" trigger=\"manual\">\n * <button slot=\"trigger\">Trigger</button>\n * <div>Controlled content</div>\n * </bcm-linked>\n * <script>\n * const linked = document.querySelector('#my-linked');\n * linked.show(); // Opens the floating element\n * linked.hide(); // Closes the floating element\n * </script>\n *\n * @slot trigger - The trigger element that controls the floating element visibility\n * @slot - Default slot for the floating content\n *\n * @csspart floating - The floating container element\n * @csspart arrow - The arrow element pointing to the trigger\n * @csspart content - The content wrapper element\n */\n@Component({\n tag: 'bcm-linked',\n styleUrl: 'linked.css',\n shadow: true,\n})\nexport class BcmLinked implements ComponentInterface {\n @Element() host: HTMLElement;\n\n // Element references\n private floatingRef?: HTMLElement;\n private triggerRef?: HTMLElement;\n private arrowRef?: HTMLElement;\n\n // Cleanup references\n private cleanupAutoUpdate?: () => void;\n private showTimeout?: number;\n private hideTimeout?: number;\n\n // Unique ID for ARIA\n private componentId = `linked-${Math.random().toString(36).substring(2, 11)}`;\n\n /**\n * @prop {boolean} visible - Controls the visibility state of the floating element.\n * Can be set programmatically or toggled by user interaction.\n * Default: false\n */\n @Prop({ mutable: true, reflect: true }) visible: boolean = false;\n\n /**\n * @prop {TriggerType} trigger - Defines the interaction type to show/hide the floating element.\n * 'click' toggles on click, 'hover' shows on mouse enter and hides on mouse leave,\n * 'focus' shows on focus and hides on blur, 'manual' requires programmatic control.\n * Default: 'click'\n */\n @Prop() trigger: TriggerType = 'click';\n\n /**\n * @prop {Placement} placement - Defines the position of the floating element relative to the trigger.\n * Default: 'bottom-start'\n */\n @Prop() placement: Placement = 'bottom-start';\n\n /**\n * @prop {number} showDelay - Delay in milliseconds before showing the floating element.\n * Default: 0\n */\n @Prop() showDelay: number = 0;\n\n /**\n * @prop {number} hideDelay - Delay in milliseconds before hiding the floating element.\n * Default: 0\n */\n @Prop() hideDelay: number = 0;\n\n /**\n * @prop {number} offsetDistance - Distance in pixels between the floating element and the trigger.\n * Default: 8\n */\n @Prop() offsetDistance: number = 8;\n\n /**\n * @prop {boolean} showArrow - Whether to show an arrow pointing to the trigger element.\n * Default: true\n */\n @Prop() showArrow: boolean = true;\n\n /**\n * @prop {boolean} disabled - Disables the floating element, preventing it from showing.\n * Default: false\n */\n @Prop() disabled: boolean = false;\n\n /**\n * @prop {boolean} closeOnOutsideClick - Whether to close when clicking outside.\n * Default: true\n */\n @Prop() closeOnOutsideClick: boolean = true;\n\n /**\n * @prop {boolean} closeOnEscape - Whether to close when pressing Escape key.\n * Default: true\n */\n @Prop() closeOnEscape: boolean = true;\n\n // Internal state\n @State() isVisible: boolean = false;\n\n /**\n * @event bcmBeforeShow - Emitted before the floating element shows.\n */\n @Event({ composed: false, bubbles: false }) bcmBeforeShow: EventEmitter<void>;\n\n /**\n * @event bcmShow - Emitted when the floating element is shown.\n */\n @Event({ composed: false, bubbles: false }) bcmShow: EventEmitter<void>;\n\n /**\n * @event bcmBeforeHide - Emitted before the floating element hides.\n */\n @Event({ composed: false, bubbles: false }) bcmBeforeHide: EventEmitter<void>;\n\n /**\n * @event bcmHide - Emitted when the floating element is hidden.\n */\n @Event({ composed: false, bubbles: false }) bcmHide: EventEmitter<void>;\n\n /**\n * @event bcmShown - Emitted after the floating element is fully shown (after animation).\n */\n @Event({ composed: false, bubbles: false }) bcmShown: EventEmitter<void>;\n\n /**\n * @event bcmHidden - Emitted after the floating element is fully hidden (after animation).\n */\n @Event({ composed: false, bubbles: false }) bcmHidden: EventEmitter<void>;\n\n // Watch for visibility prop changes\n @Watch('visible')\n handleVisibleChange(newValue: boolean) {\n if (this.disabled) return;\n\n if (newValue) {\n this.showInternal();\n } else {\n this.hideInternal();\n }\n }\n\n @Watch('disabled')\n handleDisabledChange(isDisabled: boolean) {\n if (isDisabled && this.visible) {\n this.hide();\n }\n }\n\n @Watch('placement')\n @Watch('offsetDistance')\n @Watch('showArrow')\n handlePositionPropsChange() {\n if (this.visible) {\n this.updatePosition();\n }\n }\n\n // Internal show logic\n private showInternal() {\n if (!this.floatingRef || this.disabled) return;\n\n this.bcmShow.emit();\n this.isVisible = true;\n this.floatingRef.showPopover();\n this.startAutoUpdate();\n this.updatePosition();\n this.triggerRef?.setAttribute('aria-expanded', 'true');\n\n if (this.closeOnOutsideClick && this.trigger !== 'manual') {\n this.addOutsideClickListener();\n }\n\n // Emit bcmShown after animation\n requestAnimationFrame(() => {\n this.bcmShown.emit();\n });\n }\n\n // Internal hide logic\n private hideInternal() {\n if (!this.floatingRef) return;\n\n this.bcmHide.emit();\n this.isVisible = false;\n this.floatingRef.hidePopover();\n this.stopAutoUpdate();\n this.triggerRef?.setAttribute('aria-expanded', 'false');\n this.removeOutsideClickListener();\n\n // Emit bcmHidden after animation\n setTimeout(() => {\n this.bcmHidden.emit();\n }, 150);\n }\n\n /**\n * Programmatically shows the floating element.\n * Respects the showDelay prop.\n */\n @Method()\n async show(): Promise<void> {\n if (this.visible || this.disabled) return;\n\n this.clearTimeouts();\n\n if (this.showDelay > 0) {\n this.showTimeout = window.setTimeout(() => {\n this.bcmBeforeShow.emit();\n this.visible = true;\n }, this.showDelay);\n } else {\n this.bcmBeforeShow.emit();\n this.visible = true;\n }\n }\n\n /**\n * Programmatically hides the floating element.\n * Respects the hideDelay prop.\n */\n @Method()\n async hide(): Promise<void> {\n if (!this.visible) return;\n\n this.clearTimeouts();\n\n if (this.hideDelay > 0) {\n this.hideTimeout = window.setTimeout(() => {\n this.bcmBeforeHide.emit();\n this.visible = false;\n }, this.hideDelay);\n } else {\n this.bcmBeforeHide.emit();\n this.visible = false;\n }\n }\n\n /**\n * Toggles the floating element visibility.\n */\n @Method()\n async toggle(): Promise<void> {\n if (this.visible) {\n await this.hide();\n } else {\n await this.show();\n }\n }\n\n /**\n * Updates the position of the floating element.\n * Useful when the trigger element moves or resizes.\n */\n @Method()\n async updatePosition(): Promise<void> {\n await this.calculatePosition();\n }\n\n private clearTimeouts() {\n if (this.showTimeout) {\n clearTimeout(this.showTimeout);\n this.showTimeout = undefined;\n }\n if (this.hideTimeout) {\n clearTimeout(this.hideTimeout);\n this.hideTimeout = undefined;\n }\n }\n\n private handleTriggerSlotChange = () => {\n const slot = this.host.shadowRoot?.querySelector('slot[name=\"trigger\"]') as HTMLSlotElement;\n if (!slot) return;\n\n const elements = slot.assignedElements();\n if (elements.length > 0) {\n this.removeTriggerListeners();\n this.triggerRef = elements[0] as HTMLElement;\n this.setupTriggerListeners();\n this.setupAriaAttributes();\n }\n };\n\n private setupAriaAttributes() {\n if (!this.triggerRef) return;\n\n this.triggerRef.setAttribute('aria-describedby', this.componentId);\n this.triggerRef.setAttribute('aria-expanded', String(this.visible));\n this.triggerRef.setAttribute('aria-haspopup', 'true');\n }\n\n private setupTriggerListeners() {\n if (!this.triggerRef || this.disabled) return;\n\n switch (this.trigger) {\n case 'hover':\n this.triggerRef.addEventListener('mouseenter', this.handleMouseEnter);\n this.triggerRef.addEventListener('mouseleave', this.handleMouseLeave);\n this.floatingRef?.addEventListener('mouseenter', this.handleFloatingMouseEnter);\n this.floatingRef?.addEventListener('mouseleave', this.handleFloatingMouseLeave);\n break;\n\n case 'click':\n this.triggerRef.addEventListener('click', this.handleTriggerClick);\n break;\n\n case 'focus':\n this.triggerRef.addEventListener('focus', this.handleFocus);\n this.triggerRef.addEventListener('blur', this.handleBlur);\n break;\n\n case 'manual':\n // No automatic listeners\n break;\n }\n }\n\n private removeTriggerListeners() {\n if (!this.triggerRef) return;\n\n this.triggerRef.removeEventListener('mouseenter', this.handleMouseEnter);\n this.triggerRef.removeEventListener('mouseleave', this.handleMouseLeave);\n this.triggerRef.removeEventListener('click', this.handleTriggerClick);\n this.triggerRef.removeEventListener('focus', this.handleFocus);\n this.triggerRef.removeEventListener('blur', this.handleBlur);\n\n this.floatingRef?.removeEventListener('mouseenter', this.handleFloatingMouseEnter);\n this.floatingRef?.removeEventListener('mouseleave', this.handleFloatingMouseLeave);\n }\n\n private handleMouseEnter = () => {\n this.show();\n };\n\n private handleMouseLeave = () => {\n this.hide();\n };\n\n private handleFloatingMouseEnter = () => {\n this.clearTimeouts();\n };\n\n private handleFloatingMouseLeave = () => {\n this.hide();\n };\n\n private handleTriggerClick = (event: MouseEvent) => {\n event.stopPropagation();\n this.toggle();\n };\n\n private handleFocus = () => {\n this.show();\n };\n\n private handleBlur = () => {\n this.hide();\n };\n\n @Listen('keydown', { target: 'document' })\n handleKeyDown(event: KeyboardEvent) {\n if (!this.closeOnEscape || !this.visible) return;\n\n if (event.key === 'Escape') {\n const openLinked = Array.from(document.querySelectorAll('bcm-linked[visible]'));\n const topLinked = openLinked[openLinked.length - 1];\n\n if (topLinked === this.host) {\n event.preventDefault();\n this.hide();\n this.triggerRef?.focus();\n }\n }\n }\n\n private handleOutsideClick = (event: Event) => {\n if (!this.closeOnOutsideClick || !this.visible) return;\n\n const target = event.target as Node;\n const path = event.composedPath();\n\n const isInsideHost = this.host.contains(target) || path.includes(this.host);\n const isInsideFloating = this.floatingRef?.contains(target) || (this.floatingRef && path.includes(this.floatingRef));\n\n if (!isInsideHost && !isInsideFloating) {\n this.hide();\n }\n };\n\n private addOutsideClickListener() {\n setTimeout(() => {\n document.addEventListener('click', this.handleOutsideClick, true);\n }, 0);\n }\n\n private removeOutsideClickListener() {\n document.removeEventListener('click', this.handleOutsideClick, true);\n }\n\n private async calculatePosition() {\n if (!this.triggerRef || !this.floatingRef || !this.isVisible) return;\n\n const virtualElement = {\n getBoundingClientRect: () => this.triggerRef!.getBoundingClientRect(),\n };\n\n const middlewareList = [\n offset(this.offsetDistance),\n flip({\n fallbackPlacements: ['top', 'bottom', 'left', 'right', 'top-start', 'top-end', 'bottom-start', 'bottom-end', 'left-start', 'left-end', 'right-start', 'right-end'],\n }),\n shift({\n padding: 8,\n }),\n ];\n\n if (this.showArrow && this.arrowRef) {\n middlewareList.push(arrow({ element: this.arrowRef }));\n }\n\n const { x, y, placement, middlewareData } = await computePosition(virtualElement, this.floatingRef, {\n placement: this.placement,\n middleware: middlewareList,\n strategy: 'fixed',\n });\n\n Object.assign(this.floatingRef.style, {\n left: `${x}px`,\n top: `${y}px`,\n });\n\n // Arrow positioning\n if (this.showArrow && this.arrowRef && middlewareData.arrow) {\n const { x: arrowX, y: arrowY } = middlewareData.arrow;\n const staticSide = {\n top: 'bottom',\n right: 'left',\n bottom: 'top',\n left: 'right',\n }[placement.split('-')[0]] as string;\n\n Object.assign(this.arrowRef.style, {\n left: arrowX != null ? `${arrowX}px` : '',\n top: arrowY != null ? `${arrowY}px` : '',\n right: '',\n bottom: '',\n [staticSide]: '-4px',\n });\n }\n\n this.floatingRef.setAttribute('data-placement', placement);\n }\n\n private startAutoUpdate() {\n if (!this.triggerRef || !this.floatingRef) return;\n\n this.cleanupAutoUpdate = autoUpdate(this.triggerRef, this.floatingRef, () => this.calculatePosition(), {\n ancestorScroll: true,\n ancestorResize: true,\n elementResize: true,\n layoutShift: true,\n });\n }\n\n private stopAutoUpdate() {\n this.cleanupAutoUpdate?.();\n this.cleanupAutoUpdate = undefined;\n }\n\n private handleToggle = (event: ToggleEvent) => {\n if (event.newState === 'open' && !this.isVisible) {\n this.isVisible = true;\n } else if (event.newState === 'closed' && this.isVisible) {\n this.isVisible = false;\n }\n };\n\n componentDidLoad() {\n // Toggle event listener (Popover API)\n this.floatingRef?.addEventListener('toggle', this.handleToggle as EventListener);\n\n // Initial trigger setup - manually trigger slot change handler\n this.handleTriggerSlotChange();\n\n // Initial state sync\n if (this.visible) {\n this.showInternal();\n }\n }\n\n disconnectedCallback() {\n this.clearTimeouts();\n this.stopAutoUpdate();\n this.removeTriggerListeners();\n this.removeOutsideClickListener();\n\n if (this.floatingRef) {\n this.floatingRef.removeEventListener('toggle', this.handleToggle as EventListener);\n\n if (this.isVisible) {\n try {\n this.floatingRef.hidePopover();\n } catch (e) {\n // Element might already be removed\n }\n }\n }\n }\n\n private linkedClass = tv({\n slots: {\n wrapper: 'inline-block',\n floating: ['bcm-ui-element', 'fixed', 'bg-color-basic-base', 'rounded-md', 'shadow-lg', 'border', 'border-color-basic-subtle'],\n arrow: ['absolute', 'w-2', 'h-2', 'bg-color-basic-base', 'border', 'border-color-basic-subtle', 'rotate-45'],\n content: 'bg-color-basic-base',\n },\n });\n\n render() {\n const { wrapper, floating, arrow, content } = this.linkedClass();\n\n return (\n <Host>\n <div class={wrapper()}>\n {/* Trigger slot */}\n <slot name=\"trigger\" onSlotchange={this.handleTriggerSlotChange}></slot>\n\n {/* Floating element with Popover API */}\n <div\n ref={el => (this.floatingRef = el as HTMLElement)}\n id={this.componentId}\n part=\"floating\"\n class={floating()}\n // @ts-ignore - popover is a valid HTML attribute\n popover=\"manual\"\n role=\"dialog\"\n >\n {/* Arrow */}\n {this.showArrow && <div ref={el => (this.arrowRef = el as HTMLElement)} part=\"arrow\" class={arrow()} />}\n\n {/* Content */}\n <div part=\"content\" class={content()}>\n <slot></slot>\n </div>\n </div>\n </div>\n </Host>\n );\n }\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bcm-modal.entry.esm.js","sources":["src/components/modal/modal.css?tag=bcm-modal&encapsulation=shadow","src/components/modal/modal.component.tsx"],"sourcesContent":[":host {\n display: contents;\n}\n","import { Component, Prop, h, Element, Event, EventEmitter, Method, Watch, Listen, State } from '@stencil/core';\nimport { tv } from '@utils/tv';\n\nexport type ModalSize = 'small' | 'medium' | 'large' | 'xlarge' | 'xxlarge' | 'full';\nexport type ModalPlacement = 'center' | 'top';\n\n/**\n * @component BcmModal\n * @description A flexible modal dialog component built on the native HTML Dialog API.\n * Provides a powerful way to display content in a layer above the page with full keyboard and focus management.\n *\n * @slot - Main content area of the modal\n * @slot header - Custom header content (overrides header-text prop)\n * @slot helper - Custom helper text content (overrides helper-text prop)\n * @slot footer - Footer content for action buttons\n *\n * @part dialog - The native dialog element\n * @part container - The container wrapper for centering and scrolling\n * @part modal - The main modal box\n * @part header - The header section\n * @part header-content - The content wrapper inside header\n * @part title - The title heading element\n * @part helper-text - The helper text paragraph\n * @part close-button - The close button in header\n * @part content - The main content area\n * @part footer - The footer section\n *\n * @example\n * ```html\n * <!-- Basic usage -->\n * <bcm-modal open header-text=\"Welcome\" helper-text=\"Please read carefully\">\n * <p>Modal content goes here</p>\n * <div slot=\"footer\">\n * <button data-dismiss>Close</button>\n * </div>\n * </bcm-modal>\n *\n * <!-- Custom size and placement -->\n * <bcm-modal size=\"large\" placement=\"top\">\n * <div slot=\"header\">Custom Header</div>\n * <p>Content here</p>\n * <div slot=\"footer\">\n * <button>Cancel</button>\n * <button>Confirm</button>\n * </div>\n * </bcm-modal>\n *\n * <!-- Full screen modal -->\n * <bcm-modal full-screen no-footer>\n * <p>Full screen content</p>\n * </bcm-modal>\n *\n * <!-- Programmatic usage -->\n * <bcm-modal id=\"myModal\">Content</bcm-modal>\n * <script>\n * document.getElementById('myModal').show();\n * </script>\n * ```\n */\n@Component({\n tag: 'bcm-modal',\n styleUrl: 'modal.css',\n shadow: true,\n})\nexport class BcmModal {\n @Element() host: HTMLBcmModalElement;\n\n private dialogRef?: HTMLDialogElement;\n\n /**\n * Controls whether the modal is open or closed\n */\n @Prop({ mutable: true, reflect: true }) open: boolean = false;\n\n /**\n * The size of the modal\n * - 'small': 400px\n * - 'medium': 600px\n * - 'large': 800px\n * - 'xlarge': 1024px\n * - 'xxlarge': 1200px\n * - 'full': 100% width\n */\n @Prop() size: ModalSize = 'medium';\n\n /**\n * The placement of the modal on the screen\n * - 'center': Centered vertically and horizontally\n * - 'top': Aligned to the top with 80px padding\n */\n @Prop() placement: ModalPlacement = 'center';\n\n /**\n * Controls backdrop behavior\n * - true: Shows backdrop, modal can be closed by clicking outside\n * - false: No backdrop\n * - 'static': Shows backdrop but prevents closing by clicking outside (triggers shake animation)\n */\n @Prop() backdrop: boolean | 'static' = true;\n\n /**\n * Makes the modal take full width of the viewport (max-width: 100%)\n */\n @Prop({ attribute: 'full-width' }) fullWidth: boolean = false;\n\n /**\n * Makes the modal take the full screen (100vw x 100vh, no border radius)\n */\n @Prop({ attribute: 'full-screen' }) fullScreen: boolean = false;\n\n /**\n * Text to display in the modal header\n */\n @Prop({ attribute: 'header-text' }) headerText?: string;\n\n /**\n * Helper text to display below the header title\n */\n @Prop({ attribute: 'helper-text' }) helperText?: string;\n\n /**\n * Hides the header section completely\n */\n @Prop({ attribute: 'no-header' }) noHeader: boolean = false;\n\n /**\n * Hides the footer section completely\n */\n @Prop({ attribute: 'no-footer' }) noFooter: boolean = false;\n\n /**\n * Allows closing the modal by clicking on the backdrop\n */\n @Prop({ attribute: 'close-on-backdrop' }) closeOnBackdrop: boolean = true;\n\n /**\n * Allows closing the modal by pressing the Escape key\n */\n @Prop({ attribute: 'close-on-escape' }) closeOnEscape: boolean = true;\n\n @State() isAnimating: boolean = false;\n @State() shake: boolean = false;\n\n /**\n * Emitted after the modal has opened\n */\n @Event() bcmOpen: EventEmitter<void>;\n\n /**\n * Emitted after the modal has closed\n */\n @Event() bcmClose: EventEmitter<void>;\n\n /**\n * Emitted before the modal opens. Can be cancelled by calling event.preventDefault()\n */\n @Event({ cancelable: true }) bcmBeforeOpen: EventEmitter<void>;\n\n /**\n * Emitted before the modal closes. Can be cancelled by calling event.preventDefault()\n */\n @Event({ cancelable: true }) bcmBeforeClose: EventEmitter<void>;\n\n private modalClass = tv({\n slots: {\n dialog:\n 'bcm-ui-element fixed inset-0 m-0 p-0 w-full max-w-full h-full max-h-full border-none bg-transparent backdrop:bg-color-default-dark backdrop:opacity-50 backdrop:transition-opacity backdrop:duration-300',\n container: 'fixed inset-0 flex items-start justify-center p-4 overflow-y-auto overscroll-contain',\n modal: 'relative bg-color-basic-base text-color-default rounded-lg shadow-2xl transform transition-all duration-300 ease-in-out flex flex-col',\n header: 'flex justify-between items-start bg-color-base text-color-default border-color-default border-solid border-0 border-b rounded-t-lg',\n headerContent: 'flex-1 min-w-0 flex items-center gap-2',\n title: 'font-semibold m-0 text-size-6 text-color-header',\n helperText: 'text-size-5 text-color-placeholder m-0',\n closeButton:\n 'text-size-5 font-medium text-color-default bg-transparent border-none p-0 h-6 w-6 rounded hover:bg-color-default-hover cursor-pointer active:bg-color-active transition-colors flex-shrink-0 outline-none focus-visible:ring ',\n content: 'flex-grow overflow-y-auto',\n footer: 'flex items-center justify-end gap-2',\n },\n variants: {\n open: {\n true: {\n modal: 'opacity-100 translate-y-0 scale-100',\n },\n false: {\n modal: 'opacity-0 -translate-y-4 scale-95',\n },\n },\n placement: {\n center: {\n container: 'items-center',\n },\n top: {\n container: 'items-start pt-20',\n },\n },\n size: {\n small: {\n header: 'py-3 px-4',\n content: 'p-4',\n footer: 'py-3 px-4',\n },\n medium: {\n header: 'py-4 px-5',\n content: 'p-5',\n footer: 'py-4 px-5',\n },\n large: {\n header: 'py-4 px-6',\n content: 'p-6',\n footer: 'py-4 px-6',\n },\n xlarge: {\n header: 'py-5 px-6',\n content: 'p-6',\n footer: 'py-5 px-6',\n },\n xxlarge: {\n header: 'py-5 px-8',\n content: 'p-8',\n footer: 'py-5 px-8',\n },\n full: {\n header: 'py-5 px-8',\n content: 'p-8',\n footer: 'py-5 px-8',\n },\n },\n fullScreen: {\n true: {\n modal: 'rounded-none w-screen h-screen max-w-none max-h-none',\n container: 'p-0',\n },\n },\n shake: {\n true: {\n modal: 'animate-shake',\n },\n },\n noHeader: {\n true: {\n header: 'hidden',\n },\n },\n noFooter: {\n true: {\n footer: 'hidden',\n },\n },\n },\n });\n\n @Watch('open')\n async handleOpenChange(isOpen: boolean) {\n if (isOpen) {\n this.isAnimating = true;\n const event = this.bcmBeforeOpen.emit();\n if (event.defaultPrevented) {\n this.open = false;\n return;\n }\n\n // Use native dialog API with top-layer\n if (this.dialogRef) {\n this.dialogRef.showModal();\n // Small delay for animation\n await new Promise(resolve => setTimeout(resolve, 50));\n this.isAnimating = false;\n this.bcmOpen.emit();\n }\n } else {\n this.isAnimating = true;\n const event = this.bcmBeforeClose.emit();\n if (event.defaultPrevented) {\n this.open = true;\n return;\n }\n\n // Wait for animation before closing\n await new Promise(resolve => setTimeout(resolve, 300));\n if (this.dialogRef) {\n this.dialogRef.close();\n }\n this.isAnimating = false;\n this.bcmClose.emit();\n }\n }\n\n @Listen('click', { capture: true })\n handleClick(event: MouseEvent) {\n // Use composedPath to work with shadow DOM and slots\n const path = event.composedPath() as HTMLElement[];\n const dismissElement = path.find(el => el.hasAttribute?.('data-dismiss'));\n const closeModalElement = path.find(el => el.hasAttribute?.('data-close-modal'));\n\n if (dismissElement) {\n this.hide();\n event.preventDefault();\n event.stopPropagation();\n } else if (closeModalElement) {\n const modalId = closeModalElement.getAttribute('data-close-modal');\n // If modalId matches this modal's id, close it\n if (!modalId || modalId === this.host.id) {\n this.hide();\n event.preventDefault();\n event.stopPropagation();\n }\n }\n }\n\n @Listen('keydown')\n handleKeyDown(event: KeyboardEvent) {\n if (event.key === 'Escape' && this.open) {\n // Only handle ESC if this is the topmost modal\n const openModals = Array.from(document.querySelectorAll('bcm-modal[open]'));\n const topModal = openModals[openModals.length - 1];\n\n if (topModal !== this.host) {\n return;\n }\n\n event.preventDefault();\n if (this.closeOnEscape) {\n if (this.backdrop === 'static') {\n this.shakeModal();\n } else {\n this.hide();\n }\n } else if (this.backdrop === 'static') {\n this.shakeModal();\n }\n }\n }\n\n /**\n * Programmatically opens the modal\n */\n @Method()\n async show(): Promise<void> {\n this.open = true;\n }\n\n /**\n * Programmatically closes the modal\n */\n @Method()\n async hide(): Promise<void> {\n this.open = false;\n }\n\n /**\n * Toggles the modal open/closed state\n */\n @Method()\n async toggle(): Promise<void> {\n this.open = !this.open;\n }\n\n private shakeModal() {\n this.shake = true;\n setTimeout(() => {\n this.shake = false;\n }, 300);\n }\n\n private handleBackdropClick = (event: MouseEvent) => {\n const target = event.target as HTMLElement;\n // Check if click is on the container (backdrop area), not on modal content\n if (target.getAttribute('part') === 'container') {\n if (this.backdrop === 'static') {\n this.shakeModal();\n } else if (this.closeOnBackdrop) {\n this.hide();\n }\n }\n };\n\n private handleDialogCancel = (event: Event) => {\n event.preventDefault();\n if (this.closeOnEscape) {\n if (this.backdrop === 'static') {\n this.shakeModal();\n } else {\n this.hide();\n }\n }\n };\n\n private getModalStyle() {\n if (this.fullScreen) {\n return {\n width: '100vw',\n height: '100vh',\n maxWidth: 'none',\n maxHeight: 'none',\n };\n }\n\n if (this.fullWidth) {\n return {\n width: '100%',\n maxWidth: '100%',\n };\n }\n\n const widths = {\n small: '400px',\n medium: '600px',\n large: '800px',\n xlarge: '1024px',\n xxlarge: '1200px',\n full: '100%',\n };\n\n return {\n width: widths[this.size],\n maxWidth: this.fullScreen ? 'none' : '90vw',\n maxHeight: this.fullScreen ? 'none' : '90vh',\n };\n }\n\n componentDidLoad() {\n if (this.open && this.dialogRef) {\n this.dialogRef.showModal();\n }\n }\n\n disconnectedCallback() {\n if (this.dialogRef && this.open) {\n this.dialogRef.close();\n }\n }\n\n render() {\n const { dialog, container, modal, header, headerContent, title, helperText, closeButton, content, footer } = this.modalClass({\n open: this.open,\n placement: this.placement,\n size: this.size,\n fullScreen: this.fullScreen,\n shake: this.shake,\n noHeader: this.noHeader,\n noFooter: this.noFooter,\n });\n\n return (\n <dialog\n ref={el => (this.dialogRef = el)}\n part=\"dialog\"\n class={dialog()}\n onClick={this.handleBackdropClick}\n onCancel={this.handleDialogCancel}\n aria-labelledby=\"modal-title\"\n aria-describedby={this.helperText ? 'modal-helper' : undefined}\n aria-modal=\"true\"\n >\n <div part=\"container\" class={container()}>\n <div part=\"modal\" class={modal()} style={this.getModalStyle()} role=\"document\" onClick={e => e.stopPropagation()}>\n {!this.noHeader && (\n <div part=\"header\" class={header()}>\n <div part=\"header-content\" class={headerContent()}>\n <h2 id=\"modal-title\" part=\"title\" class={title()}>\n <slot name=\"header\">{this.headerText}</slot>\n </h2>\n {this.helperText && (\n <p id=\"modal-helper\" part=\"helper-text\" class={helperText()}>\n <slot name=\"helper\">{this.helperText}</slot>\n </p>\n )}\n </div>\n <button part=\"close-button\" class={closeButton()} onClick={() => this.hide()} aria-label=\"Close modal\" type=\"button\">\n <bcm-icon name=\"fa-solid fa-xmark\"></bcm-icon>\n </button>\n </div>\n )}\n\n <div part=\"content\" class={content()}>\n <slot />\n </div>\n\n {!this.noFooter && (\n <div part=\"footer\" class={footer()}>\n <slot name=\"footer\" />\n </div>\n )}\n </div>\n </div>\n </dialog>\n );\n }\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bcm-pop-confirm.entry.esm.js","sources":["src/components/pop-confirm/pop-confirm.css?tag=bcm-pop-confirm&encapsulation=shadow","src/components/pop-confirm/pop-confirm.component.tsx"],"sourcesContent":[":host {\n display: inline-block;\n --popover-bg: var(--bcm-ui-color-background-basic-panel);\n}\n\n[popover] {\n border: none;\n padding: 0;\n overflow: visible;\n}\n\n[popover]:not(:popover-open) {\n display: none;\n}\n\n[popover]:popover-open {\n opacity: 1;\n transform: scale(1);\n transition:\n opacity 150ms ease-out,\n transform 150ms ease-out;\n}\n\n@starting-style {\n [popover]:popover-open {\n opacity: 0;\n transform: scale(0.95);\n }\n}\n\n::slotted([slot='body']) {\n font-family: 'Inter', sans-serif;\n text-wrap: pretty;\n}\n","import { Component, Element, Event, EventEmitter, h, Listen, Method, Prop, State, Watch } from '@stencil/core';\nimport { computePosition, flip, shift, offset, arrow, autoUpdate } from '@floating-ui/dom';\nimport { tv } from '@utils/tv';\n\nexport type PopConfirmPlacement = 'top' | 'right' | 'bottom' | 'left';\nexport type PopConfirmSize = 'small' | 'medium' | 'large';\nexport type PopConfirmStatus = 'info' | 'success' | 'warning' | 'error';\n\nconst statusIcons = {\n info: 'fa-solid fa-circle-info',\n success: 'fa-solid fa-circle-check',\n warning: 'fa-solid fa-triangle-exclamation',\n error: 'fa-solid fa-circle-xmark',\n};\n\n/**\n * @component BcmPopConfirm\n * @description A confirmation popover component that displays a confirmation dialog with customizable actions.\n * Built on the native Popover API for top-layer rendering and Floating UI for intelligent positioning.\n * Ideal for confirming destructive actions or important decisions inline.\n *\n * @slot - Default slot for the trigger element that opens the confirmation popover\n * @slot header - Custom header content (overrides headerText prop)\n * @slot body - Custom body content (overrides description prop)\n * @slot footer - Custom footer content with action buttons (overrides default confirm/cancel buttons)\n *\n * @csspart container - The main popover container element\n * @csspart arrow - The arrow pointer element\n * @csspart body - The body/description section\n * @csspart footer - The footer section with action buttons\n *\n * @example Basic Usage\n * ```html\n * <bcm-pop-confirm\n * header-text=\"Delete Item?\"\n * description=\"Are you sure you want to delete this item? This action cannot be undone.\"\n * status=\"error\"\n * >\n * <bcm-button status=\"error\">Delete</bcm-button>\n * </bcm-pop-confirm>\n * ```\n *\n * @example With Event Handlers\n * ```html\n * <bcm-pop-confirm\n * id=\"deleteConfirm\"\n * header-text=\"Confirm Delete\"\n * description=\"This will permanently delete the item.\"\n * status=\"warning\"\n * confirm-text=\"Yes, Delete\"\n * cancel-text=\"No, Keep It\"\n * >\n * <bcm-button>Delete Item</bcm-button>\n * </bcm-pop-confirm>\n *\n * <script>\n * const popconfirm = document.getElementById('deleteConfirm');\n * popconfirm.addEventListener('bcmConfirm', () => {\n * console.log('User confirmed deletion');\n * // Perform delete operation\n * });\n * popconfirm.addEventListener('bcmCancel', () => {\n * console.log('User cancelled deletion');\n * });\n * </script>\n * ```\n *\n * @example Different Status Types\n * ```html\n * <!-- Info (default) -->\n * <bcm-pop-confirm header-text=\"Information\" description=\"This is an info message\">\n * <bcm-button>Info</bcm-button>\n * </bcm-pop-confirm>\n *\n * <!-- Success -->\n * <bcm-pop-confirm status=\"success\" header-text=\"Confirm Action\" description=\"Proceed with this action?\">\n * <bcm-button status=\"success\">Proceed</bcm-button>\n * </bcm-pop-confirm>\n *\n * <!-- Warning -->\n * <bcm-pop-confirm status=\"warning\" header-text=\"Warning\" description=\"This action may have consequences\">\n * <bcm-button status=\"warning\">Continue</bcm-button>\n * </bcm-pop-confirm>\n *\n * <!-- Error/Danger -->\n * <bcm-pop-confirm status=\"error\" header-text=\"Danger Zone\" description=\"This is a destructive action\">\n * <bcm-button status=\"error\">Delete</bcm-button>\n * </bcm-pop-confirm>\n * ```\n *\n * @example Custom Content with Slots\n * ```html\n * <bcm-pop-confirm status=\"warning\">\n * <bcm-button>Custom Confirm</bcm-button>\n *\n * <div slot=\"header\">\n * <strong>Custom Header</strong>\n * </div>\n *\n * <div slot=\"body\">\n * <p>This is custom body content with <strong>HTML formatting</strong>.</p>\n * <ul>\n * <li>Point 1</li>\n * <li>Point 2</li>\n * </ul>\n * </div>\n *\n * <div slot=\"footer\">\n * <bcm-button kind=\"outline\" size=\"small\">Maybe Later</bcm-button>\n * <bcm-button status=\"success\" size=\"small\">Confirm</bcm-button>\n * </div>\n * </bcm-pop-confirm>\n * ```\n *\n * @example Different Sizes\n * ```html\n * <!-- Small -->\n * <bcm-pop-confirm size=\"small\" header-text=\"Small\" description=\"Compact confirmation\">\n * <bcm-button size=\"small\">Small</bcm-button>\n * </bcm-pop-confirm>\n *\n * <!-- Medium (default) -->\n * <bcm-pop-confirm size=\"medium\" header-text=\"Medium\" description=\"Standard confirmation\">\n * <bcm-button size=\"medium\">Medium</bcm-button>\n * </bcm-pop-confirm>\n *\n * <!-- Large -->\n * <bcm-pop-confirm size=\"large\" header-text=\"Large\" description=\"Spacious confirmation with more room for content\">\n * <bcm-button size=\"large\">Large</bcm-button>\n * </bcm-pop-confirm>\n * ```\n *\n * @example Programmatic Control\n * ```html\n * <bcm-pop-confirm id=\"myConfirm\" header-text=\"Confirm\" description=\"Are you sure?\">\n * <bcm-button>Trigger</bcm-button>\n * </bcm-pop-confirm>\n *\n * <bcm-button id=\"showBtn\">Show Programmatically</bcm-button>\n * <bcm-button id=\"hideBtn\">Hide Programmatically</bcm-button>\n *\n * <script>\n * const popconfirm = document.getElementById('myConfirm');\n * document.getElementById('showBtn').addEventListener('click', () => {\n * popconfirm.show();\n * });\n * document.getElementById('hideBtn').addEventListener('click', () => {\n * popconfirm.hide();\n * });\n * </script>\n * ```\n *\n * @example Without Status Icon\n * ```html\n * <bcm-pop-confirm\n * header-text=\"Simple Confirmation\"\n * description=\"No status icon shown\"\n * status-icon={false}\n * >\n * <bcm-button>Click Me</bcm-button>\n * </bcm-pop-confirm>\n * ```\n *\n * @example Different Placements\n * ```html\n * <bcm-pop-confirm placement=\"top\" header-text=\"Top\" description=\"Opens above\">\n * <bcm-button>Top</bcm-button>\n * </bcm-pop-confirm>\n *\n * <bcm-pop-confirm placement=\"right\" header-text=\"Right\" description=\"Opens to the right\">\n * <bcm-button>Right</bcm-button>\n * </bcm-pop-confirm>\n *\n * <bcm-pop-confirm placement=\"bottom\" header-text=\"Bottom\" description=\"Opens below\">\n * <bcm-button>Bottom</bcm-button>\n * </bcm-pop-confirm>\n *\n * <bcm-pop-confirm placement=\"left\" header-text=\"Left\" description=\"Opens to the left\">\n * <bcm-button>Left</bcm-button>\n * </bcm-pop-confirm>\n * ```\n */\n@Component({\n tag: 'bcm-pop-confirm',\n styleUrl: 'pop-confirm.css',\n shadow: true,\n})\nexport class BcmPopConfirm {\n @Element() host: HTMLElement;\n\n private popconfirmRef?: HTMLDivElement;\n private arrowRef?: HTMLDivElement;\n private triggerRef?: HTMLElement;\n private cleanupAutoUpdate?: () => void;\n private popconfirmId: string;\n\n /**\n * @prop {PopConfirmPlacement} placement - Position of the popover relative to the trigger element.\n * Automatically flips if there's not enough space.\n * Default: 'top'\n */\n @Prop() placement: PopConfirmPlacement = 'top';\n\n /**\n * @prop {PopConfirmSize} size - Size variant that controls padding and text size.\n * - 'small': Compact size with minimal padding\n * - 'medium': Standard size\n * - 'large': Spacious size with more padding\n * Default: 'medium'\n */\n @Prop() size: PopConfirmSize = 'medium';\n\n /**\n * @prop {PopConfirmStatus} status - Status type that determines the color scheme and icon.\n * - 'info': Informational (blue)\n * - 'success': Success/positive action (green)\n * - 'warning': Warning/caution (yellow)\n * - 'error': Error/destructive action (red)\n * Default: 'info'\n */\n @Prop() status: PopConfirmStatus = 'info';\n\n /**\n * @prop {string} headerText - Text displayed in the header section.\n * Can be overridden by using the 'header' slot.\n * Default: ''\n */\n @Prop() headerText: string = '';\n\n /**\n * @prop {string} description - Description text displayed in the body section.\n * Can be overridden by using the 'body' slot.\n * Default: ''\n */\n @Prop() description: string = '';\n\n /**\n * @prop {string} confirmText - Text for the confirm button.\n * Default: 'Yes'\n */\n @Prop() confirmText: string = 'Yes';\n\n /**\n * @prop {string} cancelText - Text for the cancel button.\n * Default: 'Cancel'\n */\n @Prop() cancelText: string = 'Cancel';\n\n /**\n * @prop {boolean} showArrow - Whether to show the arrow pointing to the trigger.\n * Default: true\n */\n @Prop() showArrow: boolean = true;\n\n /**\n * @prop {boolean} statusIcon - Whether to show the status icon in the header.\n * Icon only shows if headerText is also provided.\n * Default: true\n */\n @Prop() statusIcon: boolean = true;\n\n /**\n * @prop {number} offsetDistance - Distance in pixels between the popover and trigger element.\n * Default: 12\n */\n @Prop() offsetDistance: number = 12;\n\n /**\n * @prop {boolean} closeOnOutsideClick - Whether to close when clicking outside the popover.\n * Default: true\n */\n @Prop() closeOnOutsideClick: boolean = true;\n\n /**\n * @prop {boolean} closeOnEscape - Whether to close when pressing the Escape key.\n * Default: true\n */\n @Prop() closeOnEscape: boolean = true;\n\n @State() isOpen = false;\n\n /**\n * @event bcmBeforeOpen - Emitted before the popover opens.\n * Useful for performing actions before the popover becomes visible.\n */\n @Event({ composed: false, bubbles: false }) bcmBeforeOpen: EventEmitter<void>;\n\n /**\n * @event bcmOpen - Emitted when the popover is opened.\n * Useful for tracking when the popover becomes visible.\n */\n @Event({ composed: false, bubbles: false }) bcmOpen: EventEmitter<void>;\n\n /**\n * @event bcmBeforeClose - Emitted before the popover closes.\n * Useful for performing cleanup actions before hiding.\n */\n @Event({ composed: false, bubbles: false }) bcmBeforeClose: EventEmitter<void>;\n\n /**\n * @event bcmClose - Emitted when the popover is closed.\n * Useful for tracking when the popover is hidden.\n */\n @Event({ composed: false, bubbles: false }) bcmClose: EventEmitter<void>;\n\n /**\n * @event bcmConfirm - Emitted when the user clicks the confirm button.\n * This is where you should handle the confirmed action.\n */\n @Event({ composed: false, bubbles: false }) bcmConfirm: EventEmitter<void>;\n\n /**\n * @event bcmCancel - Emitted when the user clicks cancel, presses Escape, or clicks outside.\n * Useful for tracking when the user dismisses the confirmation.\n */\n @Event({ composed: false, bubbles: false }) bcmCancel: EventEmitter<void>;\n\n @Watch('isOpen')\n async handleOpenChange(open: boolean) {\n if (!this.popconfirmRef) return;\n\n if (open) {\n this.popconfirmRef.showPopover();\n await new Promise(resolve => requestAnimationFrame(() => resolve(undefined)));\n await this.updatePosition();\n this.startAutoUpdate();\n this.bcmOpen.emit();\n // Add outside click listener after a frame to avoid immediate close\n if (this.closeOnOutsideClick) {\n requestAnimationFrame(() => {\n document.addEventListener('click', this.handleOutsideClick);\n });\n }\n } else {\n this.popconfirmRef.hidePopover();\n this.stopAutoUpdate();\n this.bcmClose.emit();\n document.removeEventListener('click', this.handleOutsideClick);\n }\n }\n\n /**\n * Programmatically shows the popconfirm.\n * @returns Promise that resolves when the show operation begins\n */\n @Method()\n async show(): Promise<void> {\n if (this.isOpen) return;\n this.bcmBeforeOpen.emit();\n this.isOpen = true;\n }\n\n /**\n * Programmatically hides the popconfirm.\n * @returns Promise that resolves when the hide operation begins\n */\n @Method()\n async hide(): Promise<void> {\n if (!this.isOpen) return;\n this.bcmBeforeClose.emit();\n this.isOpen = false;\n }\n\n /**\n * Toggles the popconfirm visibility.\n * If open, it will close. If closed, it will open.\n * @returns Promise that resolves when the toggle operation completes\n */\n @Method()\n async toggle(): Promise<void> {\n if (this.isOpen) {\n await this.hide();\n } else {\n await this.show();\n }\n }\n\n private startAutoUpdate() {\n if (!this.triggerRef || !this.popconfirmRef) return;\n\n this.cleanupAutoUpdate = autoUpdate(this.triggerRef, this.popconfirmRef, () => this.updatePosition(), {\n ancestorScroll: true,\n ancestorResize: true,\n elementResize: true,\n layoutShift: true,\n });\n }\n\n private stopAutoUpdate() {\n if (this.cleanupAutoUpdate) {\n this.cleanupAutoUpdate();\n this.cleanupAutoUpdate = undefined;\n }\n }\n\n private async updatePosition() {\n if (!this.triggerRef || !this.popconfirmRef) return;\n\n const middleware = [offset(this.offsetDistance), flip(), shift({ padding: 8 })];\n\n if (this.showArrow && this.arrowRef) {\n middleware.push(arrow({ element: this.arrowRef }));\n }\n\n const virtualElement = {\n getBoundingClientRect: () => this.triggerRef.getBoundingClientRect(),\n };\n\n const { x, y, placement, middlewareData } = await computePosition(virtualElement, this.popconfirmRef, {\n placement: this.placement,\n strategy: 'fixed',\n middleware,\n });\n\n this.popconfirmRef.style.left = `${x}px`;\n this.popconfirmRef.style.top = `${y}px`;\n\n if (this.showArrow && this.arrowRef && middlewareData.arrow) {\n const { x: arrowX, y: arrowY } = middlewareData.arrow;\n const side = placement.split('-')[0] as 'top' | 'right' | 'bottom' | 'left';\n\n const staticSide = {\n top: 'bottom',\n right: 'left',\n bottom: 'top',\n left: 'right',\n }[side];\n\n Object.assign(this.arrowRef.style, {\n left: arrowX != null ? `${arrowX}px` : '',\n top: arrowY != null ? `${arrowY}px` : '',\n right: '',\n bottom: '',\n [staticSide]: '-4px',\n });\n }\n }\n\n private handleSlotChange = () => {\n const slot = this.host.shadowRoot?.querySelector('slot:not([name])');\n if (!slot) return;\n\n const elements = (slot as HTMLSlotElement).assignedElements();\n const assignedElement = elements[0] as HTMLElement;\n\n this.triggerRef = (assignedElement || this.host) as HTMLElement;\n\n if (!this.triggerRef) return;\n\n if (this.popconfirmRef && this.popconfirmId) {\n this.triggerRef.setAttribute('aria-describedby', this.popconfirmId);\n }\n\n this.removeTriggerListeners();\n this.setupTriggerListeners();\n };\n\n private setupTriggerListeners() {\n if (!this.triggerRef) return;\n this.triggerRef.addEventListener('click', this.handleTriggerClick);\n }\n\n private removeTriggerListeners() {\n if (!this.triggerRef) return;\n this.triggerRef.removeEventListener('click', this.handleTriggerClick);\n }\n\n private handleTriggerClick = () => {\n this.toggle();\n };\n\n private handleOutsideClick = (e: Event) => {\n if (!this.closeOnOutsideClick || !this.isOpen) return;\n\n const target = e.target as Node;\n if (!this.host.contains(target) && !this.popconfirmRef?.contains(target)) {\n this.handleCancel();\n }\n };\n\n @Listen('keydown', { target: 'document' })\n handleKeyDown(e: KeyboardEvent) {\n if (!this.closeOnEscape || !this.isOpen) return;\n\n if (e.key === 'Escape') {\n // Check if this is the topmost open popconfirm\n const openPopconfirms = Array.from(document.querySelectorAll('bcm-pop-confirm')).filter(el => {\n const popconfirmEl = el.shadowRoot?.querySelector('[popover]');\n return popconfirmEl?.matches(':popover-open');\n });\n\n const topPopconfirm = openPopconfirms[openPopconfirms.length - 1] as unknown as HTMLElement;\n if (topPopconfirm === (this.host as unknown as HTMLElement)) {\n e.preventDefault();\n e.stopPropagation();\n this.handleCancel();\n }\n }\n }\n\n private handleToggle = (e: Event) => {\n const toggleEvent = e as ToggleEvent;\n if (toggleEvent.newState === 'open' && !this.isOpen) {\n this.isOpen = true;\n } else if (toggleEvent.newState === 'closed' && this.isOpen) {\n this.isOpen = false;\n }\n };\n\n private handleConfirm = () => {\n this.bcmConfirm.emit();\n this.hide();\n };\n\n private handleCancel = () => {\n this.bcmCancel.emit();\n this.hide();\n };\n\n componentWillLoad() {\n this.popconfirmId = `popconfirm-${Math.random().toString(36).substring(2, 11)}`;\n }\n\n componentDidLoad() {\n if (this.popconfirmRef) {\n this.popconfirmRef.addEventListener('toggle', this.handleToggle);\n }\n }\n\n disconnectedCallback() {\n this.stopAutoUpdate();\n this.removeTriggerListeners();\n document.removeEventListener('click', this.handleOutsideClick);\n if (this.popconfirmRef) {\n this.popconfirmRef.removeEventListener('toggle', this.handleToggle);\n }\n }\n\n private popconfirmClass = tv({\n slots: {\n container: 'bcm-ui-element fixed m-0 flex flex-col bg-[--popover-bg] rounded-lg shadow-3 z-[9999]',\n arrow: 'absolute w-3 h-3 bg-[--popover-bg] rotate-45',\n closeBtn: 'absolute flex size-6 items-center justify-center hover:bg-gray-100 rounded-full cursor-pointer text-color-muted',\n header: 'flex items-center pr-8',\n headerLeft: 'flex items-center gap-2',\n title: '!text-color-header font-semibold',\n body: 'flex-1 font-sans text-pretty',\n footer: 'flex flex-row justify-end gap-2',\n },\n variants: {\n size: {\n small: {\n container: 'text-size-4 max-w-64 p-4 gap-4',\n title: 'text-size-5',\n closeBtn: 'top-3 right-3',\n },\n medium: {\n container: 'text-size-5 max-w-80 p-6 gap-6',\n title: 'text-size-6',\n closeBtn: 'top-4 right-4',\n },\n large: {\n container: 'text-size-6 max-w-96 p-8 gap-8',\n title: 'text-size-7',\n closeBtn: 'top-6 right-6',\n },\n },\n status: {\n info: { headerLeft: 'text-[var(--bcm-ui-color-text-info)]' },\n success: { headerLeft: 'text-[var(--bcm-ui-color-text-success)]' },\n warning: { headerLeft: 'text-[var(--bcm-ui-color-text-warning)]' },\n error: { headerLeft: 'text-[var(--bcm-ui-color-text-error)]' },\n },\n },\n });\n\n render() {\n const { container, arrow: arrowClass, header, headerLeft, title, closeBtn, body, footer } = this.popconfirmClass({\n size: this.size,\n status: this.status,\n });\n\n // Only show header if there's actual header content (headerText or custom header slot)\n // Status icon only shows if explicitly enabled AND there's header text\n const showStatusIcon = this.statusIcon && this.headerText;\n const hasHeaderText = Boolean(this.headerText);\n\n return (\n <div class=\"inline-block\">\n <slot onSlotchange={this.handleSlotChange}></slot>\n\n <div\n ref={el => (this.popconfirmRef = el)}\n id={this.popconfirmId}\n part=\"container\"\n class={container()}\n popover=\"manual\"\n role=\"alertdialog\"\n aria-labelledby={hasHeaderText ? `${this.popconfirmId}-header` : undefined}\n aria-describedby={`${this.popconfirmId}-body`}\n >\n {this.showArrow && <div ref={el => (this.arrowRef = el)} part=\"arrow\" class={arrowClass()} />}\n\n {/* Close button - absolute positioned */}\n <div class={closeBtn()} onClick={this.handleCancel} role=\"button\" tabIndex={0} aria-label=\"Close\">\n <bcm-icon icon-name=\"far fa-times\"></bcm-icon>\n </div>\n\n <header class={header()}>\n <div class={headerLeft()}>\n {showStatusIcon && <bcm-icon icon-name={statusIcons[this.status]} />}\n {hasHeaderText && (\n <span id={`${this.popconfirmId}-header`} class={title()}>\n {this.headerText}\n </span>\n )}\n <slot name=\"header\"></slot>\n </div>\n </header>\n\n <main id={`${this.popconfirmId}-body`} part=\"body\" class={body()}>\n <slot name=\"body\">{this.description}</slot>\n </main>\n\n <footer part=\"footer\" class={footer()}>\n <slot name=\"footer\">\n <bcm-button kind=\"outline\" size={this.size} onClick={this.handleCancel}>\n {this.cancelText}\n </bcm-button>\n <bcm-button size={this.size} status={this.status} kind=\"primary\" onClick={this.handleConfirm}>\n {this.confirmText}\n </bcm-button>\n </slot>\n </footer>\n </div>\n </div>\n );\n }\n}\n"],"names":[],"mappings":"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"}