bromcom-ui-next 0.1.30 → 0.1.31

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (546) hide show
  1. package/dist/bromcom-ui/bcm-accordion-group.entry.esm.js.map +1 -1
  2. package/dist/bromcom-ui/bcm-accordion.entry.esm.js.map +1 -1
  3. package/dist/bromcom-ui/bcm-alert.entry.esm.js.map +1 -1
  4. package/dist/bromcom-ui/bcm-avatar.entry.esm.js.map +1 -1
  5. package/dist/bromcom-ui/bcm-badge.entry.esm.js.map +1 -1
  6. package/dist/bromcom-ui/bcm-basic-badge.entry.esm.js.map +1 -1
  7. package/dist/bromcom-ui/bcm-button-group.entry.esm.js.map +1 -1
  8. package/dist/bromcom-ui/bcm-button.entry.esm.js.map +1 -0
  9. package/dist/bromcom-ui/bcm-checkbox.entry.esm.js.map +1 -1
  10. package/dist/bromcom-ui/bcm-chip.entry.esm.js.map +1 -1
  11. package/dist/bromcom-ui/bcm-divider.entry.esm.js.map +1 -1
  12. package/dist/bromcom-ui/bcm-drawer.entry.esm.js.map +1 -0
  13. package/dist/bromcom-ui/bcm-dropdown-item.entry.esm.js.map +1 -1
  14. package/dist/bromcom-ui/bcm-dropdown.entry.esm.js.map +1 -1
  15. package/dist/bromcom-ui/bcm-file-upload.entry.esm.js.map +1 -0
  16. package/dist/bromcom-ui/bcm-input.entry.esm.js.map +1 -1
  17. package/dist/bromcom-ui/bcm-linked.entry.esm.js.map +1 -0
  18. package/dist/bromcom-ui/bcm-modal.entry.esm.js.map +1 -0
  19. package/dist/bromcom-ui/bcm-pop-confirm.entry.esm.js.map +1 -0
  20. package/dist/bromcom-ui/bcm-popover.entry.esm.js.map +1 -0
  21. package/dist/bromcom-ui/bcm-radio-group.entry.esm.js.map +1 -1
  22. package/dist/bromcom-ui/bcm-radio.entry.esm.js.map +1 -1
  23. package/dist/bromcom-ui/bcm-segment.bcm-segmented-picker.entry.esm.js.map +1 -0
  24. package/dist/bromcom-ui/bcm-shortcut.entry.esm.js.map +1 -1
  25. package/dist/bromcom-ui/bcm-switch.entry.esm.js.map +1 -1
  26. package/dist/bromcom-ui/bcm-tab.entry.esm.js.map +1 -0
  27. package/dist/bromcom-ui/bcm-tabs.entry.esm.js.map +1 -1
  28. package/dist/bromcom-ui/bcm-text.entry.esm.js.map +1 -1
  29. package/dist/bromcom-ui/bcm-textarea.entry.esm.js.map +1 -1
  30. package/dist/bromcom-ui/bcm-tooltip.entry.esm.js.map +1 -0
  31. package/dist/bromcom-ui/bromcom-ui.esm.js +1 -1
  32. package/dist/bromcom-ui/global/global.js +33 -30
  33. package/dist/bromcom-ui/p-010219cf.entry.js +2 -0
  34. package/dist/bromcom-ui/p-010219cf.entry.js.map +1 -0
  35. package/dist/bromcom-ui/p-01a4e00b.entry.js +2 -0
  36. package/dist/bromcom-ui/p-01a4e00b.entry.js.map +1 -0
  37. package/dist/bromcom-ui/p-14c63d61.entry.js +2 -0
  38. package/dist/bromcom-ui/p-14c63d61.entry.js.map +1 -0
  39. package/dist/bromcom-ui/p-20a94dec.entry.js +2 -0
  40. package/dist/bromcom-ui/p-20a94dec.entry.js.map +1 -0
  41. package/dist/bromcom-ui/p-398620c2.entry.js +2 -0
  42. package/dist/bromcom-ui/p-398620c2.entry.js.map +1 -0
  43. package/dist/bromcom-ui/p-3b898f90.entry.js +2 -0
  44. package/dist/bromcom-ui/p-3b898f90.entry.js.map +1 -0
  45. package/dist/bromcom-ui/p-43c85c84.entry.js +2 -0
  46. package/dist/bromcom-ui/p-43c85c84.entry.js.map +1 -0
  47. package/dist/bromcom-ui/p-4e6661a5.entry.js +2 -0
  48. package/dist/bromcom-ui/p-4e6661a5.entry.js.map +1 -0
  49. package/dist/bromcom-ui/p-52bb0cdc.entry.js +2 -0
  50. package/dist/bromcom-ui/p-52bb0cdc.entry.js.map +1 -0
  51. package/dist/bromcom-ui/p-61c1c1c8.entry.js +2 -0
  52. package/dist/bromcom-ui/p-61c1c1c8.entry.js.map +1 -0
  53. package/dist/bromcom-ui/p-82e4c5f2.entry.js +2 -0
  54. package/dist/bromcom-ui/p-82e4c5f2.entry.js.map +1 -0
  55. package/dist/bromcom-ui/p-86f85963.entry.js +2 -0
  56. package/dist/bromcom-ui/p-86f85963.entry.js.map +1 -0
  57. package/dist/bromcom-ui/p-9249c1d1.entry.js +2 -0
  58. package/dist/bromcom-ui/p-9249c1d1.entry.js.map +1 -0
  59. package/dist/bromcom-ui/p-B6Ppbs5O.js +3 -0
  60. package/dist/bromcom-ui/p-B6Ppbs5O.js.map +1 -0
  61. package/dist/bromcom-ui/p-DBDSgIvP.js +2 -0
  62. package/dist/bromcom-ui/p-DBDSgIvP.js.map +1 -0
  63. package/dist/bromcom-ui/p-DaE0ZLar.js +2 -0
  64. package/dist/bromcom-ui/p-DaE0ZLar.js.map +1 -0
  65. package/dist/bromcom-ui/p-a25d1cef.entry.js +2 -0
  66. package/dist/bromcom-ui/p-a25d1cef.entry.js.map +1 -0
  67. package/dist/bromcom-ui/p-a4cb2e79.entry.js +2 -0
  68. package/dist/bromcom-ui/p-a4cb2e79.entry.js.map +1 -0
  69. package/dist/bromcom-ui/p-a68925b4.entry.js +2 -0
  70. package/dist/bromcom-ui/p-a68925b4.entry.js.map +1 -0
  71. package/dist/bromcom-ui/p-a750186c.entry.js +2 -0
  72. package/dist/bromcom-ui/p-a750186c.entry.js.map +1 -0
  73. package/dist/bromcom-ui/p-ac768b56.entry.js +2 -0
  74. package/dist/bromcom-ui/p-ac768b56.entry.js.map +1 -0
  75. package/dist/bromcom-ui/p-b0b193e6.entry.js +2 -0
  76. package/dist/bromcom-ui/p-b0b193e6.entry.js.map +1 -0
  77. package/dist/bromcom-ui/p-bf4409ca.entry.js +2 -0
  78. package/dist/bromcom-ui/p-bf4409ca.entry.js.map +1 -0
  79. package/dist/bromcom-ui/p-c57fb29b.entry.js +2 -0
  80. package/dist/bromcom-ui/p-c57fb29b.entry.js.map +1 -0
  81. package/dist/bromcom-ui/{p-1507908f.entry.js → p-ccc310aa.entry.js} +2 -2
  82. package/dist/bromcom-ui/p-ccc310aa.entry.js.map +1 -0
  83. package/dist/bromcom-ui/p-d4ee962d.entry.js +2 -0
  84. package/dist/bromcom-ui/p-d4ee962d.entry.js.map +1 -0
  85. package/dist/bromcom-ui/p-e25a2f7a.entry.js +2 -0
  86. package/dist/bromcom-ui/p-e25a2f7a.entry.js.map +1 -0
  87. package/dist/bromcom-ui/p-e5b0b2ad.entry.js +2 -0
  88. package/dist/bromcom-ui/p-e5b0b2ad.entry.js.map +1 -0
  89. package/dist/bromcom-ui/p-e70d784d.entry.js +2 -0
  90. package/dist/bromcom-ui/p-e70d784d.entry.js.map +1 -0
  91. package/dist/bromcom-ui/p-e9fa3a22.entry.js +2 -0
  92. package/dist/bromcom-ui/p-e9fa3a22.entry.js.map +1 -0
  93. package/dist/bromcom-ui/p-ef281184.entry.js +2 -0
  94. package/dist/bromcom-ui/p-ef281184.entry.js.map +1 -0
  95. package/dist/bromcom-ui/{p-496014ca.entry.js → p-fb6f616c.entry.js} +2 -2
  96. package/dist/bromcom-ui/p-fb6f616c.entry.js.map +1 -0
  97. package/dist/bromcom-ui/p-fd31c70c.entry.js +2 -0
  98. package/dist/bromcom-ui/p-fd31c70c.entry.js.map +1 -0
  99. package/dist/bromcom-ui/p-nf_HKsGq.js +2 -0
  100. package/dist/bromcom-ui/{p-CUvT12BL.js.map → p-nf_HKsGq.js.map} +1 -1
  101. package/dist/cjs/base-choice-control-EmA4JRjR.js +54 -0
  102. package/dist/cjs/base-choice-control-EmA4JRjR.js.map +1 -0
  103. package/dist/cjs/bcm-accordion-group.cjs.entry.js +20 -18
  104. package/dist/cjs/bcm-accordion-group.entry.cjs.js.map +1 -1
  105. package/dist/cjs/bcm-accordion.cjs.entry.js +73 -56
  106. package/dist/cjs/bcm-accordion.entry.cjs.js.map +1 -1
  107. package/dist/cjs/bcm-alert.cjs.entry.js +21 -21
  108. package/dist/cjs/bcm-alert.entry.cjs.js.map +1 -1
  109. package/dist/cjs/bcm-avatar.cjs.entry.js +22 -12
  110. package/dist/cjs/bcm-avatar.entry.cjs.js.map +1 -1
  111. package/dist/cjs/bcm-badge.cjs.entry.js +114 -82
  112. package/dist/cjs/bcm-badge.entry.cjs.js.map +1 -1
  113. package/dist/cjs/bcm-basic-badge.cjs.entry.js +73 -59
  114. package/dist/cjs/bcm-basic-badge.entry.cjs.js.map +1 -1
  115. package/dist/cjs/bcm-button-group.cjs.entry.js +36 -24
  116. package/dist/cjs/bcm-button-group.entry.cjs.js.map +1 -1
  117. package/dist/cjs/bcm-button.cjs.entry.js +338 -0
  118. package/dist/cjs/bcm-button.entry.cjs.js.map +1 -0
  119. package/dist/cjs/bcm-checkbox.cjs.entry.js +284 -174
  120. package/dist/cjs/bcm-checkbox.entry.cjs.js.map +1 -1
  121. package/dist/cjs/bcm-chip.cjs.entry.js +38 -35
  122. package/dist/cjs/bcm-chip.entry.cjs.js.map +1 -1
  123. package/dist/cjs/bcm-divider.cjs.entry.js +55 -55
  124. package/dist/cjs/bcm-divider.entry.cjs.js.map +1 -1
  125. package/dist/cjs/bcm-drawer.cjs.entry.js +332 -0
  126. package/dist/cjs/bcm-drawer.entry.cjs.js.map +1 -0
  127. package/dist/cjs/bcm-dropdown-item.cjs.entry.js +36 -33
  128. package/dist/cjs/bcm-dropdown-item.entry.cjs.js.map +1 -1
  129. package/dist/cjs/bcm-dropdown.cjs.entry.js +18 -17
  130. package/dist/cjs/bcm-dropdown.entry.cjs.js.map +1 -1
  131. package/dist/cjs/bcm-file-upload.cjs.entry.js +552 -0
  132. package/dist/cjs/bcm-file-upload.entry.cjs.js.map +1 -0
  133. package/dist/cjs/bcm-input.cjs.entry.js +250 -158
  134. package/dist/cjs/bcm-input.entry.cjs.js.map +1 -1
  135. package/dist/cjs/bcm-linked.cjs.entry.js +452 -0
  136. package/dist/cjs/bcm-linked.entry.cjs.js.map +1 -0
  137. package/dist/cjs/bcm-modal.cjs.entry.js +360 -0
  138. package/dist/cjs/bcm-modal.entry.cjs.js.map +1 -0
  139. package/dist/cjs/bcm-pop-confirm.cjs.entry.js +381 -0
  140. package/dist/cjs/bcm-pop-confirm.entry.cjs.js.map +1 -0
  141. package/dist/cjs/bcm-popover.cjs.entry.js +451 -0
  142. package/dist/cjs/bcm-popover.entry.cjs.js.map +1 -0
  143. package/dist/cjs/bcm-radio-group.cjs.entry.js +103 -80
  144. package/dist/cjs/bcm-radio-group.entry.cjs.js.map +1 -1
  145. package/dist/cjs/bcm-radio.cjs.entry.js +239 -106
  146. package/dist/cjs/bcm-radio.entry.cjs.js.map +1 -1
  147. package/dist/cjs/bcm-segment.bcm-segmented-picker.entry.cjs.js.map +1 -0
  148. package/dist/cjs/bcm-segment_2.cjs.entry.js +335 -0
  149. package/dist/cjs/bcm-shortcut.cjs.entry.js +5 -4
  150. package/dist/cjs/bcm-shortcut.entry.cjs.js.map +1 -1
  151. package/dist/cjs/bcm-switch.cjs.entry.js +281 -148
  152. package/dist/cjs/bcm-switch.entry.cjs.js.map +1 -1
  153. package/dist/cjs/bcm-tab.cjs.entry.js +44 -0
  154. package/dist/cjs/bcm-tab.entry.cjs.js.map +1 -0
  155. package/dist/cjs/bcm-tabs.cjs.entry.js +191 -237
  156. package/dist/cjs/bcm-tabs.entry.cjs.js.map +1 -1
  157. package/dist/cjs/bcm-text.cjs.entry.js +86 -85
  158. package/dist/cjs/bcm-text.entry.cjs.js.map +1 -1
  159. package/dist/cjs/bcm-textarea.cjs.entry.js +224 -154
  160. package/dist/cjs/bcm-textarea.entry.cjs.js.map +1 -1
  161. package/dist/cjs/bcm-tooltip.cjs.entry.js +414 -0
  162. package/dist/cjs/bcm-tooltip.entry.cjs.js.map +1 -0
  163. package/dist/cjs/bromcom-ui.cjs.js +2 -2
  164. package/dist/cjs/floating-ui.dom-S9nP6zZt.js +1622 -0
  165. package/dist/{bromcom-ui/floating-ui.dom-ltNPqX34.js.map → cjs/floating-ui.dom-S9nP6zZt.js.map} +1 -1
  166. package/dist/cjs/{index-CmYzUr-k.js → index-1Qal-onT.js} +111 -33
  167. package/dist/cjs/index-1Qal-onT.js.map +1 -0
  168. package/dist/cjs/loader.cjs.js +2 -2
  169. package/dist/cjs/{validation-messages-BjfpSEWk.js → validation-messages-DieKlSG4.js} +6 -7
  170. package/dist/{esm/validation-messages-CUvT12BL.js.map → cjs/validation-messages-DieKlSG4.js.map} +1 -1
  171. package/dist/collection/collection-manifest.json +4 -5
  172. package/dist/collection/components/_shared/form/base-choice-control.js +90 -0
  173. package/dist/collection/components/_shared/form/base-choice-control.js.map +1 -0
  174. package/dist/collection/components/_shared/form/base-form-control.js +115 -0
  175. package/dist/collection/components/_shared/form/base-form-control.js.map +1 -0
  176. package/dist/collection/components/accordion/accordion.component.js +72 -55
  177. package/dist/collection/components/accordion/accordion.component.js.map +1 -1
  178. package/dist/collection/components/accordion/accordion.css +1 -1
  179. package/dist/collection/components/accordion-group/accordion-group.component.js +20 -18
  180. package/dist/collection/components/accordion-group/accordion-group.component.js.map +1 -1
  181. package/dist/collection/components/alert/alert.component.js +19 -21
  182. package/dist/collection/components/alert/alert.component.js.map +1 -1
  183. package/dist/collection/components/alert/alert.css +1 -1
  184. package/dist/collection/components/avatar/avatar.component.js +20 -12
  185. package/dist/collection/components/avatar/avatar.component.js.map +1 -1
  186. package/dist/collection/components/avatar/avatar.css +1 -1
  187. package/dist/collection/components/badge/badge.component.js +111 -81
  188. package/dist/collection/components/badge/badge.component.js.map +1 -1
  189. package/dist/collection/components/badge/badge.css +1 -1
  190. package/dist/collection/components/basic-badge/basic-badge.component.js +70 -58
  191. package/dist/collection/components/basic-badge/basic-badge.component.js.map +1 -1
  192. package/dist/collection/components/basic-badge/basic-badge.css +1 -1
  193. package/dist/collection/components/button/button.component.js +105 -84
  194. package/dist/collection/components/button/button.component.js.map +1 -1
  195. package/dist/collection/components/button/button.css +1 -1
  196. package/dist/collection/components/button-group/button-group.component.js +34 -23
  197. package/dist/collection/components/button-group/button-group.component.js.map +1 -1
  198. package/dist/collection/components/button-group/button-group.css +1 -1
  199. package/dist/collection/components/checkbox/checkbox.component.js +355 -236
  200. package/dist/collection/components/checkbox/checkbox.component.js.map +1 -1
  201. package/dist/collection/components/checkbox/checkbox.css +1 -1
  202. package/dist/collection/components/chip/chip.component.js +35 -34
  203. package/dist/collection/components/chip/chip.component.js.map +1 -1
  204. package/dist/collection/components/chip/chip.css +1 -1
  205. package/dist/collection/components/divider/divider.component.js +53 -55
  206. package/dist/collection/components/divider/divider.component.js.map +1 -1
  207. package/dist/collection/components/drawer/drawer.component.js +168 -144
  208. package/dist/collection/components/drawer/drawer.component.js.map +1 -1
  209. package/dist/collection/components/dropdown/dropdown.component.js +16 -16
  210. package/dist/collection/components/dropdown/dropdown.component.js.map +1 -1
  211. package/dist/collection/components/dropdown/dropdown.css +1 -1
  212. package/dist/collection/components/dropdown-item/dropdown-item.component.js +34 -32
  213. package/dist/collection/components/dropdown-item/dropdown-item.component.js.map +1 -1
  214. package/dist/collection/components/dropdown-item/dropdown-item.css +1 -1
  215. package/dist/collection/components/input/input.component.js +241 -155
  216. package/dist/collection/components/input/input.component.js.map +1 -1
  217. package/dist/collection/components/linked/linked.component.js +160 -138
  218. package/dist/collection/components/linked/linked.component.js.map +1 -1
  219. package/dist/collection/components/linked/linked.css +1 -1
  220. package/dist/collection/components/modal/modal.component.js +180 -156
  221. package/dist/collection/components/modal/modal.component.js.map +1 -1
  222. package/dist/collection/components/pop-confirm/pop-confirm.component.js +190 -159
  223. package/dist/collection/components/pop-confirm/pop-confirm.component.js.map +1 -1
  224. package/dist/collection/components/pop-confirm/pop-confirm.css +1 -1
  225. package/dist/collection/components/popover/popover.component.js +240 -212
  226. package/dist/collection/components/popover/popover.component.js.map +1 -1
  227. package/dist/collection/components/popover/popover.css +1 -1
  228. package/dist/collection/components/radio/radio.component.js +282 -106
  229. package/dist/collection/components/radio/radio.component.js.map +1 -1
  230. package/dist/collection/components/radio-group/radio-group.component.js +102 -80
  231. package/dist/collection/components/radio-group/radio-group.component.js.map +1 -1
  232. package/dist/collection/components/segmented-picker/segment.component.js +228 -0
  233. package/dist/collection/components/segmented-picker/segment.component.js.map +1 -0
  234. package/dist/collection/components/segmented-picker/segment.css +1 -0
  235. package/dist/collection/components/segmented-picker/segmented-picker.component.js +354 -139
  236. package/dist/collection/components/segmented-picker/segmented-picker.component.js.map +1 -1
  237. package/dist/collection/components/segmented-picker/segmented-picker.css +1 -1
  238. package/dist/collection/components/shortcut/shortcut.js +4 -5
  239. package/dist/collection/components/shortcut/shortcut.js.map +1 -1
  240. package/dist/collection/components/switch/switch.component.js +350 -280
  241. package/dist/collection/components/switch/switch.component.js.map +1 -1
  242. package/dist/collection/components/switch/switch.css +1 -1
  243. package/dist/collection/components/tabs/bcm-tab.css +1 -0
  244. package/dist/collection/components/tabs/bcm-tabs.css +1 -1
  245. package/dist/collection/components/tabs/tab.component.js +169 -0
  246. package/dist/collection/components/tabs/tab.component.js.map +1 -0
  247. package/dist/collection/components/tabs/tabs.component.js +221 -352
  248. package/dist/collection/components/tabs/tabs.component.js.map +1 -1
  249. package/dist/collection/components/text/text.component.js +84 -85
  250. package/dist/collection/components/text/text.component.js.map +1 -1
  251. package/dist/collection/components/text/text.css +1 -1
  252. package/dist/collection/components/textarea/textarea.component.js +216 -153
  253. package/dist/collection/components/textarea/textarea.component.js.map +1 -1
  254. package/dist/collection/components/tooltip/tooltip.component.js +164 -154
  255. package/dist/collection/components/tooltip/tooltip.component.js.map +1 -1
  256. package/dist/collection/components/upload/file-upload.component.js +905 -0
  257. package/dist/collection/components/upload/file-upload.component.js.map +1 -0
  258. package/dist/collection/components/upload/file-upload.css +1 -0
  259. package/dist/collection/global/global.js +33 -30
  260. package/dist/collection/utils/i18n.js +3 -4
  261. package/dist/collection/utils/i18n.js.map +1 -1
  262. package/dist/collection/utils/slot/check-slot-content.js +1 -2
  263. package/dist/collection/utils/slot/check-slot-content.js.map +1 -1
  264. package/dist/collection/utils/validation-messages.js +1 -1
  265. package/dist/collection/utils/validation-messages.js.map +1 -1
  266. package/dist/components/bcm-accordion-group.js +19 -17
  267. package/dist/components/bcm-accordion-group.js.map +1 -1
  268. package/dist/components/bcm-accordion.js +72 -55
  269. package/dist/components/bcm-accordion.js.map +1 -1
  270. package/dist/components/bcm-alert.js +1 -114
  271. package/dist/components/bcm-alert.js.map +1 -1
  272. package/dist/components/bcm-avatar.js +22 -12
  273. package/dist/components/bcm-avatar.js.map +1 -1
  274. package/dist/components/bcm-badge.js +1 -1
  275. package/dist/components/bcm-basic-badge.js +72 -58
  276. package/dist/components/bcm-basic-badge.js.map +1 -1
  277. package/dist/components/bcm-button-group.js +35 -23
  278. package/dist/components/bcm-button-group.js.map +1 -1
  279. package/dist/components/bcm-button.js +1 -1
  280. package/dist/components/bcm-checkbox.js +296 -184
  281. package/dist/components/bcm-checkbox.js.map +1 -1
  282. package/dist/components/bcm-chip.js +37 -34
  283. package/dist/components/bcm-chip.js.map +1 -1
  284. package/dist/components/bcm-divider.js +54 -54
  285. package/dist/components/bcm-divider.js.map +1 -1
  286. package/dist/components/bcm-drawer.js +169 -144
  287. package/dist/components/bcm-drawer.js.map +1 -1
  288. package/dist/components/bcm-dropdown-item.js +35 -32
  289. package/dist/components/bcm-dropdown-item.js.map +1 -1
  290. package/dist/components/bcm-dropdown.js +19 -18
  291. package/dist/components/bcm-dropdown.js.map +1 -1
  292. package/dist/components/{bcm-tabs-content.d.ts → bcm-file-upload.d.ts} +4 -4
  293. package/dist/components/bcm-file-upload.js +593 -0
  294. package/dist/components/bcm-file-upload.js.map +1 -0
  295. package/dist/components/bcm-input.js +244 -158
  296. package/dist/components/bcm-input.js.map +1 -1
  297. package/dist/components/bcm-linked.js +1 -1
  298. package/dist/components/bcm-modal.js +181 -156
  299. package/dist/components/bcm-modal.js.map +1 -1
  300. package/dist/components/bcm-pop-confirm.js +192 -160
  301. package/dist/components/bcm-pop-confirm.js.map +1 -1
  302. package/dist/components/bcm-popover.js +242 -213
  303. package/dist/components/bcm-popover.js.map +1 -1
  304. package/dist/components/bcm-radio-group.js +102 -79
  305. package/dist/components/bcm-radio-group.js.map +1 -1
  306. package/dist/components/bcm-radio.js +241 -108
  307. package/dist/components/bcm-radio.js.map +1 -1
  308. package/dist/components/{bcm-tabs-list.d.ts → bcm-segment.d.ts} +4 -4
  309. package/dist/components/bcm-segment.js +110 -0
  310. package/dist/components/bcm-segment.js.map +1 -0
  311. package/dist/components/bcm-segmented-picker.js +234 -115
  312. package/dist/components/bcm-segmented-picker.js.map +1 -1
  313. package/dist/components/bcm-shortcut.js +4 -3
  314. package/dist/components/bcm-shortcut.js.map +1 -1
  315. package/dist/components/bcm-switch.js +292 -156
  316. package/dist/components/bcm-switch.js.map +1 -1
  317. package/dist/components/{bcm-tabs-trigger.d.ts → bcm-tab.d.ts} +4 -4
  318. package/dist/components/bcm-tab.js +71 -0
  319. package/dist/components/bcm-tab.js.map +1 -0
  320. package/dist/components/bcm-tabs.js +196 -247
  321. package/dist/components/bcm-tabs.js.map +1 -1
  322. package/dist/components/bcm-text.js +85 -84
  323. package/dist/components/bcm-text.js.map +1 -1
  324. package/dist/components/bcm-textarea.js +218 -154
  325. package/dist/components/bcm-textarea.js.map +1 -1
  326. package/dist/components/bcm-tooltip.js +164 -153
  327. package/dist/components/bcm-tooltip.js.map +1 -1
  328. package/dist/components/index.js +105 -32
  329. package/dist/components/index.js.map +1 -1
  330. package/dist/components/p-5_TgtzQU.js +119 -0
  331. package/dist/components/p-5_TgtzQU.js.map +1 -0
  332. package/dist/components/p-RlBWOSgL.js +179 -0
  333. package/dist/components/p-RlBWOSgL.js.map +1 -0
  334. package/dist/components/p-SERXqWcS.js +51 -0
  335. package/dist/components/p-SERXqWcS.js.map +1 -0
  336. package/dist/components/{p-CUvT12BL.js → p-nf_HKsGq.js} +6 -7
  337. package/dist/components/p-nf_HKsGq.js.map +1 -0
  338. package/dist/components/{p-CsIBm0J5.js → p-xQIzBLsS.js} +108 -85
  339. package/dist/components/p-xQIzBLsS.js.map +1 -0
  340. package/dist/components/{p-6VLsKZvR.js → p-z9ESseGb.js} +163 -140
  341. package/dist/components/p-z9ESseGb.js.map +1 -0
  342. package/dist/esm/base-choice-control-CKR8UdZ6.js +52 -0
  343. package/dist/esm/base-choice-control-CKR8UdZ6.js.map +1 -0
  344. package/dist/esm/bcm-accordion-group.entry.js +20 -18
  345. package/dist/esm/bcm-accordion-group.entry.js.map +1 -1
  346. package/dist/esm/bcm-accordion.entry.js +73 -56
  347. package/dist/esm/bcm-accordion.entry.js.map +1 -1
  348. package/dist/esm/bcm-alert.entry.js +21 -21
  349. package/dist/esm/bcm-alert.entry.js.map +1 -1
  350. package/dist/esm/bcm-avatar.entry.js +22 -12
  351. package/dist/esm/bcm-avatar.entry.js.map +1 -1
  352. package/dist/esm/bcm-badge.entry.js +114 -82
  353. package/dist/esm/bcm-badge.entry.js.map +1 -1
  354. package/dist/esm/bcm-basic-badge.entry.js +73 -59
  355. package/dist/esm/bcm-basic-badge.entry.js.map +1 -1
  356. package/dist/esm/bcm-button-group.entry.js +36 -24
  357. package/dist/esm/bcm-button-group.entry.js.map +1 -1
  358. package/dist/esm/bcm-button.entry.js +336 -0
  359. package/dist/esm/bcm-button.entry.js.map +1 -0
  360. package/dist/esm/bcm-checkbox.entry.js +284 -174
  361. package/dist/esm/bcm-checkbox.entry.js.map +1 -1
  362. package/dist/esm/bcm-chip.entry.js +38 -35
  363. package/dist/esm/bcm-chip.entry.js.map +1 -1
  364. package/dist/esm/bcm-divider.entry.js +55 -55
  365. package/dist/esm/bcm-divider.entry.js.map +1 -1
  366. package/dist/esm/bcm-drawer.entry.js +330 -0
  367. package/dist/esm/bcm-drawer.entry.js.map +1 -0
  368. package/dist/esm/bcm-dropdown-item.entry.js +36 -33
  369. package/dist/esm/bcm-dropdown-item.entry.js.map +1 -1
  370. package/dist/esm/bcm-dropdown.entry.js +18 -17
  371. package/dist/esm/bcm-dropdown.entry.js.map +1 -1
  372. package/dist/esm/bcm-file-upload.entry.js +550 -0
  373. package/dist/esm/bcm-file-upload.entry.js.map +1 -0
  374. package/dist/esm/bcm-input.entry.js +250 -158
  375. package/dist/esm/bcm-input.entry.js.map +1 -1
  376. package/dist/esm/bcm-linked.entry.js +450 -0
  377. package/dist/esm/bcm-linked.entry.js.map +1 -0
  378. package/dist/esm/bcm-modal.entry.js +358 -0
  379. package/dist/esm/bcm-modal.entry.js.map +1 -0
  380. package/dist/esm/bcm-pop-confirm.entry.js +379 -0
  381. package/dist/esm/bcm-pop-confirm.entry.js.map +1 -0
  382. package/dist/esm/bcm-popover.entry.js +449 -0
  383. package/dist/esm/bcm-popover.entry.js.map +1 -0
  384. package/dist/esm/bcm-radio-group.entry.js +103 -80
  385. package/dist/esm/bcm-radio-group.entry.js.map +1 -1
  386. package/dist/esm/bcm-radio.entry.js +239 -106
  387. package/dist/esm/bcm-radio.entry.js.map +1 -1
  388. package/dist/esm/bcm-segment.bcm-segmented-picker.entry.js.map +1 -0
  389. package/dist/esm/bcm-segment_2.entry.js +332 -0
  390. package/dist/esm/bcm-shortcut.entry.js +5 -4
  391. package/dist/esm/bcm-shortcut.entry.js.map +1 -1
  392. package/dist/esm/bcm-switch.entry.js +281 -148
  393. package/dist/esm/bcm-switch.entry.js.map +1 -1
  394. package/dist/esm/bcm-tab.entry.js +42 -0
  395. package/dist/esm/bcm-tab.entry.js.map +1 -0
  396. package/dist/esm/bcm-tabs.entry.js +191 -237
  397. package/dist/esm/bcm-tabs.entry.js.map +1 -1
  398. package/dist/esm/bcm-text.entry.js +86 -85
  399. package/dist/esm/bcm-text.entry.js.map +1 -1
  400. package/dist/esm/bcm-textarea.entry.js +224 -154
  401. package/dist/esm/bcm-textarea.entry.js.map +1 -1
  402. package/dist/esm/bcm-tooltip.entry.js +412 -0
  403. package/dist/esm/bcm-tooltip.entry.js.map +1 -0
  404. package/dist/esm/bromcom-ui.js +3 -3
  405. package/dist/esm/floating-ui.dom-DBDSgIvP.js +1615 -0
  406. package/dist/esm/floating-ui.dom-DBDSgIvP.js.map +1 -0
  407. package/dist/esm/{index-CRwAh9Np.js → index-B6Ppbs5O.js} +111 -34
  408. package/dist/esm/index-B6Ppbs5O.js.map +1 -0
  409. package/dist/esm/loader.js +3 -3
  410. package/dist/esm/{validation-messages-CUvT12BL.js → validation-messages-nf_HKsGq.js} +6 -7
  411. package/dist/{cjs/validation-messages-BjfpSEWk.js.map → esm/validation-messages-nf_HKsGq.js.map} +1 -1
  412. package/dist/types/components/_shared/form/base-choice-control.d.ts +15 -0
  413. package/dist/types/components/_shared/form/base-form-control.d.ts +11 -0
  414. package/dist/types/components/checkbox/checkbox.component.d.ts +89 -71
  415. package/dist/types/components/input/input.component.d.ts +5 -0
  416. package/dist/types/components/radio/radio.component.d.ts +21 -0
  417. package/dist/types/components/segmented-picker/segment.component.d.ts +42 -0
  418. package/dist/types/components/segmented-picker/segmented-picker.component.d.ts +91 -24
  419. package/dist/types/components/switch/switch.component.d.ts +83 -43
  420. package/dist/types/components/tabs/tab.component.d.ts +33 -0
  421. package/dist/types/components/tabs/tabs.component.d.ts +51 -64
  422. package/dist/types/components/textarea/textarea.component.d.ts +5 -0
  423. package/dist/types/components/upload/file-upload.component.d.ts +107 -0
  424. package/dist/types/components.d.ts +830 -382
  425. package/package.json +2 -2
  426. package/dist/bromcom-ui/_commonjsHelpers-CvGrISen.js.map +0 -1
  427. package/dist/bromcom-ui/bcm-button.bcm-drawer.bcm-linked.bcm-modal.bcm-pop-confirm.bcm-popover.bcm-tooltip.entry.esm.js.map +0 -1
  428. package/dist/bromcom-ui/bcm-segmented-picker-option.entry.esm.js.map +0 -1
  429. package/dist/bromcom-ui/bcm-segmented-picker.entry.esm.js.map +0 -1
  430. package/dist/bromcom-ui/bcm-tabs-content.entry.esm.js.map +0 -1
  431. package/dist/bromcom-ui/bcm-tabs-list.entry.esm.js.map +0 -1
  432. package/dist/bromcom-ui/bcm-tabs-trigger.entry.esm.js.map +0 -1
  433. package/dist/bromcom-ui/generate-id-Crb5QsB-.js.map +0 -1
  434. package/dist/bromcom-ui/index-40rmUZjU.js.map +0 -1
  435. package/dist/bromcom-ui/index-BCaJmHBB.js.map +0 -1
  436. package/dist/bromcom-ui/p-0c7c6896.entry.js +0 -2
  437. package/dist/bromcom-ui/p-0c7c6896.entry.js.map +0 -1
  438. package/dist/bromcom-ui/p-11d0e649.entry.js +0 -2
  439. package/dist/bromcom-ui/p-11d0e649.entry.js.map +0 -1
  440. package/dist/bromcom-ui/p-12f38632.entry.js +0 -2
  441. package/dist/bromcom-ui/p-12f38632.entry.js.map +0 -1
  442. package/dist/bromcom-ui/p-13cbd1f5.entry.js +0 -2
  443. package/dist/bromcom-ui/p-13cbd1f5.entry.js.map +0 -1
  444. package/dist/bromcom-ui/p-1507908f.entry.js.map +0 -1
  445. package/dist/bromcom-ui/p-1ce9913f.entry.js +0 -2
  446. package/dist/bromcom-ui/p-1ce9913f.entry.js.map +0 -1
  447. package/dist/bromcom-ui/p-206d767e.entry.js +0 -2
  448. package/dist/bromcom-ui/p-206d767e.entry.js.map +0 -1
  449. package/dist/bromcom-ui/p-3cf7a7f4.entry.js +0 -2
  450. package/dist/bromcom-ui/p-3cf7a7f4.entry.js.map +0 -1
  451. package/dist/bromcom-ui/p-4505feba.entry.js +0 -2
  452. package/dist/bromcom-ui/p-4505feba.entry.js.map +0 -1
  453. package/dist/bromcom-ui/p-496014ca.entry.js.map +0 -1
  454. package/dist/bromcom-ui/p-4a932cd3.entry.js +0 -2
  455. package/dist/bromcom-ui/p-4a932cd3.entry.js.map +0 -1
  456. package/dist/bromcom-ui/p-4e554b8d.entry.js +0 -2
  457. package/dist/bromcom-ui/p-4e554b8d.entry.js.map +0 -1
  458. package/dist/bromcom-ui/p-57c4c4c4.entry.js +0 -2
  459. package/dist/bromcom-ui/p-57c4c4c4.entry.js.map +0 -1
  460. package/dist/bromcom-ui/p-61293ab2.entry.js +0 -2
  461. package/dist/bromcom-ui/p-61293ab2.entry.js.map +0 -1
  462. package/dist/bromcom-ui/p-61789456.entry.js +0 -2
  463. package/dist/bromcom-ui/p-61789456.entry.js.map +0 -1
  464. package/dist/bromcom-ui/p-65d0f188.entry.js +0 -2
  465. package/dist/bromcom-ui/p-65d0f188.entry.js.map +0 -1
  466. package/dist/bromcom-ui/p-83f707dc.entry.js +0 -2
  467. package/dist/bromcom-ui/p-83f707dc.entry.js.map +0 -1
  468. package/dist/bromcom-ui/p-8ba02e7e.entry.js +0 -2
  469. package/dist/bromcom-ui/p-8ba02e7e.entry.js.map +0 -1
  470. package/dist/bromcom-ui/p-9e9bf32e.entry.js +0 -2
  471. package/dist/bromcom-ui/p-9e9bf32e.entry.js.map +0 -1
  472. package/dist/bromcom-ui/p-CRwAh9Np.js +0 -3
  473. package/dist/bromcom-ui/p-CRwAh9Np.js.map +0 -1
  474. package/dist/bromcom-ui/p-CUvT12BL.js +0 -2
  475. package/dist/bromcom-ui/p-c87a6acf.entry.js +0 -2
  476. package/dist/bromcom-ui/p-c87a6acf.entry.js.map +0 -1
  477. package/dist/bromcom-ui/p-e0e235a8.entry.js +0 -2
  478. package/dist/bromcom-ui/p-e0e235a8.entry.js.map +0 -1
  479. package/dist/bromcom-ui/p-e1ce8b55.entry.js +0 -2
  480. package/dist/bromcom-ui/p-e1ce8b55.entry.js.map +0 -1
  481. package/dist/bromcom-ui/p-e4dddb0b.entry.js +0 -2
  482. package/dist/bromcom-ui/p-e4dddb0b.entry.js.map +0 -1
  483. package/dist/bromcom-ui/p-f9426924.entry.js +0 -2
  484. package/dist/bromcom-ui/p-f9426924.entry.js.map +0 -1
  485. package/dist/bromcom-ui/p-faa0e62c.entry.js +0 -2
  486. package/dist/bromcom-ui/p-faa0e62c.entry.js.map +0 -1
  487. package/dist/bromcom-ui/p-fcb4399f.entry.js +0 -2
  488. package/dist/bromcom-ui/p-fcb4399f.entry.js.map +0 -1
  489. package/dist/bromcom-ui/tv-SlGJ5EfR.js.map +0 -1
  490. package/dist/bromcom-ui/validation-messages-CUvT12BL.js.map +0 -1
  491. package/dist/cjs/bcm-button.bcm-drawer.bcm-linked.bcm-modal.bcm-pop-confirm.bcm-popover.bcm-tooltip.entry.cjs.js.map +0 -1
  492. package/dist/cjs/bcm-button_7.cjs.entry.js +0 -4131
  493. package/dist/cjs/bcm-segmented-picker-option.cjs.entry.js +0 -105
  494. package/dist/cjs/bcm-segmented-picker-option.entry.cjs.js.map +0 -1
  495. package/dist/cjs/bcm-segmented-picker.cjs.entry.js +0 -142
  496. package/dist/cjs/bcm-segmented-picker.entry.cjs.js.map +0 -1
  497. package/dist/cjs/bcm-tabs-content.cjs.entry.js +0 -18
  498. package/dist/cjs/bcm-tabs-content.entry.cjs.js.map +0 -1
  499. package/dist/cjs/bcm-tabs-list.cjs.entry.js +0 -82
  500. package/dist/cjs/bcm-tabs-list.entry.cjs.js.map +0 -1
  501. package/dist/cjs/bcm-tabs-trigger.cjs.entry.js +0 -120
  502. package/dist/cjs/bcm-tabs-trigger.entry.cjs.js.map +0 -1
  503. package/dist/cjs/index-CmYzUr-k.js.map +0 -1
  504. package/dist/collection/components/segmented-picker/segmented-picker-option.component.js +0 -253
  505. package/dist/collection/components/segmented-picker/segmented-picker-option.component.js.map +0 -1
  506. package/dist/collection/components/segmented-picker/segmented-picker-option.css +0 -1
  507. package/dist/collection/components/tabs/tabs-content.component.js +0 -46
  508. package/dist/collection/components/tabs/tabs-content.component.js.map +0 -1
  509. package/dist/collection/components/tabs/tabs-content.css +0 -1
  510. package/dist/collection/components/tabs/tabs-list.component.js +0 -133
  511. package/dist/collection/components/tabs/tabs-list.component.js.map +0 -1
  512. package/dist/collection/components/tabs/tabs-list.css +0 -1
  513. package/dist/collection/components/tabs/tabs-trigger.component.js +0 -267
  514. package/dist/collection/components/tabs/tabs-trigger.component.js.map +0 -1
  515. package/dist/collection/components/tabs/tabs-trigger.css +0 -1
  516. package/dist/components/bcm-segmented-picker-option.d.ts +0 -11
  517. package/dist/components/bcm-segmented-picker-option.js +0 -133
  518. package/dist/components/bcm-segmented-picker-option.js.map +0 -1
  519. package/dist/components/bcm-tabs-content.js +0 -41
  520. package/dist/components/bcm-tabs-content.js.map +0 -1
  521. package/dist/components/bcm-tabs-list.js +0 -106
  522. package/dist/components/bcm-tabs-list.js.map +0 -1
  523. package/dist/components/bcm-tabs-trigger.js +0 -148
  524. package/dist/components/bcm-tabs-trigger.js.map +0 -1
  525. package/dist/components/p-6VLsKZvR.js.map +0 -1
  526. package/dist/components/p-CUvT12BL.js.map +0 -1
  527. package/dist/components/p-CaemikSK.js +0 -147
  528. package/dist/components/p-CaemikSK.js.map +0 -1
  529. package/dist/components/p-CsIBm0J5.js.map +0 -1
  530. package/dist/esm/bcm-button.bcm-drawer.bcm-linked.bcm-modal.bcm-pop-confirm.bcm-popover.bcm-tooltip.entry.js.map +0 -1
  531. package/dist/esm/bcm-button_7.entry.js +0 -4123
  532. package/dist/esm/bcm-segmented-picker-option.entry.js +0 -103
  533. package/dist/esm/bcm-segmented-picker-option.entry.js.map +0 -1
  534. package/dist/esm/bcm-segmented-picker.entry.js +0 -140
  535. package/dist/esm/bcm-segmented-picker.entry.js.map +0 -1
  536. package/dist/esm/bcm-tabs-content.entry.js +0 -16
  537. package/dist/esm/bcm-tabs-content.entry.js.map +0 -1
  538. package/dist/esm/bcm-tabs-list.entry.js +0 -80
  539. package/dist/esm/bcm-tabs-list.entry.js.map +0 -1
  540. package/dist/esm/bcm-tabs-trigger.entry.js +0 -118
  541. package/dist/esm/bcm-tabs-trigger.entry.js.map +0 -1
  542. package/dist/esm/index-CRwAh9Np.js.map +0 -1
  543. package/dist/types/components/segmented-picker/segmented-picker-option.component.d.ts +0 -30
  544. package/dist/types/components/tabs/tabs-content.component.d.ts +0 -13
  545. package/dist/types/components/tabs/tabs-list.component.d.ts +0 -20
  546. package/dist/types/components/tabs/tabs-trigger.component.d.ts +0 -49
