bromcom-ui-next 0.1.28 → 0.1.30

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 (438) hide show
  1. package/dist/bromcom-ui/_commonjsHelpers-CvGrISen.js.map +1 -0
  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-button.bcm-drawer.bcm-linked.bcm-modal.bcm-pop-confirm.bcm-popover.bcm-tooltip.entry.esm.js.map +1 -0
  5. package/dist/bromcom-ui/bcm-checkbox.entry.esm.js.map +1 -1
  6. package/dist/bromcom-ui/bcm-chip.entry.esm.js.map +1 -0
  7. package/dist/bromcom-ui/bcm-divider.entry.esm.js.map +1 -1
  8. package/dist/bromcom-ui/bcm-dropdown.entry.esm.js.map +1 -1
  9. package/dist/bromcom-ui/bcm-input.entry.esm.js.map +1 -1
  10. package/dist/bromcom-ui/bcm-segmented-picker-option.entry.esm.js.map +1 -1
  11. package/dist/bromcom-ui/bcm-segmented-picker.entry.esm.js.map +1 -1
  12. package/dist/bromcom-ui/bcm-switch.entry.esm.js.map +1 -1
  13. package/dist/bromcom-ui/bcm-tabs.entry.esm.js.map +1 -1
  14. package/dist/bromcom-ui/bcm-text.entry.esm.js.map +1 -1
  15. package/dist/bromcom-ui/bromcom-ui.esm.js +1 -1
  16. package/dist/bromcom-ui/bromcom-ui.esm.js.map +1 -1
  17. package/dist/bromcom-ui/floating-ui.dom-ltNPqX34.js.map +1 -0
  18. package/dist/bromcom-ui/generate-id-Crb5QsB-.js.map +1 -0
  19. package/dist/bromcom-ui/index-40rmUZjU.js.map +1 -0
  20. package/dist/bromcom-ui/index-BCaJmHBB.js.map +1 -0
  21. package/dist/bromcom-ui/{p-8ace5a6a.entry.js → p-0c7c6896.entry.js} +2 -2
  22. package/dist/bromcom-ui/p-0c7c6896.entry.js.map +1 -0
  23. package/dist/bromcom-ui/p-11d0e649.entry.js +2 -0
  24. package/dist/bromcom-ui/p-11d0e649.entry.js.map +1 -0
  25. package/dist/bromcom-ui/{p-6b585adc.entry.js → p-12f38632.entry.js} +2 -2
  26. package/dist/bromcom-ui/p-12f38632.entry.js.map +1 -0
  27. package/dist/bromcom-ui/{p-5e0702d1.entry.js → p-13cbd1f5.entry.js} +2 -2
  28. package/dist/bromcom-ui/p-13cbd1f5.entry.js.map +1 -0
  29. package/dist/bromcom-ui/{p-2480e468.entry.js → p-1507908f.entry.js} +2 -2
  30. package/dist/bromcom-ui/p-1507908f.entry.js.map +1 -0
  31. package/dist/bromcom-ui/p-1ce9913f.entry.js +2 -0
  32. package/dist/bromcom-ui/p-1ce9913f.entry.js.map +1 -0
  33. package/dist/bromcom-ui/p-206d767e.entry.js +2 -0
  34. package/dist/bromcom-ui/p-206d767e.entry.js.map +1 -0
  35. package/dist/bromcom-ui/{p-ee5f877f.entry.js → p-3cf7a7f4.entry.js} +2 -2
  36. package/dist/bromcom-ui/p-3cf7a7f4.entry.js.map +1 -0
  37. package/dist/bromcom-ui/p-4505feba.entry.js +2 -0
  38. package/dist/bromcom-ui/p-4505feba.entry.js.map +1 -0
  39. package/dist/bromcom-ui/{p-089edfdc.entry.js → p-496014ca.entry.js} +2 -2
  40. package/dist/bromcom-ui/p-496014ca.entry.js.map +1 -0
  41. package/dist/bromcom-ui/{p-26d2db9e.entry.js → p-4a932cd3.entry.js} +2 -2
  42. package/dist/bromcom-ui/p-4a932cd3.entry.js.map +1 -0
  43. package/dist/bromcom-ui/p-4e554b8d.entry.js +2 -0
  44. package/dist/bromcom-ui/p-4e554b8d.entry.js.map +1 -0
  45. package/dist/bromcom-ui/{p-360bff8a.entry.js → p-57c4c4c4.entry.js} +2 -2
  46. package/dist/bromcom-ui/p-57c4c4c4.entry.js.map +1 -0
  47. package/dist/bromcom-ui/{p-211ca6e0.entry.js → p-61293ab2.entry.js} +2 -2
  48. package/dist/bromcom-ui/p-61293ab2.entry.js.map +1 -0
  49. package/dist/bromcom-ui/{p-83f64814.entry.js → p-61789456.entry.js} +2 -2
  50. package/dist/bromcom-ui/p-61789456.entry.js.map +1 -0
  51. package/dist/bromcom-ui/{p-488d6ef4.entry.js → p-65d0f188.entry.js} +2 -2
  52. package/dist/bromcom-ui/p-65d0f188.entry.js.map +1 -0
  53. package/dist/bromcom-ui/p-83f707dc.entry.js +2 -0
  54. package/dist/bromcom-ui/p-83f707dc.entry.js.map +1 -0
  55. package/dist/bromcom-ui/p-8ba02e7e.entry.js +2 -0
  56. package/dist/bromcom-ui/p-8ba02e7e.entry.js.map +1 -0
  57. package/dist/bromcom-ui/p-9e9bf32e.entry.js +2 -0
  58. package/dist/bromcom-ui/p-9e9bf32e.entry.js.map +1 -0
  59. package/dist/bromcom-ui/p-BfTCfPZ1.js.map +1 -1
  60. package/dist/bromcom-ui/p-CEcVC0yX.js.map +1 -1
  61. package/dist/bromcom-ui/p-CRwAh9Np.js +3 -0
  62. package/dist/bromcom-ui/p-CRwAh9Np.js.map +1 -0
  63. package/dist/bromcom-ui/p-IBjzkjef.js.map +1 -1
  64. package/dist/bromcom-ui/{p-a88f20e0.entry.js → p-c87a6acf.entry.js} +2 -2
  65. package/dist/bromcom-ui/p-c87a6acf.entry.js.map +1 -0
  66. package/dist/bromcom-ui/{p-c34f0a66.entry.js → p-e0e235a8.entry.js} +2 -2
  67. package/dist/bromcom-ui/p-e0e235a8.entry.js.map +1 -0
  68. package/dist/bromcom-ui/{p-0101b4f2.entry.js → p-e1ce8b55.entry.js} +2 -2
  69. package/dist/bromcom-ui/p-e1ce8b55.entry.js.map +1 -0
  70. package/dist/bromcom-ui/p-e4dddb0b.entry.js +2 -0
  71. package/dist/bromcom-ui/p-e4dddb0b.entry.js.map +1 -0
  72. package/dist/bromcom-ui/p-f9426924.entry.js +2 -0
  73. package/dist/bromcom-ui/p-f9426924.entry.js.map +1 -0
  74. package/dist/bromcom-ui/{p-c0e7f9d6.entry.js → p-faa0e62c.entry.js} +2 -2
  75. package/dist/bromcom-ui/p-faa0e62c.entry.js.map +1 -0
  76. package/dist/bromcom-ui/{p-bdaf5653.entry.js → p-fcb4399f.entry.js} +2 -2
  77. package/dist/bromcom-ui/p-fcb4399f.entry.js.map +1 -0
  78. package/dist/bromcom-ui/tv-SlGJ5EfR.js.map +1 -0
  79. package/dist/bromcom-ui/validation-messages-CUvT12BL.js.map +1 -0
  80. package/dist/cjs/bcm-accordion-group.cjs.entry.js +2 -4
  81. package/dist/cjs/bcm-accordion.cjs.entry.js +3 -5
  82. package/dist/cjs/bcm-accordion.entry.cjs.js.map +1 -1
  83. package/dist/cjs/bcm-alert.cjs.entry.js +3 -5
  84. package/dist/cjs/bcm-alert.entry.cjs.js.map +1 -1
  85. package/dist/cjs/bcm-avatar.cjs.entry.js +1 -3
  86. package/dist/cjs/bcm-badge.cjs.entry.js +3 -5
  87. package/dist/cjs/bcm-basic-badge.cjs.entry.js +3 -5
  88. package/dist/cjs/bcm-button-group.cjs.entry.js +3 -5
  89. package/dist/cjs/bcm-button.bcm-drawer.bcm-linked.bcm-modal.bcm-pop-confirm.bcm-popover.bcm-tooltip.entry.cjs.js.map +1 -0
  90. package/dist/cjs/bcm-button_7.cjs.entry.js +4131 -0
  91. package/dist/cjs/bcm-checkbox.cjs.entry.js +7 -5
  92. package/dist/cjs/bcm-checkbox.entry.cjs.js.map +1 -1
  93. package/dist/cjs/bcm-chip.cjs.entry.js +127 -0
  94. package/dist/cjs/bcm-chip.entry.cjs.js.map +1 -0
  95. package/dist/cjs/bcm-divider.cjs.entry.js +3 -5
  96. package/dist/cjs/bcm-divider.entry.cjs.js.map +1 -1
  97. package/dist/cjs/bcm-dropdown-item.cjs.entry.js +3 -5
  98. package/dist/cjs/bcm-dropdown.cjs.entry.js +3 -13
  99. package/dist/cjs/bcm-dropdown.entry.cjs.js.map +1 -1
  100. package/dist/cjs/bcm-input.cjs.entry.js +4 -6
  101. package/dist/cjs/bcm-input.entry.cjs.js.map +1 -1
  102. package/dist/cjs/bcm-radio-group.cjs.entry.js +3 -5
  103. package/dist/cjs/bcm-radio.cjs.entry.js +2 -4
  104. package/dist/cjs/bcm-segmented-picker-option.cjs.entry.js +3 -5
  105. package/dist/cjs/bcm-segmented-picker-option.entry.cjs.js.map +1 -1
  106. package/dist/cjs/bcm-segmented-picker.cjs.entry.js +3 -5
  107. package/dist/cjs/bcm-segmented-picker.entry.cjs.js.map +1 -1
  108. package/dist/cjs/bcm-shortcut.cjs.entry.js +2 -4
  109. package/dist/cjs/bcm-switch.cjs.entry.js +4 -6
  110. package/dist/cjs/bcm-switch.entry.cjs.js.map +1 -1
  111. package/dist/cjs/bcm-tabs-content.cjs.entry.js +2 -4
  112. package/dist/cjs/bcm-tabs-list.cjs.entry.js +2 -4
  113. package/dist/cjs/bcm-tabs-trigger.cjs.entry.js +2 -4
  114. package/dist/cjs/bcm-tabs.cjs.entry.js +2 -4
  115. package/dist/cjs/bcm-tabs.entry.cjs.js.map +1 -1
  116. package/dist/cjs/bcm-text.cjs.entry.js +3 -5
  117. package/dist/cjs/bcm-text.entry.cjs.js.map +1 -1
  118. package/dist/cjs/bcm-textarea.cjs.entry.js +4 -6
  119. package/dist/cjs/bromcom-ui.cjs.js +3 -5
  120. package/dist/cjs/bromcom-ui.cjs.js.map +1 -1
  121. package/dist/cjs/generate-id-CG_BkTJu.js.map +1 -1
  122. package/dist/cjs/index-Bp6Dd2i1.js.map +1 -1
  123. package/dist/cjs/{index-BtiU-G2W.js → index-CmYzUr-k.js} +61 -372
  124. package/dist/cjs/index-CmYzUr-k.js.map +1 -0
  125. package/dist/cjs/index.cjs.js +0 -2
  126. package/dist/cjs/loader.cjs.js +2 -4
  127. package/dist/cjs/tv-ngpIbGlG.js.map +1 -1
  128. package/dist/collection/collection-manifest.json +5 -5
  129. package/dist/collection/components/accordion/accordion.component.js +8 -8
  130. package/dist/collection/components/accordion/accordion.component.js.map +1 -1
  131. package/dist/collection/components/accordion-group/accordion-group.component.js +3 -3
  132. package/dist/collection/components/accordion-group/types.js.map +1 -1
  133. package/dist/collection/components/alert/alert.component.js +6 -6
  134. package/dist/collection/components/alert/alert.css +1 -1
  135. package/dist/collection/components/avatar/avatar.component.js +14 -14
  136. package/dist/collection/components/badge/badge.component.js +15 -15
  137. package/dist/collection/components/basic-badge/basic-badge.component.js +9 -9
  138. package/dist/collection/components/button/button.component.js +32 -32
  139. package/dist/collection/components/button/button.css +1 -1
  140. package/dist/collection/components/button-group/button-group.component.js +15 -15
  141. package/dist/collection/components/checkbox/checkbox.component.js +36 -12
  142. package/dist/collection/components/checkbox/checkbox.component.js.map +1 -1
  143. package/dist/collection/components/checkbox/checkbox.css +1 -1
  144. package/dist/collection/components/chip/chip.component.js +8 -8
  145. package/dist/collection/components/divider/divider.component.js +4 -4
  146. package/dist/collection/components/divider/divider.css +1 -1
  147. package/dist/collection/components/drawer/drawer.component.js +429 -132
  148. package/dist/collection/components/drawer/drawer.component.js.map +1 -1
  149. package/dist/collection/components/drawer/drawer.css +1 -1
  150. package/dist/collection/components/drawer/types.js.map +1 -1
  151. package/dist/collection/components/dropdown/dropdown.component.js +3 -12
  152. package/dist/collection/components/dropdown/dropdown.component.js.map +1 -1
  153. package/dist/collection/components/dropdown/dropdown.css +1 -1
  154. package/dist/collection/components/dropdown-item/dropdown-item.component.js +9 -10
  155. package/dist/collection/components/dropdown-item/dropdown-item.component.js.map +1 -1
  156. package/dist/collection/components/input/input.component.js +44 -45
  157. package/dist/collection/components/input/input.component.js.map +1 -1
  158. package/dist/collection/components/input/input.css +1 -1
  159. package/dist/collection/components/linked/linked.component.js +507 -333
  160. package/dist/collection/components/linked/linked.component.js.map +1 -1
  161. package/dist/collection/components/linked/linked.css +1 -1
  162. package/dist/collection/components/modal/modal.component.js +137 -34
  163. package/dist/collection/components/modal/modal.component.js.map +1 -1
  164. package/dist/collection/components/modal/modal.css +1 -1
  165. package/dist/collection/components/pop-confirm/pop-confirm.component.js +668 -294
  166. package/dist/collection/components/pop-confirm/pop-confirm.component.js.map +1 -1
  167. package/dist/collection/components/pop-confirm/pop-confirm.css +1 -1
  168. package/dist/collection/components/popover/popover.component.js +533 -148
  169. package/dist/collection/components/popover/popover.component.js.map +1 -1
  170. package/dist/collection/components/popover/popover.css +1 -1
  171. package/dist/collection/components/radio/radio.component.js +13 -13
  172. package/dist/collection/components/radio-group/radio-group.component.js +15 -15
  173. package/dist/collection/components/segmented-picker/segmented-picker-option.component.js +10 -10
  174. package/dist/collection/components/segmented-picker/segmented-picker-option.component.js.map +1 -1
  175. package/dist/collection/components/segmented-picker/segmented-picker.component.js +7 -7
  176. package/dist/collection/components/segmented-picker/segmented-picker.component.js.map +1 -1
  177. package/dist/collection/components/shortcut/shortcut.js +4 -4
  178. package/dist/collection/components/switch/switch.component.js +17 -17
  179. package/dist/collection/components/switch/switch.css +1 -1
  180. package/dist/collection/components/tabs/tabs-content.component.js +3 -3
  181. package/dist/collection/components/tabs/tabs-list.component.js +3 -3
  182. package/dist/collection/components/tabs/tabs-trigger.component.js +8 -8
  183. package/dist/collection/components/tabs/tabs.component.js +6 -6
  184. package/dist/collection/components/tabs/tabs.component.js.map +1 -1
  185. package/dist/collection/components/text/text.component.js +6 -6
  186. package/dist/collection/components/text/text.css +1 -1
  187. package/dist/collection/components/textarea/textarea.component.js +39 -40
  188. package/dist/collection/components/textarea/textarea.component.js.map +1 -1
  189. package/dist/collection/components/tooltip/tooltip.component.js +567 -192
  190. package/dist/collection/components/tooltip/tooltip.component.js.map +1 -1
  191. package/dist/collection/components/tooltip/tooltip.css +1 -1
  192. package/dist/components/bcm-accordion-group.js +5 -3
  193. package/dist/components/bcm-accordion-group.js.map +1 -1
  194. package/dist/components/bcm-accordion.js +6 -4
  195. package/dist/components/bcm-accordion.js.map +1 -1
  196. package/dist/components/bcm-alert.js +6 -4
  197. package/dist/components/bcm-alert.js.map +1 -1
  198. package/dist/components/bcm-avatar.js +5 -3
  199. package/dist/components/bcm-avatar.js.map +1 -1
  200. package/dist/components/bcm-badge.js +1 -1
  201. package/dist/components/bcm-basic-badge.js +6 -4
  202. package/dist/components/bcm-basic-badge.js.map +1 -1
  203. package/dist/components/bcm-button-group.js +6 -4
  204. package/dist/components/bcm-button-group.js.map +1 -1
  205. package/dist/components/bcm-button.js +1 -1
  206. package/dist/components/bcm-checkbox.js +11 -4
  207. package/dist/components/bcm-checkbox.js.map +1 -1
  208. package/dist/components/bcm-chip.js +5 -3
  209. package/dist/components/bcm-chip.js.map +1 -1
  210. package/dist/components/bcm-divider.js +6 -4
  211. package/dist/components/bcm-divider.js.map +1 -1
  212. package/dist/components/bcm-drawer.js +228 -115
  213. package/dist/components/bcm-drawer.js.map +1 -1
  214. package/dist/components/bcm-dropdown-item.js +7 -5
  215. package/dist/components/bcm-dropdown-item.js.map +1 -1
  216. package/dist/components/bcm-dropdown.js +8 -15
  217. package/dist/components/bcm-dropdown.js.map +1 -1
  218. package/dist/components/bcm-input.js +7 -5
  219. package/dist/components/bcm-input.js.map +1 -1
  220. package/dist/components/bcm-linked.js +1 -1
  221. package/dist/components/bcm-modal.js +56 -4
  222. package/dist/components/bcm-modal.js.map +1 -1
  223. package/dist/components/bcm-pop-confirm.js +278 -171
  224. package/dist/components/bcm-pop-confirm.js.map +1 -1
  225. package/dist/components/bcm-popover.js +355 -110
  226. package/dist/components/bcm-popover.js.map +1 -1
  227. package/dist/components/bcm-radio-group.js +6 -4
  228. package/dist/components/bcm-radio-group.js.map +1 -1
  229. package/dist/components/bcm-radio.js +5 -3
  230. package/dist/components/bcm-radio.js.map +1 -1
  231. package/dist/components/bcm-segmented-picker-option.js +6 -4
  232. package/dist/components/bcm-segmented-picker-option.js.map +1 -1
  233. package/dist/components/bcm-segmented-picker.js +6 -4
  234. package/dist/components/bcm-segmented-picker.js.map +1 -1
  235. package/dist/components/bcm-shortcut.js +5 -3
  236. package/dist/components/bcm-shortcut.js.map +1 -1
  237. package/dist/components/bcm-switch.js +7 -5
  238. package/dist/components/bcm-switch.js.map +1 -1
  239. package/dist/components/bcm-tabs-content.js +5 -3
  240. package/dist/components/bcm-tabs-content.js.map +1 -1
  241. package/dist/components/bcm-tabs-list.js +5 -3
  242. package/dist/components/bcm-tabs-list.js.map +1 -1
  243. package/dist/components/bcm-tabs-trigger.js +5 -3
  244. package/dist/components/bcm-tabs-trigger.js.map +1 -1
  245. package/dist/components/bcm-tabs.js +5 -3
  246. package/dist/components/bcm-tabs.js.map +1 -1
  247. package/dist/components/bcm-text.js +6 -4
  248. package/dist/components/bcm-text.js.map +1 -1
  249. package/dist/components/bcm-textarea.js +7 -5
  250. package/dist/components/bcm-textarea.js.map +1 -1
  251. package/dist/components/bcm-tooltip.js +364 -127
  252. package/dist/components/bcm-tooltip.js.map +1 -1
  253. package/dist/components/index.js +41 -366
  254. package/dist/components/index.js.map +1 -1
  255. package/dist/components/p-6VLsKZvR.js +469 -0
  256. package/dist/components/p-6VLsKZvR.js.map +1 -0
  257. package/dist/components/p-BfTCfPZ1.js.map +1 -1
  258. package/dist/components/p-CEcVC0yX.js.map +1 -1
  259. package/dist/components/{p-CQF7wlXf.js → p-CaemikSK.js} +8 -6
  260. package/dist/components/p-CaemikSK.js.map +1 -0
  261. package/dist/components/{p-DGlecSBr.js → p-CsIBm0J5.js} +9 -7
  262. package/dist/components/p-CsIBm0J5.js.map +1 -0
  263. package/dist/components/{p-CzcTU1ty.js → p-DBDSgIvP.js} +40 -23
  264. package/dist/components/p-DBDSgIvP.js.map +1 -0
  265. package/dist/components/p-IBjzkjef.js.map +1 -1
  266. package/dist/esm/bcm-accordion-group.entry.js +2 -4
  267. package/dist/esm/bcm-accordion.entry.js +3 -5
  268. package/dist/esm/bcm-accordion.entry.js.map +1 -1
  269. package/dist/esm/bcm-alert.entry.js +3 -5
  270. package/dist/esm/bcm-alert.entry.js.map +1 -1
  271. package/dist/esm/bcm-avatar.entry.js +1 -3
  272. package/dist/esm/bcm-badge.entry.js +3 -5
  273. package/dist/esm/bcm-basic-badge.entry.js +3 -5
  274. package/dist/esm/bcm-button-group.entry.js +3 -5
  275. package/dist/esm/bcm-button.bcm-drawer.bcm-linked.bcm-modal.bcm-pop-confirm.bcm-popover.bcm-tooltip.entry.js.map +1 -0
  276. package/dist/esm/bcm-button_7.entry.js +4123 -0
  277. package/dist/esm/bcm-checkbox.entry.js +7 -5
  278. package/dist/esm/bcm-checkbox.entry.js.map +1 -1
  279. package/dist/esm/bcm-chip.entry.js +125 -0
  280. package/dist/esm/bcm-chip.entry.js.map +1 -0
  281. package/dist/esm/bcm-divider.entry.js +3 -5
  282. package/dist/esm/bcm-divider.entry.js.map +1 -1
  283. package/dist/esm/bcm-dropdown-item.entry.js +3 -5
  284. package/dist/esm/bcm-dropdown.entry.js +3 -13
  285. package/dist/esm/bcm-dropdown.entry.js.map +1 -1
  286. package/dist/esm/bcm-input.entry.js +4 -6
  287. package/dist/esm/bcm-input.entry.js.map +1 -1
  288. package/dist/esm/bcm-radio-group.entry.js +3 -5
  289. package/dist/esm/bcm-radio.entry.js +2 -4
  290. package/dist/esm/bcm-segmented-picker-option.entry.js +3 -5
  291. package/dist/esm/bcm-segmented-picker-option.entry.js.map +1 -1
  292. package/dist/esm/bcm-segmented-picker.entry.js +3 -5
  293. package/dist/esm/bcm-segmented-picker.entry.js.map +1 -1
  294. package/dist/esm/bcm-shortcut.entry.js +2 -4
  295. package/dist/esm/bcm-switch.entry.js +4 -6
  296. package/dist/esm/bcm-switch.entry.js.map +1 -1
  297. package/dist/esm/bcm-tabs-content.entry.js +2 -4
  298. package/dist/esm/bcm-tabs-list.entry.js +2 -4
  299. package/dist/esm/bcm-tabs-trigger.entry.js +2 -4
  300. package/dist/esm/bcm-tabs.entry.js +2 -4
  301. package/dist/esm/bcm-tabs.entry.js.map +1 -1
  302. package/dist/esm/bcm-text.entry.js +3 -5
  303. package/dist/esm/bcm-text.entry.js.map +1 -1
  304. package/dist/esm/bcm-textarea.entry.js +4 -6
  305. package/dist/esm/bromcom-ui.js +4 -6
  306. package/dist/esm/bromcom-ui.js.map +1 -1
  307. package/dist/esm/generate-id-IBjzkjef.js.map +1 -1
  308. package/dist/esm/index-BfTCfPZ1.js.map +1 -1
  309. package/dist/esm/{index-BuuGCw0z.js → index-CRwAh9Np.js} +62 -372
  310. package/dist/esm/index-CRwAh9Np.js.map +1 -0
  311. package/dist/esm/index.js +0 -2
  312. package/dist/esm/loader.js +3 -5
  313. package/dist/esm/tv-CEcVC0yX.js.map +1 -1
  314. package/dist/types/components/accordion-group/types.d.ts +2 -2
  315. package/dist/types/components/checkbox/checkbox.component.d.ts +4 -0
  316. package/dist/types/components/drawer/drawer.component.d.ts +143 -3
  317. package/dist/types/components/drawer/types.d.ts +1 -1
  318. package/dist/types/components/dropdown/dropdown.component.d.ts +0 -3
  319. package/dist/types/components/linked/linked.component.d.ts +152 -36
  320. package/dist/types/components/modal/modal.component.d.ts +121 -0
  321. package/dist/types/components/pop-confirm/pop-confirm.component.d.ts +263 -143
  322. package/dist/types/components/popover/popover.component.d.ts +94 -39
  323. package/dist/types/components/tooltip/tooltip.component.d.ts +147 -56
  324. package/dist/types/components.d.ts +1579 -359
  325. package/dist/types/stencil-public-runtime.d.ts +50 -3
  326. package/package.json +1 -1
  327. package/dist/bromcom-ui/bcm-button.bcm-chip.bcm-drawer.bcm-modal.entry.esm.js.map +0 -1
  328. package/dist/bromcom-ui/bcm-linked.entry.esm.js.map +0 -1
  329. package/dist/bromcom-ui/bcm-pop-confirm.entry.esm.js.map +0 -1
  330. package/dist/bromcom-ui/bcm-popover.entry.esm.js.map +0 -1
  331. package/dist/bromcom-ui/bcm-tooltip.entry.esm.js.map +0 -1
  332. package/dist/bromcom-ui/p-0101b4f2.entry.js.map +0 -1
  333. package/dist/bromcom-ui/p-089edfdc.entry.js.map +0 -1
  334. package/dist/bromcom-ui/p-08bc93c5.entry.js +0 -2
  335. package/dist/bromcom-ui/p-08bc93c5.entry.js.map +0 -1
  336. package/dist/bromcom-ui/p-09be61c3.entry.js +0 -2
  337. package/dist/bromcom-ui/p-09be61c3.entry.js.map +0 -1
  338. package/dist/bromcom-ui/p-211ca6e0.entry.js.map +0 -1
  339. package/dist/bromcom-ui/p-2480e468.entry.js.map +0 -1
  340. package/dist/bromcom-ui/p-26d2db9e.entry.js.map +0 -1
  341. package/dist/bromcom-ui/p-2d0a6472.entry.js +0 -2
  342. package/dist/bromcom-ui/p-2d0a6472.entry.js.map +0 -1
  343. package/dist/bromcom-ui/p-360bff8a.entry.js.map +0 -1
  344. package/dist/bromcom-ui/p-488d6ef4.entry.js.map +0 -1
  345. package/dist/bromcom-ui/p-5e0702d1.entry.js.map +0 -1
  346. package/dist/bromcom-ui/p-6169490c.entry.js +0 -2
  347. package/dist/bromcom-ui/p-6169490c.entry.js.map +0 -1
  348. package/dist/bromcom-ui/p-6b585adc.entry.js.map +0 -1
  349. package/dist/bromcom-ui/p-6d7d73d5.entry.js +0 -2
  350. package/dist/bromcom-ui/p-6d7d73d5.entry.js.map +0 -1
  351. package/dist/bromcom-ui/p-7234af90.entry.js +0 -2
  352. package/dist/bromcom-ui/p-7234af90.entry.js.map +0 -1
  353. package/dist/bromcom-ui/p-83f64814.entry.js.map +0 -1
  354. package/dist/bromcom-ui/p-84677827.entry.js +0 -2
  355. package/dist/bromcom-ui/p-84677827.entry.js.map +0 -1
  356. package/dist/bromcom-ui/p-8ace5a6a.entry.js.map +0 -1
  357. package/dist/bromcom-ui/p-8d74249a.entry.js +0 -2
  358. package/dist/bromcom-ui/p-8d74249a.entry.js.map +0 -1
  359. package/dist/bromcom-ui/p-BuuGCw0z.js +0 -3
  360. package/dist/bromcom-ui/p-BuuGCw0z.js.map +0 -1
  361. package/dist/bromcom-ui/p-DxMLMJ3r.js +0 -2
  362. package/dist/bromcom-ui/p-DxMLMJ3r.js.map +0 -1
  363. package/dist/bromcom-ui/p-a88f20e0.entry.js.map +0 -1
  364. package/dist/bromcom-ui/p-bad299f2.entry.js +0 -2
  365. package/dist/bromcom-ui/p-bad299f2.entry.js.map +0 -1
  366. package/dist/bromcom-ui/p-bdaf5653.entry.js.map +0 -1
  367. package/dist/bromcom-ui/p-c0e7f9d6.entry.js.map +0 -1
  368. package/dist/bromcom-ui/p-c34f0a66.entry.js.map +0 -1
  369. package/dist/bromcom-ui/p-c9cf3f14.entry.js +0 -2
  370. package/dist/bromcom-ui/p-c9cf3f14.entry.js.map +0 -1
  371. package/dist/bromcom-ui/p-d7cea19f.entry.js +0 -2
  372. package/dist/bromcom-ui/p-d7cea19f.entry.js.map +0 -1
  373. package/dist/bromcom-ui/p-e5e0ac07.entry.js +0 -2
  374. package/dist/bromcom-ui/p-e5e0ac07.entry.js.map +0 -1
  375. package/dist/bromcom-ui/p-ee5f877f.entry.js.map +0 -1
  376. package/dist/bromcom-ui/p-fbccbffc.entry.js +0 -2
  377. package/dist/bromcom-ui/p-fbccbffc.entry.js.map +0 -1
  378. package/dist/cjs/bcm-accordion-group.cjs.entry.js.map +0 -1
  379. package/dist/cjs/bcm-accordion.cjs.entry.js.map +0 -1
  380. package/dist/cjs/bcm-alert.cjs.entry.js.map +0 -1
  381. package/dist/cjs/bcm-avatar.cjs.entry.js.map +0 -1
  382. package/dist/cjs/bcm-badge.cjs.entry.js.map +0 -1
  383. package/dist/cjs/bcm-basic-badge.cjs.entry.js.map +0 -1
  384. package/dist/cjs/bcm-button-group.cjs.entry.js.map +0 -1
  385. package/dist/cjs/bcm-button.bcm-chip.bcm-drawer.bcm-modal.entry.cjs.js.map +0 -1
  386. package/dist/cjs/bcm-button_4.cjs.entry.js +0 -915
  387. package/dist/cjs/bcm-button_4.cjs.entry.js.map +0 -1
  388. package/dist/cjs/bcm-checkbox.cjs.entry.js.map +0 -1
  389. package/dist/cjs/bcm-divider.cjs.entry.js.map +0 -1
  390. package/dist/cjs/bcm-dropdown-item.cjs.entry.js.map +0 -1
  391. package/dist/cjs/bcm-dropdown.cjs.entry.js.map +0 -1
  392. package/dist/cjs/bcm-input.cjs.entry.js.map +0 -1
  393. package/dist/cjs/bcm-linked.cjs.entry.js +0 -343
  394. package/dist/cjs/bcm-linked.cjs.entry.js.map +0 -1
  395. package/dist/cjs/bcm-linked.entry.cjs.js.map +0 -1
  396. package/dist/cjs/bcm-pop-confirm.cjs.entry.js +0 -250
  397. package/dist/cjs/bcm-pop-confirm.cjs.entry.js.map +0 -1
  398. package/dist/cjs/bcm-pop-confirm.entry.cjs.js.map +0 -1
  399. package/dist/cjs/bcm-popover.cjs.entry.js +0 -189
  400. package/dist/cjs/bcm-popover.cjs.entry.js.map +0 -1
  401. package/dist/cjs/bcm-popover.entry.cjs.js.map +0 -1
  402. package/dist/cjs/bcm-radio-group.cjs.entry.js.map +0 -1
  403. package/dist/cjs/bcm-radio.cjs.entry.js.map +0 -1
  404. package/dist/cjs/bcm-segmented-picker-option.cjs.entry.js.map +0 -1
  405. package/dist/cjs/bcm-segmented-picker.cjs.entry.js.map +0 -1
  406. package/dist/cjs/bcm-shortcut.cjs.entry.js.map +0 -1
  407. package/dist/cjs/bcm-switch.cjs.entry.js.map +0 -1
  408. package/dist/cjs/bcm-tabs-content.cjs.entry.js.map +0 -1
  409. package/dist/cjs/bcm-tabs-list.cjs.entry.js.map +0 -1
  410. package/dist/cjs/bcm-tabs-trigger.cjs.entry.js.map +0 -1
  411. package/dist/cjs/bcm-tabs.cjs.entry.js.map +0 -1
  412. package/dist/cjs/bcm-text.cjs.entry.js.map +0 -1
  413. package/dist/cjs/bcm-textarea.cjs.entry.js.map +0 -1
  414. package/dist/cjs/bcm-tooltip.cjs.entry.js +0 -180
  415. package/dist/cjs/bcm-tooltip.cjs.entry.js.map +0 -1
  416. package/dist/cjs/bcm-tooltip.entry.cjs.js.map +0 -1
  417. package/dist/cjs/floating-ui.dom-DyKmFgkP.js +0 -1605
  418. package/dist/cjs/floating-ui.dom-DyKmFgkP.js.map +0 -1
  419. package/dist/cjs/index-BtiU-G2W.js.map +0 -1
  420. package/dist/components/p-BHwftRkk.js +0 -379
  421. package/dist/components/p-BHwftRkk.js.map +0 -1
  422. package/dist/components/p-CQF7wlXf.js.map +0 -1
  423. package/dist/components/p-CzcTU1ty.js.map +0 -1
  424. package/dist/components/p-DGlecSBr.js.map +0 -1
  425. package/dist/esm/bcm-button.bcm-chip.bcm-drawer.bcm-modal.entry.js.map +0 -1
  426. package/dist/esm/bcm-button_4.entry.js +0 -910
  427. package/dist/esm/bcm-button_4.entry.js.map +0 -1
  428. package/dist/esm/bcm-linked.entry.js +0 -341
  429. package/dist/esm/bcm-linked.entry.js.map +0 -1
  430. package/dist/esm/bcm-pop-confirm.entry.js +0 -248
  431. package/dist/esm/bcm-pop-confirm.entry.js.map +0 -1
  432. package/dist/esm/bcm-popover.entry.js +0 -187
  433. package/dist/esm/bcm-popover.entry.js.map +0 -1
  434. package/dist/esm/bcm-tooltip.entry.js +0 -178
  435. package/dist/esm/bcm-tooltip.entry.js.map +0 -1
  436. package/dist/esm/floating-ui.dom-DxMLMJ3r.js +0 -1598
  437. package/dist/esm/floating-ui.dom-DxMLMJ3r.js.map +0 -1
  438. package/dist/esm/index-BuuGCw0z.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"names":["switchCss","BcmSwitch","constructor","hostRef","this","checked","disabled","labelPosition","error","size","readonly","required","switchId","generateId","switchStyle","defaultStyle","checkedStyle","errorStyle","readonlyStyle","disabledStyle","Object","assign","switchClass","tv","slots","base","switchWrapper","dotContainer","dot","caption","label","variants","small","medium","large","left","right","true","false","compoundVariants","class","toggleSwitch","bcmSwitchChange","emit","render","ariaAttributes","role","toString","tabIndexAttr","tabindex","h","key","style","id","type","name","value","readOnly","onChange","htmlFor","onKeyDown","event","preventDefault"],"sources":["src/components/switch/switch.css?tag=bcm-switch&encapsulation=shadow","src/components/switch/switch.component.tsx"],"sourcesContent":[":host {\n display: inline-block;\n}\n","import { Component, Prop, h, Event, EventEmitter, Element, ComponentInterface } from '@stencil/core';\nimport { generateId } from '../../utils/id/generate-id';\nimport { tv } from '@utils/tv';\n\n/**\n * @component BcmSwitch\n * @description A customizable toggle switch component that provides an intuitive way to enable or disable options.\n * Supports different sizes, label positions, error states, and accessibility features.\n *\n * @example Basic usage\n * <bcm-switch label=\"Enable notifications\"></bcm-switch>\n *\n * @example With error state\n * <bcm-switch\n * label=\"Accept terms\"\n * error={true}\n * caption=\"You must accept the terms to continue\">\n * </bcm-switch>\n *\n * @example Disabled state\n * <bcm-switch\n * label=\"Advanced features\"\n * disabled={true}>\n * </bcm-switch>\n *\n * @example With custom size and label position\n * <bcm-switch\n * label=\"Dark mode\"\n * size=\"large\"\n * labelPosition=\"left\">\n * </bcm-switch>\n */\n@Component({\n tag: 'bcm-switch',\n styleUrl: 'switch.css',\n shadow: true,\n})\nexport class BcmSwitch implements ComponentInterface {\n /** Reference to the host element */\n @Element()\n el: HTMLElement;\n\n /** Whether the switch is checked or not */\n @Prop({ reflect: true, mutable: true })\n checked: boolean = false;\n\n /** Whether the switch is disabled */\n @Prop()\n disabled: boolean = false;\n\n /** The name attribute for the hidden input element */\n @Prop()\n name: string;\n\n /** The value attribute for the hidden input element */\n @Prop()\n value: string;\n\n /** Text label for the switch */\n @Prop()\n label: string;\n\n /** Position of the label relative to the switch */\n @Prop()\n labelPosition: 'left' | 'right' = 'right';\n\n /** Whether to display the switch in an error state */\n @Prop()\n error: boolean = false;\n\n /** Text to display as an error message when error is true */\n @Prop()\n caption?: string;\n\n /** Size variant of the switch */\n @Prop()\n size: 'small' | 'medium' | 'large' = 'medium';\n\n /** Whether the switch is in readonly mode */\n @Prop()\n readonly: boolean = false;\n\n /** Whether the switch is required in a form */\n @Prop()\n required: boolean = false;\n\n /** Emitted when the switch state changes */\n @Event({\n composed: false,\n bubbles: false,\n cancelable: true,\n })\n bcmSwitchChange: EventEmitter<boolean>;\n\n private switchId = generateId('switch');\n\n private toggleSwitch(): void {\n if (this.disabled || this.readonly) return;\n this.checked = !this.checked;\n this.bcmSwitchChange.emit(this.checked);\n }\n\n private switchStyle = () => {\n const defaultStyle = {\n '--switch-bg': 'var(--bcm-ui-color-background-default-dark-default)',\n '--switch-bg-hover': 'var(--bcm-ui-color-background-default-dark-hover)',\n '--switch-dot-bg': 'var(--bcm-ui-color-background-base-default)',\n };\n\n const checkedStyle = {\n '--switch-bg': 'var(--bcm-ui-color-background-info-default)',\n '--switch-bg-hover': 'var(--bcm-ui-color-background-info-hover)',\n };\n\n const errorStyle = {\n '--switch-bg': 'var(--bcm-ui-color-background-error-default)',\n '--switch-bg-hover': 'var(--bcm-ui-color-background-error-hover)',\n };\n\n const readonlyStyle = {\n '--switch-bg': 'var(--bcm-ui-color-background-default-dark-default)',\n '--switch-bg-hover': 'var(--bcm-ui-color-background-default-dark-default)',\n '--switch-dot-bg': 'var(--bcm-ui-color-background-disabled-default)',\n };\n\n const disabledStyle = {\n '--switch-bg': 'var(--bcm-ui-color-background-disabled-default)',\n '--switch-bg-hover': 'var(--bcm-ui-color-background-disabled-default)',\n '--switch-dot-bg': 'var(--bcm-ui-color-background-default-default)',\n };\n\n return {\n ...defaultStyle,\n ...(this.checked && checkedStyle),\n ...(this.error && errorStyle),\n ...(this.readonly && readonlyStyle),\n ...(this.disabled && disabledStyle),\n };\n };\n\n private switchClass = tv({\n slots: {\n base: 'bcm-ui-element flex flex-col',\n switchWrapper: 'flex items-center group',\n dotContainer:\n 'relative flex items-center rounded-full cursor-pointer bg-[--switch-bg] group-hover:bg-[--switch-bg-hover] peer-disabled:cursor-not-allowed transition-colors duration-300',\n dot: 'absolute bg-[--switch-dot-bg] rounded-full shadow-sm transition-all duration-300 ease-in-out peer-disabled:cursor-not-allowed',\n caption: '!text-color-error font-normal',\n label: '!text-color font-medium peer-disabled:!text-color-disabled peer-disabled:cursor-not-allowed',\n },\n variants: {\n size: {\n small: {\n dotContainer: 'w-8 h-4',\n dot: 'size-3',\n label: 'text-size-4',\n caption: 'text-size-3',\n switchWrapper: 'gap-2',\n base: 'gap-0.5',\n },\n medium: {\n dotContainer: 'w-9 h-[1.125rem]',\n dot: 'size-3.5',\n label: 'text-size-5',\n caption: 'text-size-4',\n switchWrapper: 'gap-2.5',\n base: 'gap-1',\n },\n large: {\n dotContainer: 'w-10 h-5',\n dot: 'size-4',\n label: 'text-size-6',\n caption: 'text-size-5',\n switchWrapper: 'gap-3',\n base: 'gap-2',\n },\n },\n labelPosition: {\n left: {\n label: '',\n },\n right: {\n label: 'order-2',\n },\n },\n checked: {\n true: {\n dot: '',\n },\n false: {\n dot: 'left-0.5',\n },\n },\n disabled: {\n true: '',\n false: {\n switchWrapper: '',\n },\n },\n readonly: {\n true: {\n switchWrapper: 'cursor-default',\n dotContainer: 'cursor-default',\n dot: 'cursor-default',\n },\n false: {\n switchWrapper: 'cursor-pointer',\n dotContainer: 'cursor-pointer hover:bg-[--switch-bg-hover]',\n },\n },\n },\n compoundVariants: [\n {\n size: 'small',\n checked: true,\n class: {\n dot: 'left-[1.125rem]',\n },\n },\n {\n size: 'medium',\n checked: true,\n class: {\n dot: 'left-[1.25rem]',\n },\n },\n {\n size: 'large',\n checked: true,\n class: {\n dot: 'left-[1.375rem]',\n },\n },\n {\n readonly: false,\n disabled: false,\n class: {\n dotContainer: 'peer-focus-visible:ring-2 peer-focus-visible:ring-offset-2 peer-focus-visible:ring-blue-300',\n },\n },\n ],\n });\n\n render() {\n const { base, switchWrapper, label, dot, dotContainer, caption } = this.switchClass({\n size: this.size,\n checked: this.checked,\n disabled: this.disabled,\n labelPosition: this.labelPosition,\n readonly: this.readonly,\n });\n\n const ariaAttributes = {\n 'role': 'switch',\n 'aria-checked': this.checked.toString(),\n 'aria-disabled': this.disabled.toString(),\n 'aria-readonly': this.readonly.toString(),\n ...(this.required && { 'aria-required': 'true' }),\n };\n\n const tabIndexAttr = !this.readonly && !this.disabled ? { tabindex: '0' } : {};\n\n return (\n <div class={base()}>\n <label class={switchWrapper()} style={this.switchStyle()}>\n <input\n id={this.switchId}\n type=\"checkbox\"\n class=\"hidden peer\"\n checked={this.checked}\n name={this.name}\n value={this.value}\n disabled={this.disabled}\n readOnly={this.readonly}\n required={this.required}\n onChange={() => this.toggleSwitch()}\n />\n\n {this.label && (\n <span class={label()}>\n <slot>{this.label}</slot>\n </span>\n )}\n <label\n htmlFor={this.switchId}\n class={dotContainer()}\n {...tabIndexAttr}\n {...ariaAttributes}\n onKeyDown={event => {\n if ((event.key === 'Enter' || event.key === ' ') && !this.readonly && !this.disabled) {\n event.preventDefault();\n this.toggleSwitch();\n }\n }}\n >\n <div class={dot()}></div>\n </label>\n </label>\n\n {this.error && this.caption && <span class={caption()}>{this.caption}</span>}\n <slot name=\"caption\"></slot>\n </div>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,2 +0,0 @@
1
- import{r as e,c as t,h as i,F as a,a as o}from"./p-BuuGCw0z.js";import{c as r,o as s,f as n,s as c,a as l}from"./p-DxMLMJ3r.js";import{t as d}from"./p-CEcVC0yX.js";const f=".absolute{position:absolute}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.text-wrap{text-wrap:wrap}:host{--popover-bg:var(--bcm-ui-color-background-basic-panel);--popover-radius:6px;--popover-text-color:var(--bcm-ui-color-text-basic);display:inline-block}.arrow{background:var(--arrow-color);clip-path:polygon(50% 0,100% 100%,0 100%);position:absolute;z-index:1}.arrow.top{transform:rotate(180deg)}.arrow.bottom{transform:rotate(0deg)}.arrow.right{transform:rotate(-90deg)}.arrow.left{transform:rotate(90deg)}::slotted([slot=body]){text-wrap:pretty;font-family:Inter,sans-serif}.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.bcm-ui-element{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:Inter,sans-serif}.static{position:static}.relative{position:relative}.z-\\[9999\\]{z-index:9999}.mx-auto{margin-left:auto;margin-right:auto}.flex{display:flex}.hidden{display:none}.size-6{height:1.5rem;width:1.5rem}.h-2{height:.5rem}.w-4{width:1rem}.w-full{width:100%}.max-w-64{max-width:16rem}.max-w-80{max-width:20rem}.max-w-96{max-width:24rem}.flex-1{flex:1 1 0%}.cursor-pointer{cursor:pointer}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-2{gap:.5rem}.gap-2\\.5{gap:.625rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.text-pretty{text-wrap:pretty}.rounded-\\[--popover-radius\\]{border-radius:var(--popover-radius)}.rounded-full{border-radius:var(--bcm-ui-border-radius-full,9999px)}.bg-\\[--popover-bg\\]{background-color:var(--popover-bg)}.p-4{padding:1rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.font-sans{font-family:Inter,sans-serif}.text-size-4{font-size:var(--bcm-ui-font-size-4,14px);line-height:var(--bcm-ui-line-height-4,20px)}.text-size-5{font-size:var(--bcm-ui-font-size-5,16px);line-height:var(--bcm-ui-line-height-5,24px)}.text-size-6{font-size:var(--bcm-ui-font-size-6,18px);line-height:var(--bcm-ui-line-height-6,24px)}.text-size-7{font-size:var(--bcm-ui-font-size-7,20px);line-height:var(--bcm-ui-line-height-7,28px)}.text-size-inherit{font-size:inherit;line-height:inherit}.font-semibold{font-weight:600}.\\!text-color-header{color:var(--bcm-ui-color-text-header)!important}.text-\\[--text-color\\]{color:var(--text-color)}.shadow{--tw-shadow:var(--bcm-ui-box-shadow-default);--tw-shadow-colored:var(--bcm-ui-box-shadow-default)}.shadow,.shadow-2{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-2{--tw-shadow:var(--bcm-ui-box-shadow-2);--tw-shadow-colored:var(--bcm-ui-box-shadow-2)}.outline{outline-style:solid}.hover\\:bg-gray-100:hover{background-color:oklch(.967 .003 264.542)}";const h={info:"fa-solid fa-circle-info",success:"fa-solid fa-circle-check",warning:"fa-solid fa-triangle-exclamation",error:"fa-solid fa-circle-x"};const m=class{constructor(i){e(this,i);this.bcmConfirm=t(this,"bcmConfirm",1);this.bcmCancel=t(this,"bcmCancel",1);this.arrowColor="var(--bcm-ui-color-background-basic-panel)";this.cancelText="Cancel";this.confirmText="Yes";this.description="";this.headerText="";this.placement="bottom";this.size="medium";this.status="info";this.statusIcon=true;this.isOpen=false;this.handleTriggerClick=e=>{e.preventDefault();e.stopPropagation();if(!this.isOpen){this.isOpen=true;requestAnimationFrame((()=>{this.updatePosition()}))}};this.handleConfirm=e=>{e.preventDefault();e.stopPropagation();this.isOpen=false;this.bcmConfirm.emit()};this.handleCancel=e=>{e.preventDefault();e.stopPropagation();this.isOpen=false;this.bcmCancel.emit()};this.updatePosition=async()=>{if(!this.triggerElement||!this.popoverElement||!this.arrowElement)return;const{x:e,y:t,placement:i,middlewareData:a}=await r(this.triggerElement,this.popoverElement,{placement:this.placement,middleware:[s(12),n({fallbackPlacements:["top","left","bottom","right"]}),c({padding:8}),l({element:this.arrowElement})]});this.currentPlacement=i;Object.assign(this.popoverElement.style,{left:`${e}px`,top:`${t}px`});const{x:o,y:d}=a.arrow||{x:0,y:0};const f=i.split("-")[0];const h={top:"bottom",right:"left",bottom:"top",left:"right"}[f];Object.assign(this.arrowElement.style,{left:o!=null?`${o}px`:"",top:d!=null?`${d}px`:"",[h]:["top","bottom"].includes(f)?"-8px":"-12px"})};this.classes=d({slots:{container:"absolute bcm-ui-element flex flex-col shadow-2 rounded-[--popover-radius] bg-[--popover-bg] z-[9999] w-full",header:"flex justify-between items-center",headerLeftContent:"flex items-center gap-2 text-size-inherit text-[--text-color]",closeIconArea:"flex flex-row gap-2 size-6 items-center justify-center hover:bg-gray-100 rounded-full cursor-pointer text-size-inherit",titleContainer:"!text-color-header font-semibold",footer:"flex flex-row justify-end gap-2"},variants:{size:{small:{container:"text-size-4 max-w-64 p-4 gap-4",header:"text-size-4",footer:"text-size-4",titleContainer:"text-size-5",headerLeftContent:"gap-2"},medium:{container:"text-size-5 max-w-80 gap-6 p-6",header:"text-size-5",footer:"text-size-5",titleContainer:"text-size-6",headerLeftContent:"gap-2.5"},large:{container:"text-size-6 max-w-96 p-8 gap-8",header:"text-size-6",footer:"text-size-6",titleContainer:"text-size-7",headerLeftContent:"gap-3"}}},defaultVariants:{size:"medium"}})}componentDidLoad(){this.triggerElement=document.getElementById(this.targetId);if(!this.triggerElement){console.warn(`Target element with ID '${this.targetId}' not found.`);return}this.triggerElement.addEventListener("click",this.handleTriggerClick)}async show(){this.isOpen=true;requestAnimationFrame((()=>{this.updatePosition()}))}async hide(){this.isOpen=false}get popoverStyle(){return{"--text-color":`var(--bcm-ui-color-text-${this.status})`,"--arrow-color":this.arrowColor}}disconnectedCallback(){if(this.triggerElement){this.triggerElement.removeEventListener("click",this.handleTriggerClick)}}render(){var e;const{container:t,header:o,footer:r,headerLeftContent:s,closeIconArea:n,titleContainer:c}=this.classes({size:this.size});return i(a,{key:"86c517640fafd1c8c6826b85c2b6210ef51fb8a3"},this.isOpen&&i("div",{key:"c6c04b088ddf54834208cfb353ad205784c3f43b",role:"dialog","aria-labelledby":"pop-confirm-title",style:this.popoverStyle,class:t(),ref:e=>this.popoverElement=e},i("div",{key:"2333829cfb8a5bc0f36d6ecf48d7e768b2c5c871",ref:e=>this.arrowElement=e,class:`arrow w-4 h-2 ${(e=this.currentPlacement)!==null&&e!==void 0?e:"top"}`}),i("header",{key:"d0978abfe687e8eb13b8ea29ff05d0ccb0a060a4",class:o()},i("div",{key:"9d648868414279f9d0494f329e5f20c1a18dd83c",class:s()},this.statusIcon&&i("bcm-icon",{key:"e0caaa164bad82bf321e7706e534d07de45caee2","icon-name":h[this.status]}),i("span",{key:"34b24b04e00a89098a727725998647b4cfaf6fda",class:c()},this.headerText),i("slot",{key:"04422666023fa5a7e912a29d406ff7a9d4b0ec23",name:"header"})),i("div",{key:"4d6387833461db35148ff1f91de430d1b3b4ae0a",class:n(),onClick:this.handleCancel},i("bcm-icon",{key:"04214951b966c79f4661db005255ab7ee58cb347","icon-name":"far fa-times"}))),i("main",{key:"7df82cffa20da608e2f4026b89c390eeede5f305",class:"flex-1 mx-auto font-sans text-pretty"},i("slot",{key:"7f045ed1b27608865cb0ae0c6fd24fc07220129d",name:"body"},this.description)),i("footer",{key:"5c3d3c2436c24739f7900841c7d7025cc011ee17",class:r()},i("bcm-button",{key:"5f8bdfe07adeb25a6fa8111ea32e3439e391a546",kind:"outline",size:this.size,onClick:this.handleCancel},this.cancelText),i("bcm-button",{key:"9920702fb5bcef61f11e7cf2730344f0e4c17b5f",size:this.size,status:this.status,kind:"primary",onClick:this.handleConfirm},this.confirmText),i("slot",{key:"dde6cc0979b5e7994f92c9afa0444d86ff9585cd",name:"footer"}))))}get el(){return o(this)}};m.style=f;export{m as bcm_pop_confirm};
2
- //# sourceMappingURL=p-09be61c3.entry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["popConfirmCss","statusIcons","info","success","warning","error","PopConfirm","constructor","hostRef","this","arrowColor","cancelText","confirmText","description","headerText","placement","size","status","statusIcon","isOpen","handleTriggerClick","event","preventDefault","stopPropagation","requestAnimationFrame","updatePosition","handleConfirm","bcmConfirm","emit","handleCancel","bcmCancel","async","triggerElement","popoverElement","arrowElement","x","y","middlewareData","computePosition","middleware","offset","flip","fallbackPlacements","shift","padding","arrow","element","currentPlacement","Object","assign","style","left","top","arrowX","arrowY","basePlacement","split","staticSide","right","bottom","includes","classes","tv","slots","container","header","headerLeftContent","closeIconArea","titleContainer","footer","variants","small","medium","large","defaultVariants","componentDidLoad","document","getElementById","targetId","console","warn","addEventListener","show","hide","popoverStyle","disconnectedCallback","removeEventListener","render","h","Fragment","key","role","class","ref","el","_a","name","onClick","kind"],"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 --popover-radius: 6px;\n --popover-text-color: var(--bcm-ui-color-text-basic);\n}\n\n.arrow {\n position: absolute;\n background: var(--arrow-color);\n clip-path: polygon(50% 0%, 100% 100%, 0% 100%);\n z-index: 1;\n}\n\n.arrow.top {\n transform: rotate(180deg);\n}\n\n.arrow.bottom {\n transform: rotate(0deg);\n}\n\n.arrow.right {\n transform: rotate(-90deg);\n}\n\n.arrow.left {\n transform: rotate(90deg);\n}\n\n::slotted([slot='body']) {\n font-family: 'Inter', sans-serif;\n text-wrap: pretty;\n}\n","import { Component, Prop, State, h, Event, EventEmitter, Element, ComponentInterface, Fragment, Method } from '@stencil/core';\nimport { computePosition, flip, shift, offset, arrow, type Placement } from '@floating-ui/dom';\nimport { tv } from '@utils/tv';\n\n// Status icons for different states\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-x',\n};\n\n/**\n * @component BcmPopConfirm\n * @description A floating confirmation pop-up component that prompts users for action confirmation, triggered by click or hover events.\n * Offers customizable header, body content, and footer areas through slots, with accessibility and positioning features.\n *\n * @example Basic usage\n * <bcm-pop-confirm target-id=\"trigger-btn\" placement=\"right\" header-text=\"Confirm Action\" description=\"Are you sure?\" confirm-text=\"Yes\" cancel-text=\"No\" status=\"warning\"></bcm-pop-confirm>\n *\n * @example With all slots and custom styling\n * <bcm-pop-confirm target-id=\"trigger-btn\" placement=\"left\" header-text=\"Delete Item\" description=\"Are you sure you want to delete this item?\" confirm-text=\"Delete\" cancel-text=\"Cancel\" status=\"error\" arrow-color=\"#ffffff\">\n * <span slot=\"header\">Custom Header Text</span>\n * <span slot=\"body\">Additional details here</span>\n * <span slot=\"footer\">Custom Footer Action</span>\n * </bcm-pop-confirm>\n *\n * @example Event handling\n * // Listen to confirmation events\n * const popConfirm = document.querySelector('bcm-pop-confirm');\n * popConfirm.addEventListener('bcmConfirm', () => {\n * console.log('User confirmed the action!');\n * });\n * popConfirm.addEventListener('bcmCancel', () => {\n * console.log('User canceled the action!');\n * });\n *\n * // Programmatically control pop-up\n * await popConfirm.show(); // Show the pop-up\n * await popConfirm.hide(); // Hide the pop-up\n *\n * @prop {string} arrowColor - The color of the arrow pointing to the trigger element (default: 'var(--bcm-ui-color-background-basic-panel)')\n * @prop {string} cancelText - Text displayed on the cancel button (default: 'Cancel')\n * @prop {string} confirmText - Text displayed on the confirm button (default: 'Yes')\n * @prop {string} description - The description or body content of the pop-up (default: '')\n * @prop {string} headerText - The header text displayed at the top of the pop-up (default: '')\n * @prop {Placement} placement - The placement position of the pop-up relative to the trigger (default: 'right')\n * @prop {('small' | 'medium' | 'large')} size - The size of the pop-up, determining its dimensions (default: 'medium')\n * @prop {('info' | 'error' | 'warning' | 'success' | 'default')} status - The status of the pop-up, affecting its icon and color (default: 'info')\n * @prop {boolean} statusIcon - Whether to display a status icon based on the `status` prop (default: true)\n * @prop {string} targetId - The ID of the trigger element (e.g., a button) that opens the pop-up\n *\n * @slot header - Custom content for the header area (optional)\n * @slot body - Custom content for the main body area (optional, falls back to `description`)\n * @slot footer - Custom content for the footer area (optional)\n *\n * @event {EventEmitter<void>} bcmConfirm - Emitted when the user confirms the action in the pop-up\n * @event {EventEmitter<void>} bcmCancel - Emitted when the user cancels the action in the pop-up\n *\n * @csspart container - The root container element of the pop-up\n * @csspart header - The header section with title and close icon\n * @csspart content - The main content section of the pop-up\n * @csspart footer - The footer section with confirm/cancel buttons\n * @csspart arrow - The positioning arrow pointing to the trigger\n *\n * @css {string} --popover-radius - Border radius of the pop-up (default: defined in CSS)\n * @css {string} --popover-bg - Background color of the pop-up\n * @css {string} --text-color - Text color of the pop-up based on status\n *\n * @methods\n * show() - Programmatically shows the pop-up\n * hide() - Programmatically hides the pop-up\n */\n@Component({\n tag: 'bcm-pop-confirm',\n styleUrl: 'pop-confirm.css',\n shadow: true,\n})\nexport class PopConfirm implements ComponentInterface {\n // DOM element reference\n @Element() el: HTMLElement;\n\n /**\n * The color of the arrow pointing to the trigger element.\n * Can be a CSS custom property or a specific color value.\n * @default 'var(--bcm-ui-color-background-basic-panel)'\n */\n @Prop()\n arrowColor: string = 'var(--bcm-ui-color-background-basic-panel)'; // Default color\n\n /**\n * The text displayed on the cancel button.\n * @default 'Cancel'\n */\n @Prop()\n cancelText: string = 'Cancel';\n\n /**\n * The text displayed on the confirm button.\n * @default 'Yes'\n */\n @Prop()\n confirmText: string = 'Yes';\n\n /**\n * The description or body content of the pop-up.\n * @default ''\n */\n @Prop()\n description: string = '';\n\n /**\n * The header text displayed at the top of the pop-up.\n * @default ''\n */\n @Prop()\n headerText: string = '';\n\n /**\n * The placement position of the pop-up relative to the trigger element.\n * @default 'bottom'\n */\n @Prop()\n placement: Placement = 'bottom';\n\n /**\n * The size of the pop-up, determining its dimensions and padding.\n * @default 'medium'\n */\n @Prop()\n size: 'small' | 'medium' | 'large' = 'medium';\n\n /**\n * The status of the pop-up, affecting its icon and color scheme.\n * @default 'info'\n */\n @Prop()\n status: 'info' | 'error' | 'warning' | 'success' = 'info';\n\n /**\n * Whether to display a status icon based on the `status` prop.\n * @default true\n */\n @Prop()\n statusIcon: boolean = true;\n\n /**\n * The ID of the trigger element (e.g., a button) that opens the pop-up.\n */\n @Prop()\n targetId: string;\n\n // State variables\n /**\n * Indicates whether the pop-up is currently open or closed.\n * @default false\n */\n @State()\n isOpen: boolean = false;\n\n /**\n * The current placement position of the pop-up after computation.\n */\n @State()\n currentPlacement: 'top' | 'bottom' | 'left' | 'right';\n\n // Event Emitters\n /**\n * Emits an event when the user confirms the action in the pop-up.\n */\n @Event({\n composed: false,\n bubbles: false,\n cancelable: true,\n })\n bcmConfirm: EventEmitter<void>;\n\n /**\n * Emits an event when the user cancels the action in the pop-up.\n */\n @Event({\n composed: false,\n bubbles: false,\n cancelable: true,\n })\n bcmCancel: EventEmitter<void>;\n\n // Element references\n private triggerElement: HTMLElement;\n private popoverElement: HTMLElement;\n private arrowElement: HTMLElement;\n\n /**\n * Lifecycle method called when the component is loaded.\n * Initializes the trigger element and attaches a click event listener.\n */\n componentDidLoad() {\n this.triggerElement = document.getElementById(this.targetId);\n if (!this.triggerElement) {\n console.warn(`Target element with ID '${this.targetId}' not found.`);\n return;\n }\n this.triggerElement.addEventListener('click', this.handleTriggerClick);\n }\n\n /**\n * Handles the click event on the trigger element to open the pop-up.\n * Prevents default behavior and propagation, then opens the pop-up if it's closed.\n * @param event The mouse event triggering the action.\n */\n private handleTriggerClick = (event: Event) => {\n event.preventDefault();\n event.stopPropagation();\n\n if (!this.isOpen) {\n this.isOpen = true;\n requestAnimationFrame(() => {\n this.updatePosition();\n });\n }\n };\n\n /**\n * Handles the confirm button click, closing the pop-up and emitting the confirm event.\n * Prevents default behavior and propagation.\n * @param event The mouse event triggering the action.\n */\n private handleConfirm = (event: Event) => {\n event.preventDefault();\n event.stopPropagation();\n this.isOpen = false;\n this.bcmConfirm.emit();\n };\n\n /**\n * Handles the cancel button click, closing the pop-up and emitting the cancel event.\n * Prevents default behavior and propagation.\n * @param event The mouse event triggering the action.\n */\n private handleCancel = (event: Event) => {\n event.preventDefault();\n event.stopPropagation();\n this.isOpen = false;\n this.bcmCancel.emit();\n };\n\n /**\n * Programmatically shows the pop-up by setting `isOpen` to true and updating its position.\n * @returns A promise that resolves when the pop-up is shown.\n */\n @Method()\n async show() {\n this.isOpen = true;\n requestAnimationFrame(() => {\n this.updatePosition();\n });\n }\n\n /**\n * Programmatically hides the pop-up by setting `isOpen` to false.\n * @returns A promise that resolves when the pop-up is hidden.\n */\n @Method()\n async hide() {\n this.isOpen = false;\n }\n\n /**\n * Updates the position of the pop-up relative to the trigger element using Floating UI.\n * Ensures the pop-up stays within viewport bounds and positions the arrow correctly.\n */\n private updatePosition = async () => {\n if (!this.triggerElement || !this.popoverElement || !this.arrowElement) return;\n\n const { x, y, placement, middlewareData } = await computePosition(this.triggerElement, this.popoverElement, {\n placement: this.placement,\n middleware: [offset(12), flip({ fallbackPlacements: ['top', 'left', 'bottom', 'right'] }), shift({ padding: 8 }), arrow({ element: this.arrowElement })],\n });\n\n this.currentPlacement = placement as any;\n\n Object.assign(this.popoverElement.style, {\n left: `${x}px`,\n top: `${y}px`,\n });\n\n const { x: arrowX, y: arrowY } = middlewareData.arrow || { x: 0, y: 0 };\n const basePlacement = 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 }[basePlacement];\n\n Object.assign(this.arrowElement.style, {\n left: arrowX != null ? `${arrowX}px` : '',\n top: arrowY != null ? `${arrowY}px` : '',\n [staticSide]: ['top', 'bottom'].includes(basePlacement) ? '-8px' : '-12px',\n });\n };\n\n /**\n * Returns the dynamic styles for the pop-up, including text and arrow colors.\n * @returns An object containing CSS custom properties.\n */\n private get popoverStyle() {\n return {\n '--text-color': `var(--bcm-ui-color-text-${this.status})`,\n '--arrow-color': this.arrowColor,\n };\n }\n\n /**\n * Lifecycle method called when the component is removed from the DOM.\n * Cleans up the event listener to prevent memory leaks.\n */\n disconnectedCallback() {\n if (this.triggerElement) {\n this.triggerElement.removeEventListener('click', this.handleTriggerClick);\n }\n }\n\n /**\n * Defines Tailwind Variants classes for the pop-up's structure and styling.\n * Supports different sizes and generates dynamic class names.\n */\n private classes = tv({\n slots: {\n container: 'absolute bcm-ui-element flex flex-col shadow-2 rounded-[--popover-radius] bg-[--popover-bg] z-[9999] w-full',\n header: 'flex justify-between items-center',\n headerLeftContent: 'flex items-center gap-2 text-size-inherit text-[--text-color]',\n closeIconArea: 'flex flex-row gap-2 size-6 items-center justify-center hover:bg-gray-100 rounded-full cursor-pointer text-size-inherit',\n titleContainer: '!text-color-header font-semibold',\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 header: 'text-size-4',\n footer: 'text-size-4',\n titleContainer: 'text-size-5',\n headerLeftContent: 'gap-2',\n },\n medium: {\n container: 'text-size-5 max-w-80 gap-6 p-6',\n header: 'text-size-5',\n footer: 'text-size-5',\n titleContainer: 'text-size-6',\n headerLeftContent: 'gap-2.5',\n },\n large: {\n container: 'text-size-6 max-w-96 p-8 gap-8',\n header: 'text-size-6',\n footer: 'text-size-6',\n titleContainer: 'text-size-7',\n headerLeftContent: 'gap-3',\n },\n },\n },\n defaultVariants: {\n size: 'medium',\n },\n });\n\n /**\n * Renders the pop-up component, showing it only when `isOpen` is true.\n * Includes header, main content, and footer sections with dynamic styling and slots for customization.\n * @returns JSX.Element representing the pop-up or an empty fragment if closed.\n */\n render() {\n const { container, header, footer, headerLeftContent, closeIconArea, titleContainer } = this.classes({\n size: this.size,\n });\n return (\n <Fragment>\n {this.isOpen && (\n <div role=\"dialog\" aria-labelledby=\"pop-confirm-title\" style={this.popoverStyle} class={container()} ref={el => (this.popoverElement = el)}>\n {/* Arrow */}\n <div ref={el => (this.arrowElement = el)} class={`arrow w-4 h-2 ${this.currentPlacement ?? 'top'}`}></div>\n\n {/* Header Content */}\n <header class={header()}>\n <div class={headerLeftContent()}>\n {this.statusIcon && <bcm-icon icon-name={statusIcons[this.status]}></bcm-icon>}\n <span class={titleContainer()}>{this.headerText}</span>\n <slot name=\"header\"></slot>\n </div>\n <div class={closeIconArea()} onClick={this.handleCancel}>\n <bcm-icon icon-name=\"far fa-times\"></bcm-icon>\n </div>\n </header>\n\n {/* Main Content */}\n <main class=\"flex-1 mx-auto font-sans text-pretty\">\n <slot name=\"body\">{this.description}</slot>\n </main>\n\n {/* Footer Content */}\n <footer class={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 name=\"footer\"></slot>\n </footer>\n </div>\n )}\n </Fragment>\n );\n }\n}\n"],"mappings":"oKAAA,MAAMA,EAAgB,snGCKtB,MAAMC,EAAc,CAClBC,KAAM,0BACNC,QAAS,2BACTC,QAAS,mCACTC,MAAO,wB,MAqEIC,EAAU,MALvB,WAAAC,CAAAC,G,sFAeEC,KAAAC,WAAqB,6CAOrBD,KAAUE,WAAW,SAOrBF,KAAWG,YAAW,MAOtBH,KAAWI,YAAW,GAOtBJ,KAAUK,WAAW,GAOrBL,KAASM,UAAc,SAOvBN,KAAIO,KAAiC,SAOrCP,KAAMQ,OAA6C,OAOnDR,KAAUS,WAAY,KActBT,KAAMU,OAAY,MAoDVV,KAAAW,mBAAsBC,IAC5BA,EAAMC,iBACND,EAAME,kBAEN,IAAKd,KAAKU,OAAQ,CAChBV,KAAKU,OAAS,KACdK,uBAAsB,KACpBf,KAAKgB,gBAAgB,G,GAUnBhB,KAAAiB,cAAiBL,IACvBA,EAAMC,iBACND,EAAME,kBACNd,KAAKU,OAAS,MACdV,KAAKkB,WAAWC,MAAM,EAQhBnB,KAAAoB,aAAgBR,IACtBA,EAAMC,iBACND,EAAME,kBACNd,KAAKU,OAAS,MACdV,KAAKqB,UAAUF,MAAM,EA4BfnB,KAAcgB,eAAGM,UACvB,IAAKtB,KAAKuB,iBAAmBvB,KAAKwB,iBAAmBxB,KAAKyB,aAAc,OAExE,MAAMC,EAAEA,EAACC,EAAEA,EAACrB,UAAEA,EAASsB,eAAEA,SAAyBC,EAAgB7B,KAAKuB,eAAgBvB,KAAKwB,eAAgB,CAC1GlB,UAAWN,KAAKM,UAChBwB,WAAY,CAACC,EAAO,IAAKC,EAAK,CAAEC,mBAAoB,CAAC,MAAO,OAAQ,SAAU,WAAaC,EAAM,CAAEC,QAAS,IAAMC,EAAM,CAAEC,QAASrC,KAAKyB,kBAG1IzB,KAAKsC,iBAAmBhC,EAExBiC,OAAOC,OAAOxC,KAAKwB,eAAeiB,MAAO,CACvCC,KAAM,GAAGhB,MACTiB,IAAK,GAAGhB,QAGV,MAAQD,EAAGkB,EAAQjB,EAAGkB,GAAWjB,EAAeQ,OAAS,CAAEV,EAAG,EAAGC,EAAG,GACpE,MAAMmB,EAAgBxC,EAAUyC,MAAM,KAAK,GAE3C,MAAMC,EAAa,CACjBL,IAAK,SACLM,MAAO,OACPC,OAAQ,MACRR,KAAM,SACNI,GAEFP,OAAOC,OAAOxC,KAAKyB,aAAagB,MAAO,CACrCC,KAAME,GAAU,KAAO,GAAGA,MAAa,GACvCD,IAAKE,GAAU,KAAO,GAAGA,MAAa,GACtCG,CAACA,GAAa,CAAC,MAAO,UAAUG,SAASL,GAAiB,OAAS,SACnE,EA4BI9C,KAAOoD,QAAGC,EAAG,CACnBC,MAAO,CACLC,UAAW,8GACXC,OAAQ,oCACRC,kBAAmB,gEACnBC,cAAe,yHACfC,eAAgB,mCAChBC,OAAQ,mCAEVC,SAAU,CACRtD,KAAM,CACJuD,MAAO,CACLP,UAAW,iCACXC,OAAQ,cACRI,OAAQ,cACRD,eAAgB,cAChBF,kBAAmB,SAErBM,OAAQ,CACNR,UAAW,iCACXC,OAAQ,cACRI,OAAQ,cACRD,eAAgB,cAChBF,kBAAmB,WAErBO,MAAO,CACLT,UAAW,iCACXC,OAAQ,cACRI,OAAQ,cACRD,eAAgB,cAChBF,kBAAmB,WAIzBQ,gBAAiB,CACf1D,KAAM,WAoDX,CA3NC,gBAAA2D,GACElE,KAAKuB,eAAiB4C,SAASC,eAAepE,KAAKqE,UACnD,IAAKrE,KAAKuB,eAAgB,CACxB+C,QAAQC,KAAK,2BAA2BvE,KAAKqE,wBAC7C,M,CAEFrE,KAAKuB,eAAeiD,iBAAiB,QAASxE,KAAKW,mB,CAiDrD,UAAM8D,GACJzE,KAAKU,OAAS,KACdK,uBAAsB,KACpBf,KAAKgB,gBAAgB,G,CASzB,UAAM0D,GACJ1E,KAAKU,OAAS,K,CA2ChB,gBAAYiE,GACV,MAAO,CACL,eAAgB,2BAA2B3E,KAAKQ,UAChD,gBAAiBR,KAAKC,W,CAQ1B,oBAAA2E,GACE,GAAI5E,KAAKuB,eAAgB,CACvBvB,KAAKuB,eAAesD,oBAAoB,QAAS7E,KAAKW,mB,EAoD1D,MAAAmE,G,MACE,MAAMvB,UAAEA,EAASC,OAAEA,EAAMI,OAAEA,EAAMH,kBAAEA,EAAiBC,cAAEA,EAAaC,eAAEA,GAAmB3D,KAAKoD,QAAQ,CACnG7C,KAAMP,KAAKO,OAEb,OACEwE,EAACC,EACE,CAAAC,IAAA,4CAAAjF,KAAKU,QACJqE,EAAA,OAAAE,IAAA,2CAAKC,KAAK,SAAQ,kBAAiB,oBAAoBzC,MAAOzC,KAAK2E,aAAcQ,MAAO5B,IAAa6B,IAAKC,GAAOrF,KAAKwB,eAAiB6D,GAErIN,EAAK,OAAAE,IAAA,2CAAAG,IAAKC,GAAOrF,KAAKyB,aAAe4D,EAAKF,MAAO,kBAAiBG,EAAAtF,KAAKsC,oBAAgB,MAAAgD,SAAA,EAAAA,EAAI,UAG3FP,EAAQ,UAAAE,IAAA,2CAAAE,MAAO3B,KACbuB,EAAK,OAAAE,IAAA,2CAAAE,MAAO1B,KACTzD,KAAKS,YAAcsE,EAAqB,YAAAE,IAAA,uDAAAzF,EAAYQ,KAAKQ,UAC1DuE,EAAM,QAAAE,IAAA,2CAAAE,MAAOxB,KAAmB3D,KAAKK,YACrC0E,EAAA,QAAAE,IAAA,2CAAMM,KAAK,YAEbR,EAAK,OAAAE,IAAA,2CAAAE,MAAOzB,IAAiB8B,QAASxF,KAAKoB,cACzC2D,EAAoB,YAAAE,IAAA,0EAKxBF,EAAM,QAAAE,IAAA,2CAAAE,MAAM,wCACVJ,EAAM,QAAAE,IAAA,2CAAAM,KAAK,QAAQvF,KAAKI,cAI1B2E,EAAQ,UAAAE,IAAA,2CAAAE,MAAOvB,KACbmB,EAAA,cAAAE,IAAA,2CAAYQ,KAAK,UAAUlF,KAAMP,KAAKO,KAAMiF,QAASxF,KAAKoB,cACvDpB,KAAKE,YAER6E,EAAY,cAAAE,IAAA,2CAAA1E,KAAMP,KAAKO,KAAMC,OAAQR,KAAKQ,OAAQiF,KAAK,UAAUD,QAASxF,KAAKiB,eAC5EjB,KAAKG,aAER4E,EAAM,QAAAE,IAAA,2CAAAM,KAAK,a","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":["tabsContentCss","BcmTabsContent","render","h","Host","key","role"],"sources":["src/components/tabs/tabs-content.css?tag=bcm-tabs-content&encapsulation=shadow","src/components/tabs/tabs-content.component.tsx"],"sourcesContent":[":host {\n display: block;\n padding: 10px 0;\n width: 100%;\n}\n","import { Component, Prop, h, Host, ComponentInterface } from '@stencil/core';\n\n/**\n * @description Tab content panel component that displays when its corresponding tab is selected\n * @slot - Default slot for the tab panel content\n */\n@Component({\n tag: 'bcm-tabs-content',\n styleUrl: 'tabs-content.css',\n shadow: true,\n})\nexport class BcmTabsContent implements ComponentInterface {\n /**\n * Unique identifier that matches a tab trigger's value\n * Used to associate this content with its corresponding tab\n */\n @Prop({ reflect: true }) value: string;\n\n render() {\n return (\n <Host role=\"tabpanel\">\n <slot></slot>\n </Host>\n );\n }\n}"],"mappings":"kDAAA,MAAMA,EAAiB,2S,MCWVC,EAAc,M,yBAOvB,MAAAC,GACI,OACIC,EAACC,EAAK,CAAAC,IAAA,2CAAAC,KAAK,YACPH,EAAa,QAAAE,IAAA,6C","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":["shortcutCss","osKeys","ctrl","alt","shift","del","delete","backspace","enter","return","BcmShortcut","constructor","hostRef","this","size","isMac","test","window","navigator","userAgent","getHotkey","key","includes","keys","split","map","k","join","render","hotkey","h","class","cs"],"sources":["src/components/shortcut/shortcut.css?tag=bcm-shortcut&encapsulation=shadow","src/components/shortcut/shortcut.tsx"],"sourcesContent":[":host {\n display: inline-block;\n}\n","import { Component, ComponentInterface, Prop, h } from '@stencil/core';\nimport cs from 'classnames';\n\nconst osKeys = {\n ctrl: '⌘',\n alt: '⌥',\n shift: '⇧',\n del: '⌫',\n delete: '⌫',\n backspace: '⌦',\n enter: '⏎',\n return: '⏎',\n};\n\n@Component({\n tag: 'bcm-shortcut',\n styleUrl: './shortcut.css',\n shadow: true,\n})\nexport class BcmShortcut implements ComponentInterface {\n @Prop() hotkey: string;\n @Prop() size: 'small' | 'medium' | 'large' = 'small';\n\n private readonly isMac = /Mac/.test(window.navigator.userAgent);\n\n getHotkey(key: string): string {\n if (!key) {\n return '';\n }\n if (this.isMac && (key.includes(' ') || key.includes('+'))) {\n const keys = key.split(/[\\s+]+/);\n return keys.map(k => osKeys[k] || k).join('');\n } else {\n return key;\n }\n }\n\n render() {\n const { size, hotkey } = this;\n\n return (\n <div\n class={cs(\n 'bcm-ui-element bcm-ui-content-display',\n 'block h-fit w-fit rounded border border-solid px-1',\n 'border-color-default bg-color-default text-color-default',\n 'text-center font-medium capitalize',\n {\n 'text-size-2': size === 'small',\n 'text-size-3': size === 'medium',\n 'text-size-4': size === 'large',\n },\n )}\n >\n {this.getHotkey(hotkey)}\n </div>\n );\n }\n}\n"],"mappings":"+EAAA,MAAMA,EAAc,msCCGpB,MAAMC,EAAS,CACbC,KAAM,IACNC,IAAK,IACLC,MAAO,IACPC,IAAK,IACLC,OAAQ,IACRC,UAAW,IACXC,MAAO,IACPC,OAAQ,K,MAQGC,EAAW,MALxB,WAAAC,CAAAC,G,UAOUC,KAAIC,KAAiC,QAE5BD,KAAKE,MAAG,MAAMC,KAAKC,OAAOC,UAAUC,UAmCtD,CAjCC,SAAAC,CAAUC,GACR,IAAKA,EAAK,CACR,MAAO,E,CAET,GAAIR,KAAKE,QAAUM,EAAIC,SAAS,MAAQD,EAAIC,SAAS,MAAO,CAC1D,MAAMC,EAAOF,EAAIG,MAAM,UACvB,OAAOD,EAAKE,KAAIC,GAAKzB,EAAOyB,IAAMA,IAAGC,KAAK,G,KACrC,CACL,OAAON,C,EAIX,MAAAO,GACE,MAAMd,KAAEA,EAAIe,OAAEA,GAAWhB,KAEzB,OACEiB,EAAA,OAAAT,IAAA,2CACEU,MAAOC,EACL,wCACA,qDACA,2DACA,qCACA,CACE,cAAelB,IAAS,QACxB,cAAeA,IAAS,SACxB,cAAeA,IAAS,WAI3BD,KAAKO,UAAUS,G","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":["avatarCss","BcmAvatar","constructor","hostRef","this","shape","size","icon","blink","isFallback","getFirstLetters","name","words","split","initials","map","word","charAt","toUpperCase","join","substring","render","baseClass","cs","badgeClass","imageClass","style","color","isColorTone","includes","_color","bgColor","textColor","customSize","Object","keys","width","height","fontSize","RenderContent","h","class","image","onError","src","alt","role","assign","status"],"sources":["src/components/avatar/avatar.css?tag=bcm-avatar&encapsulation=shadow","src/components/avatar/avatar.component.tsx"],"sourcesContent":[":host {\n --bcm-avatar-bg: var(--bcm-ui-color-background-default-default);\n --bcm-avatar-text: var(--bcm-ui-color-text-default);\n --bcm-avatar-radius: 50%;\n}\n","import { Component, Prop, State, h } from '@stencil/core';\nimport cs from 'classnames';\nimport { AvatarShape, AvatarSize, AvatarStatus } from './types';\n\n@Component({\n tag: 'bcm-avatar',\n styleUrl: 'avatar.css',\n shadow: true,\n})\nexport class BcmAvatar {\n /** Source URL for avatar image */\n @Prop()\n image: string;\n\n /** Alternative text for image */\n @Prop()\n alt: string;\n\n /** Shape of the avatar (ellipse/square) */\n @Prop()\n shape: AvatarShape = 'ellipse';\n\n /** Size of the avatar */\n @Prop()\n size: AvatarSize = 'medium';\n\n /** Custom background color */\n @Prop()\n color: string;\n\n /** Fallback icon class */\n @Prop()\n icon: string = 'fas fa-user';\n\n /** Status indicator type */\n @Prop()\n status: AvatarStatus;\n\n /** Status indicator animation */\n @Prop()\n blink = false;\n\n /** Display name (used for initials) */\n @Prop()\n name: string;\n\n @State() isFallback: boolean = false;\n\n private getFirstLetters(name: string): string {\n const words = name.split(' ');\n const initials = words.map(word => word.charAt(0).toUpperCase()).join('');\n return initials.substring(0, 2);\n }\n\n render() {\n const baseClass = cs(\n 'bcm-avatar bcm-ui-element bcm-ui-content-display',\n 'uppercase font-medium',\n 'inline-flex items-center justify-center',\n 'bg-[--bcm-avatar-bg] text-[--bcm-avatar-text]',\n {\n 'shape-ellipse rounded-full': this.shape === 'ellipse',\n 'shape-square rounded-[--bcm-ui-radius]': this.shape === 'square',\n 'size-small text-size-4 w-6 h-6': this.size === 'small',\n 'size-medium text-size-5 w-8 h-8': this.size === 'medium',\n 'size-large text-size-6 w-10 h-10': this.size === 'large',\n },\n );\n\n const badgeClass = cs('badge', {\n 'top-0 right-0': this.shape === 'ellipse',\n '-top-0.5 -right-0.5': this.shape === 'square',\n });\n\n const imageClass = cs('image w-full h-full', {\n 'rounded-full': this.shape === 'ellipse',\n 'rounded-[--bcm-ui-radius]': this.shape === 'square',\n });\n\n let style = {};\n\n if (this.color) {\n const isColorTone = this.color.includes('-');\n const _color = isColorTone ? this.color.split('-')[0] : this.color;\n\n const bgColor = `var(--bcm-ui-color-background-palette-${_color}-default)`;\n const textColor = `var(--bcm-ui-color-text-palette-${_color}`;\n style = {\n '--bcm-avatar-bg': bgColor,\n '--bcm-avatar-text': textColor,\n };\n }\n\n const customSize = !Object.keys(['small', 'medium', 'large']).includes(this.size)\n ? {\n width: `${this.size}px`,\n height: `${this.size}px`,\n fontSize: `${+this.size / 2}px`,\n }\n : {};\n\n const RenderContent = () => {\n if (this.isFallback) {\n if (this.name) {\n return this.getFirstLetters(this.name);\n } else {\n return <i class={this.icon}></i>;\n }\n } else if (this.image) {\n return <img class={imageClass} onError={() => (this.isFallback = true)} src={this.image} alt={this.alt} aria-label={this.alt || this.name || 'Avatar'} />;\n } else if (this.name) {\n return this.getFirstLetters(this.name);\n } else {\n return <i class={this.icon}></i>;\n }\n };\n\n return (\n <div role=\"img\" aria-label={this.alt || this.name || 'Avatar'} class={baseClass} style={{ ...style, ...customSize }}>\n <RenderContent />\n {this.status && <bcm-badge class={badgeClass} status={this.status} blink={this.blink} aria-hidden=\"true\"></bcm-badge>}\n <slot></slot>\n </div>\n );\n }\n}\n"],"mappings":"+EAAA,MAAMA,EAAY,s6C,MCSLC,EAAS,MALtB,WAAAC,CAAAC,G,UAgBEC,KAAKC,MAAgB,UAIrBD,KAAIE,KAAe,SAQnBF,KAAIG,KAAW,cAQfH,KAAKI,MAAG,MAMCJ,KAAUK,WAAY,KA+EhC,CA7ES,eAAAC,CAAgBC,GACtB,MAAMC,EAAQD,EAAKE,MAAM,KACzB,MAAMC,EAAWF,EAAMG,KAAIC,GAAQA,EAAKC,OAAO,GAAGC,gBAAeC,KAAK,IACtE,OAAOL,EAASM,UAAU,EAAG,E,CAG/B,MAAAC,GACE,MAAMC,EAAYC,EAChB,mDACA,wBACA,0CACA,gDACA,CACE,6BAA8BnB,KAAKC,QAAU,UAC7C,yCAA0CD,KAAKC,QAAU,SACzD,iCAAkCD,KAAKE,OAAS,QAChD,kCAAmCF,KAAKE,OAAS,SACjD,mCAAoCF,KAAKE,OAAS,UAItD,MAAMkB,EAAaD,EAAG,QAAS,CAC7B,gBAAiBnB,KAAKC,QAAU,UAChC,sBAAuBD,KAAKC,QAAU,WAGxC,MAAMoB,EAAaF,EAAG,sBAAuB,CAC3C,eAAgBnB,KAAKC,QAAU,UAC/B,4BAA6BD,KAAKC,QAAU,WAG9C,IAAIqB,EAAQ,GAEZ,GAAItB,KAAKuB,MAAO,CACd,MAAMC,EAAcxB,KAAKuB,MAAME,SAAS,KACxC,MAAMC,EAASF,EAAcxB,KAAKuB,MAAMd,MAAM,KAAK,GAAKT,KAAKuB,MAE7D,MAAMI,EAAU,yCAAyCD,aACzD,MAAME,EAAY,mCAAmCF,IACrDJ,EAAQ,CACN,kBAAmBK,EACnB,oBAAqBC,E,CAIzB,MAAMC,GAAcC,OAAOC,KAAK,CAAC,QAAS,SAAU,UAAUN,SAASzB,KAAKE,MACxE,CACA8B,MAAO,GAAGhC,KAAKE,SACf+B,OAAQ,GAAGjC,KAAKE,SAChBgC,SAAU,IAAIlC,KAAKE,KAAO,OAE1B,GAEJ,MAAMiC,EAAgB,KACpB,GAAInC,KAAKK,WAAY,CACnB,GAAIL,KAAKO,KAAM,CACb,OAAOP,KAAKM,gBAAgBN,KAAKO,K,KAC5B,CACL,OAAO6B,EAAA,KAAGC,MAAOrC,KAAKG,M,OAEnB,GAAIH,KAAKsC,MAAO,CACrB,OAAOF,EAAA,OAAKC,MAAOhB,EAAYkB,QAAS,IAAOvC,KAAKK,WAAa,KAAOmC,IAAKxC,KAAKsC,MAAOG,IAAKzC,KAAKyC,IAAiB,aAAAzC,KAAKyC,KAAOzC,KAAKO,MAAQ,U,MACxI,GAAIP,KAAKO,KAAM,CACpB,OAAOP,KAAKM,gBAAgBN,KAAKO,K,KAC5B,CACL,OAAO6B,EAAA,KAAGC,MAAOrC,KAAKG,M,GAI1B,OACEiC,EAAK,OAAAM,KAAK,MAAK,aAAa1C,KAAKyC,KAAOzC,KAAKO,MAAQ,SAAU8B,MAAOnB,EAAWI,MAAKQ,OAAAa,OAAAb,OAAAa,OAAA,GAAOrB,GAAUO,IACrGO,EAACD,EAAgB,MAChBnC,KAAK4C,QAAUR,EAAA,aAAWC,MAAOjB,EAAYwB,OAAQ5C,KAAK4C,OAAQxC,MAAOJ,KAAKI,MAAmB,uBAClGgC,EAAa,a","ignoreList":[]}
@@ -1,2 +0,0 @@
1
- import{r as t,c as i,h as s,H as e,a as o}from"./p-BuuGCw0z.js";import{b as a,c as r,o as h,f as n,s as l}from"./p-DxMLMJ3r.js";const d='.absolute{position:absolute}.relative{position:relative}.block{display:block}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.border{border-width:1px}.transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}bcm-linked{display:block;position:relative}bcm-linked[append-to-body]{display:none}.floating-content{min-width:-moz-max-content;min-width:max-content;transition:opacity .2s ease,visibility .2s ease,transform .2s ease;will-change:transform,opacity}.floating-visible{animation:fadeInScale .2s ease-out}.floating-hidden{display:none!important;pointer-events:none}.floating-wrapper{position:relative;z-index:1}@keyframes fadeInScale{0%{opacity:0;transform:scale(.95) translateY(-5px)}to{opacity:1;transform:scale(1) translateY(0)}}.floating-arrow{z-index:-1}.floating-arrow,.floating-arrow:before{height:10px;position:absolute;width:10px}.floating-arrow:before{background:#fff;border:1px solid #e2e8f0;content:"";transform:rotate(45deg)}.arrow-top{bottom:-5px}.arrow-bottom,.arrow-top{left:50%;transform:translateX(-50%)}.arrow-bottom{top:-5px}.arrow-left{right:-5px}.arrow-left,.arrow-right{top:50%;transform:translateY(-50%)}.arrow-right{left:-5px}.arrow-top:before{border-bottom:0;border-right:0}.arrow-bottom:before{border-left:0;border-top:0}.arrow-left:before{border-right:0;border-top:0}.arrow-right:before{border-bottom:0;border-left:0}@media (max-width:768px){.floating-content{max-height:calc(100vh - 32px);max-width:calc(100vw - 32px)}}.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}.visible{visibility:visible}.fixed{position:fixed}.hidden{display:none}.resize{resize:both}.blur{--tw-blur:blur(8px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}';const c=class{constructor(s){t(this,s);this.bcmShow=i(this,"bcmShow",7);this.bcmHide=i(this,"bcmHide",7);this.bcmShown=i(this,"bcmShown",7);this.bcmHidden=i(this,"bcmHidden",7);this.trigger="click";this.placement="bottom-start";this.showDelay=0;this.hideDelay=0;this.offset=8;this.arrow=false;this.disabled=false;this.zIndex=1e3;this.appendToBody=false;this.destroyOnHide=false;this.isVisible=false;this.isReady=false;this.handleMouseEnter=()=>{this.clearTimeouts();if(this.showDelay>0){this.showTimeout=setTimeout((()=>this.show()),this.showDelay)}else{this.show()}};this.handleMouseLeave=()=>{this.clearTimeouts();if(this.hideDelay>0){this.hideTimeout=setTimeout((()=>this.hide()),this.hideDelay)}else{this.hide()}};this.handleFloatingMouseEnter=()=>{this.clearTimeouts()};this.handleFloatingMouseLeave=()=>{this.clearTimeouts();if(this.hideDelay>0){this.hideTimeout=setTimeout((()=>this.hide()),this.hideDelay)}else{this.hide()}};this.handleClick=t=>{t.stopPropagation();this.toggle()};this.handleFocus=()=>{this.show()};this.handleBlur=()=>{this.hide()}}setupTarget(){this.disconnectTarget();this.connectTarget()}onVisibilityChange(t){if(t){this.updatePosition();this.bcmShown.emit()}else{this.bcmHidden.emit()}}async componentDidLoad(){await new Promise((t=>requestAnimationFrame(t)));this.floatingEl=this.host.querySelector(".floating-content");if(this.floatingEl){this.isReady=true;this.connectTarget();this.setupFloatingObserver();console.log("✅ bcm-linked initialized successfully")}else{console.error("❌ Could not find .floating-content element")}}disconnectedCallback(){var t,i;this.disconnectTarget();this.clearTimeouts();(t=this.cleanup)===null||t===void 0?void 0:t.call(this);(i=this.resizeObserver)===null||i===void 0?void 0:i.disconnect();if(this.appendToBody&&this.floatingEl&&this.originalParent){this.originalParent.appendChild(this.floatingEl)}}connectTarget(){if(!this.isReady)return;this.targetEl=this.targetElement||(this.targetId?document.getElementById(this.targetId):null)||this.host.previousElementSibling||this.host.parentElement;if(!this.targetEl){console.warn("bcm-linked: No target element found");return}this.setupEventListeners();if(this.targetEl&&this.floatingEl){this.cleanup=a(this.targetEl,this.floatingEl,(()=>{if(this.isVisible){this.updatePosition()}}))}this.resizeObserver=new ResizeObserver((()=>{if(this.isVisible){this.updatePosition()}}));this.resizeObserver.observe(this.floatingEl)}disconnectTarget(){var t,i;if(this.targetEl){this.removeEventListeners()}(t=this.cleanup)===null||t===void 0?void 0:t.call(this);(i=this.resizeObserver)===null||i===void 0?void 0:i.disconnect()}setupEventListeners(){var t,i;if(!this.targetEl||this.disabled)return;switch(this.trigger){case"hover":this.targetEl.addEventListener("mouseenter",this.handleMouseEnter);this.targetEl.addEventListener("mouseleave",this.handleMouseLeave);(t=this.floatingEl)===null||t===void 0?void 0:t.addEventListener("mouseenter",this.handleFloatingMouseEnter);(i=this.floatingEl)===null||i===void 0?void 0:i.addEventListener("mouseleave",this.handleFloatingMouseLeave);break;case"click":this.targetEl.addEventListener("click",this.handleClick);this.setupClickOutside();break;case"focus":this.targetEl.addEventListener("focus",this.handleFocus);this.targetEl.addEventListener("blur",this.handleBlur);break}}removeEventListeners(){var t,i;if(!this.targetEl)return;this.targetEl.removeEventListener("mouseenter",this.handleMouseEnter);this.targetEl.removeEventListener("mouseleave",this.handleMouseLeave);this.targetEl.removeEventListener("click",this.handleClick);this.targetEl.removeEventListener("focus",this.handleFocus);this.targetEl.removeEventListener("blur",this.handleBlur);(t=this.floatingEl)===null||t===void 0?void 0:t.removeEventListener("mouseenter",this.handleFloatingMouseEnter);(i=this.floatingEl)===null||i===void 0?void 0:i.removeEventListener("mouseleave",this.handleFloatingMouseLeave);this.removeClickOutside()}setupClickOutside(){this.clickOutsideHandler=t=>{var i,s;const e=t.target;if(!((i=this.floatingEl)===null||i===void 0?void 0:i.contains(e))&&!((s=this.targetEl)===null||s===void 0?void 0:s.contains(e))&&!this.host.contains(e)){this.hide()}};document.addEventListener("click",this.clickOutsideHandler,true)}removeClickOutside(){if(this.clickOutsideHandler){document.removeEventListener("click",this.clickOutsideHandler,true);this.clickOutsideHandler=undefined}}clearTimeouts(){if(this.showTimeout){clearTimeout(this.showTimeout);this.showTimeout=undefined}if(this.hideTimeout){clearTimeout(this.hideTimeout);this.hideTimeout=undefined}}async updatePosition(){if(!this.targetEl||!this.floatingEl||!this.isVisible)return;const t=[h(this.offset),n({fallbackPlacements:["top","bottom","left","right","top-start","top-end","bottom-start","bottom-end","left-start","left-end","right-start","right-end"]}),l({padding:8})];const{x:i,y:s,placement:e}=await r(this.targetEl,this.floatingEl,{placement:this.placement,middleware:t,strategy:"fixed"});Object.assign(this.floatingEl.style,{left:`${i}px`,top:`${s}px`,zIndex:this.zIndex.toString()});if(this.arrow){this.updateArrow(e)}}updateArrow(t){var i;const s=(i=this.floatingEl)===null||i===void 0?void 0:i.querySelector(".floating-arrow");if(!s)return;s.className="floating-arrow";const e=t.split("-")[0];s.classList.add(`arrow-${e}`)}async show(){if(this.disabled||this.isVisible)return;this.bcmShow.emit();if(this.appendToBody&&this.floatingEl){this.originalParent=this.floatingEl.parentNode;this.originalNextSibling=this.floatingEl.nextSibling;document.body.appendChild(this.floatingEl)}this.isVisible=true;await new Promise((t=>requestAnimationFrame(t)));await this.updatePosition()}async hide(){if(!this.isVisible)return;this.bcmHide.emit();this.isVisible=false;if(this.appendToBody&&this.floatingEl&&this.originalParent){if(this.originalNextSibling){this.originalParent.insertBefore(this.floatingEl,this.originalNextSibling)}else{this.originalParent.appendChild(this.floatingEl)}this.originalParent=undefined;this.originalNextSibling=undefined}if(this.destroyOnHide&&this.floatingEl&&this.floatingEl.parentNode){this.floatingEl.parentNode.removeChild(this.floatingEl)}}async toggle(){if(this.isVisible){await this.hide()}else{await this.show()}}async updatePositioning(){await this.updatePosition()}setupFloatingObserver(){if(!this.floatingEl)return;this.resizeObserver=new ResizeObserver((()=>{if(this.isVisible){this.updatePosition()}}));this.resizeObserver.observe(this.floatingEl)}render(){const t={"floating-content":true,"floating-visible":this.isVisible,"floating-hidden":!this.isVisible,"floating-with-arrow":this.arrow,"floating-destroy-on-hide":this.destroyOnHide};return s(e,{key:"f5835cc1b6044476e66402d23a3becf18d3f2049"},s("div",{key:"2c7f92bbe85bc938a767734ef4b27702247fb390",class:t,style:{position:"fixed",top:"0px",left:"0px",zIndex:this.zIndex.toString(),display:this.isVisible?"block":"none",visibility:this.isVisible?"visible":"hidden",opacity:this.isVisible?"1":"0",pointerEvents:this.isVisible?"auto":"none"}},this.arrow&&s("div",{key:"f6eedac02b29b3ca00a9a84eea940ac89089f30c",class:"floating-arrow"}),s("div",{key:"7cb19f085de1d77a41fd9897be90999e78a0a54d",class:"floating-wrapper"},s("slot",{key:"a4b4289642850e3c2f7f27771b3d28bc41c8248a"}))),s("div",{key:"61cd7af9a4a47c87c308e1e67f96efb987c97312",style:{display:"none"}},s("slot",{key:"7160df275f5c7c66733158f95266598d0d207a17",name:"fallback"})))}get host(){return o(this)}static get watchers(){return{targetId:["setupTarget"],targetElement:["setupTarget"],isVisible:["onVisibilityChange"]}}};c.style=d;export{c as bcm_linked};
2
- //# sourceMappingURL=p-2d0a6472.entry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["linkedCss","BcmLinked","constructor","hostRef","this","trigger","placement","showDelay","hideDelay","offset","arrow","disabled","zIndex","appendToBody","destroyOnHide","isVisible","isReady","handleMouseEnter","clearTimeouts","showTimeout","setTimeout","show","handleMouseLeave","hideTimeout","hide","handleFloatingMouseEnter","handleFloatingMouseLeave","handleClick","e","stopPropagation","toggle","handleFocus","handleBlur","setupTarget","disconnectTarget","connectTarget","onVisibilityChange","newValue","updatePosition","bcmShown","emit","bcmHidden","componentDidLoad","Promise","resolve","requestAnimationFrame","floatingEl","host","querySelector","setupFloatingObserver","console","log","error","disconnectedCallback","_a","cleanup","call","_b","resizeObserver","disconnect","originalParent","appendChild","targetEl","targetElement","targetId","document","getElementById","previousElementSibling","parentElement","warn","setupEventListeners","autoUpdate","ResizeObserver","observe","removeEventListeners","addEventListener","setupClickOutside","removeEventListener","removeClickOutside","clickOutsideHandler","target","contains","undefined","clearTimeout","middleware","flip","fallbackPlacements","shift","padding","x","y","computePosition","strategy","Object","assign","style","left","top","toString","updateArrow","className","side","split","classList","add","bcmShow","parentNode","originalNextSibling","nextSibling","body","bcmHide","insertBefore","removeChild","updatePositioning","render","floatingClasses","h","Host","key","class","position","display","visibility","opacity","pointerEvents","name"],"sources":["src/components/linked/linked.css?tag=bcm-linked","src/components/linked/linked.component.tsx"],"sourcesContent":["bcm-linked {\n display: block;\n position: relative;\n}\nbcm-linked[append-to-body] {\n display: none;\n}\n\n.floating-content {\n min-width: max-content;\n transition: opacity 0.2s ease, visibility 0.2s ease, transform 0.2s ease;\n will-change: transform, opacity;\n}\n\n.floating-visible {\n animation: fadeInScale 0.2s ease-out;\n}\n\n.floating-hidden {\n display: none !important;\n pointer-events: none;\n}\n\n.floating-wrapper {\n position: relative;\n z-index: 1;\n}\n\n/* Animations */\n@keyframes fadeInScale {\n from {\n opacity: 0;\n transform: scale(0.95) translateY(-5px);\n }\n to {\n opacity: 1;\n transform: scale(1) translateY(0);\n }\n}\n\n/* Arrow Styles */\n.floating-arrow {\n position: absolute;\n width: 10px;\n height: 10px;\n z-index: -1;\n}\n\n.floating-arrow::before {\n content: '';\n position: absolute;\n width: 10px;\n height: 10px;\n background: white;\n border: 1px solid #e2e8f0;\n transform: rotate(45deg);\n}\n\n/* Arrow positioning based on placement */\n.arrow-top {\n bottom: -5px;\n left: 50%;\n transform: translateX(-50%);\n}\n\n.arrow-bottom {\n top: -5px;\n left: 50%;\n transform: translateX(-50%);\n}\n\n.arrow-left {\n right: -5px;\n top: 50%;\n transform: translateY(-50%);\n}\n\n.arrow-right {\n left: -5px;\n top: 50%;\n transform: translateY(-50%);\n}\n\n/* Arrow border fix for bordered popups */\n.arrow-top::before {\n border-bottom: 0;\n border-right: 0;\n}\n\n.arrow-bottom::before {\n border-top: 0;\n border-left: 0;\n}\n\n.arrow-left::before {\n border-top: 0;\n border-right: 0;\n}\n\n.arrow-right::before {\n border-bottom: 0;\n border-left: 0;\n}\n\n/* Responsive adjustments */\n@media (max-width: 768px) {\n .floating-content {\n max-width: calc(100vw - 32px);\n max-height: calc(100vh - 32px);\n }\n}\n","import { Component, ComponentInterface, Prop, Element, State, h, Event, EventEmitter, Watch, Method, Host } from '@stencil/core';\nimport { computePosition, shift, offset, autoUpdate, flip, type Placement } from '@floating-ui/dom';\n\nexport type TriggerType = 'hover' | 'click' | 'focus' | 'manual';\n\n@Component({\n tag: 'bcm-linked',\n styleUrl: 'linked.css',\n shadow: false,\n})\nexport class BcmLinked implements ComponentInterface {\n @Element() host: HTMLElement;\n\n // Target configuration\n @Prop({ reflect: true, attribute: 'target-id' }) targetId?: string;\n @Prop() targetElement?: HTMLElement;\n\n // Trigger configuration\n @Prop() trigger: TriggerType = 'click';\n @Prop() placement: Placement = 'bottom-start';\n\n // Timing configuration\n @Prop() showDelay: number = 0;\n @Prop() hideDelay: number = 0;\n\n // Positioning configuration\n @Prop() offset: number = 8;\n @Prop() arrow: boolean = false;\n @Prop() disabled: boolean = false;\n\n // Style configuration\n @Prop() zIndex: number = 1000;\n @Prop() appendToBody: boolean = false;\n @Prop() destroyOnHide: boolean = false;\n\n // State\n @State() isVisible: boolean = false;\n @State() isReady: boolean = false;\n\n // Events\n @Event() bcmShow: EventEmitter<void>;\n @Event() bcmHide: EventEmitter<void>;\n @Event() bcmShown: EventEmitter<void>;\n @Event() bcmHidden: EventEmitter<void>;\n\n // Private properties\n private floatingEl?: HTMLElement;\n private targetEl?: HTMLElement;\n private showTimeout?: NodeJS.Timeout;\n private hideTimeout?: NodeJS.Timeout;\n private cleanup?: () => void;\n private clickOutsideHandler?: (e: MouseEvent) => void;\n private resizeObserver?: ResizeObserver;\n private originalParent?: Node;\n private originalNextSibling?: Node;\n\n // Watch for changes\n @Watch('targetId')\n @Watch('targetElement')\n setupTarget() {\n this.disconnectTarget();\n this.connectTarget();\n }\n\n @Watch('isVisible')\n onVisibilityChange(newValue: boolean) {\n if (newValue) {\n this.updatePosition();\n this.bcmShown.emit();\n } else {\n this.bcmHidden.emit();\n }\n }\n\n async componentDidLoad() {\n // Wait for render\n await new Promise(resolve => requestAnimationFrame(resolve));\n\n this.floatingEl = this.host.querySelector('.floating-content') as HTMLElement;\n\n if (this.floatingEl) {\n this.isReady = true;\n this.connectTarget();\n this.setupFloatingObserver();\n console.log('✅ bcm-linked initialized successfully');\n } else {\n console.error('❌ Could not find .floating-content element');\n }\n }\n\n disconnectedCallback() {\n this.disconnectTarget();\n this.clearTimeouts();\n this.cleanup?.();\n this.resizeObserver?.disconnect();\n\n // Restore element to original position if component is destroyed while in portal\n if (this.appendToBody && this.floatingEl && this.originalParent) {\n this.originalParent.appendChild(this.floatingEl);\n }\n }\n\n private connectTarget() {\n if (!this.isReady) return;\n\n // Find target element\n this.targetEl =\n this.targetElement || (this.targetId ? document.getElementById(this.targetId) : null) || (this.host.previousElementSibling as HTMLElement) || this.host.parentElement;\n\n if (!this.targetEl) {\n console.warn('bcm-linked: No target element found');\n return;\n }\n\n // Setup event listeners based on trigger type\n this.setupEventListeners();\n\n // Setup auto-update for position\n if (this.targetEl && this.floatingEl) {\n this.cleanup = autoUpdate(this.targetEl, this.floatingEl, () => {\n if (this.isVisible) {\n this.updatePosition();\n }\n });\n }\n\n // Setup resize observer for responsive positioning\n this.resizeObserver = new ResizeObserver(() => {\n if (this.isVisible) {\n this.updatePosition();\n }\n });\n this.resizeObserver.observe(this.floatingEl);\n }\n\n private disconnectTarget() {\n if (this.targetEl) {\n this.removeEventListeners();\n }\n this.cleanup?.();\n this.resizeObserver?.disconnect();\n }\n\n private setupEventListeners() {\n if (!this.targetEl || this.disabled) return;\n\n switch (this.trigger) {\n case 'hover':\n this.targetEl.addEventListener('mouseenter', this.handleMouseEnter);\n this.targetEl.addEventListener('mouseleave', this.handleMouseLeave);\n this.floatingEl?.addEventListener('mouseenter', this.handleFloatingMouseEnter);\n this.floatingEl?.addEventListener('mouseleave', this.handleFloatingMouseLeave);\n break;\n\n case 'click':\n this.targetEl.addEventListener('click', this.handleClick);\n this.setupClickOutside();\n break;\n\n case 'focus':\n this.targetEl.addEventListener('focus', this.handleFocus);\n this.targetEl.addEventListener('blur', this.handleBlur);\n break;\n }\n }\n\n private removeEventListeners() {\n if (!this.targetEl) return;\n\n this.targetEl.removeEventListener('mouseenter', this.handleMouseEnter);\n this.targetEl.removeEventListener('mouseleave', this.handleMouseLeave);\n this.targetEl.removeEventListener('click', this.handleClick);\n this.targetEl.removeEventListener('focus', this.handleFocus);\n this.targetEl.removeEventListener('blur', this.handleBlur);\n\n this.floatingEl?.removeEventListener('mouseenter', this.handleFloatingMouseEnter);\n this.floatingEl?.removeEventListener('mouseleave', this.handleFloatingMouseLeave);\n\n this.removeClickOutside();\n }\n\n private setupClickOutside() {\n this.clickOutsideHandler = (e: MouseEvent) => {\n const target = e.target as Node;\n if (!this.floatingEl?.contains(target) && !this.targetEl?.contains(target) && !this.host.contains(target)) {\n this.hide();\n }\n };\n document.addEventListener('click', this.clickOutsideHandler, true);\n }\n\n private removeClickOutside() {\n if (this.clickOutsideHandler) {\n document.removeEventListener('click', this.clickOutsideHandler, true);\n this.clickOutsideHandler = undefined;\n }\n }\n\n private handleMouseEnter = () => {\n this.clearTimeouts();\n if (this.showDelay > 0) {\n this.showTimeout = setTimeout(() => this.show(), this.showDelay);\n } else {\n this.show();\n }\n };\n\n private handleMouseLeave = () => {\n this.clearTimeouts();\n if (this.hideDelay > 0) {\n this.hideTimeout = setTimeout(() => this.hide(), this.hideDelay);\n } else {\n this.hide();\n }\n };\n\n private handleFloatingMouseEnter = () => {\n this.clearTimeouts();\n };\n\n private handleFloatingMouseLeave = () => {\n this.clearTimeouts();\n if (this.hideDelay > 0) {\n this.hideTimeout = setTimeout(() => this.hide(), this.hideDelay);\n } else {\n this.hide();\n }\n };\n\n private handleClick = (e: Event) => {\n e.stopPropagation();\n this.toggle();\n };\n\n private handleFocus = () => {\n this.show();\n };\n\n private handleBlur = () => {\n this.hide();\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 async updatePosition() {\n if (!this.targetEl || !this.floatingEl || !this.isVisible) return;\n\n // Use autoPlacement only for bottom-start (dropdown default)\n // For other placements, respect the manual placement with flip fallback\n // const useAutoPlacement = this.placement === 'bottom-start';\n\n const middleware = [\n offset(this.offset),\n // useAutoPlacement\n // ? autoPlacement({\n // allowedPlacements: ['bottom-start', 'bottom-end', 'bottom', 'top-start', 'top-end', 'top', 'right-start', 'right-end', 'right', 'left-start', 'left-end', 'left'],\n // boundary: document.body,\n // })\n // :\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 const { x, y, placement } = await computePosition(this.targetEl, this.floatingEl, {\n placement: this.placement,\n middleware,\n strategy: 'fixed',\n });\n\n Object.assign(this.floatingEl.style, {\n left: `${x}px`,\n top: `${y}px`,\n zIndex: this.zIndex.toString(),\n });\n\n // Update arrow if enabled\n if (this.arrow) {\n this.updateArrow(placement);\n }\n }\n\n private updateArrow(placement: Placement) {\n const arrow = this.floatingEl?.querySelector('.floating-arrow') as HTMLElement;\n if (!arrow) return;\n\n // Remove all arrow classes\n arrow.className = 'floating-arrow';\n\n // Add placement-specific class\n const side = placement.split('-')[0];\n arrow.classList.add(`arrow-${side}`);\n }\n\n @Method()\n async show(): Promise<void> {\n if (this.disabled || this.isVisible) return;\n\n this.bcmShow.emit();\n\n // Portalling: Move the floating element to the body\n if (this.appendToBody && this.floatingEl) {\n this.originalParent = this.floatingEl.parentNode;\n this.originalNextSibling = this.floatingEl.nextSibling;\n document.body.appendChild(this.floatingEl);\n }\n\n this.isVisible = true;\n\n // Use requestAnimationFrame to ensure the element is visible before positioning\n await new Promise(resolve => requestAnimationFrame(resolve));\n await this.updatePosition();\n }\n\n @Method()\n async hide(): Promise<void> {\n if (!this.isVisible) return;\n\n this.bcmHide.emit();\n this.isVisible = false;\n\n // Portalling: Restore the floating element to its original position\n if (this.appendToBody && this.floatingEl && this.originalParent) {\n if (this.originalNextSibling) {\n this.originalParent.insertBefore(this.floatingEl, this.originalNextSibling);\n } else {\n this.originalParent.appendChild(this.floatingEl);\n }\n this.originalParent = undefined;\n this.originalNextSibling = undefined;\n }\n\n if (this.destroyOnHide && this.floatingEl && this.floatingEl.parentNode) {\n this.floatingEl.parentNode.removeChild(this.floatingEl);\n }\n }\n\n @Method()\n async toggle(): Promise<void> {\n if (this.isVisible) {\n await this.hide();\n } else {\n await this.show();\n }\n }\n\n @Method()\n async updatePositioning(): Promise<void> {\n await this.updatePosition();\n }\n\n private setupFloatingObserver() {\n if (!this.floatingEl) return;\n\n // Observe floating element size changes for position updates\n this.resizeObserver = new ResizeObserver(() => {\n if (this.isVisible) {\n this.updatePosition();\n }\n });\n\n this.resizeObserver.observe(this.floatingEl);\n }\n\n render() {\n const floatingClasses = {\n 'floating-content': true,\n 'floating-visible': this.isVisible,\n 'floating-hidden': !this.isVisible,\n 'floating-with-arrow': this.arrow,\n 'floating-destroy-on-hide': this.destroyOnHide,\n };\n\n return (\n <Host>\n <div\n class={floatingClasses}\n style={{\n position: 'fixed',\n top: '0px',\n left: '0px',\n zIndex: this.zIndex.toString(),\n display: this.isVisible ? 'block' : 'none',\n visibility: this.isVisible ? 'visible' : 'hidden',\n opacity: this.isVisible ? '1' : '0',\n pointerEvents: this.isVisible ? 'auto' : 'none',\n }}\n >\n {this.arrow && <div class=\"floating-arrow\" />}\n <div class=\"floating-wrapper\">\n <slot></slot>\n </div>\n </div>\n <div style={{ display: 'none' }}>\n <slot name=\"fallback\"></slot>\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":["bcmTabsCss","BcmTabs","constructor","hostRef","this","size","variant","smooth","triggers","contents","tabClass","tv","base","variants","defaultVariants","componentWillLoad","activeTab","defaultValue","componentDidLoad","refreshElementReferences","updateTriggerProperties","updateTabsListProperties","length","value","setupRelations","requestAnimationFrame","updateInkbar","updateContentVisibility","Array","from","el","querySelectorAll","tabsList","querySelector","forEach","trigger","active","panel","find","content","panelId","id","setAttribute","_a","handleSizeChange","handleVariantChange","handleSmoothChange","disableTab","t","disabled","enableTab","disableAllTabs","enableAllTabs","getActiveTab","setActiveTab","previousTab","updateTabStatus","bcmTabChange","emit","element","isActive","handleResize","handleTabSelected","event","detail","activeElement","isVisible","style","display","toString","console","warn","totalTriggers","inkbar","_b","shadowRoot","activeTrigger","updateInkbarPosition","opacity","triggerRect","getBoundingClientRect","groupRect","_c","left","width","transform","right","transition","render","h","Host","key","class","name"],"sources":["src/components/tabs/bcm-tabs.css?tag=bcm-tabs&encapsulation=shadow","src/components/tabs/tabs.component.tsx"],"sourcesContent":[":host {\n display: block;\n position: relative;\n}\n\n:host([variant='full-width']) {\n width: 100%;\n}\n\n:host([variant='auto-width']) {\n width: auto;\n}\n","import { Component, State, Prop, Element, h, Host, Listen, ComponentInterface, Event, EventEmitter, Watch, Method } from '@stencil/core';\nimport { tv } from '@utils/tv';\n\n/**\n * @description Tab interface component\n * @slot - Default slot for content area\n * @slot tabs-list - Special slot for tab list\n */\n@Component({\n tag: 'bcm-tabs',\n styleUrl: 'bcm-tabs.css',\n shadow: true,\n})\nexport class BcmTabs implements ComponentInterface {\n @Element() el: HTMLElement;\n\n /**\n * Default active tab value\n */\n @Prop({ reflect: true })\n defaultValue: string;\n\n /**\n * Tab size\n */\n @Prop({ reflect: true })\n size: 'small' | 'medium' | 'large' = 'medium';\n\n /**\n * Tab variant - controls width behavior\n */\n @Prop({ reflect: true })\n variant: 'full-width' | 'auto-width' = 'full-width';\n\n /**\n * Whether to enable smooth animations for inkbar and transitions\n */\n @Prop({ reflect: true })\n smooth: boolean = true;\n\n /**\n * Triggers when tab changes\n */\n @Event({\n composed: false,\n bubbles: false,\n cancelable: true,\n eventName: 'bcmTabChange',\n })\n bcmTabChange: EventEmitter<{\n activeTab: string;\n element: HTMLBcmTabsTriggerElement;\n previousTab?: string;\n }>;\n\n /**\n * Active tab value\n */\n @State() activeTab: string;\n\n /**\n * Previous active tab value\n */\n @State() previousTab: string;\n\n private triggers: HTMLBcmTabsTriggerElement[] = [];\n private contents: HTMLBcmTabsContentElement[] = [];\n private tabsList: HTMLBcmTabsListElement;\n\n componentWillLoad() {\n this.activeTab = this.defaultValue;\n }\n\n componentDidLoad() {\n this.refreshElementReferences();\n this.updateTriggerProperties();\n this.updateTabsListProperties();\n\n // Eğer defaultValue yoksa ilk tab'ı aktif yap\n if (!this.defaultValue && this.triggers.length > 0) {\n this.activeTab = this.triggers[0].value;\n }\n\n this.setupRelations(); // activeTab ayarlandıktan sonra relations'ı kur\n\n // auto-width variant'ında inkbar hesaplaması için ek gecikme\n if (this.variant === 'auto-width') {\n requestAnimationFrame(() => {\n this.updateInkbar();\n this.updateContentVisibility();\n });\n } else {\n this.updateInkbar();\n this.updateContentVisibility();\n }\n }\n\n /**\n * Refreshes DOM element references\n */\n private refreshElementReferences() {\n this.triggers = Array.from(this.el.querySelectorAll('bcm-tabs-trigger'));\n this.contents = Array.from(this.el.querySelectorAll('bcm-tabs-content'));\n this.tabsList = this.el.querySelector('bcm-tabs-list');\n }\n\n /**\n * Establishes relationships between tabs and content\n */\n private setupRelations() {\n this.triggers.forEach(trigger => {\n trigger.active = trigger.value === this.activeTab;\n const panel = this.contents.find(content => content.value === trigger.value);\n if (panel) {\n const panelId = `panel-${trigger.value}`;\n panel.id = panelId;\n trigger.setAttribute('aria-controls', panelId);\n panel.setAttribute('aria-labelledby', `trigger-${trigger.value}`);\n trigger.id = `trigger-${trigger.value}`;\n }\n });\n }\n\n private updateTriggerProperties() {\n if (this.triggers?.length > 0) {\n this.triggers.forEach(trigger => {\n trigger.size = this.size;\n trigger.variant = this.variant;\n trigger.smooth = this.smooth;\n });\n }\n }\n\n private updateTabsListProperties() {\n if (this.tabsList) {\n this.tabsList.variant = this.variant;\n this.tabsList.smooth = this.smooth;\n }\n }\n\n @Watch('size')\n handleSizeChange() {\n this.updateTriggerProperties();\n }\n\n @Watch('variant')\n handleVariantChange() {\n this.updateTriggerProperties();\n this.updateTabsListProperties();\n\n // auto-width variant'ında inkbar hesaplaması için ek gecikme\n if (this.variant === 'auto-width') {\n requestAnimationFrame(() => {\n this.updateInkbar();\n });\n } else {\n this.updateInkbar();\n }\n }\n\n @Watch('smooth')\n handleSmoothChange() {\n this.updateTriggerProperties();\n this.updateTabsListProperties();\n }\n\n @Method()\n async disableTab(value: string): Promise<void> {\n const trigger = this.triggers.find(t => t.value === value);\n if (trigger) {\n trigger.disabled = true;\n }\n }\n\n @Method()\n async enableTab(value: string): Promise<void> {\n const trigger = this.triggers.find(t => t.value === value);\n if (trigger) {\n trigger.disabled = false;\n }\n }\n\n /**\n * Disables all tabs\n */\n @Method()\n async disableAllTabs() {\n this.triggers.forEach(trigger => {\n trigger.disabled = true;\n });\n }\n\n /**\n * Enables all tabs\n */\n @Method()\n async enableAllTabs() {\n this.triggers.forEach(trigger => {\n trigger.disabled = false;\n });\n }\n\n /**\n * Returns the active tab value\n */\n @Method()\n async getActiveTab(): Promise<string> {\n return this.activeTab;\n }\n\n /**\n * Sets the active tab\n */\n @Method()\n async setActiveTab(value: string): Promise<void> {\n const trigger = this.triggers.find(t => t.value === value);\n if (trigger && !trigger.disabled) {\n this.previousTab = this.activeTab;\n this.activeTab = value;\n this.updateInkbar();\n this.updateContentVisibility();\n this.updateTabStatus();\n\n this.bcmTabChange.emit({\n activeTab: this.activeTab,\n element: trigger,\n previousTab: this.previousTab,\n });\n }\n }\n\n /**\n * Updates tab status\n */\n private updateTabStatus() {\n this.triggers.forEach(trigger => {\n const isActive = trigger.value === this.activeTab;\n trigger.active = isActive;\n });\n }\n\n @Listen('resize', { target: 'window' })\n handleResize() {\n this.updateInkbar();\n }\n\n /**\n * Triggered when a tab is selected\n */\n @Listen('bcmTabSelected', { capture: true })\n handleTabSelected(event: CustomEvent<string>) {\n this.previousTab = this.activeTab;\n this.activeTab = event.detail;\n\n this.updateTabStatus();\n this.updateInkbar();\n this.updateContentVisibility();\n\n const activeElement = this.triggers.find(trigger => trigger.value === this.activeTab);\n if (activeElement) {\n this.bcmTabChange.emit({\n activeTab: this.activeTab,\n element: activeElement,\n previousTab: this.previousTab,\n });\n }\n }\n\n /**\n * Updates content visibility\n */\n private updateContentVisibility() {\n this.contents.forEach(content => {\n const isVisible = content.value === this.activeTab;\n content.style.display = isVisible ? 'block' : 'none';\n content.setAttribute('aria-hidden', (!isVisible).toString());\n });\n }\n\n /**\n * Updates inkbar position\n */\n private updateInkbar() {\n if (!this.tabsList) {\n console.warn('bcm-tabs-list not found');\n return;\n }\n\n const totalTriggers = this.triggers.length;\n if (totalTriggers === 0) return;\n\n const inkbar = this.tabsList?.shadowRoot?.querySelector('.inkbar') as HTMLElement;\n const activeTrigger = this.triggers.find(trigger => trigger.value === this.activeTab);\n\n if (activeTrigger && inkbar) {\n // auto-width variant'ında container genişliği henüz hesaplanmamış olabilir\n // Bu durumda bir sonraki frame'de tekrar deneyelim\n if (this.variant === 'auto-width') {\n requestAnimationFrame(() => {\n this.updateInkbarPosition(inkbar, activeTrigger);\n });\n } else {\n this.updateInkbarPosition(inkbar, activeTrigger);\n }\n } else {\n if (inkbar) inkbar.style.opacity = '0';\n }\n }\n\n /**\n * Updates inkbar position and size\n */\n private updateInkbarPosition(inkbar: HTMLElement, activeTrigger: HTMLElement) {\n const triggerRect = activeTrigger.getBoundingClientRect();\n const groupRect = this.tabsList?.shadowRoot?.querySelector('.tabs-list')?.getBoundingClientRect();\n\n if (triggerRect && groupRect) {\n const left = triggerRect.left - groupRect.left;\n const width = triggerRect.width;\n\n // Her iki variant için de aynı davranış: sadece aktif tab altında göster\n inkbar.style.width = `${width}px`;\n inkbar.style.transform = `translateX(${left}px)`;\n inkbar.style.left = '0';\n inkbar.style.right = 'auto';\n\n // smooth prop'una göre opacity geçişi\n if (this.smooth) {\n inkbar.style.opacity = '1';\n } else {\n // Animasyon olmadan anında göster\n inkbar.style.transition = 'none';\n inkbar.style.opacity = '1';\n // Bir sonraki frame'de transition'ı geri yükle\n requestAnimationFrame(() => {\n inkbar.style.transition = '';\n });\n }\n } else {\n console.warn('Group or trigger rect calculation failed');\n inkbar.style.opacity = '0';\n }\n }\n\n /**\n * Tab container class\n */\n private tabClass = tv({\n base: 'tabs-container bcm-ui-element flex flex-col',\n variants: {\n variant: {\n 'full-width': 'w-full',\n 'auto-width': 'w-auto',\n },\n },\n defaultVariants: {\n variant: 'full-width',\n },\n });\n\n render() {\n return (\n <Host>\n <div class={this.tabClass({ variant: this.variant })}>\n <slot name=\"tabs-list\" />\n <slot></slot>\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":["accordionCss","BcmAccordion","constructor","hostRef","this","expanded","group","hasFooterContent","handleFooterSlotChange","e","slot","target","assignedNodes","length","accordionClass","tv","slots","container","header","content","footer","icon","rightSection","variants","false","true","twMerge","toggle","updateAccordion","expand","collapse","contentEl","style","maxHeight","scrollHeight","bcmAccordionChange","emit","source","host","render","hintText","h","key","class","role","tabindex","toString","onKeyDown","preventDefault","onClick","name","headerTitle","stopPropagation","ref","el","onSlotchange"],"sources":["src/components/accordion/accordion.css?tag=bcm-accordion&encapsulation=shadow","src/components/accordion/accordion.component.tsx"],"sourcesContent":[":host {\n display: block;\n width: 100%;\n --bcm-accordion-bg: var(--bcm-ui-color-background-basic-panel);\n --bcm-accordion-content-bg: var(--bcm-ui-color-background-basic-base);\n --bcm-accordion-text: var(--bcm-ui-color-text-header);\n --bcm-accordion-border: var(--bcm-ui-color-border-default);\n --bcm-accordion-radius: 6px;\n --bcm-accordion-footer-bg: var(--bcm-ui-color-background-default-default);\n}\n\n:host(:not([group])) .accordion-container {\n border: 1px solid var(--bcm-accordion-border);\n border-radius: var(--bcm-accordion-radius);\n}\n\n:host([group]) .accordion-container {\n border-bottom: 1px solid var(--bcm-accordion-border);\n border-radius: 0;\n}\n\n:host([group]:last-of-type) .accordion-container {\n border-bottom: none;\n}\n\n:host([group]:first-of-type) .accordion-container {\n border-top-left-radius: var(--bcm-accordion-radius);\n border-top-right-radius: var(--bcm-accordion-radius);\n}\n\n:host([group]:last-of-type) .accordion-footer {\n border-bottom-left-radius: var(--bcm-accordion-radius);\n border-bottom-right-radius: var(--bcm-accordion-radius);\n}\n\n:host(:not([group])) .accordion-footer {\n border-bottom-left-radius: var(--bcm-accordion-radius);\n border-bottom-right-radius: var(--bcm-accordion-radius);\n}\n\n::slotted([slot='title']) {\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: 10px;\n}\n::slotted([slot='actions']) {\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: 12px;\n}\n","import { Component, ComponentInterface, EventEmitter, h, Method, Prop, Event, State, Element } from '@stencil/core';\nimport { tv } from '@utils/tv';\nimport { AccordionChangeEventType } from './types';\n\n/**\n * @component BcmAccordion\n * @description A collapsible accordion component that provides expandable/collapsible content sections with keyboard navigation\n * and accessibility features. Offers customizable header, content, and footer areas through slots.\n *\n * @example Basic usage\n * <bcm-accordion>\n * <div slot=\"title\">Accordion Title</div>\n * <div>Content goes here</div>\n * </bcm-accordion>\n *\n * @example With all slots and hint text\n * <bcm-accordion hint-text=\"Additional information\">\n * <div slot=\"title\">Title</div>\n * <div slot=\"actions\">\n * <button>Action</button>\n * </div>\n * <div>Main content</div>\n * <div slot=\"footer\">Footer content</div>\n * </bcm-accordion>\n *\n * @example Event handling\n * // Listen to accordion state changes\n * const accordion = document.querySelector('bcm-accordion');\n * accordion.addEventListener('bcmAccordionChange', (event) => {\n * const { expanded, source } = event.detail;\n * console.log('Accordion expanded:', expanded);\n * console.log('Changed accordion:', source);\n * });\n *\n * // Programmatically control accordion\n * await accordion.toggle(); // Toggle state\n * await accordion.expand(); // Expand accordion\n * await accordion.collapse(); // Collapse accordion\n *\n * @prop {boolean} expanded - Controls the expanded state of the accordion (default: false)\n * @prop {boolean} group - Indicates if the accordion is part of an accordion group (default: false)\n * @prop {string} hintText - Optional hint text to display in the footer when no footer content is provided\n *\n * @slot title - Primary title content for the accordion header (required)\n * @slot actions - Additional actions to be displayed in the header (optional)\n * @slot default - Main content area of the accordion\n * @slot footer - Optional footer content (overrides hint-text if provided)\n *\n * @event {EventEmitter<AccordionChangeEventType>} bcmAccordionChange - Emitted when the accordion's expanded state changes\n * @eventProperty {boolean} expanded - Current expanded state\n * @eventProperty {HTMLBcmAccordionElement} source - Reference to the accordion element that changed\n *\n * @csspart container - The root container element\n * @csspart header - The header section with title and actions\n * @csspart content - The collapsible content section\n * @csspart footer - The footer section with hint text or footer slot\n * @csspart section - Container for header content sections\n * @csspart icon - The expand/collapse chevron icon\n *\n * @css {string} --bcm-accordion-radius - Border radius of the accordion header (default: 4px)\n * @css {string} --bcm-accordion-bg - Background color of the accordion header\n * @css {string} --bcm-accordion-text - Text color of the accordion\n * @css {string} --bcm-accordion-footer-bg - Background color of the footer section\n *\n * @methods\n * toggle() - Toggles the accordion's expanded state\n * expand() - Expands the accordion if collapsed\n * collapse() - Collapses the accordion if expanded\n */\n@Component({\n tag: 'bcm-accordion',\n styleUrl: 'accordion.css',\n shadow: true,\n})\nexport class BcmAccordion implements ComponentInterface {\n /** Reference to the host element */\n @Element() host: HTMLElement;\n\n /**\n * Controls whether the accordion is expanded or collapsed.\n * @prop\n * @defaultValue false\n */\n @Prop({ reflect: true, mutable: true })\n expanded: boolean = false;\n\n /**\n * Optional title text to display in the header.\n * @prop\n * @defaultValue undefined\n */\n @Prop()\n headerTitle?: string;\n\n /**\n * Indicates if the accordion is part of a group.\n * Used for group behavior coordination.\n * @prop\n * @defaultValue false\n */\n\n @Prop({ reflect: true })\n group: boolean = false;\n\n /**\n * Optional text to display in the footer when no footer slot content is provided.\n * @prop\n */\n @Prop({ attribute: 'hint-text' })\n hintText?: string;\n\n /**\n * Tracks whether footer content is present.\n * @state\n */\n @State()\n hasFooterContent: boolean = false;\n\n /**\n * Emitted when the accordion's expanded state changes.\n * @event\n */\n @Event({\n composed: false,\n bubbles: false,\n cancelable: true,\n eventName: 'bcmAccordionChange',\n })\n bcmAccordionChange: EventEmitter<AccordionChangeEventType>;\n\n private contentEl?: HTMLElement;\n\n /**\n * Toggles the accordion's expanded state.\n * @method\n * @returns Promise<void>\n */\n @Method()\n async toggle(): Promise<void> {\n this.expanded = !this.expanded;\n this.updateAccordion();\n }\n\n /**\n * Expands the accordion if it's not already expanded.\n * @method\n * @returns Promise<void>\n */\n @Method()\n async expand(): Promise<void> {\n if (!this.expanded) {\n this.expanded = true;\n this.updateAccordion();\n }\n }\n\n /**\n * Collapses the accordion if it's currently expanded.\n * @method\n * @returns Promise<void>\n */\n @Method()\n async collapse(): Promise<void> {\n if (this.expanded) {\n this.expanded = false;\n this.updateAccordion();\n }\n }\n\n /**\n * Updates the accordion's content height and emits change event.\n * @private\n */\n private updateAccordion(): void {\n if (this.contentEl) {\n this.contentEl.style.maxHeight = this.expanded ? `${this.contentEl.scrollHeight}px` : '0px';\n }\n this.bcmAccordionChange.emit({ expanded: this.expanded, source: this.host as HTMLBcmAccordionElement });\n }\n\n /**\n * Handles changes to the footer slot content.\n * @private\n * @param e - Slot change event\n */\n private handleFooterSlotChange = (e: Event) => {\n const slot = e.target as HTMLSlotElement;\n const assignedNodes = slot.assignedNodes();\n this.hasFooterContent = assignedNodes.length > 0;\n };\n\n private accordionClass = tv(\n {\n slots: {\n container: 'accordion-container flex flex-col bcm-ui-element w-full',\n header:\n 'accordion-header flex flex-row justify-between gap-2 p-4 min-w-max flex-nowrap text-wrap rounded-[--bcm-accordion-radius] bg-[--bcm-accordion-bg] text-[--bcm-accordion-text] font-semibold text-size-6 cursor-pointer',\n content: 'accordion-content overflow-hidden transition-all duration-300 ease-in-out bg-color-basic-base',\n footer: 'accordion-footer flex flex-row flex-nowrap bg-[--bcm-accordion-footer-bg] text-[--bcm-accordion-text] px-4 py-2 gap-2 text-size-4 font-normal min-w-max',\n icon: 'accordion-icon cursor-pointer transform transition-transform duration-300',\n rightSection: 'accordion-right-section flex flex-row gap-2.5 items-center',\n },\n variants: {\n hasFooterContent: {\n false: { footer: 'hidden' },\n true: { footer: 'flex' },\n },\n expanded: {\n true: { icon: 'rotate-180' },\n false: {\n icon: 'rotate-0',\n content: '',\n },\n },\n },\n },\n {\n twMerge: false,\n },\n );\n\n render() {\n const { container, header, content, footer, icon, rightSection } = this.accordionClass({\n hasFooterContent: this.hasFooterContent || !!this.hintText,\n expanded: this.expanded,\n });\n\n return (\n <div class={container()}>\n {/* Header */}\n <header\n class={header()}\n role=\"button\"\n tabindex=\"0\"\n aria-expanded={this.expanded.toString()}\n aria-controls=\"accordion-content\"\n onKeyDown={e => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n this.toggle();\n }\n }}\n onClick={() => this.toggle()}\n >\n <slot name=\"title\">{this.headerTitle}</slot>\n {/* Actions */}\n <div class={rightSection()}>\n <span onClick={e => e.stopPropagation()}>\n <slot name=\"actions\"></slot>\n </span>\n <bcm-icon name=\"fa-regular fa-chevron-down\" class={icon()}></bcm-icon>\n </div>\n </header>\n {/* Content */}\n <div class={content()} style={{ maxHeight: this.expanded ? 'auto' : '0px' }} ref={el => (this.contentEl = el as HTMLElement)}>\n <div class=\"px-4 py-2\">\n <slot></slot>\n </div>\n <footer class={footer()}>\n <slot name=\"footer\" onSlotchange={this.handleFooterSlotChange}>\n {this.hintText}\n </slot>\n </footer>\n </div>\n </div>\n );\n }\n}\n"],"mappings":"6FAAA,MAAMA,EAAe,g4H,MC0ERC,EAAY,MALzB,WAAAC,CAAAC,G,iEAeEC,KAAQC,SAAY,MAkBpBD,KAAKE,MAAY,MAcjBF,KAAgBG,iBAAY,MAqEpBH,KAAAI,uBAA0BC,IAChC,MAAMC,EAAOD,EAAEE,OACf,MAAMC,EAAgBF,EAAKE,gBAC3BR,KAAKG,iBAAmBK,EAAcC,OAAS,CAAC,EAG1CT,KAAcU,eAAGC,EACvB,CACEC,MAAO,CACLC,UAAW,0DACXC,OACE,yNACFC,QAAS,gGACTC,OAAQ,0JACRC,KAAM,4EACNC,aAAc,8DAEhBC,SAAU,CACRhB,iBAAkB,CAChBiB,MAAO,CAAEJ,OAAQ,UACjBK,KAAM,CAAEL,OAAQ,SAElBf,SAAU,CACRoB,KAAM,CAAEJ,KAAM,cACdG,MAAO,CACLH,KAAM,WACNF,QAAS,OAKjB,CACEO,QAAS,OAkDd,CAjIC,YAAMC,GACJvB,KAAKC,UAAYD,KAAKC,SACtBD,KAAKwB,iB,CASP,YAAMC,GACJ,IAAKzB,KAAKC,SAAU,CAClBD,KAAKC,SAAW,KAChBD,KAAKwB,iB,EAUT,cAAME,GACJ,GAAI1B,KAAKC,SAAU,CACjBD,KAAKC,SAAW,MAChBD,KAAKwB,iB,EAQD,eAAAA,GACN,GAAIxB,KAAK2B,UAAW,CAClB3B,KAAK2B,UAAUC,MAAMC,UAAY7B,KAAKC,SAAW,GAAGD,KAAK2B,UAAUG,iBAAmB,K,CAExF9B,KAAK+B,mBAAmBC,KAAK,CAAE/B,SAAUD,KAAKC,SAAUgC,OAAQjC,KAAKkC,M,CA4CvE,MAAAC,GACE,MAAMtB,UAAEA,EAASC,OAAEA,EAAMC,QAAEA,EAAOC,OAAEA,EAAMC,KAAEA,EAAIC,aAAEA,GAAiBlB,KAAKU,eAAe,CACrFP,iBAAkBH,KAAKG,oBAAsBH,KAAKoC,SAClDnC,SAAUD,KAAKC,WAGjB,OACEoC,EAAA,OAAAC,IAAA,2CAAKC,MAAO1B,KAEVwB,EACE,UAAAC,IAAA,2CAAAC,MAAOzB,IACP0B,KAAK,SACLC,SAAS,IAAG,gBACGzC,KAAKC,SAASyC,WAAU,gBACzB,oBACdC,UAAWtC,IACT,GAAIA,EAAEiC,MAAQ,SAAWjC,EAAEiC,MAAQ,IAAK,CACtCjC,EAAEuC,iBACF5C,KAAKuB,Q,GAGTsB,QAAS,IAAM7C,KAAKuB,UAEpBc,EAAA,QAAAC,IAAA,2CAAMQ,KAAK,SAAS9C,KAAK+C,aAEzBV,EAAK,OAAAC,IAAA,2CAAAC,MAAOrB,KACVmB,EAAM,QAAAC,IAAA,2CAAAO,QAASxC,GAAKA,EAAE2C,mBACpBX,EAAA,QAAAC,IAAA,2CAAMQ,KAAK,aAEbT,EAAU,YAAAC,IAAA,2CAAAQ,KAAK,6BAA6BP,MAAOtB,QAIvDoB,EAAA,OAAAC,IAAA,2CAAKC,MAAOxB,IAAWa,MAAO,CAAEC,UAAW7B,KAAKC,SAAW,OAAS,OAASgD,IAAKC,GAAOlD,KAAK2B,UAAYuB,GACxGb,EAAK,OAAAC,IAAA,2CAAAC,MAAM,aACTF,EAAA,QAAAC,IAAA,8CAEFD,EAAQ,UAAAC,IAAA,2CAAAC,MAAOvB,KACbqB,EAAA,QAAAC,IAAA,2CAAMQ,KAAK,SAASK,aAAcnD,KAAKI,wBACpCJ,KAAKoC,Y","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":["segmentedPickerOptionCss","BcmSegmentedPickerOption","constructor","hostRef","this","selected","disabled","parentRef","handleClick","isDisabled","bcmOptionClick","emit","value","optionClass","tv","base","variants","size","small","medium","large","true","false","defaultVariants","twMerge","componentWillLoad","host","closest","getAttribute","componentDidLoad","setupValueObserver","disconnectedCallback","parentValueObserver","disconnect","MutationObserver","isValueSelected","observe","attributes","attributeFilter","_a","getSizeFromParent","hasAttribute","getWidth","element","shadowRoot","querySelector","getBoundingClientRect","width","render","h","Host","key","class","onClick","type","label"],"sources":["src/components/segmented-picker/segmented-picker-option.css?tag=bcm-segmented-picker-option&encapsulation=shadow","src/components/segmented-picker/segmented-picker-option.component.tsx"],"sourcesContent":[":host {\n display: inline-block;\n flex: 1;\n}\n\n.segmented-option {\n width: 100%;\n height: 100%;\n background: transparent;\n position: relative;\n z-index: 1;\n outline: none;\n}\n","import { Component, Prop, h, Host, Element, Event, EventEmitter, Method } from '@stencil/core';\nimport { SegmentedPickerSize } from './types';\nimport { tv } from '@utils/tv';\n\n@Component({\n tag: 'bcm-segmented-picker-option',\n styleUrl: 'segmented-picker-option.css',\n shadow: true,\n})\nexport class BcmSegmentedPickerOption {\n @Element() host: HTMLElement;\n\n /** Option value */\n @Prop()\n value!: string;\n\n /** Option display label */\n @Prop()\n label?: string;\n\n /** Controls the option size */\n @Prop()\n size?: SegmentedPickerSize;\n\n /** Whether this option is selected */\n @Prop({ mutable: true })\n selected = false;\n\n /** Whether this option is disabled */\n @Prop()\n disabled = false;\n\n /** Click event */\n @Event({\n composed: false,\n bubbles: true,\n cancelable: true,\n })\n bcmOptionClick: EventEmitter<string>;\n\n private parentValueObserver: MutationObserver;\n private parentRef: HTMLElement | null = null;\n\n componentWillLoad() {\n // Parent referansını al\n this.parentRef = this.host.closest('bcm-segmented-picker');\n\n // İlk yüklemede selected durumu\n if (this.parentRef) {\n this.selected = this.parentRef.getAttribute('value') === this.value;\n }\n }\n\n componentDidLoad() {\n // DOM yüklendikten sonra sadece parent değer değişikliklerini gözlemeye başla\n // Burada artık prop değişikliği yok\n this.setupValueObserver();\n }\n\n disconnectedCallback() {\n if (this.parentValueObserver) {\n this.parentValueObserver.disconnect();\n }\n }\n\n private setupValueObserver() {\n if (this.parentRef) {\n this.parentValueObserver = new MutationObserver(() => {\n this.selected = this.isValueSelected();\n });\n this.parentValueObserver.observe(this.parentRef, { attributes: true, attributeFilter: ['value'] });\n }\n }\n\n private isValueSelected(): boolean {\n return this.parentRef?.getAttribute('value') === this.value;\n }\n\n private getSizeFromParent(): SegmentedPickerSize {\n return (this.parentRef?.getAttribute('size') as SegmentedPickerSize) || 'medium';\n }\n\n private isDisabled(): boolean {\n return this.disabled || this.parentRef?.hasAttribute('disabled') || false;\n }\n\n private handleClick = () => {\n if (this.isDisabled()) return;\n this.bcmOptionClick.emit(this.value);\n };\n\n @Method()\n async getWidth(): Promise<number> {\n const element = this.host.shadowRoot?.querySelector('.segmented-option');\n return element?.getBoundingClientRect().width || 0;\n }\n\n private optionClass = tv(\n {\n base: 'segmented-option bcm-ui-element inline-flex items-center justify-center text-center border-0 cursor-pointer select-none',\n variants: {\n size: {\n small: 'py-[1px] px-3 text-size-4',\n medium: 'py-[3px] px-3 text-size-5',\n large: 'py-[6px] px-3 text-size-6',\n },\n selected: {\n true: 'text-[--bcm-ui-color-text-header]',\n false: 'text-[--bcm-ui-color-text-helper]',\n },\n disabled: {\n true: 'cursor-not-allowed opacity-50',\n false: '',\n },\n },\n defaultVariants: {\n size: 'medium',\n selected: false,\n disabled: false,\n },\n },\n {\n twMerge: false,\n },\n );\n\n render() {\n const size = this.size || this.getSizeFromParent();\n const disabled = this.isDisabled();\n\n return (\n <Host>\n <button\n class={this.optionClass({\n size,\n selected: this.selected,\n disabled,\n })}\n onClick={this.handleClick}\n disabled={disabled}\n type=\"button\"\n >\n <slot>{this.label}</slot>\n </button>\n </Host>\n );\n }\n}\n"],"mappings":"oGAAA,MAAMA,EAA2B,k9C,MCSpBC,EAAwB,MALrC,WAAAC,CAAAC,G,yDAsBEC,KAAQC,SAAG,MAIXD,KAAQE,SAAG,MAWHF,KAASG,UAAuB,KA6ChCH,KAAWI,YAAG,KACpB,GAAIJ,KAAKK,aAAc,OACvBL,KAAKM,eAAeC,KAAKP,KAAKQ,MAAM,EAS9BR,KAAWS,YAAGC,EACpB,CACEC,KAAM,0HACNC,SAAU,CACRC,KAAM,CACJC,MAAO,4BACPC,OAAQ,4BACRC,MAAO,6BAETf,SAAU,CACRgB,KAAM,oCACNC,MAAO,qCAEThB,SAAU,CACRe,KAAM,gCACNC,MAAO,KAGXC,gBAAiB,CACfN,KAAM,SACNZ,SAAU,MACVC,SAAU,QAGd,CACEkB,QAAS,OAyBd,CAxGC,iBAAAC,GAEErB,KAAKG,UAAYH,KAAKsB,KAAKC,QAAQ,wBAGnC,GAAIvB,KAAKG,UAAW,CAClBH,KAAKC,SAAWD,KAAKG,UAAUqB,aAAa,WAAaxB,KAAKQ,K,EAIlE,gBAAAiB,GAGEzB,KAAK0B,oB,CAGP,oBAAAC,GACE,GAAI3B,KAAK4B,oBAAqB,CAC5B5B,KAAK4B,oBAAoBC,Y,EAIrB,kBAAAH,GACN,GAAI1B,KAAKG,UAAW,CAClBH,KAAK4B,oBAAsB,IAAIE,kBAAiB,KAC9C9B,KAAKC,SAAWD,KAAK+B,iBAAiB,IAExC/B,KAAK4B,oBAAoBI,QAAQhC,KAAKG,UAAW,CAAE8B,WAAY,KAAMC,gBAAiB,CAAC,U,EAInF,eAAAH,G,MACN,QAAOI,EAAAnC,KAAKG,aAAW,MAAAgC,SAAA,SAAAA,EAAAX,aAAa,YAAaxB,KAAKQ,K,CAGhD,iBAAA4B,G,MACN,QAAQD,EAAAnC,KAAKG,aAAS,MAAAgC,SAAA,SAAAA,EAAEX,aAAa,UAAmC,Q,CAGlE,UAAAnB,G,MACN,OAAOL,KAAKE,YAAYiC,EAAAnC,KAAKG,aAAW,MAAAgC,SAAA,SAAAA,EAAAE,aAAa,cAAe,K,CAStE,cAAMC,G,MACJ,MAAMC,GAAUJ,EAAAnC,KAAKsB,KAAKkB,cAAY,MAAAL,SAAA,SAAAA,EAAAM,cAAc,qBACpD,OAAOF,IAAA,MAAAA,SAAA,SAAAA,EAASG,wBAAwBC,QAAS,C,CAgCnD,MAAAC,GACE,MAAM/B,EAAOb,KAAKa,MAAQb,KAAKoC,oBAC/B,MAAMlC,EAAWF,KAAKK,aAEtB,OACEwC,EAACC,EAAI,CAAAC,IAAA,4CACHF,EAAA,UAAAE,IAAA,2CACEC,MAAOhD,KAAKS,YAAY,CACtBI,OACAZ,SAAUD,KAAKC,SACfC,aAEF+C,QAASjD,KAAKI,YACdF,SAAUA,EACVgD,KAAK,UAELL,EAAA,QAAAE,IAAA,4CAAO/C,KAAKmD,Q","ignoreList":[]}
@@ -1,2 +0,0 @@
1
- import{r as e,c as r,h as o,a as i}from"./p-BuuGCw0z.js";import{t}from"./p-CEcVC0yX.js";import{g as c}from"./p-IBjzkjef.js";const a=".relative{position:relative}.block{display:block}:host{align-self:center;display:block;height:-moz-fit-content;height:fit-content;position:relative;width:-moz-fit-content;width:fit-content}.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.bcm-ui-element{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:Inter,sans-serif}.static{position:static}.absolute{position:absolute}.flex{display:flex}.inline-flex{display:inline-flex}.size-2{height:.5rem;width:.5rem}.size-3{height:.75rem;width:.75rem}.size-4{height:1rem;width:1rem}.size-\\[10px\\]{height:10px;width:10px}.size-\\[18px\\]{height:18px;width:18px}.h-0{height:0}.w-0{width:0}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.select-none{user-select:none}.flex-row{flex-direction:row}.flex-row-reverse{flex-direction:row-reverse}.items-center{align-items:center}.justify-center{justify-content:center}.gap-2{gap:.5rem}.gap-2\\.5{gap:.625rem}.gap-3{gap:.75rem}.rounded-sm{border-radius:var(--bcm-ui-border-radius-sm,4px)}.border{border-width:1px}.border-solid{border-style:solid}.border-\\[--border-color\\]{border-color:var(--border-color)}.bg-\\[--unchecked-color\\]{background-color:var(--unchecked-color)}.text-size-2{font-size:var(--bcm-ui-font-size-2,10px);line-height:var(--bcm-ui-line-height-2,12px)}.text-size-3{font-size:var(--bcm-ui-font-size-3,12px);line-height:var(--bcm-ui-line-height-3,16px)}.text-size-4{font-size:var(--bcm-ui-font-size-4,14px);line-height:var(--bcm-ui-line-height-4,20px)}.text-size-5{font-size:var(--bcm-ui-font-size-5,16px);line-height:var(--bcm-ui-line-height-5,24px)}.text-size-6{font-size:var(--bcm-ui-font-size-6,18px);line-height:var(--bcm-ui-line-height-6,24px)}.text-color-base{color:var(--bcm-ui-color-text-base)}.text-color-disabled{color:var(--bcm-ui-color-text-disabled)}.opacity-0{opacity:0}.shadow{--tw-shadow:var(--bcm-ui-box-shadow-default);--tw-shadow-colored:var(--bcm-ui-box-shadow-default);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-200{transition-duration:.2s}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.hover\\:border-\\[--border-color\\]:hover{border-color:var(--border-color)}.hover\\:border-\\[--hover-border-color\\]:hover{border-color:var(--hover-border-color)}.hover\\:bg-\\[--unchecked-color\\]:hover{background-color:var(--unchecked-color)}.peer:checked~.peer-checked\\:border-\\[--checked-color\\]{border-color:var(--checked-color)}.peer:checked~.peer-checked\\:bg-\\[--checked-color\\]{background-color:var(--checked-color)}.peer:checked~.hover\\:peer-checked\\:bg-\\[--hover-color\\]:hover{background-color:var(--hover-color)}.peer:indeterminate~.peer-indeterminate\\:border-\\[--checked-color\\]{border-color:var(--checked-color)}.peer:indeterminate~.peer-indeterminate\\:bg-\\[--checked-color\\]{background-color:var(--checked-color)}.peer:indeterminate~.hover\\:peer-indeterminate\\:bg-\\[--hover-color\\]:hover{background-color:var(--hover-color)}";const n=class{constructor(o){e(this,o);this.bcmCheckboxChange=r(this,"bcmCheckboxChange",1);this._id=c("bcm-checkbox");this.indeterminate=false;this.size="medium";this.checked=false;this.error=false;this.disabled=false;this.labelPosition="right";this.handleChange=()=>{if(this.disabled)return;if(this.inputElement){this.inputElement.indeterminate=false;this.indeterminate=false;this.internalChecked=!this.internalChecked;this.inputElement.checked=this.internalChecked;this.bcmCheckboxChange.emit({element:this.inputElement,checked:this.internalChecked})}};this.classes=t({slots:{container:"flex items-center bcm-ui-element bcm-checkbox",checkbox:["flex items-center justify-center rounded-sm","border border-solid border-[--border-color]","bg-[--unchecked-color]","transition-colors duration-200 ease-out","peer-checked:bg-[--checked-color]","peer-checked:border-[--checked-color]","peer-indeterminate:bg-[--checked-color]","peer-indeterminate:border-[--checked-color]","hover:border-[--hover-border-color]","hover:peer-checked:bg-[--hover-color]","hover:peer-indeterminate:bg-[--hover-color]"],iconContainer:"flex items-center justify-center",label:"select-none text-color",hiddenInput:"absolute w-0 h-0 opacity-0 peer"},variants:{size:{small:{container:"gap-2",checkbox:"size-3",iconContainer:"size-2 text-size-2",label:"text-size-4",hiddenInput:"size-3"},medium:{container:"gap-2.5",checkbox:"size-4",iconContainer:"size-[10px] text-size-3",label:"text-size-5",hiddenInput:"size-4"},large:{container:"gap-3",checkbox:"size-[18px]",iconContainer:"size-4 text-size-4",label:"text-size-6",hiddenInput:"size-[18px]"}},disabled:{true:{container:"cursor-not-allowed",checkbox:"cursor-not-allowed hover:border-[--border-color] hover:bg-[--unchecked-color]",label:"cursor-not-allowed text-color-disabled",iconContainer:"text-color-disabled",hiddenInput:"cursor-not-allowed"},false:{container:"cursor-pointer",checkbox:"cursor-pointer",label:"cursor-pointer text-color",iconContainer:"text-color-base",hiddenInput:"cursor-pointer"}},labelPosition:{left:{container:"flex-row-reverse"},right:{container:"flex-row"}}},defaultVariants:{size:"medium",checked:false,disabled:false,error:false,labelPosition:"right"}},{twMerge:false})}componentWillLoad(){this.internalChecked=this.checked!==undefined?this.checked:false}componentDidLoad(){this.updateIndeterminateState()}syncCheckedProp(e){if(e!==undefined){this.internalChecked=e}}updateIndeterminateState(){if(this.inputElement){this.inputElement.indeterminate=this.indeterminate&&!this.internalChecked;this.inputElement.checked=this.internalChecked}}getStyles(){const e={"--checked-color":"var(--bcm-ui-color-background-primary-default)","--unchecked-color":"var(--bcm-ui-color-background-default-default)","--border-color":"var(--bcm-ui-color-border-default)","--hover-border-color":"var(--bcm-ui-color-border-primary)","--hover-color":"var(--bcm-ui-color-background-info-hover)"};const r={"--checked-color":"var(--bcm-ui-color-background-error-default)","--unchecked-color":"var(--bcm-ui-color-background-palette-red-default)","--border-color":"var(--bcm-ui-color-border-error)","--hover-border-color":"var(--bcm-ui-color-border-error)","--hover-color":"var(--bcm-ui-color-border-error)"};const o={"--checked-color":"var(--bcm-ui-color-background-disabled-default)","--unchecked-color":"var(--bcm-ui-color-background-disabled-default)","--border-color":"var(--bcm-ui-color-border-disabled)","--hover-color":"var(--bcm-ui-color-border-disabled)","--hover-border-color":"var(--bcm-ui-color-border-disabled)"};return Object.assign(Object.assign(Object.assign({},e),this.error?r:{}),this.disabled?o:{})}render(){const{container:e,checkbox:r,iconContainer:i,label:t,hiddenInput:c}=this.classes({size:this.size,disabled:this.disabled,labelPosition:this.labelPosition});const a=this._id+"-internal-checkbox"||this.name;return o("div",{key:"25776198fcad7f619daf962ce5d99adc227003a4",class:e(),style:this.getStyles(),part:"checkbox-wrapper"},o("div",{key:"1a09fea578b1bf84a6eca33f4b7255d864a5d885",class:"relative inline-flex"},o("input",{key:"8758f8fa2ef22722d77a068775dad55e20904d19",type:"checkbox",role:"checkbox",id:a,name:this.name,checked:this.internalChecked,indeterminate:this.indeterminate,disabled:this.disabled,class:c(),"aria-checked":this.internalChecked?"true":this.indeterminate?"mixed":"false","aria-invalid":this.error,"aria-label":this.label||"Checkbox",onChange:this.handleChange,ref:e=>this.inputElement=e}),o("div",{key:"4dca8991f31c72208a8e7873ba4fb8d4e059c2f0",class:r(),onClick:this.handleChange,part:"checkbox"},this.internalChecked&&o("div",{key:"60230e3d61a0298bc2f621c2bf3986dd924a66e8",class:i(),part:"icon"},o("bcm-icon",{key:"b6ec239a180fc3289a71d8af87b786d64f8f4f93",name:"fa-regular fa-check"})),this.indeterminate&&!this.internalChecked&&o("div",{key:"08f457fff2cb687a03939e08429552488e2bac30",class:i(),part:"icon"},o("bcm-icon",{key:"c754446dd072fa50d204fbca84816104cc75fc98",name:"fa-regular fa-minus"})))),o("label",{key:"f6141a63244607f5c30a49a8c161e3d49712bdd7",htmlFor:a,class:t(),part:"label"},this.label))}get el(){return i(this)}static get watchers(){return{checked:["syncCheckedProp"],indeterminate:["updateIndeterminateState"],internalChecked:["updateIndeterminateState"]}}};n.style=a;export{n as bcm_checkbox};
2
- //# sourceMappingURL=p-6169490c.entry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["checkboxCss","Checkbox","constructor","hostRef","this","_id","generateId","indeterminate","size","checked","error","disabled","labelPosition","handleChange","inputElement","internalChecked","bcmCheckboxChange","emit","element","classes","tv","slots","container","checkbox","iconContainer","label","hiddenInput","variants","small","medium","large","true","false","left","right","defaultVariants","twMerge","componentWillLoad","undefined","componentDidLoad","updateIndeterminateState","syncCheckedProp","newValue","getStyles","defaultStyles","errorStyles","disabledStyles","Object","assign","render","internalId","name","h","key","class","style","part","type","role","id","onChange","ref","el","onClick","htmlFor"],"sources":["src/components/checkbox/checkbox.css?tag=bcm-checkbox&encapsulation=shadow","src/components/checkbox/checkbox.component.tsx"],"sourcesContent":[":host {\n display: block;\n position: relative;\n width: fit-content;\n height: fit-content;\n align-self: center;\n}\n","import { Component, h, Prop, Element, ComponentInterface, EventEmitter, Event, Watch, State } from '@stencil/core';\nimport { tv } from '@utils/tv';\nimport { generateId } from '../../utils/id/generate-id';\n\n/**\n * @description A checkbox component that allows users to select or deselect an option.\n * It also supports an indeterminate state.\n */\n@Component({\n tag: 'bcm-checkbox',\n styleUrl: 'checkbox.css',\n shadow: true,\n})\nexport class Checkbox implements ComponentInterface {\n /** Reference to the host element */\n @Element() el: HTMLElement;\n\n /**\n * Unique ID for the component. Automatically generated if not specified.\n */\n @Prop({ attribute: 'id', reflect: true })\n _id?: string = generateId('bcm-checkbox');\n\n /**\n * Label text to display next to the checkbox\n */\n @Prop()\n label?: string;\n\n /**\n * Name attribute for the checkbox when used in a form\n */\n @Prop()\n name: string;\n\n /**\n * Determines if the checkbox is in an indeterminate state.\n * This is useful when some items in a group of checkboxes are selected and others are not.\n */\n @Prop({ mutable: true })\n indeterminate: boolean = false;\n\n /**\n * Size variant of the checkbox\n */\n @Prop()\n size: 'small' | 'medium' | 'large' = 'medium';\n\n /**\n * Determines if the checkbox is checked\n */\n @Prop({ mutable: true })\n checked: boolean = false;\n\n /**\n * Indicates if the checkbox is in an error state.\n * This affects the visual styling of the component.\n */\n @Prop()\n error: boolean = false;\n\n /**\n * Determines if the checkbox is disabled\n */\n @Prop()\n disabled: boolean = false;\n\n /**\n * Controls the position of the label relative to the checkbox\n */\n @Prop()\n labelPosition: 'left' | 'right' = 'right';\n\n /**\n * Internal state to track checked status\n */\n @State() internalChecked: boolean;\n\n /**\n * Event emitted when the checked state changes\n */\n @Event({\n composed: false,\n bubbles: false,\n cancelable: true,\n eventName: 'bcmCheckboxChange',\n })\n bcmCheckboxChange: EventEmitter<{ element: any; checked: boolean }>;\n\n /** Reference to the underlying input element */\n private inputElement: HTMLInputElement;\n\n /**\n * Lifecycle method that runs before the component first renders.\n * Initializes the internal checked state.\n */\n componentWillLoad() {\n this.internalChecked = this.checked !== undefined ? this.checked : false;\n }\n\n /**\n * Lifecycle method that runs after the component has rendered.\n * Updates the indeterminate state of the input element.\n */\n componentDidLoad() {\n this.updateIndeterminateState();\n }\n\n /**\n * Watches for changes to the checked prop and updates the internal state\n * @param newValue The new checked value\n */\n @Watch('checked')\n syncCheckedProp(newValue: boolean | undefined) {\n if (newValue !== undefined) {\n this.internalChecked = newValue;\n }\n }\n\n /**\n * Watches for changes to indeterminate and internalChecked states\n * Updates the input element accordingly\n */\n @Watch('indeterminate')\n @Watch('internalChecked')\n updateIndeterminateState() {\n if (this.inputElement) {\n this.inputElement.indeterminate = this.indeterminate && !this.internalChecked;\n this.inputElement.checked = this.internalChecked;\n }\n }\n\n /**\n * Handles change events on the checkbox\n * Updates state and emits the change event\n */\n private handleChange = () => {\n if (this.disabled) return;\n if (this.inputElement) {\n this.inputElement.indeterminate = false;\n this.indeterminate = false;\n this.internalChecked = !this.internalChecked;\n this.inputElement.checked = this.internalChecked;\n this.bcmCheckboxChange.emit({\n element: this.inputElement,\n checked: this.internalChecked,\n });\n }\n };\n\n /**\n * Returns the CSS custom properties based on component state\n * @returns Object with CSS custom properties\n */\n private getStyles() {\n const defaultStyles = {\n '--checked-color': 'var(--bcm-ui-color-background-primary-default)',\n '--unchecked-color': 'var(--bcm-ui-color-background-default-default)',\n '--border-color': 'var(--bcm-ui-color-border-default)',\n '--hover-border-color': 'var(--bcm-ui-color-border-primary)',\n '--hover-color': 'var(--bcm-ui-color-background-info-hover)',\n };\n\n const errorStyles = {\n '--checked-color': 'var(--bcm-ui-color-background-error-default)',\n '--unchecked-color': 'var(--bcm-ui-color-background-palette-red-default)',\n '--border-color': 'var(--bcm-ui-color-border-error)',\n '--hover-border-color': 'var(--bcm-ui-color-border-error)',\n '--hover-color': 'var(--bcm-ui-color-border-error)',\n };\n\n const disabledStyles = {\n '--checked-color': 'var(--bcm-ui-color-background-disabled-default)',\n '--unchecked-color': 'var(--bcm-ui-color-background-disabled-default)',\n '--border-color': 'var(--bcm-ui-color-border-disabled)',\n '--hover-color': 'var(--bcm-ui-color-border-disabled)',\n '--hover-border-color': 'var(--bcm-ui-color-border-disabled)',\n };\n\n return {\n ...defaultStyles,\n ...(this.error ? errorStyles : {}),\n ...(this.disabled ? disabledStyles : {}),\n };\n }\n\n /**\n * Tailwind Variants definition for the component\n * Configures styling based on component props\n */\n private classes = tv(\n {\n slots: {\n container: 'flex items-center bcm-ui-element bcm-checkbox',\n checkbox: [\n 'flex items-center justify-center rounded-sm',\n 'border border-solid border-[--border-color]',\n 'bg-[--unchecked-color]',\n 'transition-colors duration-200 ease-out',\n 'peer-checked:bg-[--checked-color]',\n 'peer-checked:border-[--checked-color]',\n 'peer-indeterminate:bg-[--checked-color]',\n 'peer-indeterminate:border-[--checked-color]',\n 'hover:border-[--hover-border-color]',\n 'hover:peer-checked:bg-[--hover-color]',\n 'hover:peer-indeterminate:bg-[--hover-color]',\n ],\n iconContainer: 'flex items-center justify-center',\n label: 'select-none text-color',\n hiddenInput: 'absolute w-0 h-0 opacity-0 peer',\n },\n variants: {\n size: {\n small: {\n container: 'gap-2',\n checkbox: 'size-3',\n iconContainer: 'size-2 text-size-2',\n label: 'text-size-4',\n hiddenInput: 'size-3',\n },\n medium: {\n container: 'gap-2.5',\n checkbox: 'size-4',\n iconContainer: 'size-[10px] text-size-3',\n label: 'text-size-5',\n hiddenInput: 'size-4',\n },\n large: {\n container: 'gap-3',\n checkbox: 'size-[18px]',\n iconContainer: 'size-4 text-size-4',\n label: 'text-size-6',\n hiddenInput: 'size-[18px]',\n },\n },\n disabled: {\n true: {\n container: 'cursor-not-allowed',\n checkbox: 'cursor-not-allowed hover:border-[--border-color] hover:bg-[--unchecked-color]',\n label: 'cursor-not-allowed text-color-disabled',\n iconContainer: 'text-color-disabled',\n hiddenInput: 'cursor-not-allowed',\n },\n false: {\n container: 'cursor-pointer',\n checkbox: 'cursor-pointer',\n label: 'cursor-pointer text-color',\n iconContainer: 'text-color-base',\n hiddenInput: 'cursor-pointer',\n },\n },\n labelPosition: {\n left: {\n container: 'flex-row-reverse',\n },\n right: {\n container: 'flex-row',\n },\n },\n },\n defaultVariants: {\n size: 'medium',\n checked: false,\n disabled: false,\n error: false,\n labelPosition: 'right',\n },\n },\n { twMerge: false },\n );\n\n /**\n * Renders the checkbox component\n */\n render() {\n const { container, checkbox, iconContainer, label, hiddenInput } = this.classes({ size: this.size, disabled: this.disabled, labelPosition: this.labelPosition });\n const internalId = this._id + '-internal-checkbox' || this.name;\n\n return (\n <div class={container()} style={this.getStyles()} part=\"checkbox-wrapper\">\n <div class=\"relative inline-flex\">\n <input\n type=\"checkbox\"\n role=\"checkbox\"\n id={internalId}\n name={this.name}\n checked={this.internalChecked}\n indeterminate={this.indeterminate}\n disabled={this.disabled}\n class={hiddenInput()}\n aria-checked={this.internalChecked ? 'true' : this.indeterminate ? 'mixed' : 'false'}\n aria-invalid={this.error}\n aria-label={this.label || 'Checkbox'}\n onChange={this.handleChange}\n ref={el => (this.inputElement = el as HTMLInputElement)}\n />\n <div class={checkbox()} onClick={this.handleChange} part=\"checkbox\">\n {this.internalChecked && (\n <div class={iconContainer()} part=\"icon\">\n <bcm-icon name=\"fa-regular fa-check\"></bcm-icon>\n </div>\n )}\n {this.indeterminate && !this.internalChecked && (\n <div class={iconContainer()} part=\"icon\">\n <bcm-icon name=\"fa-regular fa-minus\"></bcm-icon>\n </div>\n )}\n </div>\n </div>\n <label htmlFor={internalId} class={label()} part=\"label\">\n {this.label}\n </label>\n </div>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":["radioCss","BcmRadio","constructor","hostRef","this","checked","size","disabled","readonly","labelPosition","error","getRadioClass","tv","slots","container","dot","dotContainer","labelClass","variants","small","medium","large","true","false","left","right","twMerge","handleClick","bcmRadioChange","emit","getRadioStyle","defaultStyle","errorStyle","disabledStyle","readonlyStyle","Object","assign","render","h","key","class","style","label","role","toString","type","name","value","readOnly","onClick","onFocus","e","bcmFocus","onBlur","bcmBlur"],"sources":["src/components/radio/radio.css?tag=bcm-radio&encapsulation=shadow","src/components/radio/radio.component.tsx"],"sourcesContent":[":host {\n display: block;\n}\n","/**\n * @component BcmRadio\n * @description A customizable radio button component for forms, supporting various sizes, states, and label positioning.\n * It can be used to select a single option from a group of choices, with support for error, disabled, and readonly states.\n *\n * @example\n * <bcm-radio label=\"Option 1\" name=\"group1\" value=\"1\" size=\"medium\" label-position=\"right\">\n * Option 1\n * </bcm-radio>\n *\n * @example Radio with error state\n * <bcm-radio label=\"Error Option\" name=\"group1\" value=\"2\" error={true}>\n * Error Option\n * </bcm-radio>\n *\n * @prop {string} label - The text label to display next to the radio button.\n * @prop {string} name - The name attribute for the radio input, used to group radio buttons.\n * @prop {string} value - The value of the radio button, submitted with the form.\n * @prop {boolean} checked - Whether the radio button is selected.\n * @defaultValue false\n * @prop {RadioSize} size - Defines the size of the radio button: 'small' | 'medium' | 'large'.\n * @defaultValue 'medium'\n * @prop {boolean} disabled - Whether the radio button is disabled.\n * @defaultValue false\n * @prop {boolean} readonly - Whether the radio button is readonly.\n * @defaultValue false\n * @prop {LabelPosition} labelPosition - Position of the label relative to the radio button: 'right' | 'left'.\n * @defaultValue 'right'\n * @prop {boolean} error - Whether the radio button is in an error state.\n * @defaultValue false\n *\n * @event {EventEmitter<void>} bcmRadioChange - Emitted when the radio button's checked state changes.\n * @event {EventEmitter<FocusEvent>} bcmFocus - Emitted when the radio button gains focus.\n * @event {EventEmitter<FocusEvent>} bcmBlur - Emitted when the radio button loses focus.\n *\n * @csspart container - The root label element wrapping the radio button and label.\n * @csspart dotContainer - The container for the radio button dot.\n * @csspart dot - The inner dot of the radio button.\n * @csspart label - The label text element.\n */\n\nimport { Component, ComponentInterface, Prop, h, Element, Event, EventEmitter } from '@stencil/core';\nimport { tv } from '@utils/tv';\n\n@Component({\n tag: 'bcm-radio',\n styleUrl: 'radio.css',\n shadow: true,\n})\nexport class BcmRadio implements ComponentInterface {\n @Element() host: HTMLBcmRadioElement;\n\n /**\n * The text label to display next to the radio button.\n * @prop\n * @defaultValue undefined\n */\n @Prop()\n label: string;\n\n /**\n * The name attribute for the radio input, used to group radio buttons.\n * @prop\n * @defaultValue undefined\n */\n @Prop()\n name: string;\n\n /**\n * The value of the radio button, submitted with the form.\n * @prop\n * @defaultValue undefined\n */\n @Prop()\n value: string;\n\n /**\n * Whether the radio button is selected.\n * @prop\n * @defaultValue false\n */\n @Prop({ reflect: true })\n checked: boolean = false;\n\n /**\n * Defines the size of the radio button: 'small' | 'medium' | 'large'.\n * @prop\n * @defaultValue 'medium'\n */\n @Prop()\n size: 'small' | 'medium' | 'large' = 'medium';\n\n /**\n * Whether the radio button is disabled.\n * @prop\n * @defaultValue false\n */\n @Prop()\n disabled = false;\n\n /**\n * Whether the radio button is readonly.\n * @prop\n * @defaultValue false\n */\n @Prop()\n readonly = false;\n\n /**\n * Position of the label relative to the radio button: 'right' | 'left'.\n * @prop\n * @defaultValue 'right'\n */\n @Prop()\n labelPosition: 'right' | 'left' = 'right';\n\n /**\n * Whether the radio button is in an error state.\n * @prop\n * @defaultValue false\n */\n @Prop()\n error: boolean = false;\n\n @Event({\n composed: false,\n bubbles: false,\n cancelable: true,\n eventName: 'bcmRadioChange',\n })\n bcmRadioChange: EventEmitter<void>;\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 bcmFocus: EventEmitter<FocusEvent>;\n\n private handleClick(): void {\n if (this.readonly || this.disabled) return;\n if (!this.checked) {\n this.checked = true;\n this.bcmRadioChange.emit();\n }\n }\n\n private getRadioStyle() {\n const defaultStyle = {\n '--bcm-radio-bg': 'var(--bcm-ui-color-background-default-default)',\n '--bcm-radio-border': 'var(--bcm-ui-color-border-disabled)',\n '--bcm-radio-border-hover': 'var(--bcm-ui-color-border-primary)',\n '--bcm-radio-checked': 'var(--bcm-ui-color-background-primary-default)',\n '--bcm-radio-text-color': 'var(--bcm-ui-color-text-default)',\n };\n\n const errorStyle = {\n '--bcm-radio-bg': 'var(--bcm-ui-color-background-palette-red-default)',\n '--bcm-radio-border': 'var(--bcm-ui-color-border-error)',\n '--bcm-radio-border-hover': 'var(--bcm-ui-color-border-error)',\n '--bcm-radio-checked': 'var(--bcm-ui-color-background-error-default)',\n '--bcm-radio-text-color': 'var(--bcm-ui-color-text-default)',\n };\n\n const disabledStyle = {\n '--bcm-radio-bg': 'var(--bcm-ui-color-background-disabled-default)',\n '--bcm-radio-border': 'var(--bcm-ui-color-border-disabled)',\n '--bcm-radio-border-hover': 'var(--bcm-ui-color-border-disabled)',\n '--bcm-radio-checked': 'var(--bcm-ui-color-background-disabled-default)',\n '--bcm-radio-text-color': 'var(--bcm-ui-color-text-disabled)',\n };\n\n const readonlyStyle = {\n '--bcm-radio-bg': 'transparent',\n '--bcm-radio-border': 'var(--bcm-ui-color-border-disabled)',\n '--bcm-radio-checked': 'var(--bcm-ui-color-background-default-default)',\n '--bcm-radio-border-hover': 'var(--bcm-ui-color-border-disabled)',\n '--bcm-radio-text-color': 'var(--bcm-ui-color-text-default)',\n };\n\n return {\n ...defaultStyle,\n ...(this.error && errorStyle),\n ...(this.disabled && disabledStyle),\n ...(this.readonly && readonlyStyle),\n };\n }\n\n private getRadioClass = tv(\n {\n slots: {\n container: 'bcm-ui-element bcm-radio group',\n dot: 'absolute rounded-full transition bg-[--bcm-radio-checked]',\n dotContainer:\n 'relative rounded-full flex items-center justify-center shadow-[inset_0_0_0_1px_var(--bcm-radio-border)] bg-[--bcm-radio-bg] transition group-hover:shadow-[inset_0_0_0_1px_var(--bcm-radio-border-hover)]',\n labelClass: 'font-medium text-[--bcm-radio-text-color]',\n },\n variants: {\n size: {\n small: {\n container: 'gap-2',\n dotContainer: 'size-3.5',\n dot: 'size-2',\n labelClass: 'text-size-4',\n },\n medium: {\n container: 'gap-2.5',\n dotContainer: 'size-4',\n dot: 'size-2.5',\n labelClass: 'text-size-5',\n },\n large: {\n container: 'gap-3',\n dotContainer: 'size-[18px]',\n dot: 'size-3',\n labelClass: 'text-size-6',\n },\n },\n checked: {\n true: {\n dot: 'opacity-100',\n },\n false: {\n dot: 'opacity-0',\n },\n },\n disabled: {\n true: {\n container: 'cursor-not-allowed',\n },\n false: {\n container: 'cursor-pointer focus-visible:ring',\n },\n },\n readonly: {\n true: {\n container: 'cursor-default pointer-events-none',\n dot: 'opacity-100',\n dotContainer: 'shadow-[inset_0_0_0_3px_var(--bcm-radio-border)]',\n },\n false: '',\n },\n labelPosition: {\n left: {\n container: 'inline-flex flex-row-reverse items-center',\n },\n right: {\n container: 'inline-flex flex-row items-center',\n },\n },\n },\n },\n {\n twMerge: false,\n },\n );\n\n render() {\n const { container, dot, dotContainer, labelClass } = this.getRadioClass({\n size: this.size,\n checked: this.checked,\n disabled: this.disabled,\n readonly: this.readonly,\n labelPosition: this.labelPosition,\n });\n\n return (\n <label class={container()} style={this.getRadioStyle()}>\n <input\n aria-label={this.label}\n role=\"radio\"\n aria-checked={this.checked.toString()}\n type=\"radio\"\n name={this.name}\n value={this.value}\n disabled={this.disabled}\n readOnly={this.readonly}\n checked={this.checked}\n class=\"appearance-none sr-only\"\n onClick={() => this.handleClick()}\n onFocus={e => this.bcmFocus.emit(e)}\n onBlur={e => this.bcmBlur.emit(e)}\n ></input>\n <div class={dotContainer()}>\n <div class={dot()}></div>\n </div>\n <span class={labelClass()}>\n <slot>{this.label}</slot>\n </span>\n </label>\n );\n }\n}\n"],"mappings":"wFAAA,MAAMA,EAAW,y9G,MCiDJC,EAAQ,MALrB,WAAAC,CAAAC,G,6HAsCEC,KAAOC,QAAY,MAQnBD,KAAIE,KAAiC,SAQrCF,KAAQG,SAAG,MAQXH,KAAQI,SAAG,MAQXJ,KAAaK,cAAqB,QAQlCL,KAAKM,MAAY,MAyETN,KAAaO,cAAGC,EACtB,CACEC,MAAO,CACLC,UAAW,iCACXC,IAAK,4DACLC,aACE,4MACFC,WAAY,6CAEdC,SAAU,CACRZ,KAAM,CACJa,MAAO,CACLL,UAAW,QACXE,aAAc,WACdD,IAAK,SACLE,WAAY,eAEdG,OAAQ,CACNN,UAAW,UACXE,aAAc,SACdD,IAAK,WACLE,WAAY,eAEdI,MAAO,CACLP,UAAW,QACXE,aAAc,cACdD,IAAK,SACLE,WAAY,gBAGhBZ,QAAS,CACPiB,KAAM,CACJP,IAAK,eAEPQ,MAAO,CACLR,IAAK,cAGTR,SAAU,CACRe,KAAM,CACJR,UAAW,sBAEbS,MAAO,CACLT,UAAW,sCAGfN,SAAU,CACRc,KAAM,CACJR,UAAW,qCACXC,IAAK,cACLC,aAAc,oDAEhBO,MAAO,IAETd,cAAe,CACbe,KAAM,CACJV,UAAW,6CAEbW,MAAO,CACLX,UAAW,wCAKnB,CACEY,QAAS,OAuCd,CAzJS,WAAAC,GACN,GAAIvB,KAAKI,UAAYJ,KAAKG,SAAU,OACpC,IAAKH,KAAKC,QAAS,CACjBD,KAAKC,QAAU,KACfD,KAAKwB,eAAeC,M,EAIhB,aAAAC,GACN,MAAMC,EAAe,CACnB,iBAAkB,iDAClB,qBAAsB,sCACtB,2BAA4B,qCAC5B,sBAAuB,iDACvB,yBAA0B,oCAG5B,MAAMC,EAAa,CACjB,iBAAkB,qDAClB,qBAAsB,mCACtB,2BAA4B,mCAC5B,sBAAuB,+CACvB,yBAA0B,oCAG5B,MAAMC,EAAgB,CACpB,iBAAkB,kDAClB,qBAAsB,sCACtB,2BAA4B,sCAC5B,sBAAuB,kDACvB,yBAA0B,qCAG5B,MAAMC,EAAgB,CACpB,iBAAkB,cAClB,qBAAsB,sCACtB,sBAAuB,iDACvB,2BAA4B,sCAC5B,yBAA0B,oCAG5B,OACKC,OAAAC,OAAAD,OAAAC,OAAAD,OAAAC,OAAAD,OAAAC,OAAA,GAAAL,GACC3B,KAAKM,OAASsB,GACd5B,KAAKG,UAAY0B,GACjB7B,KAAKI,UAAY0B,E,CAyEzB,MAAAG,GACE,MAAMvB,UAAEA,EAASC,IAAEA,EAAGC,aAAEA,EAAYC,WAAEA,GAAeb,KAAKO,cAAc,CACtEL,KAAMF,KAAKE,KACXD,QAASD,KAAKC,QACdE,SAAUH,KAAKG,SACfC,SAAUJ,KAAKI,SACfC,cAAeL,KAAKK,gBAGtB,OACE6B,EAAA,SAAAC,IAAA,2CAAOC,MAAO1B,IAAa2B,MAAOrC,KAAK0B,iBACrCQ,EACc,SAAAC,IAAA,wDAAAnC,KAAKsC,MACjBC,KAAK,QAAO,eACEvC,KAAKC,QAAQuC,WAC3BC,KAAK,QACLC,KAAM1C,KAAK0C,KACXC,MAAO3C,KAAK2C,MACZxC,SAAUH,KAAKG,SACfyC,SAAU5C,KAAKI,SACfH,QAASD,KAAKC,QACdmC,MAAM,0BACNS,QAAS,IAAM7C,KAAKuB,cACpBuB,QAASC,GAAK/C,KAAKgD,SAASvB,KAAKsB,GACjCE,OAAQF,GAAK/C,KAAKkD,QAAQzB,KAAKsB,KAEjCb,EAAK,OAAAC,IAAA,2CAAAC,MAAOxB,KACVsB,EAAA,OAAAC,IAAA,2CAAKC,MAAOzB,OAEduB,EAAM,QAAAC,IAAA,2CAAAC,MAAOvB,KACXqB,EAAA,QAAAC,IAAA,4CAAOnC,KAAKsC,Q","ignoreList":[]}
@@ -1,2 +0,0 @@
1
- import{r as t,h as i,a as e}from"./p-BuuGCw0z.js";import{b as s,c as o,o as a,f as h,s as r,a as l}from"./p-DxMLMJ3r.js";import{t as c}from"./p-CEcVC0yX.js";const n=":host{--tooltip-bg:var(--bcm-ui-color-background-default-dark-default)}.bcm-ui-element{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:Inter,sans-serif}.static{position:static}.absolute{position:absolute}.relative{position:relative}.z-\\[-1\\]{z-index:-1}.z-\\[9999\\]{z-index:9999}.block{display:block}.hidden{display:none}.h-4{height:1rem}.w-4{width:1rem}.min-w-max{min-width:max-content}.rotate-45{--tw-rotate:45deg}.rotate-45,.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rounded-md{border-radius:var(--bcm-ui-border-radius-md,6px)}.bg-\\[--tooltip-bg\\]{background-color:var(--tooltip-bg)}.px-3{padding-left:.75rem;padding-right:.75rem}.py-1{padding-bottom:.25rem;padding-top:.25rem}.text-size-3{font-size:var(--bcm-ui-font-size-3,12px);line-height:var(--bcm-ui-line-height-3,16px)}.text-size-4{font-size:var(--bcm-ui-font-size-4,14px);line-height:var(--bcm-ui-line-height-4,20px)}.text-size-5{font-size:var(--bcm-ui-font-size-5,16px);line-height:var(--bcm-ui-line-height-5,24px)}.font-medium{font-weight:500}.text-color-base{color:var(--bcm-ui-color-text-base)}.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)}";const d=class{constructor(i){t(this,i);this.trigger="hover";this.placement="top";this.size="medium";this.showDelay=150;this.open=false;this.toggleTooltip=()=>{this.open=!this.open;this.updateOutsideClickListener()};this.showTooltip=()=>{clearTimeout(this.hoverTimeout);this.hoverTimeout=setTimeout((()=>{this.open=true;this.updateOutsideClickListener()}),this.showDelay)};this.hideTooltip=()=>{clearTimeout(this.hoverTimeout);this.hoverTimeout=setTimeout((()=>{this.open=false;this.updateOutsideClickListener()}),this.showDelay)};this.handleSlotChange=()=>{const t=this.el.shadowRoot.querySelector("slot");const i=t.assignedElements();this.targetElement=i[0];if(this.targetElement){this.targetElement.removeEventListener("click",this.toggleTooltip);this.targetElement.removeEventListener("mouseenter",this.showTooltip);this.targetElement.removeEventListener("mouseleave",this.hideTooltip);if(this.trigger==="click"){this.targetElement.addEventListener("click",this.toggleTooltip);this.targetElement.setAttribute("aria-expanded",this.open.toString());this.targetElement.setAttribute("aria-describedby","tooltip")}if(this.trigger==="hover"){this.targetElement.addEventListener("mouseenter",this.showTooltip);this.targetElement.addEventListener("mouseleave",this.hideTooltip);this.targetElement.setAttribute("aria-describedby","tooltip")}if(this.tooltipElement&&!this.cleanupAutoUpdate){this.cleanupAutoUpdate=s(this.targetElement,this.tooltipElement,(()=>this.updatePosition()),{animationFrame:false})}}};this.handleOutsideClick=t=>{if(!this.el.contains(t.target)&&this.open){this.open=false;this.updateOutsideClickListener()}};this.updatePosition=async()=>{if(!this.targetElement||!this.tooltipElement||!this.arrowElement)return;const{x:t,y:i,placement:e,middlewareData:s}=await o(this.targetElement,this.tooltipElement,{placement:this.placement,middleware:[a(12),h({fallbackPlacements:["top","left","bottom","right"]}),r({padding:8}),l({element:this.arrowElement})]});Object.assign(this.tooltipElement.style,{left:`${t}px`,top:`${i}px`});const{x:c,y:n}=s.arrow||{x:0,y:0};const d=e.split("-")[0];const m={top:"bottom",right:"left",bottom:"top",left:"right"}[d];Object.assign(this.arrowElement.style,{left:c!=null?`${c}px`:"",top:n!=null?`${n}px`:"",[m]:"-4px"})};this.tooltipClass=c({slots:{tooltip:"bcm-ui-element bcm-tooltip absolute bg-[--tooltip-bg] rounded-md shadow-3 py-1 px-3 min-w-max z-[9999] text-color-base font-medium",arrow:"absolute w-4 h-4 bg-[--tooltip-bg] transform rotate-45 z-[-1]"},variants:{size:{small:{tooltip:"text-size-3"},medium:{tooltip:"text-size-4"},large:{tooltip:"text-size-5"}},isOpen:{true:{tooltip:"block"},false:{tooltip:"hidden"}}},defaultVariants:{size:"medium",isOpen:false}},{twMerge:false})}disconnectedCallback(){var t;document.removeEventListener("click",this.handleOutsideClick);if(this.targetElement){this.targetElement.removeEventListener("click",this.toggleTooltip);this.targetElement.removeEventListener("mouseenter",this.showTooltip);this.targetElement.removeEventListener("mouseleave",this.hideTooltip)}(t=this.cleanupAutoUpdate)===null||t===void 0?void 0:t.call(this);this.cleanupAutoUpdate=null;clearTimeout(this.hoverTimeout)}updateOutsideClickListener(){if(this.open){document.addEventListener("click",this.handleOutsideClick)}else{document.removeEventListener("click",this.handleOutsideClick)}}async openTooltip(){this.showTooltip()}async closeTooltip(){this.hideTooltip()}render(){const{tooltip:t,arrow:e}=this.tooltipClass({size:this.size,isOpen:this.open});return i("div",{key:"d92fbafaebadf93f8c215e6e3e654e39b494c7fb",class:"relative"},i("slot",{key:"35de4bc9d0def680a4bab9e64647e9e0944641c0",onSlotchange:()=>this.handleSlotChange()}),i("div",{key:"decee0e16c8aedbb3ab5e9569fdb33fda07cf7fc",role:"tooltip",class:t(),ref:t=>this.tooltipElement=t,part:"tooltip"},i("div",{key:"33a5f59e988795b1cc55f21fc3e11d7711a1b8ef",class:e(),ref:t=>this.arrowElement=t,part:"arrow"}),i("slot",{key:"b73cc659fea66c2bd868b047bd1698cf2764c954",name:"tooltip"},this.message)))}get el(){return e(this)}};d.style=n;export{d as bcm_tooltip};
2
- //# sourceMappingURL=p-6d7d73d5.entry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["tooltipCss","Tooltip","constructor","hostRef","this","trigger","placement","size","showDelay","open","toggleTooltip","updateOutsideClickListener","showTooltip","clearTimeout","hoverTimeout","setTimeout","hideTooltip","handleSlotChange","slot","el","shadowRoot","querySelector","elements","assignedElements","targetElement","removeEventListener","addEventListener","setAttribute","toString","tooltipElement","cleanupAutoUpdate","autoUpdate","updatePosition","animationFrame","handleOutsideClick","event","contains","target","async","arrowElement","x","y","middlewareData","computePosition","middleware","offset","flip","fallbackPlacements","shift","padding","arrow","element","Object","assign","style","left","top","arrowX","arrowY","basePlacement","split","staticSide","right","bottom","tooltipClass","tv","slots","tooltip","variants","small","medium","large","isOpen","true","false","defaultVariants","twMerge","disconnectedCallback","document","_a","call","openTooltip","closeTooltip","render","h","key","class","onSlotchange","role","ref","part","name","message"],"sources":["src/components/tooltip/tooltip.css?tag=bcm-tooltip&encapsulation=shadow","src/components/tooltip/tooltip.component.tsx"],"sourcesContent":[":host {\n --tooltip-bg: var(--bcm-ui-color-background-default-dark-default);\n}\n","import { arrow, autoUpdate, computePosition, flip, offset, shift } from '@floating-ui/dom';\nimport { Component, ComponentInterface, h, Element, Prop, State, Method } from '@stencil/core';\nimport { tv } from '@utils/tv';\n\n/**\n * @component BcmTooltip\n * @description A lightweight tooltip component that displays brief contextual information when hovering or clicking on a target element.\n * Supports different sizes, trigger types (click or hover), placements (top, right, bottom, left), and can be controlled via slots or props.\n *\n * @example Basic Hover Tooltip\n * <bcm-tooltip trigger=\"hover\" size=\"medium\" placement=\"top\" message=\"This is a tooltip.\">\n * <bcm-button>Hover Me</bcm-button>\n * </bcm-tooltip>\n *\n * @example Click Tooltip with Programmatic Control\n * <bcm-tooltip id=\"my-tooltip\" trigger=\"click\" message=\"Controlled tooltip.\">\n * <bcm-button>Click Me</bcm-button>\n * </bcm-tooltip>\n * <script>\n * const tooltip = document.querySelector('#my-tooltip');\n * tooltip.openTooltip(); // Opens the tooltip\n * tooltip.closeTooltip(); // Closes the tooltip\n * </script>\n *\n * @slot - Default slot for the target element that triggers the tooltip\n * @slot tooltip - Slot for custom tooltip content\n *\n * @csspart tooltip - The root tooltip container element, stylable for the entire tooltip\n * @csspart arrow - The arrow element of the tooltip, stylable for the positioning arrow\n */\n\n@Component({\n tag: 'bcm-tooltip',\n styleUrl: 'tooltip.css',\n shadow: true,\n})\nexport class Tooltip implements ComponentInterface {\n @Element() el: HTMLElement;\n\n /**\n * @prop {('click' | 'hover')} trigger - Defines the interaction type to show/hide the tooltip.\n * 'click' toggles on click, 'hover' shows on mouse enter and hides on mouse leave.\n * Default: 'hover'\n */\n @Prop()\n trigger: 'click' | 'hover' = 'hover';\n\n /**\n * @prop {('top' | 'right' | 'bottom' | 'left')} placement - Defines the position of the tooltip relative to the target element.\n * Default: 'top'\n */\n @Prop()\n placement: 'top' | 'right' | 'bottom' | 'left' = 'top';\n\n /**\n * @prop {('small' | 'medium' | 'large')} size - Defines the size of the tooltip.\n * Controls the text size and padding of the tooltip content.\n * Default: 'medium'\n */\n @Prop()\n size: 'small' | 'medium' | 'large' = 'medium';\n\n /**\n * @prop {string} message - Custom text for the tooltip content.\n * Used as fallback content if the 'tooltip' slot is not provided.\n */\n @Prop()\n message: string;\n\n /**\n * @prop {number} showDelay - Delay in milliseconds before showing or hiding the tooltip.\n * Helps prevent flickering on quick mouse movements.\n * Default: 150\n */\n @Prop()\n showDelay: number = 150;\n\n @State() open = false;\n\n private tooltipElement: HTMLElement;\n private arrowElement: HTMLElement;\n private targetElement: HTMLElement;\n private hoverTimeout: any;\n private cleanupAutoUpdate: () => void;\n\n disconnectedCallback() {\n document.removeEventListener('click', this.handleOutsideClick);\n if (this.targetElement) {\n this.targetElement.removeEventListener('click', this.toggleTooltip);\n this.targetElement.removeEventListener('mouseenter', this.showTooltip);\n this.targetElement.removeEventListener('mouseleave', this.hideTooltip);\n }\n this.cleanupAutoUpdate?.();\n this.cleanupAutoUpdate = null;\n clearTimeout(this.hoverTimeout);\n }\n\n private updateOutsideClickListener() {\n if (this.open) {\n document.addEventListener('click', this.handleOutsideClick);\n } else {\n document.removeEventListener('click', this.handleOutsideClick);\n }\n }\n\n private toggleTooltip = () => {\n this.open = !this.open;\n this.updateOutsideClickListener();\n };\n\n private showTooltip = () => {\n clearTimeout(this.hoverTimeout);\n this.hoverTimeout = setTimeout(() => {\n this.open = true;\n this.updateOutsideClickListener();\n }, this.showDelay);\n };\n\n private hideTooltip = () => {\n clearTimeout(this.hoverTimeout);\n this.hoverTimeout = setTimeout(() => {\n this.open = false;\n this.updateOutsideClickListener();\n }, this.showDelay);\n };\n\n /**\n * @method {Promise<void>} openTooltip - Programmatically opens the tooltip.\n * Triggers the showTooltip logic with the specified delay.\n * @returns {Promise<void>} A promise that resolves when the tooltip is opened.\n */\n @Method()\n async openTooltip() {\n this.showTooltip();\n }\n\n /**\n * @method {Promise<void>} closeTooltip - Programmatically closes the tooltip.\n * Triggers the hideTooltip logic with the specified delay.\n * @returns {Promise<void>} A promise that resolves when the tooltip is closed.\n */\n @Method()\n async closeTooltip() {\n this.hideTooltip();\n }\n\n private handleSlotChange = () => {\n const slot = this.el.shadowRoot.querySelector('slot');\n const elements = slot.assignedElements();\n this.targetElement = elements[0] as HTMLElement;\n\n if (this.targetElement) {\n this.targetElement.removeEventListener('click', this.toggleTooltip);\n this.targetElement.removeEventListener('mouseenter', this.showTooltip);\n this.targetElement.removeEventListener('mouseleave', this.hideTooltip);\n\n if (this.trigger === 'click') {\n this.targetElement.addEventListener('click', this.toggleTooltip);\n this.targetElement.setAttribute('aria-expanded', this.open.toString());\n this.targetElement.setAttribute('aria-describedby', 'tooltip');\n }\n\n if (this.trigger === 'hover') {\n this.targetElement.addEventListener('mouseenter', this.showTooltip);\n this.targetElement.addEventListener('mouseleave', this.hideTooltip);\n this.targetElement.setAttribute('aria-describedby', 'tooltip');\n }\n\n if (this.tooltipElement && !this.cleanupAutoUpdate) {\n this.cleanupAutoUpdate = autoUpdate(this.targetElement, this.tooltipElement, () => this.updatePosition(), { animationFrame: false });\n }\n }\n };\n\n private handleOutsideClick = (event: Event) => {\n if (!this.el.contains(event.target as Node) && this.open) {\n this.open = false;\n this.updateOutsideClickListener();\n }\n };\n\n private updatePosition = async () => {\n if (!this.targetElement || !this.tooltipElement || !this.arrowElement) return;\n\n const { x, y, placement, middlewareData } = await computePosition(this.targetElement, this.tooltipElement, {\n placement: this.placement,\n middleware: [offset(12), flip({ fallbackPlacements: ['top', 'left', 'bottom', 'right'] }), shift({ padding: 8 }), arrow({ element: this.arrowElement })],\n });\n\n Object.assign(this.tooltipElement.style, {\n left: `${x}px`,\n top: `${y}px`,\n });\n\n const { x: arrowX, y: arrowY } = middlewareData.arrow || { x: 0, y: 0 };\n const basePlacement = placement.split('-')[0] as 'top' | 'right' | 'bottom' | 'left';\n const staticSide = {\n top: 'bottom',\n right: 'left',\n bottom: 'top',\n left: 'right',\n }[basePlacement];\n\n Object.assign(this.arrowElement.style, {\n left: arrowX != null ? `${arrowX}px` : '',\n top: arrowY != null ? `${arrowY}px` : '',\n [staticSide]: '-4px',\n });\n };\n\n private tooltipClass = tv(\n {\n slots: {\n tooltip: 'bcm-ui-element bcm-tooltip absolute bg-[--tooltip-bg] rounded-md shadow-3 py-1 px-3 min-w-max z-[9999] text-color-base font-medium',\n arrow: 'absolute w-4 h-4 bg-[--tooltip-bg] transform rotate-45 z-[-1]',\n },\n variants: {\n size: {\n small: { tooltip: 'text-size-3' },\n medium: { tooltip: 'text-size-4' },\n large: { tooltip: 'text-size-5' },\n },\n isOpen: {\n true: { tooltip: 'block' },\n false: { tooltip: 'hidden' },\n },\n },\n defaultVariants: {\n size: 'medium',\n isOpen: false,\n },\n },\n { twMerge: false },\n );\n\n render() {\n const { tooltip, arrow } = this.tooltipClass({\n size: this.size,\n isOpen: this.open,\n });\n return (\n <div class=\"relative\">\n <slot onSlotchange={() => this.handleSlotChange()}></slot>\n <div role=\"tooltip\" class={tooltip()} ref={el => (this.tooltipElement = el)} part=\"tooltip\">\n <div class={arrow()} ref={el => (this.arrowElement = el)} part=\"arrow\"></div>\n <slot name=\"tooltip\">{this.message}</slot>\n </div>\n </div>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,2 +0,0 @@
1
- import{r,h as d}from"./p-BuuGCw0z.js";import{t as o}from"./p-CEcVC0yX.js";const e=".block{display:block}:host{--bcm-divider-border:var(--bcm-ui-color-border-default);display:block}.static{position:static}.h-full{height:100%}.w-full{width:100%}.border{border-width:1px}.border-2{border-width:2px}.border-4{border-width:4px}.border-\\[1px\\]{border-width:1px}.border-l{border-left-width:1px}.border-t{border-top-width:1px}.border-solid{border-style:solid}.border-dashed{border-style:dashed}.border-dotted{border-style:dotted}.border-\\[--bcm-divider-border\\]{border-color:var(--bcm-divider-border)}.shadow{--tw-shadow:var(--bcm-ui-box-shadow-default);--tw-shadow-colored:var(--bcm-ui-box-shadow-default);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}";const t=class{constructor(d){r(this,d);this.direction="horizontal";this.variant="solid";this.size="medium";this.dividerClass=o({base:"border-[--bcm-divider-border]",variants:{direction:{horizontal:"w-full border-t",vertical:"h-full border-l"},variant:{solid:"border-solid",dashed:"border-dashed",dotted:"border-dotted"},size:{small:"border-[1px]",medium:"border-2",large:"border-4"}},defaultVariants:{direction:"horizontal",variant:"solid",size:"medium"}},{twMerge:false})}render(){return d("div",{key:"36b2afa1c40326bf3d2c7ba1431334766d6d3aa0",role:"separator","aria-orientation":this.direction,class:this.dividerClass({direction:this.direction,variant:this.variant,size:this.size})})}};t.style=e;export{t as bcm_divider};
2
- //# sourceMappingURL=p-7234af90.entry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["dividerCss","Divider","constructor","hostRef","this","direction","variant","size","dividerClass","tv","base","variants","horizontal","vertical","solid","dashed","dotted","small","medium","large","defaultVariants","twMerge","render","h","key","role","class"],"sources":["src/components/divider/divider.css?tag=bcm-divider&encapsulation=shadow","src/components/divider/divider.component.tsx"],"sourcesContent":[":host {\n display: block;\n --bcm-divider-border: var(--bcm-ui-color-border-default);\n}\n","import { Component, ComponentInterface, Prop, h } from '@stencil/core';\nimport { tv } from '@utils/tv';\n\n/**\n * @component BCM Divider\n * @description\n * A versatile divider component that creates a visual separation between content.\n * It supports horizontal or vertical orientation with customizable styles and sizes.\n * The component uses CSS variables for theming and Tailwind for styling.\n */\n@Component({\n tag: 'bcm-divider',\n styleUrl: 'divider.css',\n shadow: true,\n})\nexport class Divider implements ComponentInterface {\n /**\n * @prop {('horizontal'|'vertical')} direction\n * @description Determines the orientation of the divider\n * @default 'horizontal'\n * @example\n * <bcm-divider direction=\"vertical\" />\n */\n @Prop()\n direction: 'horizontal' | 'vertical' = 'horizontal';\n\n /**\n * @prop {('solid'|'dashed'|'dotted')} variant\n * @description Sets the border style of the divider\n * @default 'solid'\n * @example\n * <bcm-divider variant=\"dashed\" />\n */\n @Prop()\n variant: 'solid' | 'dashed' | 'dotted' = 'solid';\n\n /**\n * @prop {('small'|'medium'|'large')} size\n * @description Controls the thickness of the divider\n * @default 'medium'\n * @values\n * - small: 1px border\n * - medium: 2px border\n * - large: 4px border\n * @example\n * <bcm-divider size=\"large\" />\n */\n @Prop()\n size: 'small' | 'medium' | 'large' = 'medium';\n\n private dividerClass = tv(\n {\n base: 'border-[--bcm-divider-border]',\n variants: {\n direction: {\n horizontal: 'w-full border-t',\n vertical: 'h-full border-l',\n },\n variant: {\n solid: 'border-solid',\n dashed: 'border-dashed',\n dotted: 'border-dotted',\n },\n size: {\n small: 'border-[1px]',\n medium: 'border-2',\n large: 'border-4',\n },\n },\n defaultVariants: {\n direction: 'horizontal',\n variant: 'solid',\n size: 'medium',\n },\n },\n {\n twMerge: false,\n },\n );\n\n render() {\n return (\n <div\n role=\"separator\"\n aria-orientation={this.direction}\n class={this.dividerClass({\n direction: this.direction,\n variant: this.variant,\n size: this.size,\n })}\n ></div>\n );\n }\n}\n"],"mappings":"0EAAA,MAAMA,EAAa,ktB,MCeNC,EAAO,MALpB,WAAAC,CAAAC,G,UAcEC,KAASC,UAA8B,aAUvCD,KAAOE,QAAkC,QAczCF,KAAIG,KAAiC,SAE7BH,KAAYI,aAAGC,EACrB,CACEC,KAAM,gCACNC,SAAU,CACRN,UAAW,CACTO,WAAY,kBACZC,SAAU,mBAEZP,QAAS,CACPQ,MAAO,eACPC,OAAQ,gBACRC,OAAQ,iBAEVT,KAAM,CACJU,MAAO,eACPC,OAAQ,WACRC,MAAO,aAGXC,gBAAiB,CACff,UAAW,aACXC,QAAS,QACTC,KAAM,WAGV,CACEc,QAAS,OAiBd,CAbC,MAAAC,GACE,OACEC,EAAA,OAAAC,IAAA,2CACEC,KAAK,YACa,mBAAArB,KAAKC,UACvBqB,MAAOtB,KAAKI,aAAa,CACvBH,UAAWD,KAAKC,UAChBC,QAASF,KAAKE,QACdC,KAAMH,KAAKG,Q","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":["badgeCss","Badge","constructor","hostRef","this","size","variant","soft","blink","position","classes","tv","base","variants","small","medium","large","dot","text","true","compoundVariants","class","defaultVariants","offsetStyle","offset","x","y","split","map","val","trim","transform","badgeStyle","color","variantType","render","h","key","role","status","undefined","style","Object","assign","name"],"sources":["src/components/badge/badge.css?tag=bcm-badge&encapsulation=shadow","src/components/badge/badge.component.tsx"],"sourcesContent":[":host {\n display: inline-block;\n position: relative;\n --bcm-badge-bg: var(--bcm-ui-color-background-default-default);\n --bcm-badge-text: var(--bcm-ui-color-text-default);\n --bcm-badge-radius: 9999px;\n}\n\n::slotted([slot='badge']) {\n color: var(--bcm-badge-text);\n font-weight: 500;\n}\n","import { Component, ComponentInterface, Prop, h } from '@stencil/core';\nimport { tv } from '@utils/tv';\n\n/**\n * @component BcmBadge\n * @description A versatile badge component that can be positioned around its container.\n * Supports different sizes, variants (dot/text), colors, and positioning options.\n * Can display status indicators with optional blinking animation.\n *\n * @example Basic usage\n * <bcm-badge color=\"primary\" position=\"top-right\">\n * <div>Container Content</div>\n * <span slot=\"badge\">New</span>\n * </bcm-badge>\n *\n * @example Status indicator with blink\n * <bcm-badge variant=\"dot\" color=\"success\" blink={true} status=\"Online\">\n * <div>User Profile</div>\n * </bcm-badge>\n */\n@Component({\n tag: 'bcm-badge',\n styleUrl: 'badge.css',\n shadow: true,\n})\nexport class Badge implements ComponentInterface {\n /**\n * Determines the size of the badge.\n * @type {'small' | 'medium' | 'large'}\n * @default 'medium'\n */\n @Prop()\n size: 'small' | 'medium' | 'large' = 'medium';\n\n /**\n * Sets the visual variant of the badge.\n * 'dot': Appears as a small dot indicator\n * 'text': Displays content as text\n * @type {'dot' | 'text'}\n * @default 'text'\n */\n @Prop()\n variant: 'dot' | 'text' = 'text';\n\n /**\n * Defines the color of the badge.\n * Uses system color variables (e.g., 'primary', 'success', 'warning', etc.)\n * @type {string}\n * @optional\n */\n @Prop()\n color?: string;\n\n /**\n * Enables soft color mode for the badge.\n * When true, uses lighter tones and pastel colors.\n * @type {boolean}\n * @default false\n */\n @Prop()\n soft: boolean = false;\n\n /**\n * Enables blinking animation for the badge.\n * Useful for drawing attention or indicating active status.\n * @type {boolean}\n * @default false\n */\n @Prop()\n blink: boolean = false;\n\n /**\n * Status message for accessibility purposes.\n * Will be read by screen readers.\n * @type {string}\n * @optional\n */\n @Prop()\n status?: string;\n\n /**\n * Sets the position of the badge relative to its container.\n * @type {'top-right' | 'top-left' | 'bottom-right' | 'bottom-left'}\n * @default 'top-right'\n */\n @Prop()\n position: 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left' = 'top-right';\n\n /**\n * Fine-tune the badge position with custom offset.\n * Format: \"x,y\" in pixels (e.g., \"10,-5\")\n * @type {string}\n * @optional\n */\n @Prop()\n offset: string;\n\n /**\n * Text to be displayed inside the badge.\n * Used when variant is set to 'text'.\n * Can be overridden using the \"badge\" slot.\n * @type {string}\n * @optional\n */\n @Prop()\n text?: string;\n\n private classes = tv({\n base: 'badge bcm-ui-element absolute font-medium inline-flex items-center justify-center bg-[--bcm-badge-bg] text-[--bcm-badge-text] rounded-[--bcm-badge-radius] z-10',\n variants: {\n size: {\n small: 'gap-1 px-1 text-size-3',\n medium: 'gap-1 py-0.5 px-1.5 text-size-4',\n large: 'gap-2 py-1 px-2 text-size-5',\n },\n variant: {\n dot: 'gap-0 p-0 text-[0px] leading-none',\n text: '',\n },\n position: {\n 'top-right': '-top-1 -right-1',\n 'top-left': '-top-1 -left-1',\n 'bottom-right': '-bottom-1 -right-1',\n 'bottom-left': '-bottom-1 -left-1',\n },\n blink: {\n true: 'after:content-[\"\"] after:absolute after:rounded-full after:bg-[--bcm-badge-bg] after:animate-blink after:w-full after:h-full',\n },\n },\n compoundVariants: [\n {\n variant: 'dot',\n size: 'small',\n class: 'size-1',\n },\n {\n variant: 'dot',\n size: 'medium',\n class: 'size-1.5',\n },\n {\n variant: 'dot',\n size: 'large',\n class: 'size-2',\n },\n ],\n defaultVariants: {\n variant: 'text',\n size: 'medium',\n position: 'top-right',\n blink: false,\n },\n });\n\n private get offsetStyle() {\n if (!this.offset) return {};\n const [x = 0, y = 0] = this.offset.split(',').map(val => val.trim());\n return { transform: `translate(${x}px, ${y}px)` };\n }\n\n private get badgeStyle() {\n if (!this.color) return {};\n const variantType = this.soft ? 'soft' : 'vivid';\n\n return {\n '--bcm-badge-bg': `var(--bcm-ui-color-background-${variantType}-${this.color}-default)`,\n '--bcm-badge-text': this.soft ? `var(--bcm-ui-color-text-palette-${this.color})` : 'var(--bcm-ui-color-text-base)',\n };\n }\n\n render() {\n return (\n <div class=\"relative inline-flex\">\n <slot></slot>\n <div\n role=\"status\"\n aria-live=\"polite\"\n aria-label={this.status ? `Status: ${this.status}` : undefined}\n class={this.classes({\n size: this.size,\n variant: this.variant,\n position: this.position,\n blink: this.blink,\n })}\n style={{\n ...this.badgeStyle,\n ...this.offsetStyle,\n }}\n >\n {this.variant == 'text' && <slot name=\"badge\">{this.text}</slot>}\n </div>\n </div>\n );\n }\n}\n"],"mappings":"+EAAA,MAAMA,EAAW,2hH,MCyBJC,EAAK,MALlB,WAAAC,CAAAC,G,UAYEC,KAAIC,KAAiC,SAUrCD,KAAOE,QAAmB,OAkB1BF,KAAIG,KAAY,MAShBH,KAAKI,MAAY,MAiBjBJ,KAAQK,SAA8D,YAqB9DL,KAAOM,QAAGC,EAAG,CACnBC,KAAM,kKACNC,SAAU,CACRR,KAAM,CACJS,MAAO,yBACPC,OAAQ,kCACRC,MAAO,+BAETV,QAAS,CACPW,IAAK,oCACLC,KAAM,IAERT,SAAU,CACR,YAAa,kBACb,WAAY,iBACZ,eAAgB,qBAChB,cAAe,qBAEjBD,MAAO,CACLW,KAAM,kIAGVC,iBAAkB,CAChB,CACEd,QAAS,MACTD,KAAM,QACNgB,MAAO,UAET,CACEf,QAAS,MACTD,KAAM,SACNgB,MAAO,YAET,CACEf,QAAS,MACTD,KAAM,QACNgB,MAAO,WAGXC,gBAAiB,CACfhB,QAAS,OACTD,KAAM,SACNI,SAAU,YACVD,MAAO,QA4CZ,CAxCC,eAAYe,GACV,IAAKnB,KAAKoB,OAAQ,MAAO,GACzB,MAAOC,EAAI,EAAGC,EAAI,GAAKtB,KAAKoB,OAAOG,MAAM,KAAKC,KAAIC,GAAOA,EAAIC,SAC7D,MAAO,CAAEC,UAAW,aAAaN,QAAQC,O,CAG3C,cAAYM,GACV,IAAK5B,KAAK6B,MAAO,MAAO,GACxB,MAAMC,EAAc9B,KAAKG,KAAO,OAAS,QAEzC,MAAO,CACL,iBAAkB,iCAAiC2B,KAAe9B,KAAK6B,iBACvE,mBAAoB7B,KAAKG,KAAO,mCAAmCH,KAAK6B,SAAW,gC,CAIvF,MAAAE,GACE,OACEC,EAAA,OAAAC,IAAA,2CAAKhB,MAAM,wBACTe,EAAa,QAAAC,IAAA,6CACbD,EACE,OAAAC,IAAA,2CAAAC,KAAK,SACK,qBACE,aAAAlC,KAAKmC,OAAS,WAAWnC,KAAKmC,SAAWC,UACrDnB,MAAOjB,KAAKM,QAAQ,CAClBL,KAAMD,KAAKC,KACXC,QAASF,KAAKE,QACdG,SAAUL,KAAKK,SACfD,MAAOJ,KAAKI,QAEdiC,MACKC,OAAAC,OAAAD,OAAAC,OAAA,GAAAvC,KAAK4B,YACL5B,KAAKmB,cAGTnB,KAAKE,SAAW,QAAU8B,EAAA,QAAAC,IAAA,2CAAMO,KAAK,SAASxC,KAAKc,O","ignoreList":[]}