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
@@ -54,154 +54,148 @@ import { tv } from "../../utils/tv";
54
54
  * ```
55
55
  */
56
56
  export class BcmDrawer {
57
- constructor() {
58
- /**
59
- * Controls whether the drawer is open or closed
60
- */
61
- this.open = false;
62
- /**
63
- * The size of the drawer. Can be a preset value or a custom CSS size
64
- * - For left/right drawers:
65
- * - 'small': 320px
66
- * - 'medium': 480px
67
- * - 'large': 1064px
68
- * - For top/bottom drawers:
69
- * - 'small': 40vh
70
- * - 'medium': 60vh
71
- * - 'large': 90vh
72
- * - Custom values: Any valid CSS size (e.g., '600px', '50%', '30rem', '80vw')
73
- */
74
- this.size = 'medium';
75
- /**
76
- * The position where the drawer slides in from
77
- * - 'left': Slides from the left edge
78
- * - 'right': Slides from the right edge
79
- * - 'top': Slides from the top edge
80
- * - 'bottom': Slides from the bottom edge
81
- */
82
- this.position = 'right';
83
- /**
84
- * Makes the drawer take full width (for left/right) or full height (for top/bottom)
85
- */
86
- this.fullWidth = false;
87
- /**
88
- * Makes the drawer take the full screen (100vw x 100vh)
89
- */
90
- this.fullScreen = false;
91
- /**
92
- * Controls backdrop behavior
93
- * - true: Shows backdrop, drawer can be closed by clicking outside
94
- * - false: No backdrop
95
- * - 'static': Shows backdrop but prevents closing by clicking outside (triggers shake animation)
96
- */
97
- this.backdrop = true;
98
- /**
99
- * Hides the header section completely
100
- */
101
- this.noHeader = false;
102
- /**
103
- * Hides the footer section completely
104
- */
105
- this.noFooter = false;
106
- /**
107
- * Allows closing the drawer by clicking on the backdrop
108
- */
109
- this.closeOnBackdrop = true;
110
- /**
111
- * Allows closing the drawer by pressing the Escape key
112
- */
113
- this.closeOnEscape = true;
114
- this.shake = false;
115
- this.drawerClass = tv({
116
- slots: {
117
- dialog: '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',
118
- container: 'fixed inset-0 flex overflow-hidden',
119
- drawer: 'relative bg-color-base text-color-default shadow-2xl flex flex-col',
120
- header: 'flex justify-between items-start bg-color-base text-color-default border-color-default border-solid border-0 py-3 px-4',
121
- headerContent: 'flex-1 min-w-0 flex items-center gap-2',
122
- title: 'font-semibold m-0 text-size-6 text-color-header',
123
- helperText: 'text-size-5 text-color-placeholder m-0',
124
- closeButton: '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',
125
- content: 'flex-grow overflow-y-auto p-4',
126
- footer: 'flex items-center justify-end gap-2 py-3 px-4',
127
- },
128
- variants: {
129
- position: {
130
- left: {
131
- container: 'justify-start',
132
- drawer: 'h-full',
133
- header: 'border-b',
134
- },
135
- right: {
136
- container: 'justify-end',
137
- drawer: 'h-full',
138
- header: 'border-b',
139
- },
140
- top: {
141
- container: 'items-start',
142
- drawer: 'w-full',
143
- header: 'border-b',
144
- },
145
- bottom: {
146
- container: 'items-end',
147
- drawer: 'w-full',
148
- header: 'border-t',
149
- },
57
+ host;
58
+ dialogRef;
59
+ /**
60
+ * Controls whether the drawer is open or closed
61
+ */
62
+ open = false;
63
+ /**
64
+ * The size of the drawer. Can be a preset value or a custom CSS size
65
+ * - For left/right drawers:
66
+ * - 'small': 320px
67
+ * - 'medium': 480px
68
+ * - 'large': 1064px
69
+ * - For top/bottom drawers:
70
+ * - 'small': 40vh
71
+ * - 'medium': 60vh
72
+ * - 'large': 90vh
73
+ * - Custom values: Any valid CSS size (e.g., '600px', '50%', '30rem', '80vw')
74
+ */
75
+ size = 'medium';
76
+ /**
77
+ * The position where the drawer slides in from
78
+ * - 'left': Slides from the left edge
79
+ * - 'right': Slides from the right edge
80
+ * - 'top': Slides from the top edge
81
+ * - 'bottom': Slides from the bottom edge
82
+ */
83
+ position = 'right';
84
+ /**
85
+ * Makes the drawer take full width (for left/right) or full height (for top/bottom)
86
+ */
87
+ fullWidth = false;
88
+ /**
89
+ * Makes the drawer take the full screen (100vw x 100vh)
90
+ */
91
+ fullScreen = false;
92
+ /**
93
+ * Controls backdrop behavior
94
+ * - true: Shows backdrop, drawer can be closed by clicking outside
95
+ * - false: No backdrop
96
+ * - 'static': Shows backdrop but prevents closing by clicking outside (triggers shake animation)
97
+ */
98
+ backdrop = true;
99
+ /**
100
+ * Text to display in the drawer header
101
+ */
102
+ headerText;
103
+ /**
104
+ * Helper text to display below the header title
105
+ */
106
+ helperText;
107
+ /**
108
+ * Hides the header section completely
109
+ */
110
+ noHeader = false;
111
+ /**
112
+ * Hides the footer section completely
113
+ */
114
+ noFooter = false;
115
+ /**
116
+ * Allows closing the drawer by clicking on the backdrop
117
+ */
118
+ closeOnBackdrop = true;
119
+ /**
120
+ * Allows closing the drawer by pressing the Escape key
121
+ */
122
+ closeOnEscape = true;
123
+ shake = false;
124
+ /**
125
+ * Emitted after the drawer has opened
126
+ */
127
+ bcmOpen;
128
+ /**
129
+ * Emitted after the drawer has closed
130
+ */
131
+ bcmClose;
132
+ /**
133
+ * Emitted before the drawer opens. Can be cancelled by calling event.preventDefault()
134
+ */
135
+ bcmBeforeOpen;
136
+ /**
137
+ * Emitted before the drawer closes. Can be cancelled by calling event.preventDefault()
138
+ */
139
+ bcmBeforeClose;
140
+ drawerClass = tv({
141
+ slots: {
142
+ dialog: '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',
143
+ container: 'fixed inset-0 flex overflow-hidden',
144
+ drawer: 'relative bg-color-base text-color-default shadow-2xl flex flex-col',
145
+ header: 'flex justify-between items-start bg-color-base text-color-default border-color-default border-solid border-0 py-3 px-4',
146
+ headerContent: 'flex-1 min-w-0 flex items-center gap-2',
147
+ title: 'font-semibold m-0 text-size-6 text-color-header',
148
+ helperText: 'text-size-5 text-color-placeholder m-0',
149
+ closeButton: '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',
150
+ content: 'flex-grow overflow-y-auto p-4',
151
+ footer: 'flex items-center justify-end gap-2 py-3 px-4',
152
+ },
153
+ variants: {
154
+ position: {
155
+ left: {
156
+ container: 'justify-start',
157
+ drawer: 'h-full',
158
+ header: 'border-b',
159
+ },
160
+ right: {
161
+ container: 'justify-end',
162
+ drawer: 'h-full',
163
+ header: 'border-b',
164
+ },
165
+ top: {
166
+ container: 'items-start',
167
+ drawer: 'w-full',
168
+ header: 'border-b',
169
+ },
170
+ bottom: {
171
+ container: 'items-end',
172
+ drawer: 'w-full',
173
+ header: 'border-t',
150
174
  },
151
- fullScreen: {
152
- true: {
153
- drawer: 'w-screen h-screen max-w-none max-h-none',
154
- container: 'p-0',
155
- },
175
+ },
176
+ fullScreen: {
177
+ true: {
178
+ drawer: 'w-screen h-screen max-w-none max-h-none',
179
+ container: 'p-0',
156
180
  },
157
- shake: {
158
- true: {
159
- drawer: 'animate-shake',
160
- },
181
+ },
182
+ shake: {
183
+ true: {
184
+ drawer: 'animate-shake',
161
185
  },
162
- noHeader: {
163
- true: {
164
- header: 'hidden',
165
- },
186
+ },
187
+ noHeader: {
188
+ true: {
189
+ header: 'hidden',
166
190
  },
167
- noFooter: {
168
- true: {
169
- footer: 'hidden',
170
- },
191
+ },
192
+ noFooter: {
193
+ true: {
194
+ footer: 'hidden',
171
195
  },
172
196
  },
173
- });
174
- this.handleBackdropClick = (event) => {
175
- const target = event.target;
176
- // Check if click is on the container (backdrop area), not on drawer content
177
- if (target.getAttribute('part') === 'container') {
178
- if (this.backdrop === 'static') {
179
- this.shakeDrawer();
180
- }
181
- else if (this.closeOnBackdrop) {
182
- this.hide();
183
- }
184
- }
185
- };
186
- this.handleDialogCancel = (event) => {
187
- event.preventDefault();
188
- if (this.backdrop === 'static') {
189
- this.shakeDrawer();
190
- // Force dialog to stay open for static backdrop
191
- requestAnimationFrame(() => {
192
- if (this.dialogRef && !this.dialogRef.open && this.open) {
193
- this.dialogRef.showModal();
194
- }
195
- });
196
- }
197
- else if (this.closeOnEscape) {
198
- this.hide();
199
- }
200
- };
201
- this.handleDrawerClick = (e) => {
202
- e.stopPropagation();
203
- };
204
- }
197
+ },
198
+ });
205
199
  handleOpenChange(isOpen) {
206
200
  if (isOpen) {
207
201
  const event = this.bcmBeforeOpen.emit();
@@ -230,7 +224,7 @@ export class BcmDrawer {
230
224
  }
231
225
  handleClick(event) {
232
226
  const path = event.composedPath();
233
- const dismissElement = path.find(el => { var _a; return (_a = el.hasAttribute) === null || _a === void 0 ? void 0 : _a.call(el, 'data-dismiss'); });
227
+ const dismissElement = path.find(el => el.hasAttribute?.('data-dismiss'));
234
228
  if (dismissElement) {
235
229
  this.hide();
236
230
  event.preventDefault();
@@ -261,6 +255,36 @@ export class BcmDrawer {
261
255
  this.shake = false;
262
256
  }, 300);
263
257
  }
258
+ handleBackdropClick = (event) => {
259
+ const target = event.target;
260
+ // Check if click is on the container (backdrop area), not on drawer content
261
+ if (target.getAttribute('part') === 'container') {
262
+ if (this.backdrop === 'static') {
263
+ this.shakeDrawer();
264
+ }
265
+ else if (this.closeOnBackdrop) {
266
+ this.hide();
267
+ }
268
+ }
269
+ };
270
+ handleDialogCancel = (event) => {
271
+ event.preventDefault();
272
+ if (this.backdrop === 'static') {
273
+ this.shakeDrawer();
274
+ // Force dialog to stay open for static backdrop
275
+ requestAnimationFrame(() => {
276
+ if (this.dialogRef && !this.dialogRef.open && this.open) {
277
+ this.dialogRef.showModal();
278
+ }
279
+ });
280
+ }
281
+ else if (this.closeOnEscape) {
282
+ this.hide();
283
+ }
284
+ };
285
+ handleDrawerClick = (e) => {
286
+ e.stopPropagation();
287
+ };
264
288
  componentDidLoad() {
265
289
  if (this.open && this.dialogRef) {
266
290
  this.dialogRef.showModal();
@@ -337,7 +361,7 @@ export class BcmDrawer {
337
361
  noHeader: this.noHeader,
338
362
  noFooter: this.noFooter,
339
363
  });
340
- return (h("dialog", { key: '2b60e637660a9aaed3d1223114d2f0df4c66bb44', ref: el => (this.dialogRef = el), part: "dialog", class: dialog(), onClick: this.handleBackdropClick, onCancel: this.handleDialogCancel, "aria-labelledby": "drawer-title", "aria-describedby": this.helperText ? 'drawer-helper' : undefined, "aria-modal": "true" }, h("div", { key: 'd08f1664dfc39e62bc0cf499b5976af0e14310da', part: "container", class: container() }, h("div", { key: 'ec18449ff5552177551606c5fdd48ce9116fd287', part: "drawer", class: drawer(), style: this.getDrawerStyle(), role: "document", onClick: this.handleDrawerClick }, !this.noHeader && (h("div", { key: '43a3e3afd31c5db5cf9c616f01a3212ec6e3472b', part: "header", class: header() }, h("div", { key: 'bb3d4eea627e0425422015cc400ccea81c70a1a5', part: "header-content", class: headerContent() }, h("h2", { key: '5c5cbd204a44f31171b932fba0932bfcba89e255', id: "drawer-title", part: "title", class: title() }, h("slot", { key: 'c8785c89adb151666c76c158c82f3e9ca6666199', name: "header" }, this.headerText)), this.helperText && (h("p", { key: '2ca315ad22086559305dc0cdcd63f32115a4f721', id: "drawer-helper", part: "helper-text", class: helperText() }, h("slot", { key: '93dcafee1e25675a0e72b53d9d6c848fd63c2f86', name: "helper" }, this.helperText)))), h("button", { key: '1eb3d5b2e9ac607bd1642ca9f067064bf376ce97', part: "close-button", class: closeButton(), onClick: () => this.hide(), "aria-label": "Close drawer", type: "button" }, h("bcm-icon", { key: '0c48991f9d68c874b78384de0d8a3bd15b27f363', name: "fa-solid fa-xmark" })))), h("div", { key: 'd34a886ca003e38bc84b86185fd0b5690954fd9f', part: "content", class: content() }, h("slot", { key: '1c3978b0a66f122b5d4ee5582ed0458c6fc16c73' })), !this.noFooter && (h("div", { key: 'db5faf3da663d11455299840e33732995aa75cf0', part: "footer", class: footer() }, h("slot", { key: '4836d78626ec999eb8f0aa8585d20df48a677f72', name: "footer" })))))));
364
+ return (h("dialog", { key: '6a335177fb3c90ad206bba7f7c7a93a20df7611e', ref: el => (this.dialogRef = el), part: "dialog", class: dialog(), onClick: this.handleBackdropClick, onCancel: this.handleDialogCancel, "aria-labelledby": "drawer-title", "aria-describedby": this.helperText ? 'drawer-helper' : undefined, "aria-modal": "true" }, h("div", { key: '2eeea8a2a6736013dcec73021e24bb3db6a921c7', part: "container", class: container() }, h("div", { key: 'a36fd40e00c83334d47715c2b180a0408b0a08b3', part: "drawer", class: drawer(), style: this.getDrawerStyle(), role: "document", onClick: this.handleDrawerClick }, !this.noHeader && (h("div", { key: '89f9e92c08969aca42d298b4648fdb2439babb73', part: "header", class: header() }, h("div", { key: '8812211450386c31d1e4ec8ea7a2378606aa126b', part: "header-content", class: headerContent() }, h("h2", { key: '41f3e0d6956ec421641bdc1a69e7f6deeb7ef139', id: "drawer-title", part: "title", class: title() }, h("slot", { key: 'b8623778b2a1c43721bf744a0b121c11bb1cca55', name: "header" }, this.headerText)), this.helperText && (h("p", { key: '79303d4ba960c904baa9e2f1649a4d1f69081c53', id: "drawer-helper", part: "helper-text", class: helperText() }, h("slot", { key: '9cbd0e00c5d2f2655afd86d173defcdddb80ec84', name: "helper" }, this.helperText)))), h("button", { key: '459c89390be0fe8edbfd865d49fc20518e620e4a', part: "close-button", class: closeButton(), onClick: () => this.hide(), "aria-label": "Close drawer", type: "button" }, h("bcm-icon", { key: '4bc80633645791203b4b2fc0619bc78343376467', name: "fa-solid fa-xmark" })))), h("div", { key: '131da58022d71653d81ba64d95796c1c1a1253d5', part: "content", class: content() }, h("slot", { key: 'a32114b0afa5dbf12b865d4005a880bf40e57c84' })), !this.noFooter && (h("div", { key: 'afad547deecb9cdaf80e92fbbf6fb1b0780a7be7', part: "footer", class: footer() }, h("slot", { key: '0b09555a831909c6211d744d49759a2d0bc5e0a1', name: "footer" })))))));
341
365
  }
342
366
  static get is() { return "bcm-drawer"; }
343
367
  static get encapsulation() { return "shadow"; }
@@ -1 +1 @@
1
- {"version":3,"file":"drawer.component.js","sourceRoot":"","sources":["../../../src/components/drawer/drawer.component.tsx"],"names":[],"mappings":"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","sourcesContent":["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"]}
1
+ {"version":3,"file":"drawer.component.js","sourceRoot":"","sources":["../../../src/components/drawer/drawer.component.tsx"],"names":[],"mappings":"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","sourcesContent":["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"]}
@@ -1,22 +1,13 @@
1
1
  import { h, Host } from "@stencil/core";
2
2
  import { tv } from "../../utils/tv";
3
3
  export class Dropdown {
4
- constructor() {
5
- this.dropdownItems = [];
6
- this.dropdownClass = tv({
7
- 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',
8
- });
9
- this.handleSlotChange = () => {
10
- this.dropdownItems = Array.from(this.host.querySelectorAll('bcm-dropdown-item'));
11
- if (this.dropdownItems.length === 0) {
12
- console.warn('No dropdown items found in dropdown component');
13
- }
14
- };
15
- }
4
+ host;
5
+ text;
6
+ dropdownItems = [];
7
+ bcmDropdownChange;
16
8
  handleDropdownItemChange(event) {
17
- var _a;
18
- const { element, selected } = event === null || event === void 0 ? void 0 : event.detail;
19
- (_a = this.dropdownItems) === null || _a === void 0 ? void 0 : _a.forEach(item => {
9
+ const { element, selected } = event?.detail;
10
+ this.dropdownItems?.forEach(item => {
20
11
  if (item != element) {
21
12
  item.selected = false;
22
13
  }
@@ -26,8 +17,17 @@ export class Dropdown {
26
17
  selected,
27
18
  });
28
19
  }
20
+ dropdownClass = tv({
21
+ 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',
22
+ });
23
+ handleSlotChange = () => {
24
+ this.dropdownItems = Array.from(this.host.querySelectorAll('bcm-dropdown-item'));
25
+ if (this.dropdownItems.length === 0) {
26
+ console.warn('No dropdown items found in dropdown component');
27
+ }
28
+ };
29
29
  render() {
30
- return (h(Host, { key: '616424e348e7b0bf6281a1dfc9a6cf003a10166d' }, h("bcm-linked", { key: '9738f964a5aaecff10685ec42043bbf74f540194', trigger: "click", placement: "bottom-start" }, h("bcm-button", { key: '619996c5aeb3351d02cf051fd50050fa7e22315f', kind: "outline", slot: "trigger" }, h("span", { key: '704ca8d6e695ce46a3dbfc7cf7473952db6e2d27', part: "text" }, this.text)), h("div", { key: '13b3fdcbb0d360065ea6c0bb22eb622f789667fd', part: "dropdown-container", class: this.dropdownClass() }, h("slot", { key: '6cebd340b556af602af7d10e78ba7ba5e34191c7', onSlotchange: this.handleSlotChange })))));
30
+ return (h(Host, { key: 'a573b6ba000722dc455d75f5085fe0b9b08eb4f8' }, h("bcm-linked", { key: '5dbbcfce9d6b3be30696a5efd0f06020331d4e0f', trigger: "click", placement: "bottom-start" }, h("bcm-button", { key: 'd8bdcbb9990ef903cccc837db5cb97aeb00e8807', kind: "outline", slot: "trigger" }, h("span", { key: '4694ae4aa91429e6a3da676e3228cd6463d17174', part: "text" }, this.text)), h("div", { key: '4fdb37f07ca1652f9fd5fcf586516ae42d45b201', part: "dropdown-container", class: this.dropdownClass() }, h("slot", { key: '6b4386fe543c67a1ac3fe91dffc0e27d986d368b', onSlotchange: this.handleSlotChange })))));
31
31
  }
32
32
  static get is() { return "bcm-dropdown"; }
33
33
  static get encapsulation() { return "shadow"; }
@@ -1 +1 @@
1
- {"version":3,"file":"dropdown.component.js","sourceRoot":"","sources":["../../../src/components/dropdown/dropdown.component.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAsB,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAgB,MAAM,EAAE,MAAM,eAAe,CAAC;AAC1H,OAAO,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AAO/B,MAAM,OAAO,QAAQ;IALrB;QAUW,kBAAa,GAAiC,EAAE,CAAC;QA0BlD,kBAAa,GAAG,EAAE,CAAC;YACzB,IAAI,EAAE,uIAAuI;SAC9I,CAAC,CAAC;QAEK,qBAAgB,GAAG,GAAG,EAAE;YAC9B,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,CAAC,CAAC;YAEjF,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACpC,OAAO,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;YAChE,CAAC;QACH,CAAC,CAAC;KAgBH;IAzCC,wBAAwB,CAAC,KAAkB;;QACzC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,CAAC;QAE5C,MAAA,IAAI,CAAC,aAAa,0CAAE,OAAO,CAAC,IAAI,CAAC,EAAE;YACjC,IAAI,IAAI,IAAI,OAAO,EAAE,CAAC;gBACpB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;YACxB,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;YAC1B,OAAO,EAAE,OAAO;YAChB,QAAQ;SACT,CAAC,CAAC;IACL,CAAC;IAcD,MAAM;QACJ,OAAO,CACL,EAAC,IAAI;YACH,mEAAY,OAAO,EAAC,OAAO,EAAC,SAAS,EAAC,cAAc;gBAClD,mEAAY,IAAI,EAAC,SAAS,EAAC,IAAI,EAAC,SAAS;oBACvC,6DAAM,IAAI,EAAC,MAAM,IAAE,IAAI,CAAC,IAAI,CAAQ,CACzB;gBACb,4DAAK,IAAI,EAAC,oBAAoB,EAAC,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE;oBACxD,6DAAM,YAAY,EAAE,IAAI,CAAC,gBAAgB,GAAS,CAC9C,CACK,CACR,CACR,CAAC;IACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["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"]}
1
+ {"version":3,"file":"dropdown.component.js","sourceRoot":"","sources":["../../../src/components/dropdown/dropdown.component.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAsB,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAgB,MAAM,EAAE,MAAM,eAAe,CAAC;AAC1H,OAAO,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AAO/B,MAAM,OAAO,QAAQ;IACR,IAAI,CAAc;IAErB,IAAI,CAAU;IAEb,aAAa,GAAiC,EAAE,CAAC;IAQ1D,iBAAiB,CAAoB;IAGrC,wBAAwB,CAAC,KAAkB;QACzC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,MAAM,CAAC;QAE5C,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE;YACjC,IAAI,IAAI,IAAI,OAAO,EAAE,CAAC;gBACpB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;YACxB,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;YAC1B,OAAO,EAAE,OAAO;YAChB,QAAQ;SACT,CAAC,CAAC;IACL,CAAC;IAEO,aAAa,GAAG,EAAE,CAAC;QACzB,IAAI,EAAE,uIAAuI;KAC9I,CAAC,CAAC;IAEK,gBAAgB,GAAG,GAAG,EAAE;QAC9B,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,CAAC,CAAC;QAEjF,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACpC,OAAO,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;QAChE,CAAC;IACH,CAAC,CAAC;IAEF,MAAM;QACJ,OAAO,CACL,EAAC,IAAI;YACH,mEAAY,OAAO,EAAC,OAAO,EAAC,SAAS,EAAC,cAAc;gBAClD,mEAAY,IAAI,EAAC,SAAS,EAAC,IAAI,EAAC,SAAS;oBACvC,6DAAM,IAAI,EAAC,MAAM,IAAE,IAAI,CAAC,IAAI,CAAQ,CACzB;gBACb,4DAAK,IAAI,EAAC,oBAAoB,EAAC,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE;oBACxD,6DAAM,YAAY,EAAE,IAAI,CAAC,gBAAgB,GAAS,CAC9C,CACK,CACR,CACR,CAAC;IACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["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"]}
@@ -1 +1 @@
1
- .visible{visibility:visible}.hidden{display:none}.flex{display:flex}.max-h-64{max-height:16rem}.w-full{width:100%}.min-w-10{min-width:2.5rem}.max-w-64{max-width:16rem}.flex-col{flex-direction:column}.items-center{align-items:center}.overflow-y-auto{overflow-y:auto}.rounded-lg{border-radius:var(--bcm-ui-border-radius-lg,8px)}.bg-color-basic-panel{background-color:var(--bcm-ui-color-background-basic-panel)}.py-1\.5{padding-bottom:.375rem;padding-top:.375rem}.shadow{--tw-shadow:var(--bcm-ui-box-shadow-default);--tw-shadow-colored:var(--bcm-ui-box-shadow-default)}.shadow,.shadow-3{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-3{--tw-shadow:var(--bcm-ui-box-shadow-3);--tw-shadow-colored:var(--bcm-ui-box-shadow-3)}.outline{outline-style:solid}
1
+ .visible{visibility:visible}.hidden{display:none}.static{position:static}.flex{display:flex}.max-h-64{max-height:16rem}.w-full{width:100%}.min-w-10{min-width:2.5rem}.max-w-64{max-width:16rem}.flex-col{flex-direction:column}.items-center{align-items:center}.overflow-y-auto{overflow-y:auto}.rounded-lg{border-radius:var(--bcm-ui-border-radius-lg,8px)}.bg-color-basic-panel{background-color:var(--bcm-ui-color-background-basic-panel)}.py-1\.5{padding-bottom:.375rem;padding-top:.375rem}.shadow{--tw-shadow:var(--bcm-ui-box-shadow-default);--tw-shadow-colored:var(--bcm-ui-box-shadow-default)}.shadow,.shadow-3{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-3{--tw-shadow:var(--bcm-ui-box-shadow-3);--tw-shadow-colored:var(--bcm-ui-box-shadow-3)}.outline{outline-style:solid}
@@ -1,35 +1,14 @@
1
1
  import { h } from "@stencil/core";
2
2
  import { tv } from "../../utils/tv";
3
3
  export class DropdownItem {
4
- constructor() {
5
- this.selected = false;
6
- this.error = false;
7
- this.disabled = false;
8
- this.dropdownItemClass = tv({
9
- base: 'dropdown-item bcm-ui-element bcm-ui-content-display flex flex-row gap-2 py-2 px-4 cursor-pointer text-color',
10
- variants: {
11
- selected: {
12
- true: 'bg-[var(--bcm-ui-color-background-base-active)] hover:bg-[var(--bcm-ui-color-background-base-active)]',
13
- false: 'hover:bg-[var(--bcm-ui-color-background-base-hover)]',
14
- },
15
- error: {
16
- true: 'bg-[var(--bcm-ui-color-background-palette-red-default)] hover:bg-[var(--bcm-ui-color-background-palette-red-default)]',
17
- false: '',
18
- },
19
- disabled: {
20
- true: '', // should be discuss with ux team
21
- false: '',
22
- },
23
- },
24
- defaultVariants: {
25
- selected: false,
26
- error: false,
27
- disabled: false,
28
- },
29
- }, {
30
- twMerge: false,
31
- });
32
- }
4
+ host;
5
+ text;
6
+ icon;
7
+ rightIcons;
8
+ selected = false;
9
+ error = false;
10
+ disabled = false;
11
+ bcmDropDownItemChange;
33
12
  handleClick() {
34
13
  this.selected = true;
35
14
  this.bcmDropDownItemChange.emit({
@@ -37,12 +16,35 @@ export class DropdownItem {
37
16
  selected: this.selected,
38
17
  });
39
18
  }
19
+ dropdownItemClass = tv({
20
+ base: 'dropdown-item bcm-ui-element bcm-ui-content-display flex flex-row gap-2 py-2 px-4 cursor-pointer text-color',
21
+ variants: {
22
+ selected: {
23
+ true: 'bg-[var(--bcm-ui-color-background-base-active)] hover:bg-[var(--bcm-ui-color-background-base-active)]',
24
+ false: 'hover:bg-[var(--bcm-ui-color-background-base-hover)]',
25
+ },
26
+ error: {
27
+ true: 'bg-[var(--bcm-ui-color-background-palette-red-default)] hover:bg-[var(--bcm-ui-color-background-palette-red-default)]',
28
+ false: '',
29
+ },
30
+ disabled: {
31
+ true: '', // should be discuss with ux team
32
+ false: '',
33
+ },
34
+ },
35
+ defaultVariants: {
36
+ selected: false,
37
+ error: false,
38
+ disabled: false,
39
+ },
40
+ }, {
41
+ twMerge: false,
42
+ });
40
43
  render() {
41
- var _a;
42
- return (h("div", { key: 'df59d3ea6c53de5a10d37b6acd8e81d9c516e6f5', "aria-checked": this.selected, class: this.dropdownItemClass({
44
+ return (h("div", { key: 'f17e6b4ad9aaf91370da88fa0913c6eb2e227b1b', "aria-checked": this.selected, class: this.dropdownItemClass({
43
45
  selected: this.selected,
44
46
  error: this.error,
45
- }), onClick: () => this.handleClick() }, h("slot", { key: '7ef8f52088bff39eb3dfecf7269b1d6b29185582', name: "left-content" }, this.icon && h("bcm-icon", { key: 'a302aafb745289c380edc120738c973fe7200c6d', "icon-name": this.icon })), h("div", { key: '7c5c8c27b982dbd314d5645603035f4dff0087d7', class: "flex flex-row text-pretty w-full" }, h("slot", { key: '873e7b62a2b20cc992425dcfd42c4edd1da6144b' }, this.text)), h("slot", { key: '199f13fb5dfa2d6b5bd1ed07652aa721eaf3c8a9', name: "right-content" }, (_a = this.rightIcons) === null || _a === void 0 ? void 0 : _a.map(icon => (h("bcm-icon", { "icon-name": icon }))))));
47
+ }), onClick: () => this.handleClick() }, h("slot", { key: '2d645ab61ee21e1c85a0f9fbb12c456922c8ca3b', name: "left-content" }, this.icon && h("bcm-icon", { key: '654afa8ac72f92b5bd7c64e247de0884b91b04ca', "icon-name": this.icon })), h("div", { key: '9885ed60b496e2096b1e203ba27e83f76bacd57e', class: "flex flex-row text-pretty w-full" }, h("slot", { key: '8a8d7ab8236d652114be728906e9f079438a0b6a' }, this.text)), h("slot", { key: '62e1450b43e8a407d9e4ef284c72dd34950a6e7c', name: "right-content" }, this.rightIcons?.map(icon => (h("bcm-icon", { "icon-name": icon }))))));
46
48
  }
47
49
  static get is() { return "bcm-dropdown-item"; }
48
50
  static get encapsulation() { return "shadow"; }