@@ -11,159 +11,79 @@ const BcmTooltip$1 = /*@__PURE__*/ proxyCustomElement(class BcmTooltip extends H
11
11
  this.__registerHost();
12
12
  }
13
13
  this.__attachShadow();
14
- this.mouseX = 0;
15
- this.mouseY = 0;
16
- /**
17
- * How the tooltip is triggered
18
- * - 'hover': Shows on mouse enter, hides on mouse leave
19
- * - 'click': Toggles on click, closes on outside click or Escape key
20
- */
21
- this.trigger = 'hover';
22
- /**
23
- * Preferred placement of the tooltip relative to the trigger
24
- * Note: Tooltip will automatically flip if there's not enough space
25
- * - 'top': Above the trigger element
26
- * - 'right': To the right of the trigger element
27
- * - 'bottom': Below the trigger element
28
- * - 'left': To the left of the trigger element
29
- */
30
- this.placement = 'top';
31
- /**
32
- * Size variant of the tooltip
33
- * - 'small': Compact tooltip with minimal padding (text-size-3, py-1 px-2)
34
- * - 'medium': Standard tooltip size (text-size-4, py-1.5 px-3)
35
- * - 'large': Larger tooltip for more content (text-size-5, py-2 px-4)
36
- */
37
- this.size = 'medium';
38
- /**
39
- * Delay in milliseconds before showing the tooltip
40
- * Useful to prevent tooltips from appearing on quick mouse movements
41
- */
42
- this.showDelay = 150;
43
- /**
44
- * Delay in milliseconds before hiding the tooltip
45
- * Provides a grace period for mouse movements
46
- */
47
- this.hideDelay = 100;
48
- /**
49
- * Whether to show an arrow pointing to the trigger element
50
- * Note: Arrow is automatically hidden in 'follow' mode
51
- */
52
- this.arrow = true;
53
- /**
54
- * Disables the tooltip, preventing it from showing
55
- * Useful for conditional tooltips based on application state
56
- */
57
- this.disabled = false;
58
- /**
59
- * Distance in pixels between the tooltip and the trigger element
60
- * Also used as the offset in 'follow' mode
61
- */
62
- this.offset = 12;
63
- /**
64
- * Makes the tooltip follow the mouse cursor
65
- * When enabled:
66
- * - Arrow is hidden
67
- * - Tooltip position updates smoothly with cursor movement
68
- * - Pointer events are disabled on tooltip to prevent interference
69
- */
70
- this.follow = false;
71
- this.isOpen = false;
72
- this.handleSlotChange = () => {
73
- var _a;
74
- const slot = (_a = this.host.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('slot:not([name])');
75
- if (!slot)
76
- return;
77
- const elements = slot.assignedElements();
78
- const assignedElement = elements[0];
79
- // Get the actual element position from the host, not shadow DOM
80
- // This ensures proper positioning across shadow boundaries
81
- this.triggerRef = (assignedElement || this.host);
82
- if (!this.triggerRef)
83
- return;
84
- // Setup ARIA relationship
85
- if (this.tooltipRef && this.tooltipId) {
86
- this.triggerRef.setAttribute('aria-describedby', this.tooltipId);
87
- }
88
- // Remove old listeners
89
- this.removeTriggerListeners();
90
- // Add new listeners
91
- this.setupTriggerListeners();
92
- };
93
- this.handleMouseEnter = () => {
94
- if (!this.disabled) {
95
- this.show();
96
- }
97
- };
98
- this.handleMouseLeave = () => {
99
- this.hide();
100
- };
101
- this.handleMouseMove = (e) => {
102
- this.mouseX = e.clientX;
103
- this.mouseY = e.clientY;
104
- };
105
- this.handleClick = () => {
106
- if (!this.disabled) {
107
- this.toggle();
108
- }
109
- };
110
- this.handleOutsideClick = (e) => {
111
- var _a;
112
- const target = e.target;
113
- if (!this.host.contains(target) && !((_a = this.tooltipRef) === null || _a === void 0 ? void 0 : _a.contains(target))) {
114
- this.hide();
115
- }
116
- };
117
- this.handleKeyDown = (e) => {
118
- if (e.key === 'Escape' && this.isOpen) {
119
- // Only close if this tooltip's popover element is the topmost
120
- const topmostPopover = document.querySelector('[popover]:popover-open:last-of-type');
121
- if (topmostPopover === this.tooltipRef) {
122
- e.stopPropagation(); // Prevent event from reaching parent popovers
123
- this.hide();
124
- // Return focus to trigger element
125
- if (this.triggerRef && 'focus' in this.triggerRef) {
126
- this.triggerRef.focus();
127
- }
128
- }
129
- }
130
- };
131
- this.handleToggle = (e) => {
132
- const toggleEvent = e;
133
- // Sync our internal state with popover state
134
- if (toggleEvent.newState === 'open' && !this.isOpen) {
135
- this.isOpen = true;
136
- }
137
- else if (toggleEvent.newState === 'closed' && this.isOpen) {
138
- this.isOpen = false;
139
- }
140
- };
141
- this.tooltipClass = tv({
142
- slots: {
143
- tooltip: 'bcm-ui-element fixed m-0 bg-color-default-dark text-color-base rounded-md shadow-3 font-medium z-[9999]',
144
- arrow: 'absolute w-2 h-2 bg-color-default-dark rotate-45',
145
- content: '',
146
- },
147
- variants: {
148
- size: {
149
- small: {
150
- tooltip: 'text-size-3 py-1 px-2',
151
- },
152
- medium: {
153
- tooltip: 'text-size-4 py-1.5 px-3',
154
- },
155
- large: {
156
- tooltip: 'text-size-5 py-2 px-4',
157
- },
158
- },
159
- follow: {
160
- true: {
161
- tooltip: 'pointer-events-none',
162
- },
163
- },
164
- },
165
- });
166
14
  }
15
+ get host() { return this; }
16
+ tooltipRef;
17
+ arrowRef;
18
+ triggerRef;
19
+ cleanupAutoUpdate;
20
+ showTimeout;
21
+ hideTimeout;
22
+ mouseX = 0;
23
+ mouseY = 0;
24
+ rafId;
25
+ tooltipId;
26
+ /**
27
+ * How the tooltip is triggered
28
+ * - 'hover': Shows on mouse enter, hides on mouse leave
29
+ * - 'click': Toggles on click, closes on outside click or Escape key
30
+ */
31
+ trigger = 'hover';
32
+ /**
33
+ * Preferred placement of the tooltip relative to the trigger
34
+ * Note: Tooltip will automatically flip if there's not enough space
35
+ * - 'top': Above the trigger element
36
+ * - 'right': To the right of the trigger element
37
+ * - 'bottom': Below the trigger element
38
+ * - 'left': To the left of the trigger element
39
+ */
40
+ placement = 'top';
41
+ /**
42
+ * Size variant of the tooltip
43
+ * - 'small': Compact tooltip with minimal padding (text-size-3, py-1 px-2)
44
+ * - 'medium': Standard tooltip size (text-size-4, py-1.5 px-3)
45
+ * - 'large': Larger tooltip for more content (text-size-5, py-2 px-4)
46
+ */
47
+ size = 'medium';
48
+ /**
49
+ * Simple text message to display in the tooltip
50
+ * Can be overridden by slotting content into the 'content' slot
51
+ */
52
+ message;
53
+ /**
54
+ * Delay in milliseconds before showing the tooltip
55
+ * Useful to prevent tooltips from appearing on quick mouse movements
56
+ */
57
+ showDelay = 150;
58
+ /**
59
+ * Delay in milliseconds before hiding the tooltip
60
+ * Provides a grace period for mouse movements
61
+ */
62
+ hideDelay = 100;
63
+ /**
64
+ * Whether to show an arrow pointing to the trigger element
65
+ * Note: Arrow is automatically hidden in 'follow' mode
66
+ */
67
+ arrow = true;
68
+ /**
69
+ * Disables the tooltip, preventing it from showing
70
+ * Useful for conditional tooltips based on application state
71
+ */
72
+ disabled = false;
73
+ /**
74
+ * Distance in pixels between the tooltip and the trigger element
75
+ * Also used as the offset in 'follow' mode
76
+ */
77
+ offset = 12;
78
+ /**
79
+ * Makes the tooltip follow the mouse cursor
80
+ * When enabled:
81
+ * - Arrow is hidden
82
+ * - Tooltip position updates smoothly with cursor movement
83
+ * - Pointer events are disabled on tooltip to prevent interference
84
+ */
85
+ follow = false;
86
+ isOpen = false;
167
87
  handleDisabledChange(disabled) {
168
88
  if (disabled && this.isOpen) {
169
89
  this.hide();
@@ -344,6 +264,26 @@ const BcmTooltip$1 = /*@__PURE__*/ proxyCustomElement(class BcmTooltip extends H
344
264
  this.triggerRef.addEventListener('click', this.handleClick);
345
265
  }
346
266
  }
267
+ handleSlotChange = () => {
268
+ const slot = this.host.shadowRoot?.querySelector('slot:not([name])');
269
+ if (!slot)
270
+ return;
271
+ const elements = slot.assignedElements();
272
+ const assignedElement = elements[0];
273
+ // Get the actual element position from the host, not shadow DOM
274
+ // This ensures proper positioning across shadow boundaries
275
+ this.triggerRef = (assignedElement || this.host);
276
+ if (!this.triggerRef)
277
+ return;
278
+ // Setup ARIA relationship
279
+ if (this.tooltipRef && this.tooltipId) {
280
+ this.triggerRef.setAttribute('aria-describedby', this.tooltipId);
281
+ }
282
+ // Remove old listeners
283
+ this.removeTriggerListeners();
284
+ // Add new listeners
285
+ this.setupTriggerListeners();
286
+ };
347
287
  removeTriggerListeners() {
348
288
  if (!this.triggerRef)
349
289
  return;
@@ -352,6 +292,53 @@ const BcmTooltip$1 = /*@__PURE__*/ proxyCustomElement(class BcmTooltip extends H
352
292
  this.triggerRef.removeEventListener('mousemove', this.handleMouseMove);
353
293
  this.triggerRef.removeEventListener('click', this.handleClick);
354
294
  }
295
+ handleMouseEnter = () => {
296
+ if (!this.disabled) {
297
+ this.show();
298
+ }
299
+ };
300
+ handleMouseLeave = () => {
301
+ this.hide();
302
+ };
303
+ handleMouseMove = (e) => {
304
+ this.mouseX = e.clientX;
305
+ this.mouseY = e.clientY;
306
+ };
307
+ handleClick = () => {
308
+ if (!this.disabled) {
309
+ this.toggle();
310
+ }
311
+ };
312
+ handleOutsideClick = (e) => {
313
+ const target = e.target;
314
+ if (!this.host.contains(target) && !this.tooltipRef?.contains(target)) {
315
+ this.hide();
316
+ }
317
+ };
318
+ handleKeyDown = (e) => {
319
+ if (e.key === 'Escape' && this.isOpen) {
320
+ // Only close if this tooltip's popover element is the topmost
321
+ const topmostPopover = document.querySelector('[popover]:popover-open:last-of-type');
322
+ if (topmostPopover === this.tooltipRef) {
323
+ e.stopPropagation(); // Prevent event from reaching parent popovers
324
+ this.hide();
325
+ // Return focus to trigger element
326
+ if (this.triggerRef && 'focus' in this.triggerRef) {
327
+ this.triggerRef.focus();
328
+ }
329
+ }
330
+ }
331
+ };
332
+ handleToggle = (e) => {
333
+ const toggleEvent = e;
334
+ // Sync our internal state with popover state
335
+ if (toggleEvent.newState === 'open' && !this.isOpen) {
336
+ this.isOpen = true;
337
+ }
338
+ else if (toggleEvent.newState === 'closed' && this.isOpen) {
339
+ this.isOpen = false;
340
+ }
341
+ };
355
342
  setupOutsideClickListener() {
356
343
  // Remove existing listener first
357
344
  document.removeEventListener('click', this.handleOutsideClick);
@@ -383,6 +370,31 @@ const BcmTooltip$1 = /*@__PURE__*/ proxyCustomElement(class BcmTooltip extends H
383
370
  this.tooltipRef.removeEventListener('toggle', this.handleToggle);
384
371
  }
385
372
  }
373
+ tooltipClass = tv({
374
+ slots: {
375
+ tooltip: 'bcm-ui-element fixed m-0 bg-color-default-dark text-color-base rounded-md shadow-3 font-medium z-[9999]',
376
+ arrow: 'absolute w-2 h-2 bg-color-default-dark rotate-45',
377
+ content: '',
378
+ },
379
+ variants: {
380
+ size: {
381
+ small: {
382
+ tooltip: 'text-size-3 py-1 px-2',
383
+ },
384
+ medium: {
385
+ tooltip: 'text-size-4 py-1.5 px-3',
386
+ },
387
+ large: {
388
+ tooltip: 'text-size-5 py-2 px-4',
389
+ },
390
+ },
391
+ follow: {
392
+ true: {
393
+ tooltip: 'pointer-events-none',
394
+ },
395
+ },
396
+ },
397
+ });
386
398
  render() {
387
399
  const { tooltip, arrow: arrowClass } = this.tooltipClass({
388
400
  size: this.size,
@@ -392,7 +404,6 @@ const BcmTooltip$1 = /*@__PURE__*/ proxyCustomElement(class BcmTooltip extends H
392
404
  // @ts-ignore - popover is a valid attribute
393
405
  popover: "manual", role: "tooltip" }, this.arrow && !this.follow && h("div", { key: '7170aba70efdf413f4823cf2eff5618271b2fa70', ref: el => (this.arrowRef = el), part: "arrow", class: arrowClass() }), h("div", { key: '4fd9b56ce036663caaf1a75874e95ea566e214ef', part: "content" }, h("slot", { key: 'd5ab1ab3ef54e1c827ed1d009e226258a099378b', name: "content" }, this.message)))));
394
406
  }
395
- get host() { return this; }
396
407
  static get watchers() { return {
397
408
  "disabled": ["handleDisabledChange"],
398
409
  "trigger": ["handleTriggerChange"],
@@ -1 +1 @@
1
- {"file":"bcm-tooltip.js","mappings":"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","names":["BcmTooltip","__stencil_proxyCustomElement","HTMLElement"],"sources":["src/components/tooltip/tooltip.css?tag=bcm-tooltip&encapsulation=shadow","src/components/tooltip/tooltip.component.tsx"],"sourcesContent":[":host {\n display: inline-block;\n}\n\n[popover] {\n /* Reset default popover styles */\n border: none;\n padding: 0;\n overflow: visible;\n\n /* Subtle, fast animation - won't be jarring on quick hover transitions */\n transition: opacity 100ms ease-out, transform 100ms ease-out;\n opacity: 0;\n transform: scale(0.95);\n}\n\n[popover]:popover-open {\n opacity: 1;\n transform: scale(1);\n}\n\n/* Starting state when opening */\n@starting-style {\n [popover]:popover-open {\n opacity: 0;\n transform: scale(0.95);\n }\n}\n","import { Component, Element, h, Prop, State, Method, Watch } from '@stencil/core';\nimport { computePosition, flip, shift, offset, arrow, autoUpdate } from '@floating-ui/dom';\nimport { tv } from '@utils/tv';\n\nexport type TooltipTrigger = 'hover' | 'click';\nexport type TooltipPlacement = 'top' | 'right' | 'bottom' | 'left';\nexport type TooltipSize = 'small' | 'medium' | 'large';\n\n/**\n * @component BcmTooltip\n * @description A flexible tooltip component that provides contextual information on hover or click.\n * Built on the native Popover API for top-layer rendering and Floating UI for intelligent positioning.\n * Automatically handles overflow, flipping, and complex shadow DOM scenarios.\n *\n * @slot - The trigger element that will show the tooltip\n * @slot content - Custom rich content for the tooltip (overrides message prop)\n *\n * @part tooltip - The tooltip container element (for custom styling)\n * @part arrow - The arrow pointer element\n * @part content - The content wrapper element\n *\n * @example\n * ```html\n * <!-- Basic usage with text message -->\n * <bcm-tooltip message=\"This is a tooltip\">\n * <button>Hover me</button>\n * </bcm-tooltip>\n *\n * <!-- With custom rich content -->\n * <bcm-tooltip placement=\"right\" size=\"large\">\n * <button>Click me</button>\n * <div slot=\"content\">\n * <strong>Rich content</strong>\n * <p>You can add any HTML here</p>\n * </div>\n * </bcm-tooltip>\n *\n * <!-- Click trigger with custom delays -->\n * <bcm-tooltip trigger=\"click\" show-delay=\"0\" hide-delay=\"0\">\n * <span>Click me</span>\n * </bcm-tooltip>\n *\n * <!-- Mouse following mode -->\n * <bcm-tooltip follow={true} message=\"I follow your cursor!\">\n * <div>Move your mouse here</div>\n * </bcm-tooltip>\n *\n * <!-- Programmatic control -->\n * <bcm-tooltip id=\"myTooltip\" message=\"Programmatic tooltip\">\n * <span>Trigger</span>\n * </bcm-tooltip>\n * <script>\n * const tooltip = document.getElementById('myTooltip');\n * tooltip.show();\n * setTimeout(() => tooltip.hide(), 2000);\n * </script>\n *\n * <!-- Custom styling with CSS parts -->\n * <style>\n * bcm-tooltip::part(tooltip) {\n * background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n * border-radius: 12px;\n * }\n * bcm-tooltip::part(arrow) {\n * background: #667eea;\n * }\n * </style>\n * ```\n */\n@Component({\n tag: 'bcm-tooltip',\n styleUrl: 'tooltip.css',\n shadow: true,\n})\nexport class BcmTooltip {\n @Element() host: HTMLBcmTooltipElement;\n\n private tooltipRef?: HTMLDivElement;\n private arrowRef?: HTMLDivElement;\n private triggerRef?: HTMLElement;\n private cleanupAutoUpdate?: () => void;\n private showTimeout?: number;\n private hideTimeout?: number;\n private mouseX = 0;\n private mouseY = 0;\n private rafId?: number;\n private tooltipId: string;\n\n /**\n * How the tooltip is triggered\n * - 'hover': Shows on mouse enter, hides on mouse leave\n * - 'click': Toggles on click, closes on outside click or Escape key\n */\n @Prop() trigger: TooltipTrigger = 'hover';\n\n /**\n * Preferred placement of the tooltip relative to the trigger\n * Note: Tooltip will automatically flip if there's not enough space\n * - 'top': Above the trigger element\n * - 'right': To the right of the trigger element\n * - 'bottom': Below the trigger element\n * - 'left': To the left of the trigger element\n */\n @Prop() placement: TooltipPlacement = 'top';\n\n /**\n * Size variant of the tooltip\n * - 'small': Compact tooltip with minimal padding (text-size-3, py-1 px-2)\n * - 'medium': Standard tooltip size (text-size-4, py-1.5 px-3)\n * - 'large': Larger tooltip for more content (text-size-5, py-2 px-4)\n */\n @Prop() size: TooltipSize = 'medium';\n\n /**\n * Simple text message to display in the tooltip\n * Can be overridden by slotting content into the 'content' slot\n */\n @Prop() message?: string;\n\n /**\n * Delay in milliseconds before showing the tooltip\n * Useful to prevent tooltips from appearing on quick mouse movements\n */\n @Prop({ attribute: 'show-delay' }) showDelay: number = 150;\n\n /**\n * Delay in milliseconds before hiding the tooltip\n * Provides a grace period for mouse movements\n */\n @Prop({ attribute: 'hide-delay' }) hideDelay: number = 100;\n\n /**\n * Whether to show an arrow pointing to the trigger element\n * Note: Arrow is automatically hidden in 'follow' mode\n */\n @Prop() arrow: boolean = true;\n\n /**\n * Disables the tooltip, preventing it from showing\n * Useful for conditional tooltips based on application state\n */\n @Prop() disabled: boolean = false;\n\n /**\n * Distance in pixels between the tooltip and the trigger element\n * Also used as the offset in 'follow' mode\n */\n @Prop() offset: number = 12;\n\n /**\n * Makes the tooltip follow the mouse cursor\n * When enabled:\n * - Arrow is hidden\n * - Tooltip position updates smoothly with cursor movement\n * - Pointer events are disabled on tooltip to prevent interference\n */\n @Prop() follow: boolean = false;\n\n @State() isOpen = false;\n\n @Watch('disabled')\n handleDisabledChange(disabled: boolean) {\n if (disabled && this.isOpen) {\n this.hide();\n }\n }\n\n @Watch('trigger')\n handleTriggerChange() {\n this.removeTriggerListeners();\n this.setupOutsideClickListener();\n if (this.triggerRef) {\n this.setupTriggerListeners();\n }\n }\n\n @Watch('isOpen')\n async handleOpenChange(open: boolean) {\n if (!this.tooltipRef) return;\n\n if (open) {\n this.tooltipRef.showPopover();\n\n // Wait for next frame to ensure popover is rendered\n await new Promise(resolve => requestAnimationFrame(() => resolve(undefined)));\n\n if (this.follow) {\n this.startFollowing();\n } else {\n await this.updatePosition();\n this.startAutoUpdate();\n }\n } else {\n this.tooltipRef.hidePopover();\n this.stopFollowing();\n this.stopAutoUpdate();\n }\n }\n\n /**\n * Programmatically shows the tooltip\n * Respects the showDelay prop and disabled state\n */\n @Method()\n async show() {\n if (this.disabled) return;\n this.clearTimeouts();\n this.showTimeout = window.setTimeout(() => {\n this.isOpen = true;\n }, this.showDelay);\n }\n\n /**\n * Programmatically hides the tooltip\n * Respects the hideDelay prop\n */\n @Method()\n async hide() {\n this.clearTimeouts();\n this.hideTimeout = window.setTimeout(() => {\n this.isOpen = false;\n }, this.hideDelay);\n }\n\n /**\n * Toggles the tooltip visibility\n * If open, hides it; if closed, shows it\n */\n @Method()\n async toggle() {\n if (this.isOpen) {\n await this.hide();\n } else {\n await this.show();\n }\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 startAutoUpdate() {\n if (!this.triggerRef || !this.tooltipRef || this.follow) return;\n\n this.cleanupAutoUpdate = autoUpdate(this.triggerRef, this.tooltipRef, () => this.updatePosition(), {\n ancestorScroll: true,\n ancestorResize: true,\n elementResize: true,\n layoutShift: true,\n });\n }\n\n private stopAutoUpdate() {\n if (this.cleanupAutoUpdate) {\n this.cleanupAutoUpdate();\n this.cleanupAutoUpdate = undefined;\n }\n }\n\n private startFollowing() {\n if (!this.follow) return;\n\n const updateFollowPosition = () => {\n if (!this.isOpen || !this.tooltipRef) {\n this.rafId = undefined;\n return;\n }\n\n const offsetX = this.offset;\n const offsetY = this.offset;\n\n this.tooltipRef.style.left = `${this.mouseX + offsetX}px`;\n this.tooltipRef.style.top = `${this.mouseY + offsetY}px`;\n\n this.rafId = requestAnimationFrame(updateFollowPosition);\n };\n\n this.rafId = requestAnimationFrame(updateFollowPosition);\n }\n\n private stopFollowing() {\n if (this.rafId) {\n cancelAnimationFrame(this.rafId);\n this.rafId = undefined;\n }\n }\n\n private async updatePosition() {\n if (!this.triggerRef || !this.tooltipRef || this.follow) return;\n\n try {\n // Check if trigger element is still in viewport\n const triggerRect = this.triggerRef.getBoundingClientRect();\n const isInViewport =\n triggerRect.bottom > 0 && triggerRect.top < window.innerHeight && triggerRect.right > 0 && triggerRect.left < window.innerWidth;\n\n // Hide tooltip if trigger is out of viewport\n if (!isInViewport && this.isOpen) {\n this.hide();\n return;\n }\n\n const middleware = [offset(this.offset), flip(), shift({ padding: 8 })];\n\n if (this.arrow && this.arrowRef) {\n middleware.push(arrow({ element: this.arrowRef }));\n }\n\n // Use virtual element to properly handle shadow DOM boundaries\n const virtualElement = {\n getBoundingClientRect: () => this.triggerRef.getBoundingClientRect(),\n };\n\n const { x, y, placement, middlewareData } = await computePosition(virtualElement, this.tooltipRef, {\n placement: this.placement,\n strategy: 'fixed',\n middleware,\n });\n\n this.tooltipRef.style.left = `${x}px`;\n this.tooltipRef.style.top = `${y}px`;\n\n // Arrow positioning\n if (this.arrow && this.arrowRef && middlewareData.arrow) {\n const { x: arrowX, y: arrowY } = middlewareData.arrow;\n const side = placement.split('-')[0] as 'top' | 'right' | 'bottom' | 'left';\n\n const staticSide = {\n top: 'bottom',\n right: 'left',\n bottom: 'top',\n left: 'right',\n }[side];\n\n Object.assign(this.arrowRef.style, {\n left: arrowX != null ? `${arrowX}px` : '',\n top: arrowY != null ? `${arrowY}px` : '',\n right: '',\n bottom: '',\n [staticSide]: '-4px',\n });\n }\n } catch (error) {\n console.error('Failed to compute tooltip position:', error);\n }\n }\n\n private setupTriggerListeners() {\n if (!this.triggerRef) return;\n\n // Add new listeners based on trigger type\n if (this.trigger === 'hover') {\n this.triggerRef.addEventListener('mouseenter', this.handleMouseEnter);\n this.triggerRef.addEventListener('mouseleave', this.handleMouseLeave);\n\n if (this.follow) {\n this.triggerRef.addEventListener('mousemove', this.handleMouseMove);\n }\n } else if (this.trigger === 'click') {\n this.triggerRef.addEventListener('click', this.handleClick);\n }\n }\n\n private handleSlotChange = () => {\n const slot = this.host.shadowRoot?.querySelector('slot:not([name])');\n if (!slot) return;\n\n const elements = (slot as HTMLSlotElement).assignedElements();\n const assignedElement = elements[0] as HTMLElement;\n\n // Get the actual element position from the host, not shadow DOM\n // This ensures proper positioning across shadow boundaries\n this.triggerRef = (assignedElement || this.host) as HTMLElement;\n\n if (!this.triggerRef) return;\n\n // Setup ARIA relationship\n if (this.tooltipRef && this.tooltipId) {\n this.triggerRef.setAttribute('aria-describedby', this.tooltipId);\n }\n\n // Remove old listeners\n this.removeTriggerListeners();\n\n // Add new listeners\n this.setupTriggerListeners();\n };\n\n private removeTriggerListeners() {\n if (!this.triggerRef) return;\n\n this.triggerRef.removeEventListener('mouseenter', this.handleMouseEnter);\n this.triggerRef.removeEventListener('mouseleave', this.handleMouseLeave);\n this.triggerRef.removeEventListener('mousemove', this.handleMouseMove);\n this.triggerRef.removeEventListener('click', this.handleClick);\n }\n\n private handleMouseEnter = () => {\n if (!this.disabled) {\n this.show();\n }\n };\n\n private handleMouseLeave = () => {\n this.hide();\n };\n\n private handleMouseMove = (e: MouseEvent) => {\n this.mouseX = e.clientX;\n this.mouseY = e.clientY;\n };\n\n private handleClick = () => {\n if (!this.disabled) {\n this.toggle();\n }\n };\n\n private handleOutsideClick = (e: Event) => {\n const target = e.target as Node;\n if (!this.host.contains(target) && !this.tooltipRef?.contains(target)) {\n this.hide();\n }\n };\n\n private handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && this.isOpen) {\n // Only close if this tooltip's popover element is the topmost\n const topmostPopover = document.querySelector('[popover]:popover-open:last-of-type');\n if (topmostPopover === this.tooltipRef) {\n e.stopPropagation(); // Prevent event from reaching parent popovers\n this.hide();\n // Return focus to trigger element\n if (this.triggerRef && 'focus' in this.triggerRef) {\n (this.triggerRef as HTMLElement).focus();\n }\n }\n }\n };\n\n private handleToggle = (e: Event) => {\n const toggleEvent = e as ToggleEvent;\n\n // Sync our internal state with popover state\n if (toggleEvent.newState === 'open' && !this.isOpen) {\n this.isOpen = true;\n } else if (toggleEvent.newState === 'closed' && this.isOpen) {\n this.isOpen = false;\n }\n };\n\n private setupOutsideClickListener() {\n // Remove existing listener first\n document.removeEventListener('click', this.handleOutsideClick);\n\n // Add listener only for click trigger\n if (this.trigger === 'click') {\n document.addEventListener('click', this.handleOutsideClick);\n }\n }\n\n componentDidLoad() {\n // Generate unique ID for ARIA relationship\n this.tooltipId = `tooltip-${Math.random().toString(36).substring(2, 11)}`;\n\n // Setup outside click listener for click trigger\n this.setupOutsideClickListener();\n\n // Listen to popover toggle event to sync state\n if (this.tooltipRef) {\n this.tooltipRef.addEventListener('toggle', this.handleToggle);\n }\n\n // Setup keyboard listener for manual popover escape handling\n document.addEventListener('keydown', this.handleKeyDown);\n }\n\n disconnectedCallback() {\n this.clearTimeouts();\n this.stopAutoUpdate();\n this.stopFollowing();\n this.removeTriggerListeners();\n document.removeEventListener('click', this.handleOutsideClick);\n document.removeEventListener('keydown', this.handleKeyDown);\n if (this.tooltipRef) {\n this.tooltipRef.removeEventListener('toggle', this.handleToggle);\n }\n }\n\n private tooltipClass = tv({\n slots: {\n tooltip: 'bcm-ui-element fixed m-0 bg-color-default-dark text-color-base rounded-md shadow-3 font-medium z-[9999]',\n arrow: 'absolute w-2 h-2 bg-color-default-dark rotate-45',\n content: '',\n },\n variants: {\n size: {\n small: {\n tooltip: 'text-size-3 py-1 px-2',\n },\n medium: {\n tooltip: 'text-size-4 py-1.5 px-3',\n },\n large: {\n tooltip: 'text-size-5 py-2 px-4',\n },\n },\n follow: {\n true: {\n tooltip: 'pointer-events-none',\n },\n },\n },\n });\n\n render() {\n const { tooltip, arrow: arrowClass } = this.tooltipClass({\n size: this.size,\n follow: this.follow,\n });\n\n return (\n <div class=\"inline-block\">\n <slot onSlotchange={this.handleSlotChange}></slot>\n\n <div\n ref={el => (this.tooltipRef = el)}\n id={this.tooltipId}\n part=\"tooltip\"\n class={tooltip()}\n // @ts-ignore - popover is a valid attribute\n popover=\"manual\"\n role=\"tooltip\"\n >\n {this.arrow && !this.follow && <div ref={el => (this.arrowRef = el)} part=\"arrow\" class={arrowClass()} />}\n <div part=\"content\">\n <slot name=\"content\">{this.message}</slot>\n </div>\n </div>\n </div>\n );\n }\n}\n"],"version":3}
1
+ {"file":"bcm-tooltip.js","mappings":"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","names":["BcmTooltip","__stencil_proxyCustomElement","HTMLElement"],"sources":["src/components/tooltip/tooltip.css?tag=bcm-tooltip&encapsulation=shadow","src/components/tooltip/tooltip.component.tsx"],"sourcesContent":[":host {\n display: inline-block;\n}\n\n[popover] {\n /* Reset default popover styles */\n border: none;\n padding: 0;\n overflow: visible;\n\n /* Subtle, fast animation - won't be jarring on quick hover transitions */\n transition: opacity 100ms ease-out, transform 100ms ease-out;\n opacity: 0;\n transform: scale(0.95);\n}\n\n[popover]:popover-open {\n opacity: 1;\n transform: scale(1);\n}\n\n/* Starting state when opening */\n@starting-style {\n [popover]:popover-open {\n opacity: 0;\n transform: scale(0.95);\n }\n}\n","import { Component, Element, h, Prop, State, Method, Watch } from '@stencil/core';\nimport { computePosition, flip, shift, offset, arrow, autoUpdate } from '@floating-ui/dom';\nimport { tv } from '@utils/tv';\n\nexport type TooltipTrigger = 'hover' | 'click';\nexport type TooltipPlacement = 'top' | 'right' | 'bottom' | 'left';\nexport type TooltipSize = 'small' | 'medium' | 'large';\n\n/**\n * @component BcmTooltip\n * @description A flexible tooltip component that provides contextual information on hover or click.\n * Built on the native Popover API for top-layer rendering and Floating UI for intelligent positioning.\n * Automatically handles overflow, flipping, and complex shadow DOM scenarios.\n *\n * @slot - The trigger element that will show the tooltip\n * @slot content - Custom rich content for the tooltip (overrides message prop)\n *\n * @part tooltip - The tooltip container element (for custom styling)\n * @part arrow - The arrow pointer element\n * @part content - The content wrapper element\n *\n * @example\n * ```html\n * <!-- Basic usage with text message -->\n * <bcm-tooltip message=\"This is a tooltip\">\n * <button>Hover me</button>\n * </bcm-tooltip>\n *\n * <!-- With custom rich content -->\n * <bcm-tooltip placement=\"right\" size=\"large\">\n * <button>Click me</button>\n * <div slot=\"content\">\n * <strong>Rich content</strong>\n * <p>You can add any HTML here</p>\n * </div>\n * </bcm-tooltip>\n *\n * <!-- Click trigger with custom delays -->\n * <bcm-tooltip trigger=\"click\" show-delay=\"0\" hide-delay=\"0\">\n * <span>Click me</span>\n * </bcm-tooltip>\n *\n * <!-- Mouse following mode -->\n * <bcm-tooltip follow={true} message=\"I follow your cursor!\">\n * <div>Move your mouse here</div>\n * </bcm-tooltip>\n *\n * <!-- Programmatic control -->\n * <bcm-tooltip id=\"myTooltip\" message=\"Programmatic tooltip\">\n * <span>Trigger</span>\n * </bcm-tooltip>\n * <script>\n * const tooltip = document.getElementById('myTooltip');\n * tooltip.show();\n * setTimeout(() => tooltip.hide(), 2000);\n * </script>\n *\n * <!-- Custom styling with CSS parts -->\n * <style>\n * bcm-tooltip::part(tooltip) {\n * background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n * border-radius: 12px;\n * }\n * bcm-tooltip::part(arrow) {\n * background: #667eea;\n * }\n * </style>\n * ```\n */\n@Component({\n tag: 'bcm-tooltip',\n styleUrl: 'tooltip.css',\n shadow: true,\n})\nexport class BcmTooltip {\n @Element() host: HTMLBcmTooltipElement;\n\n private tooltipRef?: HTMLDivElement;\n private arrowRef?: HTMLDivElement;\n private triggerRef?: HTMLElement;\n private cleanupAutoUpdate?: () => void;\n private showTimeout?: number;\n private hideTimeout?: number;\n private mouseX = 0;\n private mouseY = 0;\n private rafId?: number;\n private tooltipId: string;\n\n /**\n * How the tooltip is triggered\n * - 'hover': Shows on mouse enter, hides on mouse leave\n * - 'click': Toggles on click, closes on outside click or Escape key\n */\n @Prop() trigger: TooltipTrigger = 'hover';\n\n /**\n * Preferred placement of the tooltip relative to the trigger\n * Note: Tooltip will automatically flip if there's not enough space\n * - 'top': Above the trigger element\n * - 'right': To the right of the trigger element\n * - 'bottom': Below the trigger element\n * - 'left': To the left of the trigger element\n */\n @Prop() placement: TooltipPlacement = 'top';\n\n /**\n * Size variant of the tooltip\n * - 'small': Compact tooltip with minimal padding (text-size-3, py-1 px-2)\n * - 'medium': Standard tooltip size (text-size-4, py-1.5 px-3)\n * - 'large': Larger tooltip for more content (text-size-5, py-2 px-4)\n */\n @Prop() size: TooltipSize = 'medium';\n\n /**\n * Simple text message to display in the tooltip\n * Can be overridden by slotting content into the 'content' slot\n */\n @Prop() message?: string;\n\n /**\n * Delay in milliseconds before showing the tooltip\n * Useful to prevent tooltips from appearing on quick mouse movements\n */\n @Prop({ attribute: 'show-delay' }) showDelay: number = 150;\n\n /**\n * Delay in milliseconds before hiding the tooltip\n * Provides a grace period for mouse movements\n */\n @Prop({ attribute: 'hide-delay' }) hideDelay: number = 100;\n\n /**\n * Whether to show an arrow pointing to the trigger element\n * Note: Arrow is automatically hidden in 'follow' mode\n */\n @Prop() arrow: boolean = true;\n\n /**\n * Disables the tooltip, preventing it from showing\n * Useful for conditional tooltips based on application state\n */\n @Prop() disabled: boolean = false;\n\n /**\n * Distance in pixels between the tooltip and the trigger element\n * Also used as the offset in 'follow' mode\n */\n @Prop() offset: number = 12;\n\n /**\n * Makes the tooltip follow the mouse cursor\n * When enabled:\n * - Arrow is hidden\n * - Tooltip position updates smoothly with cursor movement\n * - Pointer events are disabled on tooltip to prevent interference\n */\n @Prop() follow: boolean = false;\n\n @State() isOpen = false;\n\n @Watch('disabled')\n handleDisabledChange(disabled: boolean) {\n if (disabled && this.isOpen) {\n this.hide();\n }\n }\n\n @Watch('trigger')\n handleTriggerChange() {\n this.removeTriggerListeners();\n this.setupOutsideClickListener();\n if (this.triggerRef) {\n this.setupTriggerListeners();\n }\n }\n\n @Watch('isOpen')\n async handleOpenChange(open: boolean) {\n if (!this.tooltipRef) return;\n\n if (open) {\n this.tooltipRef.showPopover();\n\n // Wait for next frame to ensure popover is rendered\n await new Promise(resolve => requestAnimationFrame(() => resolve(undefined)));\n\n if (this.follow) {\n this.startFollowing();\n } else {\n await this.updatePosition();\n this.startAutoUpdate();\n }\n } else {\n this.tooltipRef.hidePopover();\n this.stopFollowing();\n this.stopAutoUpdate();\n }\n }\n\n /**\n * Programmatically shows the tooltip\n * Respects the showDelay prop and disabled state\n */\n @Method()\n async show() {\n if (this.disabled) return;\n this.clearTimeouts();\n this.showTimeout = window.setTimeout(() => {\n this.isOpen = true;\n }, this.showDelay);\n }\n\n /**\n * Programmatically hides the tooltip\n * Respects the hideDelay prop\n */\n @Method()\n async hide() {\n this.clearTimeouts();\n this.hideTimeout = window.setTimeout(() => {\n this.isOpen = false;\n }, this.hideDelay);\n }\n\n /**\n * Toggles the tooltip visibility\n * If open, hides it; if closed, shows it\n */\n @Method()\n async toggle() {\n if (this.isOpen) {\n await this.hide();\n } else {\n await this.show();\n }\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 startAutoUpdate() {\n if (!this.triggerRef || !this.tooltipRef || this.follow) return;\n\n this.cleanupAutoUpdate = autoUpdate(this.triggerRef, this.tooltipRef, () => this.updatePosition(), {\n ancestorScroll: true,\n ancestorResize: true,\n elementResize: true,\n layoutShift: true,\n });\n }\n\n private stopAutoUpdate() {\n if (this.cleanupAutoUpdate) {\n this.cleanupAutoUpdate();\n this.cleanupAutoUpdate = undefined;\n }\n }\n\n private startFollowing() {\n if (!this.follow) return;\n\n const updateFollowPosition = () => {\n if (!this.isOpen || !this.tooltipRef) {\n this.rafId = undefined;\n return;\n }\n\n const offsetX = this.offset;\n const offsetY = this.offset;\n\n this.tooltipRef.style.left = `${this.mouseX + offsetX}px`;\n this.tooltipRef.style.top = `${this.mouseY + offsetY}px`;\n\n this.rafId = requestAnimationFrame(updateFollowPosition);\n };\n\n this.rafId = requestAnimationFrame(updateFollowPosition);\n }\n\n private stopFollowing() {\n if (this.rafId) {\n cancelAnimationFrame(this.rafId);\n this.rafId = undefined;\n }\n }\n\n private async updatePosition() {\n if (!this.triggerRef || !this.tooltipRef || this.follow) return;\n\n try {\n // Check if trigger element is still in viewport\n const triggerRect = this.triggerRef.getBoundingClientRect();\n const isInViewport =\n triggerRect.bottom > 0 && triggerRect.top < window.innerHeight && triggerRect.right > 0 && triggerRect.left < window.innerWidth;\n\n // Hide tooltip if trigger is out of viewport\n if (!isInViewport && this.isOpen) {\n this.hide();\n return;\n }\n\n const middleware = [offset(this.offset), flip(), shift({ padding: 8 })];\n\n if (this.arrow && this.arrowRef) {\n middleware.push(arrow({ element: this.arrowRef }));\n }\n\n // Use virtual element to properly handle shadow DOM boundaries\n const virtualElement = {\n getBoundingClientRect: () => this.triggerRef.getBoundingClientRect(),\n };\n\n const { x, y, placement, middlewareData } = await computePosition(virtualElement, this.tooltipRef, {\n placement: this.placement,\n strategy: 'fixed',\n middleware,\n });\n\n this.tooltipRef.style.left = `${x}px`;\n this.tooltipRef.style.top = `${y}px`;\n\n // Arrow positioning\n if (this.arrow && this.arrowRef && middlewareData.arrow) {\n const { x: arrowX, y: arrowY } = middlewareData.arrow;\n const side = placement.split('-')[0] as 'top' | 'right' | 'bottom' | 'left';\n\n const staticSide = {\n top: 'bottom',\n right: 'left',\n bottom: 'top',\n left: 'right',\n }[side];\n\n Object.assign(this.arrowRef.style, {\n left: arrowX != null ? `${arrowX}px` : '',\n top: arrowY != null ? `${arrowY}px` : '',\n right: '',\n bottom: '',\n [staticSide]: '-4px',\n });\n }\n } catch (error) {\n console.error('Failed to compute tooltip position:', error);\n }\n }\n\n private setupTriggerListeners() {\n if (!this.triggerRef) return;\n\n // Add new listeners based on trigger type\n if (this.trigger === 'hover') {\n this.triggerRef.addEventListener('mouseenter', this.handleMouseEnter);\n this.triggerRef.addEventListener('mouseleave', this.handleMouseLeave);\n\n if (this.follow) {\n this.triggerRef.addEventListener('mousemove', this.handleMouseMove);\n }\n } else if (this.trigger === 'click') {\n this.triggerRef.addEventListener('click', this.handleClick);\n }\n }\n\n private handleSlotChange = () => {\n const slot = this.host.shadowRoot?.querySelector('slot:not([name])');\n if (!slot) return;\n\n const elements = (slot as HTMLSlotElement).assignedElements();\n const assignedElement = elements[0] as HTMLElement;\n\n // Get the actual element position from the host, not shadow DOM\n // This ensures proper positioning across shadow boundaries\n this.triggerRef = (assignedElement || this.host) as HTMLElement;\n\n if (!this.triggerRef) return;\n\n // Setup ARIA relationship\n if (this.tooltipRef && this.tooltipId) {\n this.triggerRef.setAttribute('aria-describedby', this.tooltipId);\n }\n\n // Remove old listeners\n this.removeTriggerListeners();\n\n // Add new listeners\n this.setupTriggerListeners();\n };\n\n private removeTriggerListeners() {\n if (!this.triggerRef) return;\n\n this.triggerRef.removeEventListener('mouseenter', this.handleMouseEnter);\n this.triggerRef.removeEventListener('mouseleave', this.handleMouseLeave);\n this.triggerRef.removeEventListener('mousemove', this.handleMouseMove);\n this.triggerRef.removeEventListener('click', this.handleClick);\n }\n\n private handleMouseEnter = () => {\n if (!this.disabled) {\n this.show();\n }\n };\n\n private handleMouseLeave = () => {\n this.hide();\n };\n\n private handleMouseMove = (e: MouseEvent) => {\n this.mouseX = e.clientX;\n this.mouseY = e.clientY;\n };\n\n private handleClick = () => {\n if (!this.disabled) {\n this.toggle();\n }\n };\n\n private handleOutsideClick = (e: Event) => {\n const target = e.target as Node;\n if (!this.host.contains(target) && !this.tooltipRef?.contains(target)) {\n this.hide();\n }\n };\n\n private handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && this.isOpen) {\n // Only close if this tooltip's popover element is the topmost\n const topmostPopover = document.querySelector('[popover]:popover-open:last-of-type');\n if (topmostPopover === this.tooltipRef) {\n e.stopPropagation(); // Prevent event from reaching parent popovers\n this.hide();\n // Return focus to trigger element\n if (this.triggerRef && 'focus' in this.triggerRef) {\n (this.triggerRef as HTMLElement).focus();\n }\n }\n }\n };\n\n private handleToggle = (e: Event) => {\n const toggleEvent = e as ToggleEvent;\n\n // Sync our internal state with popover state\n if (toggleEvent.newState === 'open' && !this.isOpen) {\n this.isOpen = true;\n } else if (toggleEvent.newState === 'closed' && this.isOpen) {\n this.isOpen = false;\n }\n };\n\n private setupOutsideClickListener() {\n // Remove existing listener first\n document.removeEventListener('click', this.handleOutsideClick);\n\n // Add listener only for click trigger\n if (this.trigger === 'click') {\n document.addEventListener('click', this.handleOutsideClick);\n }\n }\n\n componentDidLoad() {\n // Generate unique ID for ARIA relationship\n this.tooltipId = `tooltip-${Math.random().toString(36).substring(2, 11)}`;\n\n // Setup outside click listener for click trigger\n this.setupOutsideClickListener();\n\n // Listen to popover toggle event to sync state\n if (this.tooltipRef) {\n this.tooltipRef.addEventListener('toggle', this.handleToggle);\n }\n\n // Setup keyboard listener for manual popover escape handling\n document.addEventListener('keydown', this.handleKeyDown);\n }\n\n disconnectedCallback() {\n this.clearTimeouts();\n this.stopAutoUpdate();\n this.stopFollowing();\n this.removeTriggerListeners();\n document.removeEventListener('click', this.handleOutsideClick);\n document.removeEventListener('keydown', this.handleKeyDown);\n if (this.tooltipRef) {\n this.tooltipRef.removeEventListener('toggle', this.handleToggle);\n }\n }\n\n private tooltipClass = tv({\n slots: {\n tooltip: 'bcm-ui-element fixed m-0 bg-color-default-dark text-color-base rounded-md shadow-3 font-medium z-[9999]',\n arrow: 'absolute w-2 h-2 bg-color-default-dark rotate-45',\n content: '',\n },\n variants: {\n size: {\n small: {\n tooltip: 'text-size-3 py-1 px-2',\n },\n medium: {\n tooltip: 'text-size-4 py-1.5 px-3',\n },\n large: {\n tooltip: 'text-size-5 py-2 px-4',\n },\n },\n follow: {\n true: {\n tooltip: 'pointer-events-none',\n },\n },\n },\n });\n\n render() {\n const { tooltip, arrow: arrowClass } = this.tooltipClass({\n size: this.size,\n follow: this.follow,\n });\n\n return (\n <div class=\"inline-block\">\n <slot onSlotchange={this.handleSlotChange}></slot>\n\n <div\n ref={el => (this.tooltipRef = el)}\n id={this.tooltipId}\n part=\"tooltip\"\n class={tooltip()}\n // @ts-ignore - popover is a valid attribute\n popover=\"manual\"\n role=\"tooltip\"\n >\n {this.arrow && !this.follow && <div ref={el => (this.arrowRef = el)} part=\"arrow\" class={arrowClass()} />}\n <div part=\"content\">\n <slot name=\"content\">{this.message}</slot>\n </div>\n </div>\n </div>\n );\n }\n}\n"],"version":3}