bromcom-ui-next 0.1.29 → 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 (618) 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 -1
  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 -1
  20. package/dist/bromcom-ui/bcm-popover.entry.esm.js.map +1 -1
  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 -1
  31. package/dist/bromcom-ui/bromcom-ui.esm.js +1 -1
  32. package/dist/bromcom-ui/bromcom-ui.esm.js.map +1 -1
  33. package/dist/bromcom-ui/global/global.js +33 -30
  34. package/dist/bromcom-ui/p-010219cf.entry.js +2 -0
  35. package/dist/bromcom-ui/p-010219cf.entry.js.map +1 -0
  36. package/dist/bromcom-ui/p-01a4e00b.entry.js +2 -0
  37. package/dist/bromcom-ui/p-01a4e00b.entry.js.map +1 -0
  38. package/dist/bromcom-ui/p-14c63d61.entry.js +2 -0
  39. package/dist/bromcom-ui/p-14c63d61.entry.js.map +1 -0
  40. package/dist/bromcom-ui/p-20a94dec.entry.js +2 -0
  41. package/dist/bromcom-ui/p-20a94dec.entry.js.map +1 -0
  42. package/dist/bromcom-ui/p-398620c2.entry.js +2 -0
  43. package/dist/bromcom-ui/p-398620c2.entry.js.map +1 -0
  44. package/dist/bromcom-ui/p-3b898f90.entry.js +2 -0
  45. package/dist/bromcom-ui/p-3b898f90.entry.js.map +1 -0
  46. package/dist/bromcom-ui/p-43c85c84.entry.js +2 -0
  47. package/dist/bromcom-ui/p-43c85c84.entry.js.map +1 -0
  48. package/dist/bromcom-ui/p-4e6661a5.entry.js +2 -0
  49. package/dist/bromcom-ui/p-4e6661a5.entry.js.map +1 -0
  50. package/dist/bromcom-ui/p-52bb0cdc.entry.js +2 -0
  51. package/dist/bromcom-ui/p-52bb0cdc.entry.js.map +1 -0
  52. package/dist/bromcom-ui/p-61c1c1c8.entry.js +2 -0
  53. package/dist/bromcom-ui/p-61c1c1c8.entry.js.map +1 -0
  54. package/dist/bromcom-ui/p-82e4c5f2.entry.js +2 -0
  55. package/dist/bromcom-ui/p-82e4c5f2.entry.js.map +1 -0
  56. package/dist/bromcom-ui/p-86f85963.entry.js +2 -0
  57. package/dist/bromcom-ui/p-86f85963.entry.js.map +1 -0
  58. package/dist/bromcom-ui/p-9249c1d1.entry.js +2 -0
  59. package/dist/bromcom-ui/p-9249c1d1.entry.js.map +1 -0
  60. package/dist/bromcom-ui/p-B6Ppbs5O.js +3 -0
  61. package/dist/bromcom-ui/p-B6Ppbs5O.js.map +1 -0
  62. package/dist/bromcom-ui/p-BfTCfPZ1.js.map +1 -1
  63. package/dist/bromcom-ui/p-CEcVC0yX.js.map +1 -1
  64. package/dist/bromcom-ui/p-DBDSgIvP.js +2 -0
  65. package/dist/bromcom-ui/p-DBDSgIvP.js.map +1 -0
  66. package/dist/bromcom-ui/p-DaE0ZLar.js +2 -0
  67. package/dist/bromcom-ui/p-DaE0ZLar.js.map +1 -0
  68. package/dist/bromcom-ui/p-IBjzkjef.js.map +1 -1
  69. package/dist/bromcom-ui/p-a25d1cef.entry.js +2 -0
  70. package/dist/bromcom-ui/p-a25d1cef.entry.js.map +1 -0
  71. package/dist/bromcom-ui/p-a4cb2e79.entry.js +2 -0
  72. package/dist/bromcom-ui/p-a4cb2e79.entry.js.map +1 -0
  73. package/dist/bromcom-ui/p-a68925b4.entry.js +2 -0
  74. package/dist/bromcom-ui/p-a68925b4.entry.js.map +1 -0
  75. package/dist/bromcom-ui/p-a750186c.entry.js +2 -0
  76. package/dist/bromcom-ui/p-a750186c.entry.js.map +1 -0
  77. package/dist/bromcom-ui/p-ac768b56.entry.js +2 -0
  78. package/dist/bromcom-ui/p-ac768b56.entry.js.map +1 -0
  79. package/dist/bromcom-ui/p-b0b193e6.entry.js +2 -0
  80. package/dist/bromcom-ui/p-b0b193e6.entry.js.map +1 -0
  81. package/dist/bromcom-ui/p-bf4409ca.entry.js +2 -0
  82. package/dist/bromcom-ui/p-bf4409ca.entry.js.map +1 -0
  83. package/dist/bromcom-ui/p-c57fb29b.entry.js +2 -0
  84. package/dist/bromcom-ui/p-c57fb29b.entry.js.map +1 -0
  85. package/dist/bromcom-ui/{p-2480e468.entry.js → p-ccc310aa.entry.js} +2 -2
  86. package/dist/bromcom-ui/p-ccc310aa.entry.js.map +1 -0
  87. package/dist/bromcom-ui/p-d4ee962d.entry.js +2 -0
  88. package/dist/bromcom-ui/p-d4ee962d.entry.js.map +1 -0
  89. package/dist/bromcom-ui/p-e25a2f7a.entry.js +2 -0
  90. package/dist/bromcom-ui/p-e25a2f7a.entry.js.map +1 -0
  91. package/dist/bromcom-ui/p-e5b0b2ad.entry.js +2 -0
  92. package/dist/bromcom-ui/p-e5b0b2ad.entry.js.map +1 -0
  93. package/dist/bromcom-ui/p-e70d784d.entry.js +2 -0
  94. package/dist/bromcom-ui/p-e70d784d.entry.js.map +1 -0
  95. package/dist/bromcom-ui/p-e9fa3a22.entry.js +2 -0
  96. package/dist/bromcom-ui/p-e9fa3a22.entry.js.map +1 -0
  97. package/dist/bromcom-ui/p-ef281184.entry.js +2 -0
  98. package/dist/bromcom-ui/p-ef281184.entry.js.map +1 -0
  99. package/dist/bromcom-ui/{p-089edfdc.entry.js → p-fb6f616c.entry.js} +2 -2
  100. package/dist/bromcom-ui/p-fb6f616c.entry.js.map +1 -0
  101. package/dist/bromcom-ui/p-fd31c70c.entry.js +2 -0
  102. package/dist/bromcom-ui/p-fd31c70c.entry.js.map +1 -0
  103. package/dist/bromcom-ui/p-nf_HKsGq.js +2 -0
  104. package/dist/bromcom-ui/{p-CUvT12BL.js.map → p-nf_HKsGq.js.map} +1 -1
  105. package/dist/cjs/base-choice-control-EmA4JRjR.js +54 -0
  106. package/dist/cjs/base-choice-control-EmA4JRjR.js.map +1 -0
  107. package/dist/cjs/bcm-accordion-group.cjs.entry.js +21 -21
  108. package/dist/cjs/bcm-accordion-group.entry.cjs.js.map +1 -1
  109. package/dist/cjs/bcm-accordion.cjs.entry.js +75 -60
  110. package/dist/cjs/bcm-accordion.entry.cjs.js.map +1 -1
  111. package/dist/cjs/bcm-alert.cjs.entry.js +21 -23
  112. package/dist/cjs/bcm-alert.entry.cjs.js.map +1 -1
  113. package/dist/cjs/bcm-avatar.cjs.entry.js +22 -14
  114. package/dist/cjs/bcm-avatar.entry.cjs.js.map +1 -1
  115. package/dist/cjs/bcm-badge.cjs.entry.js +114 -84
  116. package/dist/cjs/bcm-badge.entry.cjs.js.map +1 -1
  117. package/dist/cjs/bcm-basic-badge.cjs.entry.js +73 -61
  118. package/dist/cjs/bcm-basic-badge.entry.cjs.js.map +1 -1
  119. package/dist/cjs/bcm-button-group.cjs.entry.js +36 -26
  120. package/dist/cjs/bcm-button-group.entry.cjs.js.map +1 -1
  121. package/dist/cjs/bcm-button.cjs.entry.js +338 -0
  122. package/dist/cjs/bcm-button.entry.cjs.js.map +1 -0
  123. package/dist/cjs/bcm-checkbox.cjs.entry.js +284 -176
  124. package/dist/cjs/bcm-checkbox.entry.cjs.js.map +1 -1
  125. package/dist/cjs/bcm-chip.cjs.entry.js +38 -37
  126. package/dist/cjs/bcm-chip.entry.cjs.js.map +1 -1
  127. package/dist/cjs/bcm-divider.cjs.entry.js +56 -58
  128. package/dist/cjs/bcm-divider.entry.cjs.js.map +1 -1
  129. package/dist/cjs/bcm-drawer.cjs.entry.js +332 -0
  130. package/dist/cjs/bcm-drawer.entry.cjs.js.map +1 -0
  131. package/dist/cjs/bcm-dropdown-item.cjs.entry.js +36 -35
  132. package/dist/cjs/bcm-dropdown-item.entry.cjs.js.map +1 -1
  133. package/dist/cjs/bcm-dropdown.cjs.entry.js +17 -26
  134. package/dist/cjs/bcm-dropdown.entry.cjs.js.map +1 -1
  135. package/dist/cjs/bcm-file-upload.cjs.entry.js +552 -0
  136. package/dist/cjs/bcm-file-upload.entry.cjs.js.map +1 -0
  137. package/dist/cjs/bcm-input.cjs.entry.js +250 -160
  138. package/dist/cjs/bcm-input.entry.cjs.js.map +1 -1
  139. package/dist/cjs/bcm-linked.cjs.entry.js +373 -264
  140. package/dist/cjs/bcm-linked.entry.cjs.js.map +1 -1
  141. package/dist/cjs/bcm-modal.cjs.entry.js +360 -0
  142. package/dist/cjs/bcm-modal.entry.cjs.js.map +1 -0
  143. package/dist/cjs/bcm-pop-confirm.cjs.entry.js +337 -206
  144. package/dist/cjs/bcm-pop-confirm.entry.cjs.js.map +1 -1
  145. package/dist/cjs/bcm-popover.cjs.entry.js +416 -154
  146. package/dist/cjs/bcm-popover.entry.cjs.js.map +1 -1
  147. package/dist/cjs/bcm-radio-group.cjs.entry.js +103 -82
  148. package/dist/cjs/bcm-radio-group.entry.cjs.js.map +1 -1
  149. package/dist/cjs/bcm-radio.cjs.entry.js +239 -108
  150. package/dist/cjs/bcm-radio.entry.cjs.js.map +1 -1
  151. package/dist/cjs/bcm-segment.bcm-segmented-picker.entry.cjs.js.map +1 -0
  152. package/dist/cjs/bcm-segment_2.cjs.entry.js +335 -0
  153. package/dist/cjs/bcm-shortcut.cjs.entry.js +5 -6
  154. package/dist/cjs/bcm-shortcut.entry.cjs.js.map +1 -1
  155. package/dist/cjs/bcm-switch.cjs.entry.js +281 -150
  156. package/dist/cjs/bcm-switch.entry.cjs.js.map +1 -1
  157. package/dist/cjs/bcm-tab.cjs.entry.js +44 -0
  158. package/dist/cjs/bcm-tab.entry.cjs.js.map +1 -0
  159. package/dist/cjs/bcm-tabs.cjs.entry.js +191 -239
  160. package/dist/cjs/bcm-tabs.entry.cjs.js.map +1 -1
  161. package/dist/cjs/bcm-text.cjs.entry.js +86 -87
  162. package/dist/cjs/bcm-text.entry.cjs.js.map +1 -1
  163. package/dist/cjs/bcm-textarea.cjs.entry.js +224 -156
  164. package/dist/cjs/bcm-textarea.entry.cjs.js.map +1 -1
  165. package/dist/cjs/bcm-tooltip.cjs.entry.js +386 -152
  166. package/dist/cjs/bcm-tooltip.entry.cjs.js.map +1 -1
  167. package/dist/cjs/bromcom-ui.cjs.js +3 -5
  168. package/dist/cjs/bromcom-ui.cjs.js.map +1 -1
  169. package/dist/cjs/{floating-ui.dom-DyKmFgkP.js → floating-ui.dom-S9nP6zZt.js} +40 -23
  170. package/dist/cjs/floating-ui.dom-S9nP6zZt.js.map +1 -0
  171. package/dist/cjs/generate-id-CG_BkTJu.js.map +1 -1
  172. package/dist/cjs/{index-BtiU-G2W.js → index-1Qal-onT.js} +165 -398
  173. package/dist/cjs/index-1Qal-onT.js.map +1 -0
  174. package/dist/cjs/index-Bp6Dd2i1.js.map +1 -1
  175. package/dist/cjs/index.cjs.js +0 -2
  176. package/dist/cjs/loader.cjs.js +2 -4
  177. package/dist/cjs/tv-ngpIbGlG.js.map +1 -1
  178. package/dist/cjs/{validation-messages-BjfpSEWk.js → validation-messages-DieKlSG4.js} +6 -7
  179. package/dist/{esm/validation-messages-CUvT12BL.js.map → cjs/validation-messages-DieKlSG4.js.map} +1 -1
  180. package/dist/collection/collection-manifest.json +7 -8
  181. package/dist/collection/components/_shared/form/base-choice-control.js +90 -0
  182. package/dist/collection/components/_shared/form/base-choice-control.js.map +1 -0
  183. package/dist/collection/components/_shared/form/base-form-control.js +115 -0
  184. package/dist/collection/components/_shared/form/base-form-control.js.map +1 -0
  185. package/dist/collection/components/accordion/accordion.component.js +80 -63
  186. package/dist/collection/components/accordion/accordion.component.js.map +1 -1
  187. package/dist/collection/components/accordion/accordion.css +1 -1
  188. package/dist/collection/components/accordion-group/accordion-group.component.js +23 -21
  189. package/dist/collection/components/accordion-group/accordion-group.component.js.map +1 -1
  190. package/dist/collection/components/accordion-group/types.js.map +1 -1
  191. package/dist/collection/components/alert/alert.component.js +24 -26
  192. package/dist/collection/components/alert/alert.component.js.map +1 -1
  193. package/dist/collection/components/alert/alert.css +1 -1
  194. package/dist/collection/components/avatar/avatar.component.js +34 -26
  195. package/dist/collection/components/avatar/avatar.component.js.map +1 -1
  196. package/dist/collection/components/avatar/avatar.css +1 -1
  197. package/dist/collection/components/badge/badge.component.js +124 -94
  198. package/dist/collection/components/badge/badge.component.js.map +1 -1
  199. package/dist/collection/components/badge/badge.css +1 -1
  200. package/dist/collection/components/basic-badge/basic-badge.component.js +77 -65
  201. package/dist/collection/components/basic-badge/basic-badge.component.js.map +1 -1
  202. package/dist/collection/components/basic-badge/basic-badge.css +1 -1
  203. package/dist/collection/components/button/button.component.js +135 -114
  204. package/dist/collection/components/button/button.component.js.map +1 -1
  205. package/dist/collection/components/button/button.css +1 -1
  206. package/dist/collection/components/button-group/button-group.component.js +47 -36
  207. package/dist/collection/components/button-group/button-group.component.js.map +1 -1
  208. package/dist/collection/components/button-group/button-group.css +1 -1
  209. package/dist/collection/components/checkbox/checkbox.component.js +362 -243
  210. package/dist/collection/components/checkbox/checkbox.component.js.map +1 -1
  211. package/dist/collection/components/checkbox/checkbox.css +1 -1
  212. package/dist/collection/components/chip/chip.component.js +42 -41
  213. package/dist/collection/components/chip/chip.component.js.map +1 -1
  214. package/dist/collection/components/chip/chip.css +1 -1
  215. package/dist/collection/components/divider/divider.component.js +56 -58
  216. package/dist/collection/components/divider/divider.component.js.map +1 -1
  217. package/dist/collection/components/divider/divider.css +1 -1
  218. package/dist/collection/components/drawer/drawer.component.js +476 -155
  219. package/dist/collection/components/drawer/drawer.component.js.map +1 -1
  220. package/dist/collection/components/drawer/drawer.css +1 -1
  221. package/dist/collection/components/drawer/types.js.map +1 -1
  222. package/dist/collection/components/dropdown/dropdown.component.js +18 -27
  223. package/dist/collection/components/dropdown/dropdown.component.js.map +1 -1
  224. package/dist/collection/components/dropdown-item/dropdown-item.component.js +41 -40
  225. package/dist/collection/components/dropdown-item/dropdown-item.component.js.map +1 -1
  226. package/dist/collection/components/dropdown-item/dropdown-item.css +1 -1
  227. package/dist/collection/components/input/input.component.js +283 -198
  228. package/dist/collection/components/input/input.component.js.map +1 -1
  229. package/dist/collection/components/linked/linked.component.js +551 -355
  230. package/dist/collection/components/linked/linked.component.js.map +1 -1
  231. package/dist/collection/components/linked/linked.css +1 -1
  232. package/dist/collection/components/modal/modal.component.js +276 -149
  233. package/dist/collection/components/modal/modal.component.js.map +1 -1
  234. package/dist/collection/components/modal/modal.css +1 -1
  235. package/dist/collection/components/pop-confirm/pop-confirm.component.js +745 -340
  236. package/dist/collection/components/pop-confirm/pop-confirm.component.js.map +1 -1
  237. package/dist/collection/components/pop-confirm/pop-confirm.css +1 -1
  238. package/dist/collection/components/popover/popover.component.js +609 -196
  239. package/dist/collection/components/popover/popover.component.js.map +1 -1
  240. package/dist/collection/components/popover/popover.css +1 -1
  241. package/dist/collection/components/radio/radio.component.js +294 -118
  242. package/dist/collection/components/radio/radio.component.js.map +1 -1
  243. package/dist/collection/components/radio-group/radio-group.component.js +115 -93
  244. package/dist/collection/components/radio-group/radio-group.component.js.map +1 -1
  245. package/dist/collection/components/segmented-picker/segment.component.js +228 -0
  246. package/dist/collection/components/segmented-picker/segment.component.js.map +1 -0
  247. package/dist/collection/components/segmented-picker/segment.css +1 -0
  248. package/dist/collection/components/segmented-picker/segmented-picker.component.js +357 -142
  249. package/dist/collection/components/segmented-picker/segmented-picker.component.js.map +1 -1
  250. package/dist/collection/components/segmented-picker/segmented-picker.css +1 -1
  251. package/dist/collection/components/shortcut/shortcut.js +7 -8
  252. package/dist/collection/components/shortcut/shortcut.js.map +1 -1
  253. package/dist/collection/components/switch/switch.component.js +357 -287
  254. package/dist/collection/components/switch/switch.component.js.map +1 -1
  255. package/dist/collection/components/switch/switch.css +1 -1
  256. package/dist/collection/components/tabs/bcm-tab.css +1 -0
  257. package/dist/collection/components/tabs/bcm-tabs.css +1 -1
  258. package/dist/collection/components/tabs/tab.component.js +169 -0
  259. package/dist/collection/components/tabs/tab.component.js.map +1 -0
  260. package/dist/collection/components/tabs/tabs.component.js +224 -355
  261. package/dist/collection/components/tabs/tabs.component.js.map +1 -1
  262. package/dist/collection/components/text/text.component.js +90 -91
  263. package/dist/collection/components/text/text.component.js.map +1 -1
  264. package/dist/collection/components/textarea/textarea.component.js +252 -190
  265. package/dist/collection/components/textarea/textarea.component.js.map +1 -1
  266. package/dist/collection/components/tooltip/tooltip.component.js +605 -220
  267. package/dist/collection/components/tooltip/tooltip.component.js.map +1 -1
  268. package/dist/collection/components/tooltip/tooltip.css +1 -1
  269. package/dist/collection/components/upload/file-upload.component.js +905 -0
  270. package/dist/collection/components/upload/file-upload.component.js.map +1 -0
  271. package/dist/collection/components/upload/file-upload.css +1 -0
  272. package/dist/collection/global/global.js +33 -30
  273. package/dist/collection/utils/i18n.js +3 -4
  274. package/dist/collection/utils/i18n.js.map +1 -1
  275. package/dist/collection/utils/slot/check-slot-content.js +1 -2
  276. package/dist/collection/utils/slot/check-slot-content.js.map +1 -1
  277. package/dist/collection/utils/validation-messages.js +1 -1
  278. package/dist/collection/utils/validation-messages.js.map +1 -1
  279. package/dist/components/bcm-accordion-group.js +24 -20
  280. package/dist/components/bcm-accordion-group.js.map +1 -1
  281. package/dist/components/bcm-accordion.js +78 -59
  282. package/dist/components/bcm-accordion.js.map +1 -1
  283. package/dist/components/bcm-alert.js +1 -112
  284. package/dist/components/bcm-alert.js.map +1 -1
  285. package/dist/components/bcm-avatar.js +26 -14
  286. package/dist/components/bcm-avatar.js.map +1 -1
  287. package/dist/components/bcm-badge.js +1 -1
  288. package/dist/components/bcm-basic-badge.js +76 -60
  289. package/dist/components/bcm-basic-badge.js.map +1 -1
  290. package/dist/components/bcm-button-group.js +39 -25
  291. package/dist/components/bcm-button-group.js.map +1 -1
  292. package/dist/components/bcm-button.js +1 -1
  293. package/dist/components/bcm-checkbox.js +300 -186
  294. package/dist/components/bcm-checkbox.js.map +1 -1
  295. package/dist/components/bcm-chip.js +41 -36
  296. package/dist/components/bcm-chip.js.map +1 -1
  297. package/dist/components/bcm-divider.js +59 -57
  298. package/dist/components/bcm-divider.js.map +1 -1
  299. package/dist/components/bcm-drawer.js +276 -138
  300. package/dist/components/bcm-drawer.js.map +1 -1
  301. package/dist/components/bcm-dropdown-item.js +40 -35
  302. package/dist/components/bcm-dropdown-item.js.map +1 -1
  303. package/dist/components/bcm-dropdown.js +22 -28
  304. package/dist/components/bcm-dropdown.js.map +1 -1
  305. package/dist/components/{bcm-tabs-content.d.ts → bcm-file-upload.d.ts} +4 -4
  306. package/dist/components/bcm-file-upload.js +593 -0
  307. package/dist/components/bcm-file-upload.js.map +1 -0
  308. package/dist/components/bcm-input.js +248 -160
  309. package/dist/components/bcm-input.js.map +1 -1
  310. package/dist/components/bcm-linked.js +1 -1
  311. package/dist/components/bcm-modal.js +196 -119
  312. package/dist/components/bcm-modal.js.map +1 -1
  313. package/dist/components/bcm-pop-confirm.js +354 -215
  314. package/dist/components/bcm-pop-confirm.js.map +1 -1
  315. package/dist/components/bcm-popover.js +431 -157
  316. package/dist/components/bcm-popover.js.map +1 -1
  317. package/dist/components/bcm-radio-group.js +106 -81
  318. package/dist/components/bcm-radio-group.js.map +1 -1
  319. package/dist/components/bcm-radio.js +245 -110
  320. package/dist/components/bcm-radio.js.map +1 -1
  321. package/dist/components/{bcm-tabs-list.d.ts → bcm-segment.d.ts} +4 -4
  322. package/dist/components/bcm-segment.js +110 -0
  323. package/dist/components/bcm-segment.js.map +1 -0
  324. package/dist/components/bcm-segmented-picker.js +238 -117
  325. package/dist/components/bcm-segmented-picker.js.map +1 -1
  326. package/dist/components/bcm-shortcut.js +8 -5
  327. package/dist/components/bcm-shortcut.js.map +1 -1
  328. package/dist/components/bcm-switch.js +296 -158
  329. package/dist/components/bcm-switch.js.map +1 -1
  330. package/dist/components/{bcm-tabs-trigger.d.ts → bcm-tab.d.ts} +4 -4
  331. package/dist/components/bcm-tab.js +71 -0
  332. package/dist/components/bcm-tab.js.map +1 -0
  333. package/dist/components/bcm-tabs.js +200 -249
  334. package/dist/components/bcm-tabs.js.map +1 -1
  335. package/dist/components/bcm-text.js +89 -86
  336. package/dist/components/bcm-text.js.map +1 -1
  337. package/dist/components/bcm-textarea.js +222 -156
  338. package/dist/components/bcm-textarea.js.map +1 -1
  339. package/dist/components/bcm-tooltip.js +402 -154
  340. package/dist/components/bcm-tooltip.js.map +1 -1
  341. package/dist/components/index.js +140 -392
  342. package/dist/components/index.js.map +1 -1
  343. package/dist/components/p-5_TgtzQU.js +119 -0
  344. package/dist/components/p-5_TgtzQU.js.map +1 -0
  345. package/dist/components/p-BfTCfPZ1.js.map +1 -1
  346. package/dist/components/p-CEcVC0yX.js.map +1 -1
  347. package/dist/components/{p-CzcTU1ty.js → p-DBDSgIvP.js} +40 -23
  348. package/dist/components/p-DBDSgIvP.js.map +1 -0
  349. package/dist/components/p-IBjzkjef.js.map +1 -1
  350. package/dist/components/p-RlBWOSgL.js +179 -0
  351. package/dist/components/p-RlBWOSgL.js.map +1 -0
  352. package/dist/components/p-SERXqWcS.js +51 -0
  353. package/dist/components/p-SERXqWcS.js.map +1 -0
  354. package/dist/components/{p-CUvT12BL.js → p-nf_HKsGq.js} +6 -7
  355. package/dist/components/p-nf_HKsGq.js.map +1 -0
  356. package/dist/components/{p-DHONP_n4.js → p-xQIzBLsS.js} +112 -87
  357. package/dist/components/p-xQIzBLsS.js.map +1 -0
  358. package/dist/components/p-z9ESseGb.js +492 -0
  359. package/dist/components/p-z9ESseGb.js.map +1 -0
  360. package/dist/esm/base-choice-control-CKR8UdZ6.js +52 -0
  361. package/dist/esm/base-choice-control-CKR8UdZ6.js.map +1 -0
  362. package/dist/esm/bcm-accordion-group.entry.js +21 -21
  363. package/dist/esm/bcm-accordion-group.entry.js.map +1 -1
  364. package/dist/esm/bcm-accordion.entry.js +75 -60
  365. package/dist/esm/bcm-accordion.entry.js.map +1 -1
  366. package/dist/esm/bcm-alert.entry.js +21 -23
  367. package/dist/esm/bcm-alert.entry.js.map +1 -1
  368. package/dist/esm/bcm-avatar.entry.js +22 -14
  369. package/dist/esm/bcm-avatar.entry.js.map +1 -1
  370. package/dist/esm/bcm-badge.entry.js +114 -84
  371. package/dist/esm/bcm-badge.entry.js.map +1 -1
  372. package/dist/esm/bcm-basic-badge.entry.js +73 -61
  373. package/dist/esm/bcm-basic-badge.entry.js.map +1 -1
  374. package/dist/esm/bcm-button-group.entry.js +36 -26
  375. package/dist/esm/bcm-button-group.entry.js.map +1 -1
  376. package/dist/esm/bcm-button.entry.js +336 -0
  377. package/dist/esm/bcm-button.entry.js.map +1 -0
  378. package/dist/esm/bcm-checkbox.entry.js +284 -176
  379. package/dist/esm/bcm-checkbox.entry.js.map +1 -1
  380. package/dist/esm/bcm-chip.entry.js +38 -37
  381. package/dist/esm/bcm-chip.entry.js.map +1 -1
  382. package/dist/esm/bcm-divider.entry.js +56 -58
  383. package/dist/esm/bcm-divider.entry.js.map +1 -1
  384. package/dist/esm/bcm-drawer.entry.js +330 -0
  385. package/dist/esm/bcm-drawer.entry.js.map +1 -0
  386. package/dist/esm/bcm-dropdown-item.entry.js +36 -35
  387. package/dist/esm/bcm-dropdown-item.entry.js.map +1 -1
  388. package/dist/esm/bcm-dropdown.entry.js +17 -26
  389. package/dist/esm/bcm-dropdown.entry.js.map +1 -1
  390. package/dist/esm/bcm-file-upload.entry.js +550 -0
  391. package/dist/esm/bcm-file-upload.entry.js.map +1 -0
  392. package/dist/esm/bcm-input.entry.js +250 -160
  393. package/dist/esm/bcm-input.entry.js.map +1 -1
  394. package/dist/esm/bcm-linked.entry.js +373 -264
  395. package/dist/esm/bcm-linked.entry.js.map +1 -1
  396. package/dist/esm/bcm-modal.entry.js +358 -0
  397. package/dist/esm/bcm-modal.entry.js.map +1 -0
  398. package/dist/esm/bcm-pop-confirm.entry.js +337 -206
  399. package/dist/esm/bcm-pop-confirm.entry.js.map +1 -1
  400. package/dist/esm/bcm-popover.entry.js +416 -154
  401. package/dist/esm/bcm-popover.entry.js.map +1 -1
  402. package/dist/esm/bcm-radio-group.entry.js +103 -82
  403. package/dist/esm/bcm-radio-group.entry.js.map +1 -1
  404. package/dist/esm/bcm-radio.entry.js +239 -108
  405. package/dist/esm/bcm-radio.entry.js.map +1 -1
  406. package/dist/esm/bcm-segment.bcm-segmented-picker.entry.js.map +1 -0
  407. package/dist/esm/bcm-segment_2.entry.js +332 -0
  408. package/dist/esm/bcm-shortcut.entry.js +5 -6
  409. package/dist/esm/bcm-shortcut.entry.js.map +1 -1
  410. package/dist/esm/bcm-switch.entry.js +281 -150
  411. package/dist/esm/bcm-switch.entry.js.map +1 -1
  412. package/dist/esm/bcm-tab.entry.js +42 -0
  413. package/dist/esm/bcm-tab.entry.js.map +1 -0
  414. package/dist/esm/bcm-tabs.entry.js +191 -239
  415. package/dist/esm/bcm-tabs.entry.js.map +1 -1
  416. package/dist/esm/bcm-text.entry.js +86 -87
  417. package/dist/esm/bcm-text.entry.js.map +1 -1
  418. package/dist/esm/bcm-textarea.entry.js +224 -156
  419. package/dist/esm/bcm-textarea.entry.js.map +1 -1
  420. package/dist/esm/bcm-tooltip.entry.js +386 -152
  421. package/dist/esm/bcm-tooltip.entry.js.map +1 -1
  422. package/dist/esm/bromcom-ui.js +4 -6
  423. package/dist/esm/bromcom-ui.js.map +1 -1
  424. package/dist/esm/{floating-ui.dom-DxMLMJ3r.js → floating-ui.dom-DBDSgIvP.js} +41 -24
  425. package/dist/esm/floating-ui.dom-DBDSgIvP.js.map +1 -0
  426. package/dist/esm/generate-id-IBjzkjef.js.map +1 -1
  427. package/dist/esm/{index-BuuGCw0z.js → index-B6Ppbs5O.js} +165 -398
  428. package/dist/esm/index-B6Ppbs5O.js.map +1 -0
  429. package/dist/esm/index-BfTCfPZ1.js.map +1 -1
  430. package/dist/esm/index.js +0 -2
  431. package/dist/esm/loader.js +3 -5
  432. package/dist/esm/tv-CEcVC0yX.js.map +1 -1
  433. package/dist/esm/{validation-messages-CUvT12BL.js → validation-messages-nf_HKsGq.js} +6 -7
  434. package/dist/{cjs/validation-messages-BjfpSEWk.js.map → esm/validation-messages-nf_HKsGq.js.map} +1 -1
  435. package/dist/types/components/_shared/form/base-choice-control.d.ts +15 -0
  436. package/dist/types/components/_shared/form/base-form-control.d.ts +11 -0
  437. package/dist/types/components/accordion-group/types.d.ts +2 -2
  438. package/dist/types/components/checkbox/checkbox.component.d.ts +89 -71
  439. package/dist/types/components/drawer/drawer.component.d.ts +143 -3
  440. package/dist/types/components/drawer/types.d.ts +1 -1
  441. package/dist/types/components/dropdown/dropdown.component.d.ts +0 -3
  442. package/dist/types/components/input/input.component.d.ts +5 -0
  443. package/dist/types/components/linked/linked.component.d.ts +152 -36
  444. package/dist/types/components/modal/modal.component.d.ts +121 -0
  445. package/dist/types/components/pop-confirm/pop-confirm.component.d.ts +263 -143
  446. package/dist/types/components/popover/popover.component.d.ts +94 -39
  447. package/dist/types/components/radio/radio.component.d.ts +21 -0
  448. package/dist/types/components/segmented-picker/segment.component.d.ts +42 -0
  449. package/dist/types/components/segmented-picker/segmented-picker.component.d.ts +91 -24
  450. package/dist/types/components/switch/switch.component.d.ts +83 -43
  451. package/dist/types/components/tabs/tab.component.d.ts +33 -0
  452. package/dist/types/components/tabs/tabs.component.d.ts +51 -64
  453. package/dist/types/components/textarea/textarea.component.d.ts +5 -0
  454. package/dist/types/components/tooltip/tooltip.component.d.ts +147 -56
  455. package/dist/types/components/upload/file-upload.component.d.ts +107 -0
  456. package/dist/types/components.d.ts +2400 -742
  457. package/dist/types/stencil-public-runtime.d.ts +50 -3
  458. package/package.json +2 -2
  459. package/dist/bromcom-ui/bcm-button.bcm-drawer.bcm-modal.entry.esm.js.map +0 -1
  460. package/dist/bromcom-ui/bcm-segmented-picker-option.entry.esm.js.map +0 -1
  461. package/dist/bromcom-ui/bcm-segmented-picker.entry.esm.js.map +0 -1
  462. package/dist/bromcom-ui/bcm-tabs-content.entry.esm.js.map +0 -1
  463. package/dist/bromcom-ui/bcm-tabs-list.entry.esm.js.map +0 -1
  464. package/dist/bromcom-ui/bcm-tabs-trigger.entry.esm.js.map +0 -1
  465. package/dist/bromcom-ui/p-0101b4f2.entry.js +0 -2
  466. package/dist/bromcom-ui/p-0101b4f2.entry.js.map +0 -1
  467. package/dist/bromcom-ui/p-089edfdc.entry.js.map +0 -1
  468. package/dist/bromcom-ui/p-08bc93c5.entry.js +0 -2
  469. package/dist/bromcom-ui/p-08bc93c5.entry.js.map +0 -1
  470. package/dist/bromcom-ui/p-09be61c3.entry.js +0 -2
  471. package/dist/bromcom-ui/p-09be61c3.entry.js.map +0 -1
  472. package/dist/bromcom-ui/p-11851391.entry.js +0 -2
  473. package/dist/bromcom-ui/p-11851391.entry.js.map +0 -1
  474. package/dist/bromcom-ui/p-11f3e129.entry.js +0 -2
  475. package/dist/bromcom-ui/p-11f3e129.entry.js.map +0 -1
  476. package/dist/bromcom-ui/p-211ca6e0.entry.js +0 -2
  477. package/dist/bromcom-ui/p-211ca6e0.entry.js.map +0 -1
  478. package/dist/bromcom-ui/p-22edf049.entry.js +0 -2
  479. package/dist/bromcom-ui/p-22edf049.entry.js.map +0 -1
  480. package/dist/bromcom-ui/p-2480e468.entry.js.map +0 -1
  481. package/dist/bromcom-ui/p-26d2db9e.entry.js +0 -2
  482. package/dist/bromcom-ui/p-26d2db9e.entry.js.map +0 -1
  483. package/dist/bromcom-ui/p-2d0a6472.entry.js +0 -2
  484. package/dist/bromcom-ui/p-2d0a6472.entry.js.map +0 -1
  485. package/dist/bromcom-ui/p-360bff8a.entry.js +0 -2
  486. package/dist/bromcom-ui/p-360bff8a.entry.js.map +0 -1
  487. package/dist/bromcom-ui/p-488d6ef4.entry.js +0 -2
  488. package/dist/bromcom-ui/p-488d6ef4.entry.js.map +0 -1
  489. package/dist/bromcom-ui/p-5e0702d1.entry.js +0 -2
  490. package/dist/bromcom-ui/p-5e0702d1.entry.js.map +0 -1
  491. package/dist/bromcom-ui/p-63228f7e.entry.js +0 -2
  492. package/dist/bromcom-ui/p-63228f7e.entry.js.map +0 -1
  493. package/dist/bromcom-ui/p-6b585adc.entry.js +0 -2
  494. package/dist/bromcom-ui/p-6b585adc.entry.js.map +0 -1
  495. package/dist/bromcom-ui/p-6d7d73d5.entry.js +0 -2
  496. package/dist/bromcom-ui/p-6d7d73d5.entry.js.map +0 -1
  497. package/dist/bromcom-ui/p-7234af90.entry.js +0 -2
  498. package/dist/bromcom-ui/p-7234af90.entry.js.map +0 -1
  499. package/dist/bromcom-ui/p-83f64814.entry.js +0 -2
  500. package/dist/bromcom-ui/p-83f64814.entry.js.map +0 -1
  501. package/dist/bromcom-ui/p-8ace5a6a.entry.js +0 -2
  502. package/dist/bromcom-ui/p-8ace5a6a.entry.js.map +0 -1
  503. package/dist/bromcom-ui/p-8d74249a.entry.js +0 -2
  504. package/dist/bromcom-ui/p-8d74249a.entry.js.map +0 -1
  505. package/dist/bromcom-ui/p-BuuGCw0z.js +0 -3
  506. package/dist/bromcom-ui/p-BuuGCw0z.js.map +0 -1
  507. package/dist/bromcom-ui/p-CUvT12BL.js +0 -2
  508. package/dist/bromcom-ui/p-DxMLMJ3r.js +0 -2
  509. package/dist/bromcom-ui/p-DxMLMJ3r.js.map +0 -1
  510. package/dist/bromcom-ui/p-a88f20e0.entry.js +0 -2
  511. package/dist/bromcom-ui/p-a88f20e0.entry.js.map +0 -1
  512. package/dist/bromcom-ui/p-bad299f2.entry.js +0 -2
  513. package/dist/bromcom-ui/p-bad299f2.entry.js.map +0 -1
  514. package/dist/bromcom-ui/p-bdaf5653.entry.js +0 -2
  515. package/dist/bromcom-ui/p-bdaf5653.entry.js.map +0 -1
  516. package/dist/bromcom-ui/p-c0e7f9d6.entry.js +0 -2
  517. package/dist/bromcom-ui/p-c0e7f9d6.entry.js.map +0 -1
  518. package/dist/bromcom-ui/p-c34f0a66.entry.js +0 -2
  519. package/dist/bromcom-ui/p-c34f0a66.entry.js.map +0 -1
  520. package/dist/bromcom-ui/p-d7cea19f.entry.js +0 -2
  521. package/dist/bromcom-ui/p-d7cea19f.entry.js.map +0 -1
  522. package/dist/bromcom-ui/p-e5e0ac07.entry.js +0 -2
  523. package/dist/bromcom-ui/p-e5e0ac07.entry.js.map +0 -1
  524. package/dist/bromcom-ui/p-ee5f877f.entry.js +0 -2
  525. package/dist/bromcom-ui/p-ee5f877f.entry.js.map +0 -1
  526. package/dist/bromcom-ui/p-fbccbffc.entry.js +0 -2
  527. package/dist/bromcom-ui/p-fbccbffc.entry.js.map +0 -1
  528. package/dist/cjs/bcm-accordion-group.cjs.entry.js.map +0 -1
  529. package/dist/cjs/bcm-accordion.cjs.entry.js.map +0 -1
  530. package/dist/cjs/bcm-alert.cjs.entry.js.map +0 -1
  531. package/dist/cjs/bcm-avatar.cjs.entry.js.map +0 -1
  532. package/dist/cjs/bcm-badge.cjs.entry.js.map +0 -1
  533. package/dist/cjs/bcm-basic-badge.cjs.entry.js.map +0 -1
  534. package/dist/cjs/bcm-button-group.cjs.entry.js.map +0 -1
  535. package/dist/cjs/bcm-button.bcm-drawer.bcm-modal.entry.cjs.js.map +0 -1
  536. package/dist/cjs/bcm-button_3.cjs.entry.js +0 -794
  537. package/dist/cjs/bcm-button_3.cjs.entry.js.map +0 -1
  538. package/dist/cjs/bcm-checkbox.cjs.entry.js.map +0 -1
  539. package/dist/cjs/bcm-chip.cjs.entry.js.map +0 -1
  540. package/dist/cjs/bcm-divider.cjs.entry.js.map +0 -1
  541. package/dist/cjs/bcm-dropdown-item.cjs.entry.js.map +0 -1
  542. package/dist/cjs/bcm-dropdown.cjs.entry.js.map +0 -1
  543. package/dist/cjs/bcm-input.cjs.entry.js.map +0 -1
  544. package/dist/cjs/bcm-linked.cjs.entry.js.map +0 -1
  545. package/dist/cjs/bcm-pop-confirm.cjs.entry.js.map +0 -1
  546. package/dist/cjs/bcm-popover.cjs.entry.js.map +0 -1
  547. package/dist/cjs/bcm-radio-group.cjs.entry.js.map +0 -1
  548. package/dist/cjs/bcm-radio.cjs.entry.js.map +0 -1
  549. package/dist/cjs/bcm-segmented-picker-option.cjs.entry.js +0 -107
  550. package/dist/cjs/bcm-segmented-picker-option.cjs.entry.js.map +0 -1
  551. package/dist/cjs/bcm-segmented-picker-option.entry.cjs.js.map +0 -1
  552. package/dist/cjs/bcm-segmented-picker.cjs.entry.js +0 -144
  553. package/dist/cjs/bcm-segmented-picker.cjs.entry.js.map +0 -1
  554. package/dist/cjs/bcm-segmented-picker.entry.cjs.js.map +0 -1
  555. package/dist/cjs/bcm-shortcut.cjs.entry.js.map +0 -1
  556. package/dist/cjs/bcm-switch.cjs.entry.js.map +0 -1
  557. package/dist/cjs/bcm-tabs-content.cjs.entry.js +0 -20
  558. package/dist/cjs/bcm-tabs-content.cjs.entry.js.map +0 -1
  559. package/dist/cjs/bcm-tabs-content.entry.cjs.js.map +0 -1
  560. package/dist/cjs/bcm-tabs-list.cjs.entry.js +0 -84
  561. package/dist/cjs/bcm-tabs-list.cjs.entry.js.map +0 -1
  562. package/dist/cjs/bcm-tabs-list.entry.cjs.js.map +0 -1
  563. package/dist/cjs/bcm-tabs-trigger.cjs.entry.js +0 -122
  564. package/dist/cjs/bcm-tabs-trigger.cjs.entry.js.map +0 -1
  565. package/dist/cjs/bcm-tabs-trigger.entry.cjs.js.map +0 -1
  566. package/dist/cjs/bcm-tabs.cjs.entry.js.map +0 -1
  567. package/dist/cjs/bcm-text.cjs.entry.js.map +0 -1
  568. package/dist/cjs/bcm-textarea.cjs.entry.js.map +0 -1
  569. package/dist/cjs/bcm-tooltip.cjs.entry.js.map +0 -1
  570. package/dist/cjs/floating-ui.dom-DyKmFgkP.js.map +0 -1
  571. package/dist/cjs/index-BtiU-G2W.js.map +0 -1
  572. package/dist/collection/components/segmented-picker/segmented-picker-option.component.js +0 -253
  573. package/dist/collection/components/segmented-picker/segmented-picker-option.component.js.map +0 -1
  574. package/dist/collection/components/segmented-picker/segmented-picker-option.css +0 -1
  575. package/dist/collection/components/tabs/tabs-content.component.js +0 -46
  576. package/dist/collection/components/tabs/tabs-content.component.js.map +0 -1
  577. package/dist/collection/components/tabs/tabs-content.css +0 -1
  578. package/dist/collection/components/tabs/tabs-list.component.js +0 -133
  579. package/dist/collection/components/tabs/tabs-list.component.js.map +0 -1
  580. package/dist/collection/components/tabs/tabs-list.css +0 -1
  581. package/dist/collection/components/tabs/tabs-trigger.component.js +0 -267
  582. package/dist/collection/components/tabs/tabs-trigger.component.js.map +0 -1
  583. package/dist/collection/components/tabs/tabs-trigger.css +0 -1
  584. package/dist/components/bcm-segmented-picker-option.d.ts +0 -11
  585. package/dist/components/bcm-segmented-picker-option.js +0 -131
  586. package/dist/components/bcm-segmented-picker-option.js.map +0 -1
  587. package/dist/components/bcm-tabs-content.js +0 -39
  588. package/dist/components/bcm-tabs-content.js.map +0 -1
  589. package/dist/components/bcm-tabs-list.js +0 -104
  590. package/dist/components/bcm-tabs-list.js.map +0 -1
  591. package/dist/components/bcm-tabs-trigger.js +0 -146
  592. package/dist/components/bcm-tabs-trigger.js.map +0 -1
  593. package/dist/components/p-BHwftRkk.js +0 -379
  594. package/dist/components/p-BHwftRkk.js.map +0 -1
  595. package/dist/components/p-CQF7wlXf.js +0 -145
  596. package/dist/components/p-CQF7wlXf.js.map +0 -1
  597. package/dist/components/p-CUvT12BL.js.map +0 -1
  598. package/dist/components/p-CzcTU1ty.js.map +0 -1
  599. package/dist/components/p-DHONP_n4.js.map +0 -1
  600. package/dist/esm/bcm-button.bcm-drawer.bcm-modal.entry.js.map +0 -1
  601. package/dist/esm/bcm-button_3.entry.js +0 -790
  602. package/dist/esm/bcm-button_3.entry.js.map +0 -1
  603. package/dist/esm/bcm-segmented-picker-option.entry.js +0 -105
  604. package/dist/esm/bcm-segmented-picker-option.entry.js.map +0 -1
  605. package/dist/esm/bcm-segmented-picker.entry.js +0 -142
  606. package/dist/esm/bcm-segmented-picker.entry.js.map +0 -1
  607. package/dist/esm/bcm-tabs-content.entry.js +0 -18
  608. package/dist/esm/bcm-tabs-content.entry.js.map +0 -1
  609. package/dist/esm/bcm-tabs-list.entry.js +0 -82
  610. package/dist/esm/bcm-tabs-list.entry.js.map +0 -1
  611. package/dist/esm/bcm-tabs-trigger.entry.js +0 -120
  612. package/dist/esm/bcm-tabs-trigger.entry.js.map +0 -1
  613. package/dist/esm/floating-ui.dom-DxMLMJ3r.js.map +0 -1
  614. package/dist/esm/index-BuuGCw0z.js.map +0 -1
  615. package/dist/types/components/segmented-picker/segmented-picker-option.component.d.ts +0 -30
  616. package/dist/types/components/tabs/tabs-content.component.d.ts +0 -13
  617. package/dist/types/components/tabs/tabs-list.component.d.ts +0 -20
  618. package/dist/types/components/tabs/tabs-trigger.component.d.ts +0 -49
@@ -12,14 +12,16 @@ import { AvatarShape, AvatarSize, AvatarStatus } from "./components/avatar/types
12
12
  import { ButtonKind, ButtonPosition, ButtonSize, ButtonStatus, ButtonType, ButtonVariant, IconPosition } from "./components/button/types";
13
13
  import { ChipKind, ChipSize, ChipStatus } from "./components/chip/types";
14
14
  import { DrawerPosition, DrawerSize } from "./components/drawer/types";
15
+ import { BcmUploadErrorMessages, BcmUploadItem } from "./components/upload/file-upload.component";
15
16
  import { InputSize, InputStatus, InputType } from "./components/input/types";
16
17
  import { Event } from "./stencil-public-runtime";
17
18
  import { TriggerType } from "./components/linked/linked.component";
18
19
  import { Placement } from "@floating-ui/dom";
19
20
  import { ModalPlacement, ModalSize } from "./components/modal/modal.component";
20
- import { SegmentedPickerSize } from "./components/segmented-picker/types";
21
+ import { PopConfirmPlacement, PopConfirmSize, PopConfirmStatus } from "./components/pop-confirm/pop-confirm.component";
21
22
  import { TextSize, TextVariant } from "./components/text/text.types";
22
23
  import { InputSize as InputSize1, InputStatus as InputStatus1, TextareaResize } from "./components/textarea/types";
24
+ import { TooltipPlacement, TooltipSize, TooltipTrigger } from "./components/tooltip/tooltip.component";
23
25
  export { AccordionChangeEventType } from "./components/accordion/types";
24
26
  export { AccordionGroupChangeEventType } from "./components/accordion-group/types";
25
27
  export { AlertKind, AlertSize, AlertStatus } from "./components/alert/types";
@@ -27,14 +29,16 @@ export { AvatarShape, AvatarSize, AvatarStatus } from "./components/avatar/types
27
29
  export { ButtonKind, ButtonPosition, ButtonSize, ButtonStatus, ButtonType, ButtonVariant, IconPosition } from "./components/button/types";
28
30
  export { ChipKind, ChipSize, ChipStatus } from "./components/chip/types";
29
31
  export { DrawerPosition, DrawerSize } from "./components/drawer/types";
32
+ export { BcmUploadErrorMessages, BcmUploadItem } from "./components/upload/file-upload.component";
30
33
  export { InputSize, InputStatus, InputType } from "./components/input/types";
31
34
  export { Event } from "./stencil-public-runtime";
32
35
  export { TriggerType } from "./components/linked/linked.component";
33
36
  export { Placement } from "@floating-ui/dom";
34
37
  export { ModalPlacement, ModalSize } from "./components/modal/modal.component";
35
- export { SegmentedPickerSize } from "./components/segmented-picker/types";
38
+ export { PopConfirmPlacement, PopConfirmSize, PopConfirmStatus } from "./components/pop-confirm/pop-confirm.component";
36
39
  export { TextSize, TextVariant } from "./components/text/text.types";
37
40
  export { InputSize as InputSize1, InputStatus as InputStatus1, TextareaResize } from "./components/textarea/types";
41
+ export { TooltipPlacement, TooltipSize, TooltipTrigger } from "./components/tooltip/tooltip.component";
38
42
  export namespace Components {
39
43
  /**
40
44
  * @component BcmAccordion
@@ -500,58 +504,122 @@ export namespace Components {
500
504
  "status"?: ButtonStatus;
501
505
  }
502
506
  /**
503
- * @description A checkbox component that allows users to select or deselect an option.
504
- * It also supports an indeterminate state.
507
+ * @component BcmCheckbox
508
+ * @description A form-associated checkbox component representing a boolean choice.
509
+ * Integrates with native HTML forms via ElementInternals while supporting
510
+ * **three validation strategies** via `validation-mode`:
511
+ * - **`native`**
512
+ * - Participates in native browser constraint validation.
513
+ * - Sets the underlying input's `required`.
514
+ * - Browser may show native validation bubbles when submit/reportValidity happens.
515
+ * - **`silent`**
516
+ * - Does **not** set native `required` (prevents browser bubble).
517
+ * - Computes "missing required" internally and exposes it via `error` + `caption`.
518
+ * - UI errors are **gated**: shown only after `touched` or a form submit attempt.
519
+ * - **`none`**
520
+ * - Value-only mode: submits value but never becomes invalid.
521
+ * ## UI error gating (silent mode)
522
+ * - `touched` becomes true after first user interaction
523
+ * - `submitAttempted` becomes true when the parent form emits `submit`
524
+ * ## Value behavior
525
+ * - When checked → submits `value` (default: `"on"`).
526
+ * - When unchecked → submits no value (`null`).
527
+ * - When disabled → no submission and no validity participation.
528
+ * ## Shadow Parts
529
+ * - `checkbox` → root container
530
+ * - `control` → visual checkbox box
531
+ * - `icon` → icon container (check or minus)
532
+ * - `label` → label text
533
+ * - `caption` → helper/error text (silent mode UI)
534
+ * - `input` → hidden native input
535
+ * @example Basic usage
536
+ * <bcm-checkbox name="terms" required>
537
+ * I agree to the terms and conditions
538
+ * </bcm-checkbox>
539
+ * @example Silent validation (no native bubble)
540
+ * <form>
541
+ * <bcm-checkbox name="newsletter" required validation-mode="silent">
542
+ * Subscribe to newsletter
543
+ * </bcm-checkbox>
544
+ * <button type="submit">Submit</button>
545
+ * </form>
546
+ * @example Value-only mode
547
+ * <bcm-checkbox name="analytics" validation-mode="none">
548
+ * Allow analytics
549
+ * </bcm-checkbox>
505
550
  */
506
551
  interface BcmCheckbox {
507
552
  /**
508
- * Unique ID for the component. Automatically generated if not specified.
553
+ * Unique ID for the component. Automatically generated if not specified. Used to bind the visible label to the internal input.
509
554
  * @default generateId('bcm-checkbox')
510
555
  */
511
556
  "_id"?: string;
512
557
  /**
513
- * Determines if the checkbox is checked
558
+ * Helper / error caption (silent mode UI)
559
+ */
560
+ "caption"?: string;
561
+ /**
562
+ * Checked state
514
563
  * @default false
515
564
  */
516
565
  "checked": boolean;
517
566
  /**
518
- * Determines if the checkbox is disabled
567
+ * Disabled state
519
568
  * @default false
520
569
  */
521
570
  "disabled": boolean;
522
571
  /**
523
- * Indicates if the checkbox is in an error state. This affects the visual styling of the component.
572
+ * Visual error state. - In `silent` mode this can be managed internally. - In other modes you can set it externally as well.
524
573
  * @default false
525
574
  */
526
575
  "error": boolean;
527
576
  /**
528
- * Full width checkbox
577
+ * Makes checkbox occupy full width (if your styles support it).
529
578
  * @default false
530
579
  */
531
580
  "fullWidth": boolean;
532
581
  /**
533
- * Determines if the checkbox is in an indeterminate state. This is useful when some items in a group of checkboxes are selected and others are not.
582
+ * Indeterminate (mixed) state. Useful when a group selection is partially selected.
534
583
  * @default false
535
584
  */
536
585
  "indeterminate": boolean;
537
586
  /**
538
- * Label text to display next to the checkbox
587
+ * Visible label text (optional). You can also use the default slot.
539
588
  */
540
589
  "label"?: string;
541
590
  /**
542
- * Controls the position of the label relative to the checkbox
591
+ * Label position relative to the checkbox control.
543
592
  * @default 'right'
544
593
  */
545
594
  "labelPosition": 'left' | 'right';
546
595
  /**
547
- * Name attribute for the checkbox when used in a form
596
+ * Form field name
548
597
  */
549
- "name": string;
598
+ "name"?: string;
599
+ /**
600
+ * Optional readonly support
601
+ * @default false
602
+ */
603
+ "readonly": boolean;
550
604
  /**
551
- * Size variant of the checkbox
605
+ * Required state
606
+ * @default false
607
+ */
608
+ "required": boolean;
609
+ /**
610
+ * Size variant (affects control + typography).
552
611
  * @default 'medium'
553
612
  */
554
613
  "size": 'small' | 'medium' | 'large';
614
+ /**
615
+ * @default 'native'
616
+ */
617
+ "validationMode": 'native' | 'silent' | 'none';
618
+ /**
619
+ * Value submitted when checked
620
+ * @default 'on'
621
+ */
622
+ "value": string;
555
623
  }
556
624
  /**
557
625
  * @component BcmChip
@@ -635,30 +703,109 @@ export namespace Components {
635
703
  */
636
704
  "variant": 'solid' | 'dashed' | 'dotted';
637
705
  }
706
+ /**
707
+ * @component BcmDrawer
708
+ * @description A slide-in panel component built on the native HTML Dialog API.
709
+ * Ideal for navigation menus, forms, and contextual information that slides in from any edge of the screen.
710
+ * @example ```html
711
+ * <!-- Basic usage -->
712
+ * <bcm-drawer open header-text="Menu" position="left">
713
+ * <nav>
714
+ * <a href="/home">Home</a>
715
+ * <a href="/about">About</a>
716
+ * </nav>
717
+ * </bcm-drawer>
718
+ * <!-- Custom size and position -->
719
+ * <bcm-drawer size="large" position="right">
720
+ * <div slot="header">Settings</div>
721
+ * <form>...</form>
722
+ * <div slot="footer">
723
+ * <button data-dismiss>Cancel</button>
724
+ * <button>Save</button>
725
+ * </div>
726
+ * </bcm-drawer>
727
+ * <!-- Custom size with CSS units -->
728
+ * <bcm-drawer size="600px" position="bottom">
729
+ * <p>Custom height drawer</p>
730
+ * </bcm-drawer>
731
+ * <!-- Programmatic usage -->
732
+ * <bcm-drawer id="myDrawer">Content</bcm-drawer>
733
+ * <script>
734
+ * document.getElementById('myDrawer').show();
735
+ * </script>
736
+ * ```
737
+ */
638
738
  interface BcmDrawer {
639
739
  /**
740
+ * Controls backdrop behavior - true: Shows backdrop, drawer can be closed by clicking outside - false: No backdrop - 'static': Shows backdrop but prevents closing by clicking outside (triggers shake animation)
741
+ * @default true
742
+ */
743
+ "backdrop": boolean | 'static';
744
+ /**
745
+ * Allows closing the drawer by clicking on the backdrop
746
+ * @default true
747
+ */
748
+ "closeOnBackdrop": boolean;
749
+ /**
750
+ * Allows closing the drawer by pressing the Escape key
751
+ * @default true
752
+ */
753
+ "closeOnEscape": boolean;
754
+ /**
755
+ * Makes the drawer take the full screen (100vw x 100vh)
756
+ * @default false
757
+ */
758
+ "fullScreen": boolean;
759
+ /**
760
+ * Makes the drawer take full width (for left/right) or full height (for top/bottom)
640
761
  * @default false
641
762
  */
642
763
  "fullWidth": boolean;
764
+ /**
765
+ * Text to display in the drawer header
766
+ */
643
767
  "headerText"?: string;
768
+ /**
769
+ * Helper text to display below the header title
770
+ */
771
+ "helperText"?: string;
772
+ /**
773
+ * Programmatically closes the drawer
774
+ */
644
775
  "hide": () => Promise<void>;
645
776
  /**
777
+ * Hides the footer section completely
778
+ * @default false
779
+ */
780
+ "noFooter": boolean;
781
+ /**
782
+ * Hides the header section completely
646
783
  * @default false
647
784
  */
648
785
  "noHeader": boolean;
649
786
  /**
787
+ * Controls whether the drawer is open or closed
650
788
  * @default false
651
789
  */
652
790
  "open": boolean;
653
791
  /**
792
+ * The position where the drawer slides in from - 'left': Slides from the left edge - 'right': Slides from the right edge - 'top': Slides from the top edge - 'bottom': Slides from the bottom edge
654
793
  * @default 'right'
655
794
  */
656
795
  "position": DrawerPosition;
796
+ /**
797
+ * Programmatically opens the drawer
798
+ */
657
799
  "show": () => Promise<void>;
658
800
  /**
801
+ * The size of the drawer. Can be a preset value or a custom CSS size - For left/right drawers: - 'small': 320px - 'medium': 480px - 'large': 1064px - For top/bottom drawers: - 'small': 40vh - 'medium': 60vh - 'large': 90vh - Custom values: Any valid CSS size (e.g., '600px', '50%', '30rem', '80vw')
659
802
  * @default 'medium'
660
803
  */
661
804
  "size": DrawerSize;
805
+ /**
806
+ * Toggles the drawer open/closed state
807
+ */
808
+ "toggle": () => Promise<void>;
662
809
  }
663
810
  interface BcmDropdown {
664
811
  "text"?: string;
@@ -680,6 +827,56 @@ export namespace Components {
680
827
  "selected": boolean;
681
828
  "text": string;
682
829
  }
830
+ interface BcmFileUpload {
831
+ /**
832
+ * @default '.xls,.pdf'
833
+ */
834
+ "accept": string;
835
+ /**
836
+ * @default ''
837
+ */
838
+ "caption"?: string;
839
+ /**
840
+ * Allows consumers to override default error messages.
841
+ */
842
+ "customErrorMessages"?: BcmUploadErrorMessages;
843
+ /**
844
+ * @default false
845
+ */
846
+ "disabled": boolean;
847
+ /**
848
+ * @default ''
849
+ */
850
+ "label": string;
851
+ /**
852
+ * Maximum number of files allowed in total. Only applied when `multiple` is true.
853
+ */
854
+ "maxFileCount"?: number;
855
+ /**
856
+ * @default 2
857
+ */
858
+ "maxSize": number;
859
+ /**
860
+ * @default false
861
+ */
862
+ "multiple": boolean;
863
+ /**
864
+ * @default 'file'
865
+ */
866
+ "name": string;
867
+ /**
868
+ * @default false
869
+ */
870
+ "required": boolean;
871
+ /**
872
+ * @default 'medium'
873
+ */
874
+ "size": 'medium' | 'small';
875
+ /**
876
+ * Reserved for future backend upload integration. Currently does not affect component behavior.
877
+ */
878
+ "uploadUrl"?: string;
879
+ }
683
880
  interface BcmInput {
684
881
  /**
685
882
  * Input id
@@ -807,221 +1004,436 @@ export namespace Components {
807
1004
  */
808
1005
  "value": string;
809
1006
  }
1007
+ /**
1008
+ * @component BcmLinked
1009
+ * @description A flexible linked floating element component that displays contextual content relative to a trigger element.
1010
+ * Built on the native Popover API for top-layer rendering and Floating UI for intelligent positioning.
1011
+ * Supports different trigger types (click, hover, focus, manual) and comprehensive event system.
1012
+ * @example Basic Click Trigger
1013
+ * <bcm-linked trigger="click">
1014
+ * <button slot="trigger">Click Me</button>
1015
+ * <div>Floating content here</div>
1016
+ * </bcm-linked>
1017
+ * @example Hover Trigger with Delays
1018
+ * <bcm-linked trigger="hover" show-delay="200" hide-delay="100">
1019
+ * <span slot="trigger">Hover Me</span>
1020
+ * <div>This appears on hover</div>
1021
+ * </bcm-linked>
1022
+ * @example Manual Control
1023
+ * <bcm-linked id="my-linked" trigger="manual">
1024
+ * <button slot="trigger">Trigger</button>
1025
+ * <div>Controlled content</div>
1026
+ * </bcm-linked>
1027
+ * <script>
1028
+ * const linked = document.querySelector('#my-linked');
1029
+ * linked.show(); // Opens the floating element
1030
+ * linked.hide(); // Closes the floating element
1031
+ * </script>
1032
+ * @csspart floating - The floating container element
1033
+ * @csspart arrow - The arrow element pointing to the trigger
1034
+ * @csspart content - The content wrapper element
1035
+ */
810
1036
  interface BcmLinked {
811
1037
  /**
812
- * @default false
1038
+ * @prop {boolean} closeOnEscape - Whether to close when pressing Escape key. Default: true
1039
+ * @default true
813
1040
  */
814
- "appendToBody": boolean;
1041
+ "closeOnEscape": boolean;
815
1042
  /**
816
- * @default false
1043
+ * @prop {boolean} closeOnOutsideClick - Whether to close when clicking outside. Default: true
1044
+ * @default true
817
1045
  */
818
- "arrow": boolean;
1046
+ "closeOnOutsideClick": boolean;
819
1047
  /**
1048
+ * @prop {boolean} disabled - Disables the floating element, preventing it from showing. Default: false
820
1049
  * @default false
821
1050
  */
822
- "destroyOnHide": boolean;
1051
+ "disabled": boolean;
823
1052
  /**
824
- * @default false
1053
+ * Programmatically hides the floating element. Respects the hideDelay prop.
825
1054
  */
826
- "disabled": boolean;
827
1055
  "hide": () => Promise<void>;
828
1056
  /**
1057
+ * @prop {number} hideDelay - Delay in milliseconds before hiding the floating element. Default: 0
829
1058
  * @default 0
830
1059
  */
831
1060
  "hideDelay": number;
832
1061
  /**
1062
+ * @prop {number} offsetDistance - Distance in pixels between the floating element and the trigger. Default: 8
833
1063
  * @default 8
834
1064
  */
835
- "offset": number;
1065
+ "offsetDistance": number;
836
1066
  /**
1067
+ * @prop {Placement} placement - Defines the position of the floating element relative to the trigger. Default: 'bottom-start'
837
1068
  * @default 'bottom-start'
838
1069
  */
839
1070
  "placement": Placement;
1071
+ /**
1072
+ * Programmatically shows the floating element. Respects the showDelay prop.
1073
+ */
840
1074
  "show": () => Promise<void>;
841
1075
  /**
1076
+ * @prop {boolean} showArrow - Whether to show an arrow pointing to the trigger element. Default: true
1077
+ * @default true
1078
+ */
1079
+ "showArrow": boolean;
1080
+ /**
1081
+ * @prop {number} showDelay - Delay in milliseconds before showing the floating element. Default: 0
842
1082
  * @default 0
843
1083
  */
844
1084
  "showDelay": number;
845
- "targetElement"?: HTMLElement;
846
- "targetId"?: string;
1085
+ /**
1086
+ * Toggles the floating element visibility.
1087
+ */
847
1088
  "toggle": () => Promise<void>;
848
1089
  /**
1090
+ * @prop {TriggerType} trigger - Defines the interaction type to show/hide the floating element. 'click' toggles on click, 'hover' shows on mouse enter and hides on mouse leave, 'focus' shows on focus and hides on blur, 'manual' requires programmatic control. Default: 'click'
849
1091
  * @default 'click'
850
1092
  */
851
1093
  "trigger": TriggerType;
852
- "updatePositioning": () => Promise<void>;
853
1094
  /**
854
- * @default 1000
1095
+ * Updates the position of the floating element. Useful when the trigger element moves or resizes.
1096
+ */
1097
+ "updatePosition": () => Promise<void>;
1098
+ /**
1099
+ * @prop {boolean} visible - Controls the visibility state of the floating element. Can be set programmatically or toggled by user interaction. Default: false
1100
+ * @default false
855
1101
  */
856
- "zIndex": number;
1102
+ "visible": boolean;
857
1103
  }
1104
+ /**
1105
+ * @component BcmModal
1106
+ * @description A flexible modal dialog component built on the native HTML Dialog API.
1107
+ * Provides a powerful way to display content in a layer above the page with full keyboard and focus management.
1108
+ * @example ```html
1109
+ * <!-- Basic usage -->
1110
+ * <bcm-modal open header-text="Welcome" helper-text="Please read carefully">
1111
+ * <p>Modal content goes here</p>
1112
+ * <div slot="footer">
1113
+ * <button data-dismiss>Close</button>
1114
+ * </div>
1115
+ * </bcm-modal>
1116
+ * <!-- Custom size and placement -->
1117
+ * <bcm-modal size="large" placement="top">
1118
+ * <div slot="header">Custom Header</div>
1119
+ * <p>Content here</p>
1120
+ * <div slot="footer">
1121
+ * <button>Cancel</button>
1122
+ * <button>Confirm</button>
1123
+ * </div>
1124
+ * </bcm-modal>
1125
+ * <!-- Full screen modal -->
1126
+ * <bcm-modal full-screen no-footer>
1127
+ * <p>Full screen content</p>
1128
+ * </bcm-modal>
1129
+ * <!-- Programmatic usage -->
1130
+ * <bcm-modal id="myModal">Content</bcm-modal>
1131
+ * <script>
1132
+ * document.getElementById('myModal').show();
1133
+ * </script>
1134
+ * ```
1135
+ */
858
1136
  interface BcmModal {
859
1137
  /**
1138
+ * Controls backdrop behavior - true: Shows backdrop, modal can be closed by clicking outside - false: No backdrop - 'static': Shows backdrop but prevents closing by clicking outside (triggers shake animation)
860
1139
  * @default true
861
1140
  */
862
1141
  "backdrop": boolean | 'static';
863
1142
  /**
1143
+ * Allows closing the modal by clicking on the backdrop
864
1144
  * @default true
865
1145
  */
866
1146
  "closeOnBackdrop": boolean;
867
1147
  /**
1148
+ * Allows closing the modal by pressing the Escape key
868
1149
  * @default true
869
1150
  */
870
1151
  "closeOnEscape": boolean;
871
1152
  /**
1153
+ * Makes the modal take the full screen (100vw x 100vh, no border radius)
872
1154
  * @default false
873
1155
  */
874
1156
  "fullScreen": boolean;
875
1157
  /**
1158
+ * Makes the modal take full width of the viewport (max-width: 100%)
876
1159
  * @default false
877
1160
  */
878
1161
  "fullWidth": boolean;
1162
+ /**
1163
+ * Text to display in the modal header
1164
+ */
879
1165
  "headerText"?: string;
1166
+ /**
1167
+ * Helper text to display below the header title
1168
+ */
880
1169
  "helperText"?: string;
1170
+ /**
1171
+ * Programmatically closes the modal
1172
+ */
881
1173
  "hide": () => Promise<void>;
882
1174
  /**
1175
+ * Hides the footer section completely
883
1176
  * @default false
884
1177
  */
885
1178
  "noFooter": boolean;
886
1179
  /**
1180
+ * Hides the header section completely
887
1181
  * @default false
888
1182
  */
889
1183
  "noHeader": boolean;
890
1184
  /**
1185
+ * Controls whether the modal is open or closed
891
1186
  * @default false
892
1187
  */
893
1188
  "open": boolean;
894
1189
  /**
1190
+ * The placement of the modal on the screen - 'center': Centered vertically and horizontally - 'top': Aligned to the top with 80px padding
895
1191
  * @default 'center'
896
1192
  */
897
1193
  "placement": ModalPlacement;
1194
+ /**
1195
+ * Programmatically opens the modal
1196
+ */
898
1197
  "show": () => Promise<void>;
899
1198
  /**
1199
+ * The size of the modal - 'small': 400px - 'medium': 600px - 'large': 800px - 'xlarge': 1024px - 'xxlarge': 1200px - 'full': 100% width
900
1200
  * @default 'medium'
901
1201
  */
902
1202
  "size": ModalSize;
1203
+ /**
1204
+ * Toggles the modal open/closed state
1205
+ */
903
1206
  "toggle": () => Promise<void>;
904
1207
  }
905
1208
  /**
906
1209
  * @component BcmPopConfirm
907
- * @description A floating confirmation pop-up component that prompts users for action confirmation, triggered by click or hover events.
908
- * Offers customizable header, body content, and footer areas through slots, with accessibility and positioning features.
909
- * @example Basic usage
910
- * <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>
911
- * @example With all slots and custom styling
912
- * <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">
913
- * <span slot="header">Custom Header Text</span>
914
- * <span slot="body">Additional details here</span>
915
- * <span slot="footer">Custom Footer Action</span>
1210
+ * @description A confirmation popover component that displays a confirmation dialog with customizable actions.
1211
+ * Built on the native Popover API for top-layer rendering and Floating UI for intelligent positioning.
1212
+ * Ideal for confirming destructive actions or important decisions inline.
1213
+ * @csspart container - The main popover container element
1214
+ * @csspart arrow - The arrow pointer element
1215
+ * @csspart body - The body/description section
1216
+ * @csspart footer - The footer section with action buttons
1217
+ * @example Basic Usage
1218
+ * ```html
1219
+ * <bcm-pop-confirm
1220
+ * header-text="Delete Item?"
1221
+ * description="Are you sure you want to delete this item? This action cannot be undone."
1222
+ * status="error"
1223
+ * >
1224
+ * <bcm-button status="error">Delete</bcm-button>
916
1225
  * </bcm-pop-confirm>
917
- * @example Event handling
918
- * // Listen to confirmation events
919
- * const popConfirm = document.querySelector('bcm-pop-confirm');
920
- * popConfirm.addEventListener('bcmConfirm', () => {
921
- * console.log('User confirmed the action!');
1226
+ * ```
1227
+ * @example With Event Handlers
1228
+ * ```html
1229
+ * <bcm-pop-confirm
1230
+ * id="deleteConfirm"
1231
+ * header-text="Confirm Delete"
1232
+ * description="This will permanently delete the item."
1233
+ * status="warning"
1234
+ * confirm-text="Yes, Delete"
1235
+ * cancel-text="No, Keep It"
1236
+ * >
1237
+ * <bcm-button>Delete Item</bcm-button>
1238
+ * </bcm-pop-confirm>
1239
+ * <script>
1240
+ * const popconfirm = document.getElementById('deleteConfirm');
1241
+ * popconfirm.addEventListener('bcmConfirm', () => {
1242
+ * console.log('User confirmed deletion');
1243
+ * // Perform delete operation
922
1244
  * });
923
- * popConfirm.addEventListener('bcmCancel', () => {
924
- * console.log('User canceled the action!');
1245
+ * popconfirm.addEventListener('bcmCancel', () => {
1246
+ * console.log('User cancelled deletion');
925
1247
  * });
926
- * // Programmatically control pop-up
927
- * await popConfirm.show(); // Show the pop-up
928
- * await popConfirm.hide(); // Hide the pop-up
929
- * @prop {string} arrowColor - The color of the arrow pointing to the trigger element (default: 'var(--bcm-ui-color-background-basic-panel)')
930
- * @prop {string} cancelText - Text displayed on the cancel button (default: 'Cancel')
931
- * @prop {string} confirmText - Text displayed on the confirm button (default: 'Yes')
932
- * @prop {string} description - The description or body content of the pop-up (default: '')
933
- * @prop {string} headerText - The header text displayed at the top of the pop-up (default: '')
934
- * @prop {Placement} placement - The placement position of the pop-up relative to the trigger (default: 'right')
935
- * @prop {('small' | 'medium' | 'large')} size - The size of the pop-up, determining its dimensions (default: 'medium')
936
- * @prop {('info' | 'error' | 'warning' | 'success' | 'default')} status - The status of the pop-up, affecting its icon and color (default: 'info')
937
- * @prop {boolean} statusIcon - Whether to display a status icon based on the `status` prop (default: true)
938
- * @prop {string} targetId - The ID of the trigger element (e.g., a button) that opens the pop-up
939
- * @event {EventEmitter<void>} bcmConfirm - Emitted when the user confirms the action in the pop-up
940
- * @event {EventEmitter<void>} bcmCancel - Emitted when the user cancels the action in the pop-up
941
- * @csspart container - The root container element of the pop-up
942
- * @csspart header - The header section with title and close icon
943
- * @csspart content - The main content section of the pop-up
944
- * @csspart footer - The footer section with confirm/cancel buttons
945
- * @csspart arrow - The positioning arrow pointing to the trigger
946
- * @css {string} --popover-radius - Border radius of the pop-up (default: defined in CSS)
947
- * @css {string} --popover-bg - Background color of the pop-up
948
- * @css {string} --text-color - Text color of the pop-up based on status
949
- * @methods show() - Programmatically shows the pop-up
950
- * hide() - Programmatically hides the pop-up
1248
+ * </script>
1249
+ * ```
1250
+ * @example Different Status Types
1251
+ * ```html
1252
+ * <!-- Info (default) -->
1253
+ * <bcm-pop-confirm header-text="Information" description="This is an info message">
1254
+ * <bcm-button>Info</bcm-button>
1255
+ * </bcm-pop-confirm>
1256
+ * <!-- Success -->
1257
+ * <bcm-pop-confirm status="success" header-text="Confirm Action" description="Proceed with this action?">
1258
+ * <bcm-button status="success">Proceed</bcm-button>
1259
+ * </bcm-pop-confirm>
1260
+ * <!-- Warning -->
1261
+ * <bcm-pop-confirm status="warning" header-text="Warning" description="This action may have consequences">
1262
+ * <bcm-button status="warning">Continue</bcm-button>
1263
+ * </bcm-pop-confirm>
1264
+ * <!-- Error/Danger -->
1265
+ * <bcm-pop-confirm status="error" header-text="Danger Zone" description="This is a destructive action">
1266
+ * <bcm-button status="error">Delete</bcm-button>
1267
+ * </bcm-pop-confirm>
1268
+ * ```
1269
+ * @example Custom Content with Slots
1270
+ * ```html
1271
+ * <bcm-pop-confirm status="warning">
1272
+ * <bcm-button>Custom Confirm</bcm-button>
1273
+ * <div slot="header">
1274
+ * <strong>Custom Header</strong>
1275
+ * </div>
1276
+ * <div slot="body">
1277
+ * <p>This is custom body content with <strong>HTML formatting</strong>.</p>
1278
+ * <ul>
1279
+ * <li>Point 1</li>
1280
+ * <li>Point 2</li>
1281
+ * </ul>
1282
+ * </div>
1283
+ * <div slot="footer">
1284
+ * <bcm-button kind="outline" size="small">Maybe Later</bcm-button>
1285
+ * <bcm-button status="success" size="small">Confirm</bcm-button>
1286
+ * </div>
1287
+ * </bcm-pop-confirm>
1288
+ * ```
1289
+ * @example Different Sizes
1290
+ * ```html
1291
+ * <!-- Small -->
1292
+ * <bcm-pop-confirm size="small" header-text="Small" description="Compact confirmation">
1293
+ * <bcm-button size="small">Small</bcm-button>
1294
+ * </bcm-pop-confirm>
1295
+ * <!-- Medium (default) -->
1296
+ * <bcm-pop-confirm size="medium" header-text="Medium" description="Standard confirmation">
1297
+ * <bcm-button size="medium">Medium</bcm-button>
1298
+ * </bcm-pop-confirm>
1299
+ * <!-- Large -->
1300
+ * <bcm-pop-confirm size="large" header-text="Large" description="Spacious confirmation with more room for content">
1301
+ * <bcm-button size="large">Large</bcm-button>
1302
+ * </bcm-pop-confirm>
1303
+ * ```
1304
+ * @example Programmatic Control
1305
+ * ```html
1306
+ * <bcm-pop-confirm id="myConfirm" header-text="Confirm" description="Are you sure?">
1307
+ * <bcm-button>Trigger</bcm-button>
1308
+ * </bcm-pop-confirm>
1309
+ * <bcm-button id="showBtn">Show Programmatically</bcm-button>
1310
+ * <bcm-button id="hideBtn">Hide Programmatically</bcm-button>
1311
+ * <script>
1312
+ * const popconfirm = document.getElementById('myConfirm');
1313
+ * document.getElementById('showBtn').addEventListener('click', () => {
1314
+ * popconfirm.show();
1315
+ * });
1316
+ * document.getElementById('hideBtn').addEventListener('click', () => {
1317
+ * popconfirm.hide();
1318
+ * });
1319
+ * </script>
1320
+ * ```
1321
+ * @example Without Status Icon
1322
+ * ```html
1323
+ * <bcm-pop-confirm
1324
+ * header-text="Simple Confirmation"
1325
+ * description="No status icon shown"
1326
+ * status-icon={false}
1327
+ * >
1328
+ * <bcm-button>Click Me</bcm-button>
1329
+ * </bcm-pop-confirm>
1330
+ * ```
1331
+ * @example Different Placements
1332
+ * ```html
1333
+ * <bcm-pop-confirm placement="top" header-text="Top" description="Opens above">
1334
+ * <bcm-button>Top</bcm-button>
1335
+ * </bcm-pop-confirm>
1336
+ * <bcm-pop-confirm placement="right" header-text="Right" description="Opens to the right">
1337
+ * <bcm-button>Right</bcm-button>
1338
+ * </bcm-pop-confirm>
1339
+ * <bcm-pop-confirm placement="bottom" header-text="Bottom" description="Opens below">
1340
+ * <bcm-button>Bottom</bcm-button>
1341
+ * </bcm-pop-confirm>
1342
+ * <bcm-pop-confirm placement="left" header-text="Left" description="Opens to the left">
1343
+ * <bcm-button>Left</bcm-button>
1344
+ * </bcm-pop-confirm>
1345
+ * ```
951
1346
  */
952
1347
  interface BcmPopConfirm {
953
1348
  /**
954
- * The color of the arrow pointing to the trigger element. Can be a CSS custom property or a specific color value.
955
- * @default 'var(--bcm-ui-color-background-basic-panel)'
956
- */
957
- "arrowColor": string;
958
- /**
959
- * The text displayed on the cancel button.
1349
+ * @prop {string} cancelText - Text for the cancel button. Default: 'Cancel'
960
1350
  * @default 'Cancel'
961
1351
  */
962
1352
  "cancelText": string;
963
1353
  /**
964
- * The text displayed on the confirm button.
1354
+ * @prop {boolean} closeOnEscape - Whether to close when pressing the Escape key. Default: true
1355
+ * @default true
1356
+ */
1357
+ "closeOnEscape": boolean;
1358
+ /**
1359
+ * @prop {boolean} closeOnOutsideClick - Whether to close when clicking outside the popover. Default: true
1360
+ * @default true
1361
+ */
1362
+ "closeOnOutsideClick": boolean;
1363
+ /**
1364
+ * @prop {string} confirmText - Text for the confirm button. Default: 'Yes'
965
1365
  * @default 'Yes'
966
1366
  */
967
1367
  "confirmText": string;
968
1368
  /**
969
- * The description or body content of the pop-up.
1369
+ * @prop {string} description - Description text displayed in the body section. Can be overridden by using the 'body' slot. Default: ''
970
1370
  * @default ''
971
1371
  */
972
1372
  "description": string;
973
1373
  /**
974
- * The header text displayed at the top of the pop-up.
1374
+ * @prop {string} headerText - Text displayed in the header section. Can be overridden by using the 'header' slot. Default: ''
975
1375
  * @default ''
976
1376
  */
977
1377
  "headerText": string;
978
1378
  /**
979
- * Programmatically hides the pop-up by setting `isOpen` to false.
980
- * @returns A promise that resolves when the pop-up is hidden.
1379
+ * Programmatically hides the popconfirm.
1380
+ * @returns Promise that resolves when the hide operation begins
981
1381
  */
982
1382
  "hide": () => Promise<void>;
983
1383
  /**
984
- * The placement position of the pop-up relative to the trigger element.
985
- * @default 'bottom'
1384
+ * @prop {number} offsetDistance - Distance in pixels between the popover and trigger element. Default: 12
1385
+ * @default 12
986
1386
  */
987
- "placement": Placement;
1387
+ "offsetDistance": number;
1388
+ /**
1389
+ * @prop {PopConfirmPlacement} placement - Position of the popover relative to the trigger element. Automatically flips if there's not enough space. Default: 'top'
1390
+ * @default 'top'
1391
+ */
1392
+ "placement": PopConfirmPlacement;
988
1393
  /**
989
- * Programmatically shows the pop-up by setting `isOpen` to true and updating its position.
990
- * @returns A promise that resolves when the pop-up is shown.
1394
+ * Programmatically shows the popconfirm.
1395
+ * @returns Promise that resolves when the show operation begins
991
1396
  */
992
1397
  "show": () => Promise<void>;
993
1398
  /**
994
- * The size of the pop-up, determining its dimensions and padding.
1399
+ * @prop {boolean} showArrow - Whether to show the arrow pointing to the trigger. Default: true
1400
+ * @default true
1401
+ */
1402
+ "showArrow": boolean;
1403
+ /**
1404
+ * @prop {PopConfirmSize} size - Size variant that controls padding and text size. - 'small': Compact size with minimal padding - 'medium': Standard size - 'large': Spacious size with more padding Default: 'medium'
995
1405
  * @default 'medium'
996
1406
  */
997
- "size": 'small' | 'medium' | 'large';
1407
+ "size": PopConfirmSize;
998
1408
  /**
999
- * The status of the pop-up, affecting its icon and color scheme.
1409
+ * @prop {PopConfirmStatus} status - Status type that determines the color scheme and icon. - 'info': Informational (blue) - 'success': Success/positive action (green) - 'warning': Warning/caution (yellow) - 'error': Error/destructive action (red) Default: 'info'
1000
1410
  * @default 'info'
1001
1411
  */
1002
- "status": 'info' | 'error' | 'warning' | 'success';
1412
+ "status": PopConfirmStatus;
1003
1413
  /**
1004
- * Whether to display a status icon based on the `status` prop.
1414
+ * @prop {boolean} statusIcon - Whether to show the status icon in the header. Icon only shows if headerText is also provided. Default: true
1005
1415
  * @default true
1006
1416
  */
1007
1417
  "statusIcon": boolean;
1008
1418
  /**
1009
- * The ID of the trigger element (e.g., a button) that opens the pop-up.
1419
+ * Toggles the popconfirm visibility. If open, it will close. If closed, it will open.
1420
+ * @returns Promise that resolves when the toggle operation completes
1010
1421
  */
1011
- "targetId": string;
1422
+ "toggle": () => Promise<void>;
1012
1423
  }
1013
1424
  /**
1014
1425
  * @component BcmPopover
1015
1426
  * @description A flexible popover component that displays contextual information or content relative to a target element.
1016
- * Supports different sizes, trigger types (click or hover), placements (top, right, bottom, left), and can be controlled via slots or props.
1427
+ * Built on the native Popover API for top-layer rendering and Floating UI for intelligent positioning.
1428
+ * Supports different sizes, trigger types (click, hover, focus), placements, and comprehensive event system.
1017
1429
  * @example Basic Click Popover
1018
1430
  * <bcm-popover trigger="click" size="medium" placement="top">
1019
1431
  * <bcm-button>Click Me</bcm-button>
1020
1432
  * <span slot="header">Header</span>
1021
1433
  * <span slot="content">This is a simple popover content.</span>
1022
1434
  * </bcm-popover>
1023
- * @example Hover Popover with Props
1024
- * <bcm-popover trigger="hover" hover-delay="200" size="large" placement="right" header-text="Prop Header" message="This is a hover popover with props.">
1435
+ * @example Hover Popover with Delays
1436
+ * <bcm-popover trigger="hover" show-delay="200" hide-delay="100" size="large" placement="right" header-text="Prop Header" message="This is a hover popover with props.">
1025
1437
  * <bcm-button>Hover Me</bcm-button>
1026
1438
  * </bcm-popover>
1027
1439
  * @example Programmatic Control
@@ -1031,8 +1443,9 @@ export namespace Components {
1031
1443
  * </bcm-popover>
1032
1444
  * <script>
1033
1445
  * const popover = document.querySelector('#my-popover');
1034
- * popover.openPopup(); // Opens the popover
1035
- * popover.closePopup(); // Closes the popover
1446
+ * popover.show(); // Opens the popover
1447
+ * popover.hide(); // Closes the popover
1448
+ * popover.toggle(); // Toggles the popover
1036
1449
  * </script>
1037
1450
  * @csspart popover - The root popover container element, stylable for the entire popover
1038
1451
  * @csspart header - The header section of the popover, stylable for the title area
@@ -1041,50 +1454,76 @@ export namespace Components {
1041
1454
  */
1042
1455
  interface BcmPopover {
1043
1456
  /**
1044
- * @method {Promise<void>} closePopup - Programmatically closes the popover. Triggers the hidePopover logic to hide the popover with the specified hover delay (if applicable).
1045
- * @returns A promise that resolves when the popover is closed.
1457
+ * @prop {boolean} arrow - Whether to show an arrow pointing to the trigger element. Default: true
1458
+ * @default true
1046
1459
  */
1047
- "closePopup": () => Promise<void>;
1460
+ "arrow": boolean;
1461
+ /**
1462
+ * @prop {boolean} closeOnEscape - Whether to close the popover when pressing Escape key. Default: true
1463
+ * @default true
1464
+ */
1465
+ "closeOnEscape": boolean;
1466
+ /**
1467
+ * @prop {boolean} closeOnOutsideClick - Whether to close the popover when clicking outside. Default: true
1468
+ * @default true
1469
+ */
1470
+ "closeOnOutsideClick": boolean;
1048
1471
  /**
1049
1472
  * @prop {string} headerText - Custom text for the popover header. Used as fallback content if the 'header' slot is not provided.
1050
1473
  */
1051
- "headerText": string;
1474
+ "headerText"?: string;
1052
1475
  /**
1053
- * @prop {number} hoverDelay - Delay in milliseconds before showing or hiding the popover when trigger is 'hover'. Adds a delay to prevent flickering on quick mouse movements. Default: 150
1054
- * @default 150
1476
+ * Programmatically hides the popover. Respects the hideDelay prop.
1055
1477
  */
1056
- "hoverDelay": number;
1478
+ "hide": () => Promise<void>;
1479
+ /**
1480
+ * @prop {number} hideDelay - Delay in milliseconds before hiding the popover. Provides a grace period for mouse movements. Default: 0
1481
+ * @default 0
1482
+ */
1483
+ "hideDelay": number;
1057
1484
  /**
1058
1485
  * @prop {string} message - Custom text for the popover content. Used as fallback content if the 'content' slot is not provided.
1059
1486
  */
1060
- "message": string;
1487
+ "message"?: string;
1061
1488
  /**
1062
- * @prop {boolean} open - Indicates whether the popover is currently open. Can be set programmatically or toggled by user interaction. Mutable. Default: false
1489
+ * @prop {boolean} open - Controls the open state of the popover. Can be set programmatically or toggled by user interaction. Default: false
1063
1490
  * @default false
1064
1491
  */
1065
1492
  "open": boolean;
1066
- /**
1067
- * @method {Promise<void>} openPopup - Programmatically opens the popover. Triggers the showPopover logic to display the popover with the specified hover delay (if applicable).
1068
- * @returns A promise that resolves when the popover is opened.
1069
- */
1070
- "openPopup": () => Promise<void>;
1071
1493
  /**
1072
1494
  * @prop {('top' | 'right' | 'bottom' | 'left')} placement - Defines the position of the popover relative to the target element. Determines where the popover appears around the trigger element. Default: 'top'
1073
1495
  * @default 'top'
1074
1496
  */
1075
1497
  "placement": 'top' | 'right' | 'bottom' | 'left';
1498
+ /**
1499
+ * Programmatically shows the popover. Respects the showDelay prop.
1500
+ */
1501
+ "show": () => Promise<void>;
1502
+ /**
1503
+ * @prop {number} showDelay - Delay in milliseconds before showing the popover. Useful to prevent popovers from appearing on quick mouse movements. Default: 0
1504
+ * @default 0
1505
+ */
1506
+ "showDelay": number;
1076
1507
  /**
1077
1508
  * @prop {('small' | 'medium' | 'large')} size - Defines the size of the popover. Controls the text size and padding of the popover content. Default: 'medium'
1078
1509
  * @default 'medium'
1079
1510
  */
1080
1511
  "size": 'small' | 'medium' | 'large';
1081
1512
  /**
1082
- * @prop {('click' | 'hover')} trigger - Defines the interaction type to show/hide the popover. 'click' toggles on click, 'hover' shows on mouse enter and hides on mouse leave. Default: 'click'
1513
+ * Toggles the popover visibility.
1514
+ */
1515
+ "toggle": () => Promise<void>;
1516
+ /**
1517
+ * @prop {('click' | 'hover' | 'hover focus')} trigger - Defines the interaction type to show/hide the popover. 'click' toggles on click, 'hover' shows on mouse enter and hides on mouse leave, 'hover focus' combines both. Default: 'click'
1083
1518
  * @default 'click'
1084
1519
  */
1085
- "trigger": 'click' | 'hover';
1520
+ "trigger": 'click' | 'hover' | 'hover focus';
1086
1521
  }
1087
1522
  interface BcmRadio {
1523
+ /**
1524
+ * @default generateId('bcm-radio')
1525
+ */
1526
+ "_id"?: string;
1088
1527
  /**
1089
1528
  * Whether the radio button is selected.
1090
1529
  * @prop
@@ -1127,6 +1566,11 @@ export namespace Components {
1127
1566
  * @defaultValue false
1128
1567
  */
1129
1568
  "readonly": boolean;
1569
+ /**
1570
+ * Whether at least one radio in this group is required. (HTML)
1571
+ * @default false
1572
+ */
1573
+ "required": boolean;
1130
1574
  /**
1131
1575
  * Defines the size of the radio button: 'small' | 'medium' | 'large'.
1132
1576
  * @prop
@@ -1206,49 +1650,83 @@ export namespace Components {
1206
1650
  */
1207
1651
  "value": string;
1208
1652
  }
1209
- interface BcmSegmentedPicker {
1653
+ /**
1654
+ * Individual segment option component
1655
+ */
1656
+ interface BcmSegment {
1657
+ /**
1658
+ * Index of currently active segment (inherited from parent)
1659
+ * @default 0
1660
+ */
1661
+ "activeIndex": number;
1210
1662
  /**
1211
1663
  * Disabled state
1212
1664
  * @default false
1213
1665
  */
1214
1666
  "disabled": boolean;
1215
1667
  /**
1216
- * Full width component
1668
+ * Index of this segment (inherited from parent)
1669
+ * @default 0
1670
+ */
1671
+ "index": number;
1672
+ /**
1673
+ * Selected state (controlled by parent)
1217
1674
  * @default false
1218
1675
  */
1219
- "fullWidth": boolean;
1676
+ "selected": boolean;
1220
1677
  /**
1221
- * Controls the component size
1678
+ * Size variant (inherited from parent)
1222
1679
  * @default 'medium'
1223
1680
  */
1224
- "size": SegmentedPickerSize;
1681
+ "size": 'small' | 'medium' | 'large';
1225
1682
  /**
1226
- * The selected option value
1683
+ * Unique identifier for this segment
1227
1684
  */
1228
- "value"?: string;
1685
+ "value": string;
1229
1686
  }
1230
- interface BcmSegmentedPickerOption {
1687
+ /**
1688
+ * Modern Segmented Picker component with CSS Grid-based indicator
1689
+ */
1690
+ interface BcmSegmentedPicker {
1231
1691
  /**
1232
- * Whether this option is disabled
1692
+ * Disabled state
1233
1693
  * @default false
1234
1694
  */
1235
1695
  "disabled": boolean;
1236
- "getWidth": () => Promise<number>;
1237
1696
  /**
1238
- * Option display label
1697
+ * Full width flag
1698
+ * @default false
1239
1699
  */
1240
- "label"?: string;
1700
+ "fullWidth": boolean;
1701
+ /**
1702
+ * Public method to get active segment value
1703
+ */
1704
+ "getValue": () => Promise<string>;
1241
1705
  /**
1242
- * Whether this option is selected
1706
+ * Name attribute for form association
1707
+ */
1708
+ "name": string;
1709
+ /**
1710
+ * Whether this field is required in a form
1243
1711
  * @default false
1244
1712
  */
1245
- "selected": boolean;
1713
+ "required": boolean;
1714
+ /**
1715
+ * Public method to programmatically set active segment
1716
+ */
1717
+ "setValue": (value: string) => Promise<void>;
1718
+ /**
1719
+ * Enable shadow on container
1720
+ * @default false
1721
+ */
1722
+ "shadow": boolean;
1246
1723
  /**
1247
- * Controls the option size
1724
+ * Size variant
1725
+ * @default 'medium'
1248
1726
  */
1249
- "size"?: SegmentedPickerSize;
1727
+ "size": 'small' | 'medium' | 'large';
1250
1728
  /**
1251
- * Option value
1729
+ * Selected segment value
1252
1730
  */
1253
1731
  "value": string;
1254
1732
  }
@@ -1261,50 +1739,79 @@ export namespace Components {
1261
1739
  }
1262
1740
  /**
1263
1741
  * @component BcmSwitch
1264
- * @description A customizable toggle switch component that provides an intuitive way to enable or disable options.
1265
- * Supports different sizes, label positions, error states, and accessibility features.
1742
+ * @description A form-associated toggle switch component representing a boolean choice.
1743
+ * It behaves like a checkbox and integrates with native HTML forms via ElementInternals.
1744
+ * This component supports **three validation strategies** via `validation-mode`:
1745
+ * - **`native`**:
1746
+ * - Uses native browser constraint validation.
1747
+ * - Sets the underlying input's `required` attribute.
1748
+ * - Browser may show the native validation bubble when the form calls `reportValidity()` / submit validation runs.
1749
+ * - **`silent`**:
1750
+ * - Does **not** rely on native `required` (prevents the browser bubble).
1751
+ * - Computes the "missing required" state internally and exposes it via `error` + `caption`.
1752
+ * - UI errors are **gated**: they appear only after the control is touched or after a submit attempt.
1753
+ * - **`none`**:
1754
+ * - Value-only mode (headless): participates in form value submission but never becomes invalid.
1755
+ * ## UI error gating (silent mode)
1756
+ * To avoid showing errors on initial render, the component tracks:
1757
+ * - `touched`: set after the first user interaction
1758
+ * - `submitAttempted`: set when the parent form emits `submit`
1759
+ * Only when `touched || submitAttempted` the component will show `error/caption` in `silent` mode.
1760
+ * ## Value behavior
1761
+ * - When checked, the component submits its `value` (default: `"on"`).
1762
+ * - When unchecked, no value is submitted.
1763
+ * - When disabled, the component does not participate in submission or validity.
1266
1764
  * @example Basic usage
1267
- * <bcm-switch label="Enable notifications"></bcm-switch>
1268
- * @example With error state
1765
+ * <bcm-switch name="newsletter" label="Receive newsletter?" />
1766
+ * @example Required with silent validation (no native bubble)
1767
+ * <form>
1269
1768
  * <bcm-switch
1769
+ * name="terms"
1270
1770
  * label="Accept terms"
1271
- * error={true}
1272
- * caption="You must accept the terms to continue">
1273
- * </bcm-switch>
1274
- * @example Disabled state
1275
- * <bcm-switch
1276
- * label="Advanced features"
1277
- * disabled={true}>
1278
- * </bcm-switch>
1279
- * @example With custom size and label position
1280
- * <bcm-switch
1281
- * label="Dark mode"
1282
- * size="large"
1283
- * labelPosition="left">
1771
+ * required
1772
+ * validation-mode="silent">
1284
1773
  * </bcm-switch>
1774
+ * <button type="submit">Submit</button>
1775
+ * </form>
1776
+ * @example Native validation mode (may show native bubble)
1777
+ * <bcm-switch name="terms" label="Accept terms" required validation-mode="native" />
1778
+ * @example Value-only mode (no validation)
1779
+ * <bcm-switch name="analytics" label="Allow analytics" validation-mode="none" />
1780
+ * @csspart base - Root container
1781
+ * @csspart switch-wrapper - Wrapper containing label + track
1782
+ * @csspart input - Hidden native input
1783
+ * @csspart label - Text label
1784
+ * @csspart dot-container - Switch track
1785
+ * @csspart dot - Switch knob
1786
+ * @csspart caption - Helper/error text
1285
1787
  */
1286
1788
  interface BcmSwitch {
1287
1789
  /**
1288
- * Text to display as an error message when error is true
1790
+ * Unique id (optional). Generated by default.
1791
+ * @default generateId('bcm-switch')
1792
+ */
1793
+ "_id"?: string;
1794
+ /**
1795
+ * Helper / error text shown under the switch
1289
1796
  */
1290
1797
  "caption"?: string;
1291
1798
  /**
1292
- * Whether the switch is checked or not
1799
+ * Checked state
1293
1800
  * @default false
1294
1801
  */
1295
1802
  "checked": boolean;
1296
1803
  /**
1297
- * Whether the switch is disabled
1804
+ * Disabled state
1298
1805
  * @default false
1299
1806
  */
1300
1807
  "disabled": boolean;
1301
1808
  /**
1302
- * Whether to display the switch in an error state
1809
+ * Visual error state (manual/external). In silent mode this can be auto-managed.
1303
1810
  * @default false
1304
1811
  */
1305
1812
  "error": boolean;
1306
1813
  /**
1307
- * Text label for the switch
1814
+ * Visible label text
1308
1815
  */
1309
1816
  "label": string;
1310
1817
  /**
@@ -1313,128 +1820,93 @@ export namespace Components {
1313
1820
  */
1314
1821
  "labelPosition": 'left' | 'right';
1315
1822
  /**
1316
- * The name attribute for the hidden input element
1823
+ * Form field name
1317
1824
  */
1318
- "name": string;
1825
+ "name"?: string;
1319
1826
  /**
1320
- * Whether the switch is in readonly mode
1827
+ * Optional readonly support
1321
1828
  * @default false
1322
1829
  */
1323
1830
  "readonly": boolean;
1324
1831
  /**
1325
- * Whether the switch is required in a form
1832
+ * Required state
1326
1833
  * @default false
1327
1834
  */
1328
1835
  "required": boolean;
1329
1836
  /**
1330
- * Size variant of the switch
1837
+ * Size variant
1331
1838
  * @default 'medium'
1332
1839
  */
1333
1840
  "size": 'small' | 'medium' | 'large';
1334
1841
  /**
1335
- * The value attribute for the hidden input element
1842
+ * @default 'native'
1843
+ */
1844
+ "validationMode": 'native' | 'silent' | 'none';
1845
+ /**
1846
+ * Value submitted when checked
1847
+ * @default 'on'
1336
1848
  */
1337
1849
  "value": string;
1338
1850
  }
1339
1851
  /**
1340
- * @description Tab interface component
1852
+ * Individual tab component - self-contained with label and content panel
1341
1853
  */
1342
- interface BcmTabs {
1854
+ interface BcmTab {
1343
1855
  /**
1344
- * Default active tab value
1345
- */
1346
- "defaultValue": string;
1347
- /**
1348
- * Disables all tabs
1349
- */
1350
- "disableAllTabs": () => Promise<void>;
1351
- "disableTab": (value: string) => Promise<void>;
1352
- /**
1353
- * Enables all tabs
1354
- */
1355
- "enableAllTabs": () => Promise<void>;
1356
- "enableTab": (value: string) => Promise<void>;
1357
- /**
1358
- * Returns the active tab value
1359
- */
1360
- "getActiveTab": () => Promise<string>;
1361
- /**
1362
- * Sets the active tab
1856
+ * Active state (controlled by parent)
1857
+ * @default false
1363
1858
  */
1364
- "setActiveTab": (value: string) => Promise<void>;
1859
+ "active": boolean;
1365
1860
  /**
1366
- * Tab size
1367
- * @default 'medium'
1861
+ * Disabled state
1862
+ * @default false
1368
1863
  */
1369
- "size": 'small' | 'medium' | 'large';
1864
+ "disabled": boolean;
1370
1865
  /**
1371
- * Whether to enable smooth animations for inkbar and transitions
1372
- * @default true
1866
+ * Label text to display in tab button
1373
1867
  */
1374
- "smooth": boolean;
1868
+ "label": string;
1375
1869
  /**
1376
- * Tab variant - controls width behavior
1377
- * @default 'full-width'
1870
+ * Size variant (inherited from parent)
1871
+ * @default 'md'
1378
1872
  */
1379
- "variant": 'full-width' | 'auto-width';
1380
- }
1381
- /**
1382
- * @description Tab content panel component that displays when its corresponding tab is selected
1383
- */
1384
- interface BcmTabsContent {
1873
+ "size": 'sm' | 'md' | 'lg';
1385
1874
  /**
1386
- * Unique identifier that matches a tab trigger's value Used to associate this content with its corresponding tab
1875
+ * Unique identifier for this tab
1387
1876
  */
1388
1877
  "value": string;
1389
1878
  }
1390
1879
  /**
1391
- * @description Container component for tab triggers that includes the sliding indicator (inkbar)
1880
+ * Modern Tabs component with CSS-first approach
1392
1881
  */
1393
- interface BcmTabsList {
1394
- /**
1395
- * Whether to enable smooth animations for inkbar and transitions
1396
- * @default true
1397
- */
1398
- "smooth": boolean;
1882
+ interface BcmTabs {
1399
1883
  /**
1400
- * Tab variant - controls width behavior
1401
- * @default 'full-width'
1884
+ * Public method to get active tab value
1402
1885
  */
1403
- "variant": 'full-width' | 'auto-width';
1404
- }
1405
- /**
1406
- * @description Tab trigger component that functions as a clickable tab button
1407
- */
1408
- interface BcmTabsTrigger {
1886
+ "getActiveTab": () => Promise<string>;
1409
1887
  /**
1410
- * Whether the tab is currently active
1411
- * @default false
1888
+ * Public method to programmatically set active tab
1412
1889
  */
1413
- "active": boolean;
1890
+ "setActiveTab": (value: string) => Promise<void>;
1414
1891
  /**
1415
- * Whether the tab is disabled
1892
+ * Enable shadow on main container
1416
1893
  * @default false
1417
1894
  */
1418
- "disabled": boolean;
1895
+ "shadow": boolean;
1419
1896
  /**
1420
- * Size of the tab
1421
- * @default 'medium'
1897
+ * Tab size variant
1898
+ * @default 'md'
1422
1899
  */
1423
- "size": 'small' | 'medium' | 'large';
1900
+ "size": 'sm' | 'md' | 'lg';
1424
1901
  /**
1425
- * Whether to enable smooth animations for transitions
1426
- * @default true
1427
- */
1428
- "smooth": boolean;
1429
- /**
1430
- * Unique identifier value for the tab
1902
+ * Active tab value
1431
1903
  */
1432
1904
  "value": string;
1433
1905
  /**
1434
- * Tab variant - controls width behavior
1435
- * @default 'full-width'
1906
+ * Visual variant
1907
+ * @default 'line'
1436
1908
  */
1437
- "variant": 'full-width' | 'auto-width';
1909
+ "variant": 'line' | 'enclosed';
1438
1910
  }
1439
1911
  interface BcmText {
1440
1912
  /**
@@ -1576,59 +2048,113 @@ export namespace Components {
1576
2048
  }
1577
2049
  /**
1578
2050
  * @component BcmTooltip
1579
- * @description A lightweight tooltip component that displays brief contextual information when hovering or clicking on a target element.
1580
- * Supports different sizes, trigger types (click or hover), placements (top, right, bottom, left), and can be controlled via slots or props.
1581
- * @example Basic Hover Tooltip
1582
- * <bcm-tooltip trigger="hover" size="medium" placement="top" message="This is a tooltip.">
1583
- * <bcm-button>Hover Me</bcm-button>
2051
+ * @description A flexible tooltip component that provides contextual information on hover or click.
2052
+ * Built on the native Popover API for top-layer rendering and Floating UI for intelligent positioning.
2053
+ * Automatically handles overflow, flipping, and complex shadow DOM scenarios.
2054
+ * @example ```html
2055
+ * <!-- Basic usage with text message -->
2056
+ * <bcm-tooltip message="This is a tooltip">
2057
+ * <button>Hover me</button>
1584
2058
  * </bcm-tooltip>
1585
- * @example Click Tooltip with Programmatic Control
1586
- * <bcm-tooltip id="my-tooltip" trigger="click" message="Controlled tooltip.">
1587
- * <bcm-button>Click Me</bcm-button>
2059
+ * <!-- With custom rich content -->
2060
+ * <bcm-tooltip placement="right" size="large">
2061
+ * <button>Click me</button>
2062
+ * <div slot="content">
2063
+ * <strong>Rich content</strong>
2064
+ * <p>You can add any HTML here</p>
2065
+ * </div>
2066
+ * </bcm-tooltip>
2067
+ * <!-- Click trigger with custom delays -->
2068
+ * <bcm-tooltip trigger="click" show-delay="0" hide-delay="0">
2069
+ * <span>Click me</span>
2070
+ * </bcm-tooltip>
2071
+ * <!-- Mouse following mode -->
2072
+ * <bcm-tooltip follow={true} message="I follow your cursor!">
2073
+ * <div>Move your mouse here</div>
2074
+ * </bcm-tooltip>
2075
+ * <!-- Programmatic control -->
2076
+ * <bcm-tooltip id="myTooltip" message="Programmatic tooltip">
2077
+ * <span>Trigger</span>
1588
2078
  * </bcm-tooltip>
1589
2079
  * <script>
1590
- * const tooltip = document.querySelector('#my-tooltip');
1591
- * tooltip.openTooltip(); // Opens the tooltip
1592
- * tooltip.closeTooltip(); // Closes the tooltip
2080
+ * const tooltip = document.getElementById('myTooltip');
2081
+ * tooltip.show();
2082
+ * setTimeout(() => tooltip.hide(), 2000);
1593
2083
  * </script>
1594
- * @csspart tooltip - The root tooltip container element, stylable for the entire tooltip
1595
- * @csspart arrow - The arrow element of the tooltip, stylable for the positioning arrow
2084
+ * <!-- Custom styling with CSS parts -->
2085
+ * <style>
2086
+ * bcm-tooltip::part(tooltip) {
2087
+ * background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
2088
+ * border-radius: 12px;
2089
+ * }
2090
+ * bcm-tooltip::part(arrow) {
2091
+ * background: #667eea;
2092
+ * }
2093
+ * </style>
2094
+ * ```
1596
2095
  */
1597
2096
  interface BcmTooltip {
1598
2097
  /**
1599
- * @method {Promise<void>} closeTooltip - Programmatically closes the tooltip. Triggers the hideTooltip logic with the specified delay.
1600
- * @returns A promise that resolves when the tooltip is closed.
2098
+ * Whether to show an arrow pointing to the trigger element Note: Arrow is automatically hidden in 'follow' mode
2099
+ * @default true
2100
+ */
2101
+ "arrow": boolean;
2102
+ /**
2103
+ * Disables the tooltip, preventing it from showing Useful for conditional tooltips based on application state
2104
+ * @default false
1601
2105
  */
1602
- "closeTooltip": () => Promise<void>;
2106
+ "disabled": boolean;
1603
2107
  /**
1604
- * @prop {string} message - Custom text for the tooltip content. Used as fallback content if the 'tooltip' slot is not provided.
2108
+ * Makes the tooltip follow the mouse cursor When enabled: - Arrow is hidden - Tooltip position updates smoothly with cursor movement - Pointer events are disabled on tooltip to prevent interference
2109
+ * @default false
1605
2110
  */
1606
- "message": string;
2111
+ "follow": boolean;
1607
2112
  /**
1608
- * @method {Promise<void>} openTooltip - Programmatically opens the tooltip. Triggers the showTooltip logic with the specified delay.
1609
- * @returns A promise that resolves when the tooltip is opened.
2113
+ * Programmatically hides the tooltip Respects the hideDelay prop
1610
2114
  */
1611
- "openTooltip": () => Promise<void>;
2115
+ "hide": () => Promise<void>;
1612
2116
  /**
1613
- * @prop {('top' | 'right' | 'bottom' | 'left')} placement - Defines the position of the tooltip relative to the target element. Default: 'top'
2117
+ * Delay in milliseconds before hiding the tooltip Provides a grace period for mouse movements
2118
+ * @default 100
2119
+ */
2120
+ "hideDelay": number;
2121
+ /**
2122
+ * Simple text message to display in the tooltip Can be overridden by slotting content into the 'content' slot
2123
+ */
2124
+ "message"?: string;
2125
+ /**
2126
+ * Distance in pixels between the tooltip and the trigger element Also used as the offset in 'follow' mode
2127
+ * @default 12
2128
+ */
2129
+ "offset": number;
2130
+ /**
2131
+ * Preferred placement of the tooltip relative to the trigger Note: Tooltip will automatically flip if there's not enough space - 'top': Above the trigger element - 'right': To the right of the trigger element - 'bottom': Below the trigger element - 'left': To the left of the trigger element
1614
2132
  * @default 'top'
1615
2133
  */
1616
- "placement": 'top' | 'right' | 'bottom' | 'left';
2134
+ "placement": TooltipPlacement;
1617
2135
  /**
1618
- * @prop {number} showDelay - Delay in milliseconds before showing or hiding the tooltip. Helps prevent flickering on quick mouse movements. Default: 150
2136
+ * Programmatically shows the tooltip Respects the showDelay prop and disabled state
2137
+ */
2138
+ "show": () => Promise<void>;
2139
+ /**
2140
+ * Delay in milliseconds before showing the tooltip Useful to prevent tooltips from appearing on quick mouse movements
1619
2141
  * @default 150
1620
2142
  */
1621
2143
  "showDelay": number;
1622
2144
  /**
1623
- * @prop {('small' | 'medium' | 'large')} size - Defines the size of the tooltip. Controls the text size and padding of the tooltip content. Default: 'medium'
2145
+ * Size variant of the tooltip - 'small': Compact tooltip with minimal padding (text-size-3, py-1 px-2) - 'medium': Standard tooltip size (text-size-4, py-1.5 px-3) - 'large': Larger tooltip for more content (text-size-5, py-2 px-4)
1624
2146
  * @default 'medium'
1625
2147
  */
1626
- "size": 'small' | 'medium' | 'large';
2148
+ "size": TooltipSize;
2149
+ /**
2150
+ * Toggles the tooltip visibility If open, hides it; if closed, shows it
2151
+ */
2152
+ "toggle": () => Promise<void>;
1627
2153
  /**
1628
- * @prop {('click' | 'hover')} trigger - Defines the interaction type to show/hide the tooltip. 'click' toggles on click, 'hover' shows on mouse enter and hides on mouse leave. Default: 'hover'
2154
+ * How the tooltip is triggered - 'hover': Shows on mouse enter, hides on mouse leave - 'click': Toggles on click, closes on outside click or Escape key
1629
2155
  * @default 'hover'
1630
2156
  */
1631
- "trigger": 'click' | 'hover';
2157
+ "trigger": TooltipTrigger;
1632
2158
  }
1633
2159
  }
1634
2160
  export interface BcmAccordionCustomEvent<T> extends CustomEvent<T> {
@@ -1665,7 +2191,11 @@ export interface BcmDropdownCustomEvent<T> extends CustomEvent<T> {
1665
2191
  }
1666
2192
  export interface BcmDropdownItemCustomEvent<T> extends CustomEvent<T> {
1667
2193
  detail: T;
1668
- target: HTMLBcmDropdownItemElement;
2194
+ target: HTMLBcmDropdownItemElement;
2195
+ }
2196
+ export interface BcmFileUploadCustomEvent<T> extends CustomEvent<T> {
2197
+ detail: T;
2198
+ target: HTMLBcmFileUploadElement;
1669
2199
  }
1670
2200
  export interface BcmInputCustomEvent<T> extends CustomEvent<T> {
1671
2201
  detail: T;
@@ -1695,25 +2225,25 @@ export interface BcmRadioGroupCustomEvent<T> extends CustomEvent<T> {
1695
2225
  detail: T;
1696
2226
  target: HTMLBcmRadioGroupElement;
1697
2227
  }
1698
- export interface BcmSegmentedPickerCustomEvent<T> extends CustomEvent<T> {
2228
+ export interface BcmSegmentCustomEvent<T> extends CustomEvent<T> {
1699
2229
  detail: T;
1700
- target: HTMLBcmSegmentedPickerElement;
2230
+ target: HTMLBcmSegmentElement;
1701
2231
  }
1702
- export interface BcmSegmentedPickerOptionCustomEvent<T> extends CustomEvent<T> {
2232
+ export interface BcmSegmentedPickerCustomEvent<T> extends CustomEvent<T> {
1703
2233
  detail: T;
1704
- target: HTMLBcmSegmentedPickerOptionElement;
2234
+ target: HTMLBcmSegmentedPickerElement;
1705
2235
  }
1706
2236
  export interface BcmSwitchCustomEvent<T> extends CustomEvent<T> {
1707
2237
  detail: T;
1708
2238
  target: HTMLBcmSwitchElement;
1709
2239
  }
1710
- export interface BcmTabsCustomEvent<T> extends CustomEvent<T> {
2240
+ export interface BcmTabCustomEvent<T> extends CustomEvent<T> {
1711
2241
  detail: T;
1712
- target: HTMLBcmTabsElement;
2242
+ target: HTMLBcmTabElement;
1713
2243
  }
1714
- export interface BcmTabsTriggerCustomEvent<T> extends CustomEvent<T> {
2244
+ export interface BcmTabsCustomEvent<T> extends CustomEvent<T> {
1715
2245
  detail: T;
1716
- target: HTMLBcmTabsTriggerElement;
2246
+ target: HTMLBcmTabsElement;
1717
2247
  }
1718
2248
  export interface BcmTextareaCustomEvent<T> extends CustomEvent<T> {
1719
2249
  detail: T;
@@ -1942,11 +2472,52 @@ declare global {
1942
2472
  new (): HTMLBcmButtonGroupElement;
1943
2473
  };
1944
2474
  interface HTMLBcmCheckboxElementEventMap {
1945
- "bcmCheckboxChange": { element: any; checked: boolean };
2475
+ "bcmCheckboxChange": { element: HTMLInputElement; checked: boolean };
1946
2476
  }
1947
2477
  /**
1948
- * @description A checkbox component that allows users to select or deselect an option.
1949
- * It also supports an indeterminate state.
2478
+ * @component BcmCheckbox
2479
+ * @description A form-associated checkbox component representing a boolean choice.
2480
+ * Integrates with native HTML forms via ElementInternals while supporting
2481
+ * **three validation strategies** via `validation-mode`:
2482
+ * - **`native`**
2483
+ * - Participates in native browser constraint validation.
2484
+ * - Sets the underlying input's `required`.
2485
+ * - Browser may show native validation bubbles when submit/reportValidity happens.
2486
+ * - **`silent`**
2487
+ * - Does **not** set native `required` (prevents browser bubble).
2488
+ * - Computes "missing required" internally and exposes it via `error` + `caption`.
2489
+ * - UI errors are **gated**: shown only after `touched` or a form submit attempt.
2490
+ * - **`none`**
2491
+ * - Value-only mode: submits value but never becomes invalid.
2492
+ * ## UI error gating (silent mode)
2493
+ * - `touched` becomes true after first user interaction
2494
+ * - `submitAttempted` becomes true when the parent form emits `submit`
2495
+ * ## Value behavior
2496
+ * - When checked → submits `value` (default: `"on"`).
2497
+ * - When unchecked → submits no value (`null`).
2498
+ * - When disabled → no submission and no validity participation.
2499
+ * ## Shadow Parts
2500
+ * - `checkbox` → root container
2501
+ * - `control` → visual checkbox box
2502
+ * - `icon` → icon container (check or minus)
2503
+ * - `label` → label text
2504
+ * - `caption` → helper/error text (silent mode UI)
2505
+ * - `input` → hidden native input
2506
+ * @example Basic usage
2507
+ * <bcm-checkbox name="terms" required>
2508
+ * I agree to the terms and conditions
2509
+ * </bcm-checkbox>
2510
+ * @example Silent validation (no native bubble)
2511
+ * <form>
2512
+ * <bcm-checkbox name="newsletter" required validation-mode="silent">
2513
+ * Subscribe to newsletter
2514
+ * </bcm-checkbox>
2515
+ * <button type="submit">Submit</button>
2516
+ * </form>
2517
+ * @example Value-only mode
2518
+ * <bcm-checkbox name="analytics" validation-mode="none">
2519
+ * Allow analytics
2520
+ * </bcm-checkbox>
1950
2521
  */
1951
2522
  interface HTMLBcmCheckboxElement extends Components.BcmCheckbox, HTMLStencilElement {
1952
2523
  addEventListener<K extends keyof HTMLBcmCheckboxElementEventMap>(type: K, listener: (this: HTMLBcmCheckboxElement, ev: BcmCheckboxCustomEvent<HTMLBcmCheckboxElementEventMap[K]>) => any, options?: boolean | AddEventListenerOptions): void;
@@ -2018,6 +2589,38 @@ declare global {
2018
2589
  "bcmBeforeOpen": void;
2019
2590
  "bcmBeforeClose": void;
2020
2591
  }
2592
+ /**
2593
+ * @component BcmDrawer
2594
+ * @description A slide-in panel component built on the native HTML Dialog API.
2595
+ * Ideal for navigation menus, forms, and contextual information that slides in from any edge of the screen.
2596
+ * @example ```html
2597
+ * <!-- Basic usage -->
2598
+ * <bcm-drawer open header-text="Menu" position="left">
2599
+ * <nav>
2600
+ * <a href="/home">Home</a>
2601
+ * <a href="/about">About</a>
2602
+ * </nav>
2603
+ * </bcm-drawer>
2604
+ * <!-- Custom size and position -->
2605
+ * <bcm-drawer size="large" position="right">
2606
+ * <div slot="header">Settings</div>
2607
+ * <form>...</form>
2608
+ * <div slot="footer">
2609
+ * <button data-dismiss>Cancel</button>
2610
+ * <button>Save</button>
2611
+ * </div>
2612
+ * </bcm-drawer>
2613
+ * <!-- Custom size with CSS units -->
2614
+ * <bcm-drawer size="600px" position="bottom">
2615
+ * <p>Custom height drawer</p>
2616
+ * </bcm-drawer>
2617
+ * <!-- Programmatic usage -->
2618
+ * <bcm-drawer id="myDrawer">Content</bcm-drawer>
2619
+ * <script>
2620
+ * document.getElementById('myDrawer').show();
2621
+ * </script>
2622
+ * ```
2623
+ */
2021
2624
  interface HTMLBcmDrawerElement extends Components.BcmDrawer, HTMLStencilElement {
2022
2625
  addEventListener<K extends keyof HTMLBcmDrawerElementEventMap>(type: K, listener: (this: HTMLBcmDrawerElement, ev: BcmDrawerCustomEvent<HTMLBcmDrawerElementEventMap[K]>) => any, options?: boolean | AddEventListenerOptions): void;
2023
2626
  addEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
@@ -2066,6 +2669,27 @@ declare global {
2066
2669
  prototype: HTMLBcmDropdownItemElement;
2067
2670
  new (): HTMLBcmDropdownItemElement;
2068
2671
  };
2672
+ interface HTMLBcmFileUploadElementEventMap {
2673
+ "bcmFileChange": File[];
2674
+ "bcmFileRemoved": BcmUploadItem;
2675
+ "bcmUploadCanceled": BcmUploadItem;
2676
+ "bcmFocus": FocusEvent;
2677
+ "bcmBlur": FocusEvent;
2678
+ }
2679
+ interface HTMLBcmFileUploadElement extends Components.BcmFileUpload, HTMLStencilElement {
2680
+ addEventListener<K extends keyof HTMLBcmFileUploadElementEventMap>(type: K, listener: (this: HTMLBcmFileUploadElement, ev: BcmFileUploadCustomEvent<HTMLBcmFileUploadElementEventMap[K]>) => any, options?: boolean | AddEventListenerOptions): void;
2681
+ addEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
2682
+ addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
2683
+ addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
2684
+ removeEventListener<K extends keyof HTMLBcmFileUploadElementEventMap>(type: K, listener: (this: HTMLBcmFileUploadElement, ev: BcmFileUploadCustomEvent<HTMLBcmFileUploadElementEventMap[K]>) => any, options?: boolean | EventListenerOptions): void;
2685
+ removeEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
2686
+ removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
2687
+ removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
2688
+ }
2689
+ var HTMLBcmFileUploadElement: {
2690
+ prototype: HTMLBcmFileUploadElement;
2691
+ new (): HTMLBcmFileUploadElement;
2692
+ };
2069
2693
  interface HTMLBcmInputElementEventMap {
2070
2694
  "bcmInput": InputEvent;
2071
2695
  "bcmChange": Event;
@@ -2089,11 +2713,42 @@ declare global {
2089
2713
  new (): HTMLBcmInputElement;
2090
2714
  };
2091
2715
  interface HTMLBcmLinkedElementEventMap {
2716
+ "bcmBeforeShow": void;
2092
2717
  "bcmShow": void;
2718
+ "bcmBeforeHide": void;
2093
2719
  "bcmHide": void;
2094
2720
  "bcmShown": void;
2095
2721
  "bcmHidden": void;
2096
2722
  }
2723
+ /**
2724
+ * @component BcmLinked
2725
+ * @description A flexible linked floating element component that displays contextual content relative to a trigger element.
2726
+ * Built on the native Popover API for top-layer rendering and Floating UI for intelligent positioning.
2727
+ * Supports different trigger types (click, hover, focus, manual) and comprehensive event system.
2728
+ * @example Basic Click Trigger
2729
+ * <bcm-linked trigger="click">
2730
+ * <button slot="trigger">Click Me</button>
2731
+ * <div>Floating content here</div>
2732
+ * </bcm-linked>
2733
+ * @example Hover Trigger with Delays
2734
+ * <bcm-linked trigger="hover" show-delay="200" hide-delay="100">
2735
+ * <span slot="trigger">Hover Me</span>
2736
+ * <div>This appears on hover</div>
2737
+ * </bcm-linked>
2738
+ * @example Manual Control
2739
+ * <bcm-linked id="my-linked" trigger="manual">
2740
+ * <button slot="trigger">Trigger</button>
2741
+ * <div>Controlled content</div>
2742
+ * </bcm-linked>
2743
+ * <script>
2744
+ * const linked = document.querySelector('#my-linked');
2745
+ * linked.show(); // Opens the floating element
2746
+ * linked.hide(); // Closes the floating element
2747
+ * </script>
2748
+ * @csspart floating - The floating container element
2749
+ * @csspart arrow - The arrow element pointing to the trigger
2750
+ * @csspart content - The content wrapper element
2751
+ */
2097
2752
  interface HTMLBcmLinkedElement extends Components.BcmLinked, HTMLStencilElement {
2098
2753
  addEventListener<K extends keyof HTMLBcmLinkedElementEventMap>(type: K, listener: (this: HTMLBcmLinkedElement, ev: BcmLinkedCustomEvent<HTMLBcmLinkedElementEventMap[K]>) => any, options?: boolean | AddEventListenerOptions): void;
2099
2754
  addEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
@@ -2114,6 +2769,38 @@ declare global {
2114
2769
  "bcmBeforeOpen": void;
2115
2770
  "bcmBeforeClose": void;
2116
2771
  }
2772
+ /**
2773
+ * @component BcmModal
2774
+ * @description A flexible modal dialog component built on the native HTML Dialog API.
2775
+ * Provides a powerful way to display content in a layer above the page with full keyboard and focus management.
2776
+ * @example ```html
2777
+ * <!-- Basic usage -->
2778
+ * <bcm-modal open header-text="Welcome" helper-text="Please read carefully">
2779
+ * <p>Modal content goes here</p>
2780
+ * <div slot="footer">
2781
+ * <button data-dismiss>Close</button>
2782
+ * </div>
2783
+ * </bcm-modal>
2784
+ * <!-- Custom size and placement -->
2785
+ * <bcm-modal size="large" placement="top">
2786
+ * <div slot="header">Custom Header</div>
2787
+ * <p>Content here</p>
2788
+ * <div slot="footer">
2789
+ * <button>Cancel</button>
2790
+ * <button>Confirm</button>
2791
+ * </div>
2792
+ * </bcm-modal>
2793
+ * <!-- Full screen modal -->
2794
+ * <bcm-modal full-screen no-footer>
2795
+ * <p>Full screen content</p>
2796
+ * </bcm-modal>
2797
+ * <!-- Programmatic usage -->
2798
+ * <bcm-modal id="myModal">Content</bcm-modal>
2799
+ * <script>
2800
+ * document.getElementById('myModal').show();
2801
+ * </script>
2802
+ * ```
2803
+ */
2117
2804
  interface HTMLBcmModalElement extends Components.BcmModal, HTMLStencilElement {
2118
2805
  addEventListener<K extends keyof HTMLBcmModalElementEventMap>(type: K, listener: (this: HTMLBcmModalElement, ev: BcmModalCustomEvent<HTMLBcmModalElementEventMap[K]>) => any, options?: boolean | AddEventListenerOptions): void;
2119
2806
  addEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
@@ -2129,55 +2816,151 @@ declare global {
2129
2816
  new (): HTMLBcmModalElement;
2130
2817
  };
2131
2818
  interface HTMLBcmPopConfirmElementEventMap {
2819
+ "bcmBeforeOpen": void;
2820
+ "bcmOpen": void;
2821
+ "bcmBeforeClose": void;
2822
+ "bcmClose": void;
2132
2823
  "bcmConfirm": void;
2133
2824
  "bcmCancel": void;
2134
2825
  }
2135
2826
  /**
2136
2827
  * @component BcmPopConfirm
2137
- * @description A floating confirmation pop-up component that prompts users for action confirmation, triggered by click or hover events.
2138
- * Offers customizable header, body content, and footer areas through slots, with accessibility and positioning features.
2139
- * @example Basic usage
2140
- * <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>
2141
- * @example With all slots and custom styling
2142
- * <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">
2143
- * <span slot="header">Custom Header Text</span>
2144
- * <span slot="body">Additional details here</span>
2145
- * <span slot="footer">Custom Footer Action</span>
2828
+ * @description A confirmation popover component that displays a confirmation dialog with customizable actions.
2829
+ * Built on the native Popover API for top-layer rendering and Floating UI for intelligent positioning.
2830
+ * Ideal for confirming destructive actions or important decisions inline.
2831
+ * @csspart container - The main popover container element
2832
+ * @csspart arrow - The arrow pointer element
2833
+ * @csspart body - The body/description section
2834
+ * @csspart footer - The footer section with action buttons
2835
+ * @example Basic Usage
2836
+ * ```html
2837
+ * <bcm-pop-confirm
2838
+ * header-text="Delete Item?"
2839
+ * description="Are you sure you want to delete this item? This action cannot be undone."
2840
+ * status="error"
2841
+ * >
2842
+ * <bcm-button status="error">Delete</bcm-button>
2146
2843
  * </bcm-pop-confirm>
2147
- * @example Event handling
2148
- * // Listen to confirmation events
2149
- * const popConfirm = document.querySelector('bcm-pop-confirm');
2150
- * popConfirm.addEventListener('bcmConfirm', () => {
2151
- * console.log('User confirmed the action!');
2844
+ * ```
2845
+ * @example With Event Handlers
2846
+ * ```html
2847
+ * <bcm-pop-confirm
2848
+ * id="deleteConfirm"
2849
+ * header-text="Confirm Delete"
2850
+ * description="This will permanently delete the item."
2851
+ * status="warning"
2852
+ * confirm-text="Yes, Delete"
2853
+ * cancel-text="No, Keep It"
2854
+ * >
2855
+ * <bcm-button>Delete Item</bcm-button>
2856
+ * </bcm-pop-confirm>
2857
+ * <script>
2858
+ * const popconfirm = document.getElementById('deleteConfirm');
2859
+ * popconfirm.addEventListener('bcmConfirm', () => {
2860
+ * console.log('User confirmed deletion');
2861
+ * // Perform delete operation
2862
+ * });
2863
+ * popconfirm.addEventListener('bcmCancel', () => {
2864
+ * console.log('User cancelled deletion');
2865
+ * });
2866
+ * </script>
2867
+ * ```
2868
+ * @example Different Status Types
2869
+ * ```html
2870
+ * <!-- Info (default) -->
2871
+ * <bcm-pop-confirm header-text="Information" description="This is an info message">
2872
+ * <bcm-button>Info</bcm-button>
2873
+ * </bcm-pop-confirm>
2874
+ * <!-- Success -->
2875
+ * <bcm-pop-confirm status="success" header-text="Confirm Action" description="Proceed with this action?">
2876
+ * <bcm-button status="success">Proceed</bcm-button>
2877
+ * </bcm-pop-confirm>
2878
+ * <!-- Warning -->
2879
+ * <bcm-pop-confirm status="warning" header-text="Warning" description="This action may have consequences">
2880
+ * <bcm-button status="warning">Continue</bcm-button>
2881
+ * </bcm-pop-confirm>
2882
+ * <!-- Error/Danger -->
2883
+ * <bcm-pop-confirm status="error" header-text="Danger Zone" description="This is a destructive action">
2884
+ * <bcm-button status="error">Delete</bcm-button>
2885
+ * </bcm-pop-confirm>
2886
+ * ```
2887
+ * @example Custom Content with Slots
2888
+ * ```html
2889
+ * <bcm-pop-confirm status="warning">
2890
+ * <bcm-button>Custom Confirm</bcm-button>
2891
+ * <div slot="header">
2892
+ * <strong>Custom Header</strong>
2893
+ * </div>
2894
+ * <div slot="body">
2895
+ * <p>This is custom body content with <strong>HTML formatting</strong>.</p>
2896
+ * <ul>
2897
+ * <li>Point 1</li>
2898
+ * <li>Point 2</li>
2899
+ * </ul>
2900
+ * </div>
2901
+ * <div slot="footer">
2902
+ * <bcm-button kind="outline" size="small">Maybe Later</bcm-button>
2903
+ * <bcm-button status="success" size="small">Confirm</bcm-button>
2904
+ * </div>
2905
+ * </bcm-pop-confirm>
2906
+ * ```
2907
+ * @example Different Sizes
2908
+ * ```html
2909
+ * <!-- Small -->
2910
+ * <bcm-pop-confirm size="small" header-text="Small" description="Compact confirmation">
2911
+ * <bcm-button size="small">Small</bcm-button>
2912
+ * </bcm-pop-confirm>
2913
+ * <!-- Medium (default) -->
2914
+ * <bcm-pop-confirm size="medium" header-text="Medium" description="Standard confirmation">
2915
+ * <bcm-button size="medium">Medium</bcm-button>
2916
+ * </bcm-pop-confirm>
2917
+ * <!-- Large -->
2918
+ * <bcm-pop-confirm size="large" header-text="Large" description="Spacious confirmation with more room for content">
2919
+ * <bcm-button size="large">Large</bcm-button>
2920
+ * </bcm-pop-confirm>
2921
+ * ```
2922
+ * @example Programmatic Control
2923
+ * ```html
2924
+ * <bcm-pop-confirm id="myConfirm" header-text="Confirm" description="Are you sure?">
2925
+ * <bcm-button>Trigger</bcm-button>
2926
+ * </bcm-pop-confirm>
2927
+ * <bcm-button id="showBtn">Show Programmatically</bcm-button>
2928
+ * <bcm-button id="hideBtn">Hide Programmatically</bcm-button>
2929
+ * <script>
2930
+ * const popconfirm = document.getElementById('myConfirm');
2931
+ * document.getElementById('showBtn').addEventListener('click', () => {
2932
+ * popconfirm.show();
2152
2933
  * });
2153
- * popConfirm.addEventListener('bcmCancel', () => {
2154
- * console.log('User canceled the action!');
2934
+ * document.getElementById('hideBtn').addEventListener('click', () => {
2935
+ * popconfirm.hide();
2155
2936
  * });
2156
- * // Programmatically control pop-up
2157
- * await popConfirm.show(); // Show the pop-up
2158
- * await popConfirm.hide(); // Hide the pop-up
2159
- * @prop {string} arrowColor - The color of the arrow pointing to the trigger element (default: 'var(--bcm-ui-color-background-basic-panel)')
2160
- * @prop {string} cancelText - Text displayed on the cancel button (default: 'Cancel')
2161
- * @prop {string} confirmText - Text displayed on the confirm button (default: 'Yes')
2162
- * @prop {string} description - The description or body content of the pop-up (default: '')
2163
- * @prop {string} headerText - The header text displayed at the top of the pop-up (default: '')
2164
- * @prop {Placement} placement - The placement position of the pop-up relative to the trigger (default: 'right')
2165
- * @prop {('small' | 'medium' | 'large')} size - The size of the pop-up, determining its dimensions (default: 'medium')
2166
- * @prop {('info' | 'error' | 'warning' | 'success' | 'default')} status - The status of the pop-up, affecting its icon and color (default: 'info')
2167
- * @prop {boolean} statusIcon - Whether to display a status icon based on the `status` prop (default: true)
2168
- * @prop {string} targetId - The ID of the trigger element (e.g., a button) that opens the pop-up
2169
- * @event {EventEmitter<void>} bcmConfirm - Emitted when the user confirms the action in the pop-up
2170
- * @event {EventEmitter<void>} bcmCancel - Emitted when the user cancels the action in the pop-up
2171
- * @csspart container - The root container element of the pop-up
2172
- * @csspart header - The header section with title and close icon
2173
- * @csspart content - The main content section of the pop-up
2174
- * @csspart footer - The footer section with confirm/cancel buttons
2175
- * @csspart arrow - The positioning arrow pointing to the trigger
2176
- * @css {string} --popover-radius - Border radius of the pop-up (default: defined in CSS)
2177
- * @css {string} --popover-bg - Background color of the pop-up
2178
- * @css {string} --text-color - Text color of the pop-up based on status
2179
- * @methods show() - Programmatically shows the pop-up
2180
- * hide() - Programmatically hides the pop-up
2937
+ * </script>
2938
+ * ```
2939
+ * @example Without Status Icon
2940
+ * ```html
2941
+ * <bcm-pop-confirm
2942
+ * header-text="Simple Confirmation"
2943
+ * description="No status icon shown"
2944
+ * status-icon={false}
2945
+ * >
2946
+ * <bcm-button>Click Me</bcm-button>
2947
+ * </bcm-pop-confirm>
2948
+ * ```
2949
+ * @example Different Placements
2950
+ * ```html
2951
+ * <bcm-pop-confirm placement="top" header-text="Top" description="Opens above">
2952
+ * <bcm-button>Top</bcm-button>
2953
+ * </bcm-pop-confirm>
2954
+ * <bcm-pop-confirm placement="right" header-text="Right" description="Opens to the right">
2955
+ * <bcm-button>Right</bcm-button>
2956
+ * </bcm-pop-confirm>
2957
+ * <bcm-pop-confirm placement="bottom" header-text="Bottom" description="Opens below">
2958
+ * <bcm-button>Bottom</bcm-button>
2959
+ * </bcm-pop-confirm>
2960
+ * <bcm-pop-confirm placement="left" header-text="Left" description="Opens to the left">
2961
+ * <bcm-button>Left</bcm-button>
2962
+ * </bcm-pop-confirm>
2963
+ * ```
2181
2964
  */
2182
2965
  interface HTMLBcmPopConfirmElement extends Components.BcmPopConfirm, HTMLStencilElement {
2183
2966
  addEventListener<K extends keyof HTMLBcmPopConfirmElementEventMap>(type: K, listener: (this: HTMLBcmPopConfirmElement, ev: BcmPopConfirmCustomEvent<HTMLBcmPopConfirmElementEventMap[K]>) => any, options?: boolean | AddEventListenerOptions): void;
@@ -2194,21 +2977,24 @@ declare global {
2194
2977
  new (): HTMLBcmPopConfirmElement;
2195
2978
  };
2196
2979
  interface HTMLBcmPopoverElementEventMap {
2197
- "bcmPopoverOpen": void;
2198
- "bcmPopoverClose": void;
2980
+ "bcmBeforeOpen": void;
2981
+ "bcmOpen": void;
2982
+ "bcmBeforeClose": void;
2983
+ "bcmClose": void;
2199
2984
  }
2200
2985
  /**
2201
2986
  * @component BcmPopover
2202
2987
  * @description A flexible popover component that displays contextual information or content relative to a target element.
2203
- * Supports different sizes, trigger types (click or hover), placements (top, right, bottom, left), and can be controlled via slots or props.
2988
+ * Built on the native Popover API for top-layer rendering and Floating UI for intelligent positioning.
2989
+ * Supports different sizes, trigger types (click, hover, focus), placements, and comprehensive event system.
2204
2990
  * @example Basic Click Popover
2205
2991
  * <bcm-popover trigger="click" size="medium" placement="top">
2206
2992
  * <bcm-button>Click Me</bcm-button>
2207
2993
  * <span slot="header">Header</span>
2208
2994
  * <span slot="content">This is a simple popover content.</span>
2209
2995
  * </bcm-popover>
2210
- * @example Hover Popover with Props
2211
- * <bcm-popover trigger="hover" hover-delay="200" size="large" placement="right" header-text="Prop Header" message="This is a hover popover with props.">
2996
+ * @example Hover Popover with Delays
2997
+ * <bcm-popover trigger="hover" show-delay="200" hide-delay="100" size="large" placement="right" header-text="Prop Header" message="This is a hover popover with props.">
2212
2998
  * <bcm-button>Hover Me</bcm-button>
2213
2999
  * </bcm-popover>
2214
3000
  * @example Programmatic Control
@@ -2218,8 +3004,9 @@ declare global {
2218
3004
  * </bcm-popover>
2219
3005
  * <script>
2220
3006
  * const popover = document.querySelector('#my-popover');
2221
- * popover.openPopup(); // Opens the popover
2222
- * popover.closePopup(); // Closes the popover
3007
+ * popover.show(); // Opens the popover
3008
+ * popover.hide(); // Closes the popover
3009
+ * popover.toggle(); // Toggles the popover
2223
3010
  * </script>
2224
3011
  * @csspart popover - The root popover container element, stylable for the entire popover
2225
3012
  * @csspart header - The header section of the popover, stylable for the title area
@@ -2276,39 +3063,45 @@ declare global {
2276
3063
  prototype: HTMLBcmRadioGroupElement;
2277
3064
  new (): HTMLBcmRadioGroupElement;
2278
3065
  };
2279
- interface HTMLBcmSegmentedPickerElementEventMap {
2280
- "bcmChange": { value: string };
3066
+ interface HTMLBcmSegmentElementEventMap {
3067
+ "bcmSegmentClick": string;
2281
3068
  }
2282
- interface HTMLBcmSegmentedPickerElement extends Components.BcmSegmentedPicker, HTMLStencilElement {
2283
- addEventListener<K extends keyof HTMLBcmSegmentedPickerElementEventMap>(type: K, listener: (this: HTMLBcmSegmentedPickerElement, ev: BcmSegmentedPickerCustomEvent<HTMLBcmSegmentedPickerElementEventMap[K]>) => any, options?: boolean | AddEventListenerOptions): void;
3069
+ /**
3070
+ * Individual segment option component
3071
+ */
3072
+ interface HTMLBcmSegmentElement extends Components.BcmSegment, HTMLStencilElement {
3073
+ addEventListener<K extends keyof HTMLBcmSegmentElementEventMap>(type: K, listener: (this: HTMLBcmSegmentElement, ev: BcmSegmentCustomEvent<HTMLBcmSegmentElementEventMap[K]>) => any, options?: boolean | AddEventListenerOptions): void;
2284
3074
  addEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
2285
3075
  addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
2286
3076
  addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
2287
- removeEventListener<K extends keyof HTMLBcmSegmentedPickerElementEventMap>(type: K, listener: (this: HTMLBcmSegmentedPickerElement, ev: BcmSegmentedPickerCustomEvent<HTMLBcmSegmentedPickerElementEventMap[K]>) => any, options?: boolean | EventListenerOptions): void;
3077
+ removeEventListener<K extends keyof HTMLBcmSegmentElementEventMap>(type: K, listener: (this: HTMLBcmSegmentElement, ev: BcmSegmentCustomEvent<HTMLBcmSegmentElementEventMap[K]>) => any, options?: boolean | EventListenerOptions): void;
2288
3078
  removeEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
2289
3079
  removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
2290
3080
  removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
2291
3081
  }
2292
- var HTMLBcmSegmentedPickerElement: {
2293
- prototype: HTMLBcmSegmentedPickerElement;
2294
- new (): HTMLBcmSegmentedPickerElement;
3082
+ var HTMLBcmSegmentElement: {
3083
+ prototype: HTMLBcmSegmentElement;
3084
+ new (): HTMLBcmSegmentElement;
2295
3085
  };
2296
- interface HTMLBcmSegmentedPickerOptionElementEventMap {
2297
- "bcmOptionClick": string;
3086
+ interface HTMLBcmSegmentedPickerElementEventMap {
3087
+ "bcmSegmentChange": { value: string; previousValue: string };
2298
3088
  }
2299
- interface HTMLBcmSegmentedPickerOptionElement extends Components.BcmSegmentedPickerOption, HTMLStencilElement {
2300
- addEventListener<K extends keyof HTMLBcmSegmentedPickerOptionElementEventMap>(type: K, listener: (this: HTMLBcmSegmentedPickerOptionElement, ev: BcmSegmentedPickerOptionCustomEvent<HTMLBcmSegmentedPickerOptionElementEventMap[K]>) => any, options?: boolean | AddEventListenerOptions): void;
3089
+ /**
3090
+ * Modern Segmented Picker component with CSS Grid-based indicator
3091
+ */
3092
+ interface HTMLBcmSegmentedPickerElement extends Components.BcmSegmentedPicker, HTMLStencilElement {
3093
+ addEventListener<K extends keyof HTMLBcmSegmentedPickerElementEventMap>(type: K, listener: (this: HTMLBcmSegmentedPickerElement, ev: BcmSegmentedPickerCustomEvent<HTMLBcmSegmentedPickerElementEventMap[K]>) => any, options?: boolean | AddEventListenerOptions): void;
2301
3094
  addEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
2302
3095
  addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
2303
3096
  addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
2304
- removeEventListener<K extends keyof HTMLBcmSegmentedPickerOptionElementEventMap>(type: K, listener: (this: HTMLBcmSegmentedPickerOptionElement, ev: BcmSegmentedPickerOptionCustomEvent<HTMLBcmSegmentedPickerOptionElementEventMap[K]>) => any, options?: boolean | EventListenerOptions): void;
3097
+ removeEventListener<K extends keyof HTMLBcmSegmentedPickerElementEventMap>(type: K, listener: (this: HTMLBcmSegmentedPickerElement, ev: BcmSegmentedPickerCustomEvent<HTMLBcmSegmentedPickerElementEventMap[K]>) => any, options?: boolean | EventListenerOptions): void;
2305
3098
  removeEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
2306
3099
  removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
2307
3100
  removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
2308
3101
  }
2309
- var HTMLBcmSegmentedPickerOptionElement: {
2310
- prototype: HTMLBcmSegmentedPickerOptionElement;
2311
- new (): HTMLBcmSegmentedPickerOptionElement;
3102
+ var HTMLBcmSegmentedPickerElement: {
3103
+ prototype: HTMLBcmSegmentedPickerElement;
3104
+ new (): HTMLBcmSegmentedPickerElement;
2312
3105
  };
2313
3106
  interface HTMLBcmShortcutElement extends Components.BcmShortcut, HTMLStencilElement {
2314
3107
  }
@@ -2321,27 +3114,51 @@ declare global {
2321
3114
  }
2322
3115
  /**
2323
3116
  * @component BcmSwitch
2324
- * @description A customizable toggle switch component that provides an intuitive way to enable or disable options.
2325
- * Supports different sizes, label positions, error states, and accessibility features.
3117
+ * @description A form-associated toggle switch component representing a boolean choice.
3118
+ * It behaves like a checkbox and integrates with native HTML forms via ElementInternals.
3119
+ * This component supports **three validation strategies** via `validation-mode`:
3120
+ * - **`native`**:
3121
+ * - Uses native browser constraint validation.
3122
+ * - Sets the underlying input's `required` attribute.
3123
+ * - Browser may show the native validation bubble when the form calls `reportValidity()` / submit validation runs.
3124
+ * - **`silent`**:
3125
+ * - Does **not** rely on native `required` (prevents the browser bubble).
3126
+ * - Computes the "missing required" state internally and exposes it via `error` + `caption`.
3127
+ * - UI errors are **gated**: they appear only after the control is touched or after a submit attempt.
3128
+ * - **`none`**:
3129
+ * - Value-only mode (headless): participates in form value submission but never becomes invalid.
3130
+ * ## UI error gating (silent mode)
3131
+ * To avoid showing errors on initial render, the component tracks:
3132
+ * - `touched`: set after the first user interaction
3133
+ * - `submitAttempted`: set when the parent form emits `submit`
3134
+ * Only when `touched || submitAttempted` the component will show `error/caption` in `silent` mode.
3135
+ * ## Value behavior
3136
+ * - When checked, the component submits its `value` (default: `"on"`).
3137
+ * - When unchecked, no value is submitted.
3138
+ * - When disabled, the component does not participate in submission or validity.
2326
3139
  * @example Basic usage
2327
- * <bcm-switch label="Enable notifications"></bcm-switch>
2328
- * @example With error state
3140
+ * <bcm-switch name="newsletter" label="Receive newsletter?" />
3141
+ * @example Required with silent validation (no native bubble)
3142
+ * <form>
2329
3143
  * <bcm-switch
3144
+ * name="terms"
2330
3145
  * label="Accept terms"
2331
- * error={true}
2332
- * caption="You must accept the terms to continue">
2333
- * </bcm-switch>
2334
- * @example Disabled state
2335
- * <bcm-switch
2336
- * label="Advanced features"
2337
- * disabled={true}>
2338
- * </bcm-switch>
2339
- * @example With custom size and label position
2340
- * <bcm-switch
2341
- * label="Dark mode"
2342
- * size="large"
2343
- * labelPosition="left">
3146
+ * required
3147
+ * validation-mode="silent">
2344
3148
  * </bcm-switch>
3149
+ * <button type="submit">Submit</button>
3150
+ * </form>
3151
+ * @example Native validation mode (may show native bubble)
3152
+ * <bcm-switch name="terms" label="Accept terms" required validation-mode="native" />
3153
+ * @example Value-only mode (no validation)
3154
+ * <bcm-switch name="analytics" label="Allow analytics" validation-mode="none" />
3155
+ * @csspart base - Root container
3156
+ * @csspart switch-wrapper - Wrapper containing label + track
3157
+ * @csspart input - Hidden native input
3158
+ * @csspart label - Text label
3159
+ * @csspart dot-container - Switch track
3160
+ * @csspart dot - Switch knob
3161
+ * @csspart caption - Helper/error text
2345
3162
  */
2346
3163
  interface HTMLBcmSwitchElement extends Components.BcmSwitch, HTMLStencilElement {
2347
3164
  addEventListener<K extends keyof HTMLBcmSwitchElementEventMap>(type: K, listener: (this: HTMLBcmSwitchElement, ev: BcmSwitchCustomEvent<HTMLBcmSwitchElementEventMap[K]>) => any, options?: boolean | AddEventListenerOptions): void;
@@ -2357,67 +3174,48 @@ declare global {
2357
3174
  prototype: HTMLBcmSwitchElement;
2358
3175
  new (): HTMLBcmSwitchElement;
2359
3176
  };
2360
- interface HTMLBcmTabsElementEventMap {
2361
- "bcmTabChange": {
2362
- activeTab: string;
2363
- element: HTMLBcmTabsTriggerElement;
2364
- previousTab?: string;
2365
- };
3177
+ interface HTMLBcmTabElementEventMap {
3178
+ "bcmTabClick": string;
2366
3179
  }
2367
3180
  /**
2368
- * @description Tab interface component
3181
+ * Individual tab component - self-contained with label and content panel
2369
3182
  */
2370
- interface HTMLBcmTabsElement extends Components.BcmTabs, HTMLStencilElement {
2371
- addEventListener<K extends keyof HTMLBcmTabsElementEventMap>(type: K, listener: (this: HTMLBcmTabsElement, ev: BcmTabsCustomEvent<HTMLBcmTabsElementEventMap[K]>) => any, options?: boolean | AddEventListenerOptions): void;
3183
+ interface HTMLBcmTabElement extends Components.BcmTab, HTMLStencilElement {
3184
+ addEventListener<K extends keyof HTMLBcmTabElementEventMap>(type: K, listener: (this: HTMLBcmTabElement, ev: BcmTabCustomEvent<HTMLBcmTabElementEventMap[K]>) => any, options?: boolean | AddEventListenerOptions): void;
2372
3185
  addEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
2373
3186
  addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
2374
3187
  addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
2375
- removeEventListener<K extends keyof HTMLBcmTabsElementEventMap>(type: K, listener: (this: HTMLBcmTabsElement, ev: BcmTabsCustomEvent<HTMLBcmTabsElementEventMap[K]>) => any, options?: boolean | EventListenerOptions): void;
3188
+ removeEventListener<K extends keyof HTMLBcmTabElementEventMap>(type: K, listener: (this: HTMLBcmTabElement, ev: BcmTabCustomEvent<HTMLBcmTabElementEventMap[K]>) => any, options?: boolean | EventListenerOptions): void;
2376
3189
  removeEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
2377
3190
  removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
2378
3191
  removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
2379
3192
  }
2380
- var HTMLBcmTabsElement: {
2381
- prototype: HTMLBcmTabsElement;
2382
- new (): HTMLBcmTabsElement;
2383
- };
2384
- /**
2385
- * @description Tab content panel component that displays when its corresponding tab is selected
2386
- */
2387
- interface HTMLBcmTabsContentElement extends Components.BcmTabsContent, HTMLStencilElement {
2388
- }
2389
- var HTMLBcmTabsContentElement: {
2390
- prototype: HTMLBcmTabsContentElement;
2391
- new (): HTMLBcmTabsContentElement;
3193
+ var HTMLBcmTabElement: {
3194
+ prototype: HTMLBcmTabElement;
3195
+ new (): HTMLBcmTabElement;
2392
3196
  };
2393
- /**
2394
- * @description Container component for tab triggers that includes the sliding indicator (inkbar)
2395
- */
2396
- interface HTMLBcmTabsListElement extends Components.BcmTabsList, HTMLStencilElement {
2397
- }
2398
- var HTMLBcmTabsListElement: {
2399
- prototype: HTMLBcmTabsListElement;
2400
- new (): HTMLBcmTabsListElement;
2401
- };
2402
- interface HTMLBcmTabsTriggerElementEventMap {
2403
- "bcmTabSelected": string;
3197
+ interface HTMLBcmTabsElementEventMap {
3198
+ "bcmTabChange": {
3199
+ value: string;
3200
+ previousValue: string;
3201
+ };
2404
3202
  }
2405
3203
  /**
2406
- * @description Tab trigger component that functions as a clickable tab button
3204
+ * Modern Tabs component with CSS-first approach
2407
3205
  */
2408
- interface HTMLBcmTabsTriggerElement extends Components.BcmTabsTrigger, HTMLStencilElement {
2409
- addEventListener<K extends keyof HTMLBcmTabsTriggerElementEventMap>(type: K, listener: (this: HTMLBcmTabsTriggerElement, ev: BcmTabsTriggerCustomEvent<HTMLBcmTabsTriggerElementEventMap[K]>) => any, options?: boolean | AddEventListenerOptions): void;
3206
+ interface HTMLBcmTabsElement extends Components.BcmTabs, HTMLStencilElement {
3207
+ addEventListener<K extends keyof HTMLBcmTabsElementEventMap>(type: K, listener: (this: HTMLBcmTabsElement, ev: BcmTabsCustomEvent<HTMLBcmTabsElementEventMap[K]>) => any, options?: boolean | AddEventListenerOptions): void;
2410
3208
  addEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
2411
3209
  addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
2412
3210
  addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
2413
- removeEventListener<K extends keyof HTMLBcmTabsTriggerElementEventMap>(type: K, listener: (this: HTMLBcmTabsTriggerElement, ev: BcmTabsTriggerCustomEvent<HTMLBcmTabsTriggerElementEventMap[K]>) => any, options?: boolean | EventListenerOptions): void;
3211
+ removeEventListener<K extends keyof HTMLBcmTabsElementEventMap>(type: K, listener: (this: HTMLBcmTabsElement, ev: BcmTabsCustomEvent<HTMLBcmTabsElementEventMap[K]>) => any, options?: boolean | EventListenerOptions): void;
2414
3212
  removeEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
2415
3213
  removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
2416
3214
  removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
2417
3215
  }
2418
- var HTMLBcmTabsTriggerElement: {
2419
- prototype: HTMLBcmTabsTriggerElement;
2420
- new (): HTMLBcmTabsTriggerElement;
3216
+ var HTMLBcmTabsElement: {
3217
+ prototype: HTMLBcmTabsElement;
3218
+ new (): HTMLBcmTabsElement;
2421
3219
  };
2422
3220
  interface HTMLBcmTextElement extends Components.BcmText, HTMLStencilElement {
2423
3221
  }
@@ -2449,23 +3247,50 @@ declare global {
2449
3247
  };
2450
3248
  /**
2451
3249
  * @component BcmTooltip
2452
- * @description A lightweight tooltip component that displays brief contextual information when hovering or clicking on a target element.
2453
- * Supports different sizes, trigger types (click or hover), placements (top, right, bottom, left), and can be controlled via slots or props.
2454
- * @example Basic Hover Tooltip
2455
- * <bcm-tooltip trigger="hover" size="medium" placement="top" message="This is a tooltip.">
2456
- * <bcm-button>Hover Me</bcm-button>
3250
+ * @description A flexible tooltip component that provides contextual information on hover or click.
3251
+ * Built on the native Popover API for top-layer rendering and Floating UI for intelligent positioning.
3252
+ * Automatically handles overflow, flipping, and complex shadow DOM scenarios.
3253
+ * @example ```html
3254
+ * <!-- Basic usage with text message -->
3255
+ * <bcm-tooltip message="This is a tooltip">
3256
+ * <button>Hover me</button>
2457
3257
  * </bcm-tooltip>
2458
- * @example Click Tooltip with Programmatic Control
2459
- * <bcm-tooltip id="my-tooltip" trigger="click" message="Controlled tooltip.">
2460
- * <bcm-button>Click Me</bcm-button>
3258
+ * <!-- With custom rich content -->
3259
+ * <bcm-tooltip placement="right" size="large">
3260
+ * <button>Click me</button>
3261
+ * <div slot="content">
3262
+ * <strong>Rich content</strong>
3263
+ * <p>You can add any HTML here</p>
3264
+ * </div>
3265
+ * </bcm-tooltip>
3266
+ * <!-- Click trigger with custom delays -->
3267
+ * <bcm-tooltip trigger="click" show-delay="0" hide-delay="0">
3268
+ * <span>Click me</span>
3269
+ * </bcm-tooltip>
3270
+ * <!-- Mouse following mode -->
3271
+ * <bcm-tooltip follow={true} message="I follow your cursor!">
3272
+ * <div>Move your mouse here</div>
3273
+ * </bcm-tooltip>
3274
+ * <!-- Programmatic control -->
3275
+ * <bcm-tooltip id="myTooltip" message="Programmatic tooltip">
3276
+ * <span>Trigger</span>
2461
3277
  * </bcm-tooltip>
2462
3278
  * <script>
2463
- * const tooltip = document.querySelector('#my-tooltip');
2464
- * tooltip.openTooltip(); // Opens the tooltip
2465
- * tooltip.closeTooltip(); // Closes the tooltip
3279
+ * const tooltip = document.getElementById('myTooltip');
3280
+ * tooltip.show();
3281
+ * setTimeout(() => tooltip.hide(), 2000);
2466
3282
  * </script>
2467
- * @csspart tooltip - The root tooltip container element, stylable for the entire tooltip
2468
- * @csspart arrow - The arrow element of the tooltip, stylable for the positioning arrow
3283
+ * <!-- Custom styling with CSS parts -->
3284
+ * <style>
3285
+ * bcm-tooltip::part(tooltip) {
3286
+ * background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
3287
+ * border-radius: 12px;
3288
+ * }
3289
+ * bcm-tooltip::part(arrow) {
3290
+ * background: #667eea;
3291
+ * }
3292
+ * </style>
3293
+ * ```
2469
3294
  */
2470
3295
  interface HTMLBcmTooltipElement extends Components.BcmTooltip, HTMLStencilElement {
2471
3296
  }
@@ -2488,6 +3313,7 @@ declare global {
2488
3313
  "bcm-drawer": HTMLBcmDrawerElement;
2489
3314
  "bcm-dropdown": HTMLBcmDropdownElement;
2490
3315
  "bcm-dropdown-item": HTMLBcmDropdownItemElement;
3316
+ "bcm-file-upload": HTMLBcmFileUploadElement;
2491
3317
  "bcm-input": HTMLBcmInputElement;
2492
3318
  "bcm-linked": HTMLBcmLinkedElement;
2493
3319
  "bcm-modal": HTMLBcmModalElement;
@@ -2495,14 +3321,12 @@ declare global {
2495
3321
  "bcm-popover": HTMLBcmPopoverElement;
2496
3322
  "bcm-radio": HTMLBcmRadioElement;
2497
3323
  "bcm-radio-group": HTMLBcmRadioGroupElement;
3324
+ "bcm-segment": HTMLBcmSegmentElement;
2498
3325
  "bcm-segmented-picker": HTMLBcmSegmentedPickerElement;
2499
- "bcm-segmented-picker-option": HTMLBcmSegmentedPickerOptionElement;
2500
3326
  "bcm-shortcut": HTMLBcmShortcutElement;
2501
3327
  "bcm-switch": HTMLBcmSwitchElement;
3328
+ "bcm-tab": HTMLBcmTabElement;
2502
3329
  "bcm-tabs": HTMLBcmTabsElement;
2503
- "bcm-tabs-content": HTMLBcmTabsContentElement;
2504
- "bcm-tabs-list": HTMLBcmTabsListElement;
2505
- "bcm-tabs-trigger": HTMLBcmTabsTriggerElement;
2506
3330
  "bcm-text": HTMLBcmTextElement;
2507
3331
  "bcm-textarea": HTMLBcmTextareaElement;
2508
3332
  "bcm-tooltip": HTMLBcmTooltipElement;
@@ -2956,62 +3780,126 @@ declare namespace LocalJSX {
2956
3780
  "status"?: ButtonStatus;
2957
3781
  }
2958
3782
  /**
2959
- * @description A checkbox component that allows users to select or deselect an option.
2960
- * It also supports an indeterminate state.
3783
+ * @component BcmCheckbox
3784
+ * @description A form-associated checkbox component representing a boolean choice.
3785
+ * Integrates with native HTML forms via ElementInternals while supporting
3786
+ * **three validation strategies** via `validation-mode`:
3787
+ * - **`native`**
3788
+ * - Participates in native browser constraint validation.
3789
+ * - Sets the underlying input's `required`.
3790
+ * - Browser may show native validation bubbles when submit/reportValidity happens.
3791
+ * - **`silent`**
3792
+ * - Does **not** set native `required` (prevents browser bubble).
3793
+ * - Computes "missing required" internally and exposes it via `error` + `caption`.
3794
+ * - UI errors are **gated**: shown only after `touched` or a form submit attempt.
3795
+ * - **`none`**
3796
+ * - Value-only mode: submits value but never becomes invalid.
3797
+ * ## UI error gating (silent mode)
3798
+ * - `touched` becomes true after first user interaction
3799
+ * - `submitAttempted` becomes true when the parent form emits `submit`
3800
+ * ## Value behavior
3801
+ * - When checked → submits `value` (default: `"on"`).
3802
+ * - When unchecked → submits no value (`null`).
3803
+ * - When disabled → no submission and no validity participation.
3804
+ * ## Shadow Parts
3805
+ * - `checkbox` → root container
3806
+ * - `control` → visual checkbox box
3807
+ * - `icon` → icon container (check or minus)
3808
+ * - `label` → label text
3809
+ * - `caption` → helper/error text (silent mode UI)
3810
+ * - `input` → hidden native input
3811
+ * @example Basic usage
3812
+ * <bcm-checkbox name="terms" required>
3813
+ * I agree to the terms and conditions
3814
+ * </bcm-checkbox>
3815
+ * @example Silent validation (no native bubble)
3816
+ * <form>
3817
+ * <bcm-checkbox name="newsletter" required validation-mode="silent">
3818
+ * Subscribe to newsletter
3819
+ * </bcm-checkbox>
3820
+ * <button type="submit">Submit</button>
3821
+ * </form>
3822
+ * @example Value-only mode
3823
+ * <bcm-checkbox name="analytics" validation-mode="none">
3824
+ * Allow analytics
3825
+ * </bcm-checkbox>
2961
3826
  */
2962
3827
  interface BcmCheckbox {
2963
3828
  /**
2964
- * Unique ID for the component. Automatically generated if not specified.
3829
+ * Unique ID for the component. Automatically generated if not specified. Used to bind the visible label to the internal input.
2965
3830
  * @default generateId('bcm-checkbox')
2966
3831
  */
2967
3832
  "_id"?: string;
2968
3833
  /**
2969
- * Determines if the checkbox is checked
3834
+ * Helper / error caption (silent mode UI)
3835
+ */
3836
+ "caption"?: string;
3837
+ /**
3838
+ * Checked state
2970
3839
  * @default false
2971
3840
  */
2972
3841
  "checked"?: boolean;
2973
3842
  /**
2974
- * Determines if the checkbox is disabled
3843
+ * Disabled state
2975
3844
  * @default false
2976
3845
  */
2977
3846
  "disabled"?: boolean;
2978
3847
  /**
2979
- * Indicates if the checkbox is in an error state. This affects the visual styling of the component.
3848
+ * Visual error state. - In `silent` mode this can be managed internally. - In other modes you can set it externally as well.
2980
3849
  * @default false
2981
3850
  */
2982
3851
  "error"?: boolean;
2983
3852
  /**
2984
- * Full width checkbox
3853
+ * Makes checkbox occupy full width (if your styles support it).
2985
3854
  * @default false
2986
3855
  */
2987
3856
  "fullWidth"?: boolean;
2988
3857
  /**
2989
- * Determines if the checkbox is in an indeterminate state. This is useful when some items in a group of checkboxes are selected and others are not.
3858
+ * Indeterminate (mixed) state. Useful when a group selection is partially selected.
2990
3859
  * @default false
2991
3860
  */
2992
3861
  "indeterminate"?: boolean;
2993
3862
  /**
2994
- * Label text to display next to the checkbox
3863
+ * Visible label text (optional). You can also use the default slot.
2995
3864
  */
2996
3865
  "label"?: string;
2997
3866
  /**
2998
- * Controls the position of the label relative to the checkbox
3867
+ * Label position relative to the checkbox control.
2999
3868
  * @default 'right'
3000
3869
  */
3001
3870
  "labelPosition"?: 'left' | 'right';
3002
3871
  /**
3003
- * Name attribute for the checkbox when used in a form
3872
+ * Form field name
3004
3873
  */
3005
3874
  "name"?: string;
3006
3875
  /**
3007
- * Event emitted when the checked state changes
3876
+ * Fired whenever the checked state changes.
3877
+ */
3878
+ "onBcmCheckboxChange"?: (event: BcmCheckboxCustomEvent<{ element: HTMLInputElement; checked: boolean }>) => void;
3879
+ /**
3880
+ * Optional readonly support
3881
+ * @default false
3882
+ */
3883
+ "readonly"?: boolean;
3884
+ /**
3885
+ * Required state
3886
+ * @default false
3008
3887
  */
3009
- "onBcmCheckboxChange"?: (event: BcmCheckboxCustomEvent<{ element: any; checked: boolean }>) => void;
3888
+ "required"?: boolean;
3010
3889
  /**
3011
- * Size variant of the checkbox
3890
+ * Size variant (affects control + typography).
3012
3891
  * @default 'medium'
3013
3892
  */
3014
3893
  "size"?: 'small' | 'medium' | 'large';
3894
+ /**
3895
+ * @default 'native'
3896
+ */
3897
+ "validationMode"?: 'native' | 'silent' | 'none';
3898
+ /**
3899
+ * Value submitted when checked
3900
+ * @default 'on'
3901
+ */
3902
+ "value"?: string;
3015
3903
  }
3016
3904
  /**
3017
3905
  * @component BcmChip
@@ -3096,29 +3984,110 @@ declare namespace LocalJSX {
3096
3984
  */
3097
3985
  "variant"?: 'solid' | 'dashed' | 'dotted';
3098
3986
  }
3987
+ /**
3988
+ * @component BcmDrawer
3989
+ * @description A slide-in panel component built on the native HTML Dialog API.
3990
+ * Ideal for navigation menus, forms, and contextual information that slides in from any edge of the screen.
3991
+ * @example ```html
3992
+ * <!-- Basic usage -->
3993
+ * <bcm-drawer open header-text="Menu" position="left">
3994
+ * <nav>
3995
+ * <a href="/home">Home</a>
3996
+ * <a href="/about">About</a>
3997
+ * </nav>
3998
+ * </bcm-drawer>
3999
+ * <!-- Custom size and position -->
4000
+ * <bcm-drawer size="large" position="right">
4001
+ * <div slot="header">Settings</div>
4002
+ * <form>...</form>
4003
+ * <div slot="footer">
4004
+ * <button data-dismiss>Cancel</button>
4005
+ * <button>Save</button>
4006
+ * </div>
4007
+ * </bcm-drawer>
4008
+ * <!-- Custom size with CSS units -->
4009
+ * <bcm-drawer size="600px" position="bottom">
4010
+ * <p>Custom height drawer</p>
4011
+ * </bcm-drawer>
4012
+ * <!-- Programmatic usage -->
4013
+ * <bcm-drawer id="myDrawer">Content</bcm-drawer>
4014
+ * <script>
4015
+ * document.getElementById('myDrawer').show();
4016
+ * </script>
4017
+ * ```
4018
+ */
3099
4019
  interface BcmDrawer {
3100
4020
  /**
4021
+ * Controls backdrop behavior - true: Shows backdrop, drawer can be closed by clicking outside - false: No backdrop - 'static': Shows backdrop but prevents closing by clicking outside (triggers shake animation)
4022
+ * @default true
4023
+ */
4024
+ "backdrop"?: boolean | 'static';
4025
+ /**
4026
+ * Allows closing the drawer by clicking on the backdrop
4027
+ * @default true
4028
+ */
4029
+ "closeOnBackdrop"?: boolean;
4030
+ /**
4031
+ * Allows closing the drawer by pressing the Escape key
4032
+ * @default true
4033
+ */
4034
+ "closeOnEscape"?: boolean;
4035
+ /**
4036
+ * Makes the drawer take the full screen (100vw x 100vh)
4037
+ * @default false
4038
+ */
4039
+ "fullScreen"?: boolean;
4040
+ /**
4041
+ * Makes the drawer take full width (for left/right) or full height (for top/bottom)
3101
4042
  * @default false
3102
4043
  */
3103
4044
  "fullWidth"?: boolean;
4045
+ /**
4046
+ * Text to display in the drawer header
4047
+ */
3104
4048
  "headerText"?: string;
3105
4049
  /**
4050
+ * Helper text to display below the header title
4051
+ */
4052
+ "helperText"?: string;
4053
+ /**
4054
+ * Hides the footer section completely
4055
+ * @default false
4056
+ */
4057
+ "noFooter"?: boolean;
4058
+ /**
4059
+ * Hides the header section completely
3106
4060
  * @default false
3107
4061
  */
3108
4062
  "noHeader"?: boolean;
4063
+ /**
4064
+ * Emitted before the drawer closes. Can be cancelled by calling event.preventDefault()
4065
+ */
3109
4066
  "onBcmBeforeClose"?: (event: BcmDrawerCustomEvent<void>) => void;
4067
+ /**
4068
+ * Emitted before the drawer opens. Can be cancelled by calling event.preventDefault()
4069
+ */
3110
4070
  "onBcmBeforeOpen"?: (event: BcmDrawerCustomEvent<void>) => void;
4071
+ /**
4072
+ * Emitted after the drawer has closed
4073
+ */
3111
4074
  "onBcmClose"?: (event: BcmDrawerCustomEvent<void>) => void;
4075
+ /**
4076
+ * Emitted after the drawer has opened
4077
+ */
3112
4078
  "onBcmOpen"?: (event: BcmDrawerCustomEvent<void>) => void;
3113
4079
  /**
4080
+ * Controls whether the drawer is open or closed
3114
4081
  * @default false
3115
4082
  */
3116
4083
  "open"?: boolean;
3117
4084
  /**
4085
+ * The position where the drawer slides in from - 'left': Slides from the left edge - 'right': Slides from the right edge - 'top': Slides from the top edge - 'bottom': Slides from the bottom edge
3118
4086
  * @default 'right'
3119
4087
  */
3120
4088
  "position"?: DrawerPosition;
3121
4089
  /**
4090
+ * The size of the drawer. Can be a preset value or a custom CSS size - For left/right drawers: - 'small': 320px - 'medium': 480px - 'large': 1064px - For top/bottom drawers: - 'small': 40vh - 'medium': 60vh - 'large': 90vh - Custom values: Any valid CSS size (e.g., '600px', '50%', '30rem', '80vw')
3122
4091
  * @default 'medium'
3123
4092
  */
3124
4093
  "size"?: DrawerSize;
@@ -3145,6 +4114,61 @@ declare namespace LocalJSX {
3145
4114
  "selected"?: boolean;
3146
4115
  "text"?: string;
3147
4116
  }
4117
+ interface BcmFileUpload {
4118
+ /**
4119
+ * @default '.xls,.pdf'
4120
+ */
4121
+ "accept"?: string;
4122
+ /**
4123
+ * @default ''
4124
+ */
4125
+ "caption"?: string;
4126
+ /**
4127
+ * Allows consumers to override default error messages.
4128
+ */
4129
+ "customErrorMessages"?: BcmUploadErrorMessages;
4130
+ /**
4131
+ * @default false
4132
+ */
4133
+ "disabled"?: boolean;
4134
+ /**
4135
+ * @default ''
4136
+ */
4137
+ "label"?: string;
4138
+ /**
4139
+ * Maximum number of files allowed in total. Only applied when `multiple` is true.
4140
+ */
4141
+ "maxFileCount"?: number;
4142
+ /**
4143
+ * @default 2
4144
+ */
4145
+ "maxSize"?: number;
4146
+ /**
4147
+ * @default false
4148
+ */
4149
+ "multiple"?: boolean;
4150
+ /**
4151
+ * @default 'file'
4152
+ */
4153
+ "name"?: string;
4154
+ "onBcmBlur"?: (event: BcmFileUploadCustomEvent<FocusEvent>) => void;
4155
+ "onBcmFileChange"?: (event: BcmFileUploadCustomEvent<File[]>) => void;
4156
+ "onBcmFileRemoved"?: (event: BcmFileUploadCustomEvent<BcmUploadItem>) => void;
4157
+ "onBcmFocus"?: (event: BcmFileUploadCustomEvent<FocusEvent>) => void;
4158
+ "onBcmUploadCanceled"?: (event: BcmFileUploadCustomEvent<BcmUploadItem>) => void;
4159
+ /**
4160
+ * @default false
4161
+ */
4162
+ "required"?: boolean;
4163
+ /**
4164
+ * @default 'medium'
4165
+ */
4166
+ "size"?: 'medium' | 'small';
4167
+ /**
4168
+ * Reserved for future backend upload integration. Currently does not affect component behavior.
4169
+ */
4170
+ "uploadUrl"?: string;
4171
+ }
3148
4172
  interface BcmInput {
3149
4173
  /**
3150
4174
  * Input id
@@ -3271,220 +4295,457 @@ declare namespace LocalJSX {
3271
4295
  */
3272
4296
  "value"?: string;
3273
4297
  }
4298
+ /**
4299
+ * @component BcmLinked
4300
+ * @description A flexible linked floating element component that displays contextual content relative to a trigger element.
4301
+ * Built on the native Popover API for top-layer rendering and Floating UI for intelligent positioning.
4302
+ * Supports different trigger types (click, hover, focus, manual) and comprehensive event system.
4303
+ * @example Basic Click Trigger
4304
+ * <bcm-linked trigger="click">
4305
+ * <button slot="trigger">Click Me</button>
4306
+ * <div>Floating content here</div>
4307
+ * </bcm-linked>
4308
+ * @example Hover Trigger with Delays
4309
+ * <bcm-linked trigger="hover" show-delay="200" hide-delay="100">
4310
+ * <span slot="trigger">Hover Me</span>
4311
+ * <div>This appears on hover</div>
4312
+ * </bcm-linked>
4313
+ * @example Manual Control
4314
+ * <bcm-linked id="my-linked" trigger="manual">
4315
+ * <button slot="trigger">Trigger</button>
4316
+ * <div>Controlled content</div>
4317
+ * </bcm-linked>
4318
+ * <script>
4319
+ * const linked = document.querySelector('#my-linked');
4320
+ * linked.show(); // Opens the floating element
4321
+ * linked.hide(); // Closes the floating element
4322
+ * </script>
4323
+ * @csspart floating - The floating container element
4324
+ * @csspart arrow - The arrow element pointing to the trigger
4325
+ * @csspart content - The content wrapper element
4326
+ */
3274
4327
  interface BcmLinked {
3275
4328
  /**
3276
- * @default false
3277
- */
3278
- "appendToBody"?: boolean;
3279
- /**
3280
- * @default false
4329
+ * @prop {boolean} closeOnEscape - Whether to close when pressing Escape key. Default: true
4330
+ * @default true
3281
4331
  */
3282
- "arrow"?: boolean;
4332
+ "closeOnEscape"?: boolean;
3283
4333
  /**
3284
- * @default false
4334
+ * @prop {boolean} closeOnOutsideClick - Whether to close when clicking outside. Default: true
4335
+ * @default true
3285
4336
  */
3286
- "destroyOnHide"?: boolean;
4337
+ "closeOnOutsideClick"?: boolean;
3287
4338
  /**
4339
+ * @prop {boolean} disabled - Disables the floating element, preventing it from showing. Default: false
3288
4340
  * @default false
3289
4341
  */
3290
4342
  "disabled"?: boolean;
3291
4343
  /**
4344
+ * @prop {number} hideDelay - Delay in milliseconds before hiding the floating element. Default: 0
3292
4345
  * @default 0
3293
4346
  */
3294
4347
  "hideDelay"?: number;
3295
4348
  /**
4349
+ * @prop {number} offsetDistance - Distance in pixels between the floating element and the trigger. Default: 8
3296
4350
  * @default 8
3297
4351
  */
3298
- "offset"?: number;
4352
+ "offsetDistance"?: number;
4353
+ /**
4354
+ * @event bcmBeforeHide - Emitted before the floating element hides.
4355
+ */
4356
+ "onBcmBeforeHide"?: (event: BcmLinkedCustomEvent<void>) => void;
4357
+ /**
4358
+ * @event bcmBeforeShow - Emitted before the floating element shows.
4359
+ */
4360
+ "onBcmBeforeShow"?: (event: BcmLinkedCustomEvent<void>) => void;
4361
+ /**
4362
+ * @event bcmHidden - Emitted after the floating element is fully hidden (after animation).
4363
+ */
3299
4364
  "onBcmHidden"?: (event: BcmLinkedCustomEvent<void>) => void;
4365
+ /**
4366
+ * @event bcmHide - Emitted when the floating element is hidden.
4367
+ */
3300
4368
  "onBcmHide"?: (event: BcmLinkedCustomEvent<void>) => void;
4369
+ /**
4370
+ * @event bcmShow - Emitted when the floating element is shown.
4371
+ */
3301
4372
  "onBcmShow"?: (event: BcmLinkedCustomEvent<void>) => void;
4373
+ /**
4374
+ * @event bcmShown - Emitted after the floating element is fully shown (after animation).
4375
+ */
3302
4376
  "onBcmShown"?: (event: BcmLinkedCustomEvent<void>) => void;
3303
4377
  /**
4378
+ * @prop {Placement} placement - Defines the position of the floating element relative to the trigger. Default: 'bottom-start'
3304
4379
  * @default 'bottom-start'
3305
4380
  */
3306
4381
  "placement"?: Placement;
3307
4382
  /**
4383
+ * @prop {boolean} showArrow - Whether to show an arrow pointing to the trigger element. Default: true
4384
+ * @default true
4385
+ */
4386
+ "showArrow"?: boolean;
4387
+ /**
4388
+ * @prop {number} showDelay - Delay in milliseconds before showing the floating element. Default: 0
3308
4389
  * @default 0
3309
4390
  */
3310
4391
  "showDelay"?: number;
3311
- "targetElement"?: HTMLElement;
3312
- "targetId"?: string;
3313
4392
  /**
4393
+ * @prop {TriggerType} trigger - Defines the interaction type to show/hide the floating element. 'click' toggles on click, 'hover' shows on mouse enter and hides on mouse leave, 'focus' shows on focus and hides on blur, 'manual' requires programmatic control. Default: 'click'
3314
4394
  * @default 'click'
3315
4395
  */
3316
4396
  "trigger"?: TriggerType;
3317
4397
  /**
3318
- * @default 1000
4398
+ * @prop {boolean} visible - Controls the visibility state of the floating element. Can be set programmatically or toggled by user interaction. Default: false
4399
+ * @default false
3319
4400
  */
3320
- "zIndex"?: number;
4401
+ "visible"?: boolean;
3321
4402
  }
4403
+ /**
4404
+ * @component BcmModal
4405
+ * @description A flexible modal dialog component built on the native HTML Dialog API.
4406
+ * Provides a powerful way to display content in a layer above the page with full keyboard and focus management.
4407
+ * @example ```html
4408
+ * <!-- Basic usage -->
4409
+ * <bcm-modal open header-text="Welcome" helper-text="Please read carefully">
4410
+ * <p>Modal content goes here</p>
4411
+ * <div slot="footer">
4412
+ * <button data-dismiss>Close</button>
4413
+ * </div>
4414
+ * </bcm-modal>
4415
+ * <!-- Custom size and placement -->
4416
+ * <bcm-modal size="large" placement="top">
4417
+ * <div slot="header">Custom Header</div>
4418
+ * <p>Content here</p>
4419
+ * <div slot="footer">
4420
+ * <button>Cancel</button>
4421
+ * <button>Confirm</button>
4422
+ * </div>
4423
+ * </bcm-modal>
4424
+ * <!-- Full screen modal -->
4425
+ * <bcm-modal full-screen no-footer>
4426
+ * <p>Full screen content</p>
4427
+ * </bcm-modal>
4428
+ * <!-- Programmatic usage -->
4429
+ * <bcm-modal id="myModal">Content</bcm-modal>
4430
+ * <script>
4431
+ * document.getElementById('myModal').show();
4432
+ * </script>
4433
+ * ```
4434
+ */
3322
4435
  interface BcmModal {
3323
4436
  /**
4437
+ * Controls backdrop behavior - true: Shows backdrop, modal can be closed by clicking outside - false: No backdrop - 'static': Shows backdrop but prevents closing by clicking outside (triggers shake animation)
3324
4438
  * @default true
3325
4439
  */
3326
4440
  "backdrop"?: boolean | 'static';
3327
4441
  /**
4442
+ * Allows closing the modal by clicking on the backdrop
3328
4443
  * @default true
3329
4444
  */
3330
4445
  "closeOnBackdrop"?: boolean;
3331
4446
  /**
4447
+ * Allows closing the modal by pressing the Escape key
3332
4448
  * @default true
3333
4449
  */
3334
4450
  "closeOnEscape"?: boolean;
3335
4451
  /**
4452
+ * Makes the modal take the full screen (100vw x 100vh, no border radius)
3336
4453
  * @default false
3337
4454
  */
3338
4455
  "fullScreen"?: boolean;
3339
4456
  /**
4457
+ * Makes the modal take full width of the viewport (max-width: 100%)
3340
4458
  * @default false
3341
4459
  */
3342
4460
  "fullWidth"?: boolean;
4461
+ /**
4462
+ * Text to display in the modal header
4463
+ */
3343
4464
  "headerText"?: string;
4465
+ /**
4466
+ * Helper text to display below the header title
4467
+ */
3344
4468
  "helperText"?: string;
3345
4469
  /**
4470
+ * Hides the footer section completely
3346
4471
  * @default false
3347
4472
  */
3348
4473
  "noFooter"?: boolean;
3349
4474
  /**
4475
+ * Hides the header section completely
3350
4476
  * @default false
3351
4477
  */
3352
4478
  "noHeader"?: boolean;
4479
+ /**
4480
+ * Emitted before the modal closes. Can be cancelled by calling event.preventDefault()
4481
+ */
3353
4482
  "onBcmBeforeClose"?: (event: BcmModalCustomEvent<void>) => void;
4483
+ /**
4484
+ * Emitted before the modal opens. Can be cancelled by calling event.preventDefault()
4485
+ */
3354
4486
  "onBcmBeforeOpen"?: (event: BcmModalCustomEvent<void>) => void;
4487
+ /**
4488
+ * Emitted after the modal has closed
4489
+ */
3355
4490
  "onBcmClose"?: (event: BcmModalCustomEvent<void>) => void;
4491
+ /**
4492
+ * Emitted after the modal has opened
4493
+ */
3356
4494
  "onBcmOpen"?: (event: BcmModalCustomEvent<void>) => void;
3357
4495
  /**
4496
+ * Controls whether the modal is open or closed
3358
4497
  * @default false
3359
4498
  */
3360
4499
  "open"?: boolean;
3361
4500
  /**
4501
+ * The placement of the modal on the screen - 'center': Centered vertically and horizontally - 'top': Aligned to the top with 80px padding
3362
4502
  * @default 'center'
3363
4503
  */
3364
4504
  "placement"?: ModalPlacement;
3365
4505
  /**
4506
+ * The size of the modal - 'small': 400px - 'medium': 600px - 'large': 800px - 'xlarge': 1024px - 'xxlarge': 1200px - 'full': 100% width
3366
4507
  * @default 'medium'
3367
4508
  */
3368
4509
  "size"?: ModalSize;
3369
4510
  }
3370
4511
  /**
3371
4512
  * @component BcmPopConfirm
3372
- * @description A floating confirmation pop-up component that prompts users for action confirmation, triggered by click or hover events.
3373
- * Offers customizable header, body content, and footer areas through slots, with accessibility and positioning features.
3374
- * @example Basic usage
3375
- * <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>
3376
- * @example With all slots and custom styling
3377
- * <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">
3378
- * <span slot="header">Custom Header Text</span>
3379
- * <span slot="body">Additional details here</span>
3380
- * <span slot="footer">Custom Footer Action</span>
4513
+ * @description A confirmation popover component that displays a confirmation dialog with customizable actions.
4514
+ * Built on the native Popover API for top-layer rendering and Floating UI for intelligent positioning.
4515
+ * Ideal for confirming destructive actions or important decisions inline.
4516
+ * @csspart container - The main popover container element
4517
+ * @csspart arrow - The arrow pointer element
4518
+ * @csspart body - The body/description section
4519
+ * @csspart footer - The footer section with action buttons
4520
+ * @example Basic Usage
4521
+ * ```html
4522
+ * <bcm-pop-confirm
4523
+ * header-text="Delete Item?"
4524
+ * description="Are you sure you want to delete this item? This action cannot be undone."
4525
+ * status="error"
4526
+ * >
4527
+ * <bcm-button status="error">Delete</bcm-button>
3381
4528
  * </bcm-pop-confirm>
3382
- * @example Event handling
3383
- * // Listen to confirmation events
3384
- * const popConfirm = document.querySelector('bcm-pop-confirm');
3385
- * popConfirm.addEventListener('bcmConfirm', () => {
3386
- * console.log('User confirmed the action!');
4529
+ * ```
4530
+ * @example With Event Handlers
4531
+ * ```html
4532
+ * <bcm-pop-confirm
4533
+ * id="deleteConfirm"
4534
+ * header-text="Confirm Delete"
4535
+ * description="This will permanently delete the item."
4536
+ * status="warning"
4537
+ * confirm-text="Yes, Delete"
4538
+ * cancel-text="No, Keep It"
4539
+ * >
4540
+ * <bcm-button>Delete Item</bcm-button>
4541
+ * </bcm-pop-confirm>
4542
+ * <script>
4543
+ * const popconfirm = document.getElementById('deleteConfirm');
4544
+ * popconfirm.addEventListener('bcmConfirm', () => {
4545
+ * console.log('User confirmed deletion');
4546
+ * // Perform delete operation
4547
+ * });
4548
+ * popconfirm.addEventListener('bcmCancel', () => {
4549
+ * console.log('User cancelled deletion');
4550
+ * });
4551
+ * </script>
4552
+ * ```
4553
+ * @example Different Status Types
4554
+ * ```html
4555
+ * <!-- Info (default) -->
4556
+ * <bcm-pop-confirm header-text="Information" description="This is an info message">
4557
+ * <bcm-button>Info</bcm-button>
4558
+ * </bcm-pop-confirm>
4559
+ * <!-- Success -->
4560
+ * <bcm-pop-confirm status="success" header-text="Confirm Action" description="Proceed with this action?">
4561
+ * <bcm-button status="success">Proceed</bcm-button>
4562
+ * </bcm-pop-confirm>
4563
+ * <!-- Warning -->
4564
+ * <bcm-pop-confirm status="warning" header-text="Warning" description="This action may have consequences">
4565
+ * <bcm-button status="warning">Continue</bcm-button>
4566
+ * </bcm-pop-confirm>
4567
+ * <!-- Error/Danger -->
4568
+ * <bcm-pop-confirm status="error" header-text="Danger Zone" description="This is a destructive action">
4569
+ * <bcm-button status="error">Delete</bcm-button>
4570
+ * </bcm-pop-confirm>
4571
+ * ```
4572
+ * @example Custom Content with Slots
4573
+ * ```html
4574
+ * <bcm-pop-confirm status="warning">
4575
+ * <bcm-button>Custom Confirm</bcm-button>
4576
+ * <div slot="header">
4577
+ * <strong>Custom Header</strong>
4578
+ * </div>
4579
+ * <div slot="body">
4580
+ * <p>This is custom body content with <strong>HTML formatting</strong>.</p>
4581
+ * <ul>
4582
+ * <li>Point 1</li>
4583
+ * <li>Point 2</li>
4584
+ * </ul>
4585
+ * </div>
4586
+ * <div slot="footer">
4587
+ * <bcm-button kind="outline" size="small">Maybe Later</bcm-button>
4588
+ * <bcm-button status="success" size="small">Confirm</bcm-button>
4589
+ * </div>
4590
+ * </bcm-pop-confirm>
4591
+ * ```
4592
+ * @example Different Sizes
4593
+ * ```html
4594
+ * <!-- Small -->
4595
+ * <bcm-pop-confirm size="small" header-text="Small" description="Compact confirmation">
4596
+ * <bcm-button size="small">Small</bcm-button>
4597
+ * </bcm-pop-confirm>
4598
+ * <!-- Medium (default) -->
4599
+ * <bcm-pop-confirm size="medium" header-text="Medium" description="Standard confirmation">
4600
+ * <bcm-button size="medium">Medium</bcm-button>
4601
+ * </bcm-pop-confirm>
4602
+ * <!-- Large -->
4603
+ * <bcm-pop-confirm size="large" header-text="Large" description="Spacious confirmation with more room for content">
4604
+ * <bcm-button size="large">Large</bcm-button>
4605
+ * </bcm-pop-confirm>
4606
+ * ```
4607
+ * @example Programmatic Control
4608
+ * ```html
4609
+ * <bcm-pop-confirm id="myConfirm" header-text="Confirm" description="Are you sure?">
4610
+ * <bcm-button>Trigger</bcm-button>
4611
+ * </bcm-pop-confirm>
4612
+ * <bcm-button id="showBtn">Show Programmatically</bcm-button>
4613
+ * <bcm-button id="hideBtn">Hide Programmatically</bcm-button>
4614
+ * <script>
4615
+ * const popconfirm = document.getElementById('myConfirm');
4616
+ * document.getElementById('showBtn').addEventListener('click', () => {
4617
+ * popconfirm.show();
3387
4618
  * });
3388
- * popConfirm.addEventListener('bcmCancel', () => {
3389
- * console.log('User canceled the action!');
4619
+ * document.getElementById('hideBtn').addEventListener('click', () => {
4620
+ * popconfirm.hide();
3390
4621
  * });
3391
- * // Programmatically control pop-up
3392
- * await popConfirm.show(); // Show the pop-up
3393
- * await popConfirm.hide(); // Hide the pop-up
3394
- * @prop {string} arrowColor - The color of the arrow pointing to the trigger element (default: 'var(--bcm-ui-color-background-basic-panel)')
3395
- * @prop {string} cancelText - Text displayed on the cancel button (default: 'Cancel')
3396
- * @prop {string} confirmText - Text displayed on the confirm button (default: 'Yes')
3397
- * @prop {string} description - The description or body content of the pop-up (default: '')
3398
- * @prop {string} headerText - The header text displayed at the top of the pop-up (default: '')
3399
- * @prop {Placement} placement - The placement position of the pop-up relative to the trigger (default: 'right')
3400
- * @prop {('small' | 'medium' | 'large')} size - The size of the pop-up, determining its dimensions (default: 'medium')
3401
- * @prop {('info' | 'error' | 'warning' | 'success' | 'default')} status - The status of the pop-up, affecting its icon and color (default: 'info')
3402
- * @prop {boolean} statusIcon - Whether to display a status icon based on the `status` prop (default: true)
3403
- * @prop {string} targetId - The ID of the trigger element (e.g., a button) that opens the pop-up
3404
- * @event {EventEmitter<void>} bcmConfirm - Emitted when the user confirms the action in the pop-up
3405
- * @event {EventEmitter<void>} bcmCancel - Emitted when the user cancels the action in the pop-up
3406
- * @csspart container - The root container element of the pop-up
3407
- * @csspart header - The header section with title and close icon
3408
- * @csspart content - The main content section of the pop-up
3409
- * @csspart footer - The footer section with confirm/cancel buttons
3410
- * @csspart arrow - The positioning arrow pointing to the trigger
3411
- * @css {string} --popover-radius - Border radius of the pop-up (default: defined in CSS)
3412
- * @css {string} --popover-bg - Background color of the pop-up
3413
- * @css {string} --text-color - Text color of the pop-up based on status
3414
- * @methods show() - Programmatically shows the pop-up
3415
- * hide() - Programmatically hides the pop-up
4622
+ * </script>
4623
+ * ```
4624
+ * @example Without Status Icon
4625
+ * ```html
4626
+ * <bcm-pop-confirm
4627
+ * header-text="Simple Confirmation"
4628
+ * description="No status icon shown"
4629
+ * status-icon={false}
4630
+ * >
4631
+ * <bcm-button>Click Me</bcm-button>
4632
+ * </bcm-pop-confirm>
4633
+ * ```
4634
+ * @example Different Placements
4635
+ * ```html
4636
+ * <bcm-pop-confirm placement="top" header-text="Top" description="Opens above">
4637
+ * <bcm-button>Top</bcm-button>
4638
+ * </bcm-pop-confirm>
4639
+ * <bcm-pop-confirm placement="right" header-text="Right" description="Opens to the right">
4640
+ * <bcm-button>Right</bcm-button>
4641
+ * </bcm-pop-confirm>
4642
+ * <bcm-pop-confirm placement="bottom" header-text="Bottom" description="Opens below">
4643
+ * <bcm-button>Bottom</bcm-button>
4644
+ * </bcm-pop-confirm>
4645
+ * <bcm-pop-confirm placement="left" header-text="Left" description="Opens to the left">
4646
+ * <bcm-button>Left</bcm-button>
4647
+ * </bcm-pop-confirm>
4648
+ * ```
3416
4649
  */
3417
4650
  interface BcmPopConfirm {
3418
4651
  /**
3419
- * The color of the arrow pointing to the trigger element. Can be a CSS custom property or a specific color value.
3420
- * @default 'var(--bcm-ui-color-background-basic-panel)'
3421
- */
3422
- "arrowColor"?: string;
3423
- /**
3424
- * The text displayed on the cancel button.
4652
+ * @prop {string} cancelText - Text for the cancel button. Default: 'Cancel'
3425
4653
  * @default 'Cancel'
3426
4654
  */
3427
4655
  "cancelText"?: string;
3428
4656
  /**
3429
- * The text displayed on the confirm button.
4657
+ * @prop {boolean} closeOnEscape - Whether to close when pressing the Escape key. Default: true
4658
+ * @default true
4659
+ */
4660
+ "closeOnEscape"?: boolean;
4661
+ /**
4662
+ * @prop {boolean} closeOnOutsideClick - Whether to close when clicking outside the popover. Default: true
4663
+ * @default true
4664
+ */
4665
+ "closeOnOutsideClick"?: boolean;
4666
+ /**
4667
+ * @prop {string} confirmText - Text for the confirm button. Default: 'Yes'
3430
4668
  * @default 'Yes'
3431
4669
  */
3432
4670
  "confirmText"?: string;
3433
4671
  /**
3434
- * The description or body content of the pop-up.
4672
+ * @prop {string} description - Description text displayed in the body section. Can be overridden by using the 'body' slot. Default: ''
3435
4673
  * @default ''
3436
4674
  */
3437
4675
  "description"?: string;
3438
4676
  /**
3439
- * The header text displayed at the top of the pop-up.
4677
+ * @prop {string} headerText - Text displayed in the header section. Can be overridden by using the 'header' slot. Default: ''
3440
4678
  * @default ''
3441
4679
  */
3442
4680
  "headerText"?: string;
3443
4681
  /**
3444
- * Emits an event when the user cancels the action in the pop-up.
4682
+ * @prop {number} offsetDistance - Distance in pixels between the popover and trigger element. Default: 12
4683
+ * @default 12
4684
+ */
4685
+ "offsetDistance"?: number;
4686
+ /**
4687
+ * @event bcmBeforeClose - Emitted before the popover closes. Useful for performing cleanup actions before hiding.
4688
+ */
4689
+ "onBcmBeforeClose"?: (event: BcmPopConfirmCustomEvent<void>) => void;
4690
+ /**
4691
+ * @event bcmBeforeOpen - Emitted before the popover opens. Useful for performing actions before the popover becomes visible.
4692
+ */
4693
+ "onBcmBeforeOpen"?: (event: BcmPopConfirmCustomEvent<void>) => void;
4694
+ /**
4695
+ * @event bcmCancel - Emitted when the user clicks cancel, presses Escape, or clicks outside. Useful for tracking when the user dismisses the confirmation.
3445
4696
  */
3446
4697
  "onBcmCancel"?: (event: BcmPopConfirmCustomEvent<void>) => void;
3447
4698
  /**
3448
- * Emits an event when the user confirms the action in the pop-up.
4699
+ * @event bcmClose - Emitted when the popover is closed. Useful for tracking when the popover is hidden.
4700
+ */
4701
+ "onBcmClose"?: (event: BcmPopConfirmCustomEvent<void>) => void;
4702
+ /**
4703
+ * @event bcmConfirm - Emitted when the user clicks the confirm button. This is where you should handle the confirmed action.
3449
4704
  */
3450
4705
  "onBcmConfirm"?: (event: BcmPopConfirmCustomEvent<void>) => void;
3451
4706
  /**
3452
- * The placement position of the pop-up relative to the trigger element.
3453
- * @default 'bottom'
4707
+ * @event bcmOpen - Emitted when the popover is opened. Useful for tracking when the popover becomes visible.
3454
4708
  */
3455
- "placement"?: Placement;
4709
+ "onBcmOpen"?: (event: BcmPopConfirmCustomEvent<void>) => void;
4710
+ /**
4711
+ * @prop {PopConfirmPlacement} placement - Position of the popover relative to the trigger element. Automatically flips if there's not enough space. Default: 'top'
4712
+ * @default 'top'
4713
+ */
4714
+ "placement"?: PopConfirmPlacement;
3456
4715
  /**
3457
- * The size of the pop-up, determining its dimensions and padding.
4716
+ * @prop {boolean} showArrow - Whether to show the arrow pointing to the trigger. Default: true
4717
+ * @default true
4718
+ */
4719
+ "showArrow"?: boolean;
4720
+ /**
4721
+ * @prop {PopConfirmSize} size - Size variant that controls padding and text size. - 'small': Compact size with minimal padding - 'medium': Standard size - 'large': Spacious size with more padding Default: 'medium'
3458
4722
  * @default 'medium'
3459
4723
  */
3460
- "size"?: 'small' | 'medium' | 'large';
4724
+ "size"?: PopConfirmSize;
3461
4725
  /**
3462
- * The status of the pop-up, affecting its icon and color scheme.
4726
+ * @prop {PopConfirmStatus} status - Status type that determines the color scheme and icon. - 'info': Informational (blue) - 'success': Success/positive action (green) - 'warning': Warning/caution (yellow) - 'error': Error/destructive action (red) Default: 'info'
3463
4727
  * @default 'info'
3464
4728
  */
3465
- "status"?: 'info' | 'error' | 'warning' | 'success';
4729
+ "status"?: PopConfirmStatus;
3466
4730
  /**
3467
- * Whether to display a status icon based on the `status` prop.
4731
+ * @prop {boolean} statusIcon - Whether to show the status icon in the header. Icon only shows if headerText is also provided. Default: true
3468
4732
  * @default true
3469
4733
  */
3470
4734
  "statusIcon"?: boolean;
3471
- /**
3472
- * The ID of the trigger element (e.g., a button) that opens the pop-up.
3473
- */
3474
- "targetId"?: string;
3475
4735
  }
3476
4736
  /**
3477
4737
  * @component BcmPopover
3478
4738
  * @description A flexible popover component that displays contextual information or content relative to a target element.
3479
- * Supports different sizes, trigger types (click or hover), placements (top, right, bottom, left), and can be controlled via slots or props.
4739
+ * Built on the native Popover API for top-layer rendering and Floating UI for intelligent positioning.
4740
+ * Supports different sizes, trigger types (click, hover, focus), placements, and comprehensive event system.
3480
4741
  * @example Basic Click Popover
3481
4742
  * <bcm-popover trigger="click" size="medium" placement="top">
3482
4743
  * <bcm-button>Click Me</bcm-button>
3483
4744
  * <span slot="header">Header</span>
3484
4745
  * <span slot="content">This is a simple popover content.</span>
3485
4746
  * </bcm-popover>
3486
- * @example Hover Popover with Props
3487
- * <bcm-popover trigger="hover" hover-delay="200" size="large" placement="right" header-text="Prop Header" message="This is a hover popover with props.">
4747
+ * @example Hover Popover with Delays
4748
+ * <bcm-popover trigger="hover" show-delay="200" hide-delay="100" size="large" placement="right" header-text="Prop Header" message="This is a hover popover with props.">
3488
4749
  * <bcm-button>Hover Me</bcm-button>
3489
4750
  * </bcm-popover>
3490
4751
  * @example Programmatic Control
@@ -3494,8 +4755,9 @@ declare namespace LocalJSX {
3494
4755
  * </bcm-popover>
3495
4756
  * <script>
3496
4757
  * const popover = document.querySelector('#my-popover');
3497
- * popover.openPopup(); // Opens the popover
3498
- * popover.closePopup(); // Closes the popover
4758
+ * popover.show(); // Opens the popover
4759
+ * popover.hide(); // Closes the popover
4760
+ * popover.toggle(); // Toggles the popover
3499
4761
  * </script>
3500
4762
  * @csspart popover - The root popover container element, stylable for the entire popover
3501
4763
  * @csspart header - The header section of the popover, stylable for the title area
@@ -3503,29 +4765,52 @@ declare namespace LocalJSX {
3503
4765
  * @csspart arrow - The arrow element of the popover, stylable for the positioning arrow
3504
4766
  */
3505
4767
  interface BcmPopover {
4768
+ /**
4769
+ * @prop {boolean} arrow - Whether to show an arrow pointing to the trigger element. Default: true
4770
+ * @default true
4771
+ */
4772
+ "arrow"?: boolean;
4773
+ /**
4774
+ * @prop {boolean} closeOnEscape - Whether to close the popover when pressing Escape key. Default: true
4775
+ * @default true
4776
+ */
4777
+ "closeOnEscape"?: boolean;
4778
+ /**
4779
+ * @prop {boolean} closeOnOutsideClick - Whether to close the popover when clicking outside. Default: true
4780
+ * @default true
4781
+ */
4782
+ "closeOnOutsideClick"?: boolean;
3506
4783
  /**
3507
4784
  * @prop {string} headerText - Custom text for the popover header. Used as fallback content if the 'header' slot is not provided.
3508
4785
  */
3509
4786
  "headerText"?: string;
3510
4787
  /**
3511
- * @prop {number} hoverDelay - Delay in milliseconds before showing or hiding the popover when trigger is 'hover'. Adds a delay to prevent flickering on quick mouse movements. Default: 150
3512
- * @default 150
4788
+ * @prop {number} hideDelay - Delay in milliseconds before hiding the popover. Provides a grace period for mouse movements. Default: 0
4789
+ * @default 0
3513
4790
  */
3514
- "hoverDelay"?: number;
4791
+ "hideDelay"?: number;
3515
4792
  /**
3516
4793
  * @prop {string} message - Custom text for the popover content. Used as fallback content if the 'content' slot is not provided.
3517
4794
  */
3518
4795
  "message"?: string;
3519
4796
  /**
3520
- * @event {EventEmitter<void>} bcmPopoverClose - Emitted when the popover is closed. Useful for tracking when the popover is hidden.
4797
+ * @event bcmBeforeClose - Emitted before the popover closes. Useful for performing actions before the popover is hidden.
3521
4798
  */
3522
- "onBcmPopoverClose"?: (event: BcmPopoverCustomEvent<void>) => void;
4799
+ "onBcmBeforeClose"?: (event: BcmPopoverCustomEvent<void>) => void;
3523
4800
  /**
3524
- * @event {EventEmitter<void>} bcmPopoverOpen - Emitted when the popover is opened. Useful for tracking when the popover becomes visible.
4801
+ * @event bcmBeforeOpen - Emitted before the popover opens. Useful for performing actions before the popover becomes visible.
3525
4802
  */
3526
- "onBcmPopoverOpen"?: (event: BcmPopoverCustomEvent<void>) => void;
4803
+ "onBcmBeforeOpen"?: (event: BcmPopoverCustomEvent<void>) => void;
3527
4804
  /**
3528
- * @prop {boolean} open - Indicates whether the popover is currently open. Can be set programmatically or toggled by user interaction. Mutable. Default: false
4805
+ * @event bcmClose - Emitted when the popover is closed. Useful for tracking when the popover is hidden.
4806
+ */
4807
+ "onBcmClose"?: (event: BcmPopoverCustomEvent<void>) => void;
4808
+ /**
4809
+ * @event bcmOpen - Emitted when the popover is opened. Useful for tracking when the popover becomes visible.
4810
+ */
4811
+ "onBcmOpen"?: (event: BcmPopoverCustomEvent<void>) => void;
4812
+ /**
4813
+ * @prop {boolean} open - Controls the open state of the popover. Can be set programmatically or toggled by user interaction. Default: false
3529
4814
  * @default false
3530
4815
  */
3531
4816
  "open"?: boolean;
@@ -3534,18 +4819,27 @@ declare namespace LocalJSX {
3534
4819
  * @default 'top'
3535
4820
  */
3536
4821
  "placement"?: 'top' | 'right' | 'bottom' | 'left';
4822
+ /**
4823
+ * @prop {number} showDelay - Delay in milliseconds before showing the popover. Useful to prevent popovers from appearing on quick mouse movements. Default: 0
4824
+ * @default 0
4825
+ */
4826
+ "showDelay"?: number;
3537
4827
  /**
3538
4828
  * @prop {('small' | 'medium' | 'large')} size - Defines the size of the popover. Controls the text size and padding of the popover content. Default: 'medium'
3539
4829
  * @default 'medium'
3540
4830
  */
3541
4831
  "size"?: 'small' | 'medium' | 'large';
3542
4832
  /**
3543
- * @prop {('click' | 'hover')} trigger - Defines the interaction type to show/hide the popover. 'click' toggles on click, 'hover' shows on mouse enter and hides on mouse leave. Default: 'click'
4833
+ * @prop {('click' | 'hover' | 'hover focus')} trigger - Defines the interaction type to show/hide the popover. 'click' toggles on click, 'hover' shows on mouse enter and hides on mouse leave, 'hover focus' combines both. Default: 'click'
3544
4834
  * @default 'click'
3545
4835
  */
3546
- "trigger"?: 'click' | 'hover';
4836
+ "trigger"?: 'click' | 'hover' | 'hover focus';
3547
4837
  }
3548
4838
  interface BcmRadio {
4839
+ /**
4840
+ * @default generateId('bcm-radio')
4841
+ */
4842
+ "_id"?: string;
3549
4843
  /**
3550
4844
  * Whether the radio button is selected.
3551
4845
  * @prop
@@ -3591,6 +4885,11 @@ declare namespace LocalJSX {
3591
4885
  * @defaultValue false
3592
4886
  */
3593
4887
  "readonly"?: boolean;
4888
+ /**
4889
+ * Whether at least one radio in this group is required. (HTML)
4890
+ * @default false
4891
+ */
4892
+ "required"?: boolean;
3594
4893
  /**
3595
4894
  * Defines the size of the radio button: 'small' | 'medium' | 'large'.
3596
4895
  * @prop
@@ -3661,58 +4960,85 @@ declare namespace LocalJSX {
3661
4960
  */
3662
4961
  "value"?: string;
3663
4962
  }
3664
- interface BcmSegmentedPicker {
4963
+ /**
4964
+ * Individual segment option component
4965
+ */
4966
+ interface BcmSegment {
4967
+ /**
4968
+ * Index of currently active segment (inherited from parent)
4969
+ * @default 0
4970
+ */
4971
+ "activeIndex"?: number;
3665
4972
  /**
3666
4973
  * Disabled state
3667
4974
  * @default false
3668
4975
  */
3669
4976
  "disabled"?: boolean;
3670
4977
  /**
3671
- * Full width component
3672
- * @default false
4978
+ * Index of this segment (inherited from parent)
4979
+ * @default 0
3673
4980
  */
3674
- "fullWidth"?: boolean;
4981
+ "index"?: number;
3675
4982
  /**
3676
- * Change event
4983
+ * Internal event emitted when segment is clicked
3677
4984
  */
3678
- "onBcmChange"?: (event: BcmSegmentedPickerCustomEvent<{ value: string }>) => void;
4985
+ "onBcmSegmentClick"?: (event: BcmSegmentCustomEvent<string>) => void;
3679
4986
  /**
3680
- * Controls the component size
4987
+ * Selected state (controlled by parent)
4988
+ * @default false
4989
+ */
4990
+ "selected"?: boolean;
4991
+ /**
4992
+ * Size variant (inherited from parent)
3681
4993
  * @default 'medium'
3682
4994
  */
3683
- "size"?: SegmentedPickerSize;
4995
+ "size"?: 'small' | 'medium' | 'large';
3684
4996
  /**
3685
- * The selected option value
4997
+ * Unique identifier for this segment
3686
4998
  */
3687
- "value"?: string;
4999
+ "value": string;
3688
5000
  }
3689
- interface BcmSegmentedPickerOption {
5001
+ /**
5002
+ * Modern Segmented Picker component with CSS Grid-based indicator
5003
+ */
5004
+ interface BcmSegmentedPicker {
3690
5005
  /**
3691
- * Whether this option is disabled
5006
+ * Disabled state
3692
5007
  * @default false
3693
5008
  */
3694
5009
  "disabled"?: boolean;
3695
5010
  /**
3696
- * Option display label
5011
+ * Full width flag
5012
+ * @default false
5013
+ */
5014
+ "fullWidth"?: boolean;
5015
+ /**
5016
+ * Name attribute for form association
3697
5017
  */
3698
- "label"?: string;
5018
+ "name"?: string;
3699
5019
  /**
3700
- * Click event
5020
+ * Emits when selected segment changes
3701
5021
  */
3702
- "onBcmOptionClick"?: (event: BcmSegmentedPickerOptionCustomEvent<string>) => void;
5022
+ "onBcmSegmentChange"?: (event: BcmSegmentedPickerCustomEvent<{ value: string; previousValue: string }>) => void;
3703
5023
  /**
3704
- * Whether this option is selected
5024
+ * Whether this field is required in a form
3705
5025
  * @default false
3706
5026
  */
3707
- "selected"?: boolean;
5027
+ "required"?: boolean;
3708
5028
  /**
3709
- * Controls the option size
5029
+ * Enable shadow on container
5030
+ * @default false
3710
5031
  */
3711
- "size"?: SegmentedPickerSize;
5032
+ "shadow"?: boolean;
3712
5033
  /**
3713
- * Option value
5034
+ * Size variant
5035
+ * @default 'medium'
3714
5036
  */
3715
- "value": string;
5037
+ "size"?: 'small' | 'medium' | 'large';
5038
+ /**
5039
+ * Selected segment value
5040
+ */
5041
+ "value"?: string;
3716
5042
  }
3717
5043
  interface BcmShortcut {
3718
5044
  "hotkey"?: string;
@@ -3723,178 +5049,181 @@ declare namespace LocalJSX {
3723
5049
  }
3724
5050
  /**
3725
5051
  * @component BcmSwitch
3726
- * @description A customizable toggle switch component that provides an intuitive way to enable or disable options.
3727
- * Supports different sizes, label positions, error states, and accessibility features.
5052
+ * @description A form-associated toggle switch component representing a boolean choice.
5053
+ * It behaves like a checkbox and integrates with native HTML forms via ElementInternals.
5054
+ * This component supports **three validation strategies** via `validation-mode`:
5055
+ * - **`native`**:
5056
+ * - Uses native browser constraint validation.
5057
+ * - Sets the underlying input's `required` attribute.
5058
+ * - Browser may show the native validation bubble when the form calls `reportValidity()` / submit validation runs.
5059
+ * - **`silent`**:
5060
+ * - Does **not** rely on native `required` (prevents the browser bubble).
5061
+ * - Computes the "missing required" state internally and exposes it via `error` + `caption`.
5062
+ * - UI errors are **gated**: they appear only after the control is touched or after a submit attempt.
5063
+ * - **`none`**:
5064
+ * - Value-only mode (headless): participates in form value submission but never becomes invalid.
5065
+ * ## UI error gating (silent mode)
5066
+ * To avoid showing errors on initial render, the component tracks:
5067
+ * - `touched`: set after the first user interaction
5068
+ * - `submitAttempted`: set when the parent form emits `submit`
5069
+ * Only when `touched || submitAttempted` the component will show `error/caption` in `silent` mode.
5070
+ * ## Value behavior
5071
+ * - When checked, the component submits its `value` (default: `"on"`).
5072
+ * - When unchecked, no value is submitted.
5073
+ * - When disabled, the component does not participate in submission or validity.
3728
5074
  * @example Basic usage
3729
- * <bcm-switch label="Enable notifications"></bcm-switch>
3730
- * @example With error state
5075
+ * <bcm-switch name="newsletter" label="Receive newsletter?" />
5076
+ * @example Required with silent validation (no native bubble)
5077
+ * <form>
3731
5078
  * <bcm-switch
5079
+ * name="terms"
3732
5080
  * label="Accept terms"
3733
- * error={true}
3734
- * caption="You must accept the terms to continue">
3735
- * </bcm-switch>
3736
- * @example Disabled state
3737
- * <bcm-switch
3738
- * label="Advanced features"
3739
- * disabled={true}>
3740
- * </bcm-switch>
3741
- * @example With custom size and label position
3742
- * <bcm-switch
3743
- * label="Dark mode"
3744
- * size="large"
3745
- * labelPosition="left">
5081
+ * required
5082
+ * validation-mode="silent">
3746
5083
  * </bcm-switch>
5084
+ * <button type="submit">Submit</button>
5085
+ * </form>
5086
+ * @example Native validation mode (may show native bubble)
5087
+ * <bcm-switch name="terms" label="Accept terms" required validation-mode="native" />
5088
+ * @example Value-only mode (no validation)
5089
+ * <bcm-switch name="analytics" label="Allow analytics" validation-mode="none" />
5090
+ * @csspart base - Root container
5091
+ * @csspart switch-wrapper - Wrapper containing label + track
5092
+ * @csspart input - Hidden native input
5093
+ * @csspart label - Text label
5094
+ * @csspart dot-container - Switch track
5095
+ * @csspart dot - Switch knob
5096
+ * @csspart caption - Helper/error text
3747
5097
  */
3748
5098
  interface BcmSwitch {
3749
5099
  /**
3750
- * Text to display as an error message when error is true
5100
+ * Unique id (optional). Generated by default.
5101
+ * @default generateId('bcm-switch')
5102
+ */
5103
+ "_id"?: string;
5104
+ /**
5105
+ * Helper / error text shown under the switch
3751
5106
  */
3752
5107
  "caption"?: string;
3753
5108
  /**
3754
- * Whether the switch is checked or not
5109
+ * Checked state
3755
5110
  * @default false
3756
5111
  */
3757
5112
  "checked"?: boolean;
3758
5113
  /**
3759
- * Whether the switch is disabled
5114
+ * Disabled state
3760
5115
  * @default false
3761
5116
  */
3762
5117
  "disabled"?: boolean;
3763
5118
  /**
3764
- * Whether to display the switch in an error state
5119
+ * Visual error state (manual/external). In silent mode this can be auto-managed.
3765
5120
  * @default false
3766
5121
  */
3767
5122
  "error"?: boolean;
3768
5123
  /**
3769
- * Text label for the switch
5124
+ * Visible label text
3770
5125
  */
3771
- "label"?: string;
5126
+ "label": string;
3772
5127
  /**
3773
5128
  * Position of the label relative to the switch
3774
5129
  * @default 'right'
3775
5130
  */
3776
5131
  "labelPosition"?: 'left' | 'right';
3777
5132
  /**
3778
- * The name attribute for the hidden input element
5133
+ * Form field name
3779
5134
  */
3780
5135
  "name"?: string;
3781
5136
  /**
3782
- * Emitted when the switch state changes
5137
+ * Emitted when the switch toggles
3783
5138
  */
3784
5139
  "onBcmSwitchChange"?: (event: BcmSwitchCustomEvent<boolean>) => void;
3785
5140
  /**
3786
- * Whether the switch is in readonly mode
5141
+ * Optional readonly support
3787
5142
  * @default false
3788
5143
  */
3789
5144
  "readonly"?: boolean;
3790
5145
  /**
3791
- * Whether the switch is required in a form
5146
+ * Required state
3792
5147
  * @default false
3793
5148
  */
3794
5149
  "required"?: boolean;
3795
5150
  /**
3796
- * Size variant of the switch
5151
+ * Size variant
3797
5152
  * @default 'medium'
3798
5153
  */
3799
5154
  "size"?: 'small' | 'medium' | 'large';
3800
5155
  /**
3801
- * The value attribute for the hidden input element
5156
+ * @default 'native'
5157
+ */
5158
+ "validationMode"?: 'native' | 'silent' | 'none';
5159
+ /**
5160
+ * Value submitted when checked
5161
+ * @default 'on'
3802
5162
  */
3803
5163
  "value"?: string;
3804
5164
  }
3805
5165
  /**
3806
- * @description Tab interface component
5166
+ * Individual tab component - self-contained with label and content panel
3807
5167
  */
3808
- interface BcmTabs {
3809
- /**
3810
- * Default active tab value
3811
- */
3812
- "defaultValue"?: string;
3813
- /**
3814
- * Triggers when tab changes
3815
- */
3816
- "onBcmTabChange"?: (event: BcmTabsCustomEvent<{
3817
- activeTab: string;
3818
- element: HTMLBcmTabsTriggerElement;
3819
- previousTab?: string;
3820
- }>) => void;
5168
+ interface BcmTab {
3821
5169
  /**
3822
- * Tab size
3823
- * @default 'medium'
5170
+ * Active state (controlled by parent)
5171
+ * @default false
3824
5172
  */
3825
- "size"?: 'small' | 'medium' | 'large';
5173
+ "active"?: boolean;
3826
5174
  /**
3827
- * Whether to enable smooth animations for inkbar and transitions
3828
- * @default true
5175
+ * Disabled state
5176
+ * @default false
3829
5177
  */
3830
- "smooth"?: boolean;
5178
+ "disabled"?: boolean;
3831
5179
  /**
3832
- * Tab variant - controls width behavior
3833
- * @default 'full-width'
5180
+ * Label text to display in tab button
3834
5181
  */
3835
- "variant"?: 'full-width' | 'auto-width';
3836
- }
3837
- /**
3838
- * @description Tab content panel component that displays when its corresponding tab is selected
3839
- */
3840
- interface BcmTabsContent {
5182
+ "label": string;
3841
5183
  /**
3842
- * Unique identifier that matches a tab trigger's value Used to associate this content with its corresponding tab
5184
+ * Internal event emitted when tab button is clicked
3843
5185
  */
3844
- "value"?: string;
3845
- }
3846
- /**
3847
- * @description Container component for tab triggers that includes the sliding indicator (inkbar)
3848
- */
3849
- interface BcmTabsList {
5186
+ "onBcmTabClick"?: (event: BcmTabCustomEvent<string>) => void;
3850
5187
  /**
3851
- * Whether to enable smooth animations for inkbar and transitions
3852
- * @default true
5188
+ * Size variant (inherited from parent)
5189
+ * @default 'md'
3853
5190
  */
3854
- "smooth"?: boolean;
5191
+ "size"?: 'sm' | 'md' | 'lg';
3855
5192
  /**
3856
- * Tab variant - controls width behavior
3857
- * @default 'full-width'
5193
+ * Unique identifier for this tab
3858
5194
  */
3859
- "variant"?: 'full-width' | 'auto-width';
5195
+ "value": string;
3860
5196
  }
3861
5197
  /**
3862
- * @description Tab trigger component that functions as a clickable tab button
5198
+ * Modern Tabs component with CSS-first approach
3863
5199
  */
3864
- interface BcmTabsTrigger {
5200
+ interface BcmTabs {
3865
5201
  /**
3866
- * Whether the tab is currently active
3867
- * @default false
5202
+ * Emits when active tab changes
3868
5203
  */
3869
- "active"?: boolean;
5204
+ "onBcmTabChange"?: (event: BcmTabsCustomEvent<{
5205
+ value: string;
5206
+ previousValue: string;
5207
+ }>) => void;
3870
5208
  /**
3871
- * Whether the tab is disabled
5209
+ * Enable shadow on main container
3872
5210
  * @default false
3873
5211
  */
3874
- "disabled"?: boolean;
3875
- /**
3876
- * Event emitted when this tab is selected
3877
- */
3878
- "onBcmTabSelected"?: (event: BcmTabsTriggerCustomEvent<string>) => void;
3879
- /**
3880
- * Size of the tab
3881
- * @default 'medium'
3882
- */
3883
- "size"?: 'small' | 'medium' | 'large';
5212
+ "shadow"?: boolean;
3884
5213
  /**
3885
- * Whether to enable smooth animations for transitions
3886
- * @default true
5214
+ * Tab size variant
5215
+ * @default 'md'
3887
5216
  */
3888
- "smooth"?: boolean;
5217
+ "size"?: 'sm' | 'md' | 'lg';
3889
5218
  /**
3890
- * Unique identifier value for the tab
5219
+ * Active tab value
3891
5220
  */
3892
5221
  "value"?: string;
3893
5222
  /**
3894
- * Tab variant - controls width behavior
3895
- * @default 'full-width'
5223
+ * Visual variant
5224
+ * @default 'line'
3896
5225
  */
3897
- "variant"?: 'full-width' | 'auto-width';
5226
+ "variant"?: 'line' | 'enclosed';
3898
5227
  }
3899
5228
  interface BcmText {
3900
5229
  /**
@@ -4039,49 +5368,101 @@ declare namespace LocalJSX {
4039
5368
  }
4040
5369
  /**
4041
5370
  * @component BcmTooltip
4042
- * @description A lightweight tooltip component that displays brief contextual information when hovering or clicking on a target element.
4043
- * Supports different sizes, trigger types (click or hover), placements (top, right, bottom, left), and can be controlled via slots or props.
4044
- * @example Basic Hover Tooltip
4045
- * <bcm-tooltip trigger="hover" size="medium" placement="top" message="This is a tooltip.">
4046
- * <bcm-button>Hover Me</bcm-button>
5371
+ * @description A flexible tooltip component that provides contextual information on hover or click.
5372
+ * Built on the native Popover API for top-layer rendering and Floating UI for intelligent positioning.
5373
+ * Automatically handles overflow, flipping, and complex shadow DOM scenarios.
5374
+ * @example ```html
5375
+ * <!-- Basic usage with text message -->
5376
+ * <bcm-tooltip message="This is a tooltip">
5377
+ * <button>Hover me</button>
4047
5378
  * </bcm-tooltip>
4048
- * @example Click Tooltip with Programmatic Control
4049
- * <bcm-tooltip id="my-tooltip" trigger="click" message="Controlled tooltip.">
4050
- * <bcm-button>Click Me</bcm-button>
5379
+ * <!-- With custom rich content -->
5380
+ * <bcm-tooltip placement="right" size="large">
5381
+ * <button>Click me</button>
5382
+ * <div slot="content">
5383
+ * <strong>Rich content</strong>
5384
+ * <p>You can add any HTML here</p>
5385
+ * </div>
5386
+ * </bcm-tooltip>
5387
+ * <!-- Click trigger with custom delays -->
5388
+ * <bcm-tooltip trigger="click" show-delay="0" hide-delay="0">
5389
+ * <span>Click me</span>
5390
+ * </bcm-tooltip>
5391
+ * <!-- Mouse following mode -->
5392
+ * <bcm-tooltip follow={true} message="I follow your cursor!">
5393
+ * <div>Move your mouse here</div>
5394
+ * </bcm-tooltip>
5395
+ * <!-- Programmatic control -->
5396
+ * <bcm-tooltip id="myTooltip" message="Programmatic tooltip">
5397
+ * <span>Trigger</span>
4051
5398
  * </bcm-tooltip>
4052
5399
  * <script>
4053
- * const tooltip = document.querySelector('#my-tooltip');
4054
- * tooltip.openTooltip(); // Opens the tooltip
4055
- * tooltip.closeTooltip(); // Closes the tooltip
5400
+ * const tooltip = document.getElementById('myTooltip');
5401
+ * tooltip.show();
5402
+ * setTimeout(() => tooltip.hide(), 2000);
4056
5403
  * </script>
4057
- * @csspart tooltip - The root tooltip container element, stylable for the entire tooltip
4058
- * @csspart arrow - The arrow element of the tooltip, stylable for the positioning arrow
5404
+ * <!-- Custom styling with CSS parts -->
5405
+ * <style>
5406
+ * bcm-tooltip::part(tooltip) {
5407
+ * background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
5408
+ * border-radius: 12px;
5409
+ * }
5410
+ * bcm-tooltip::part(arrow) {
5411
+ * background: #667eea;
5412
+ * }
5413
+ * </style>
5414
+ * ```
4059
5415
  */
4060
5416
  interface BcmTooltip {
4061
5417
  /**
4062
- * @prop {string} message - Custom text for the tooltip content. Used as fallback content if the 'tooltip' slot is not provided.
5418
+ * Whether to show an arrow pointing to the trigger element Note: Arrow is automatically hidden in 'follow' mode
5419
+ * @default true
5420
+ */
5421
+ "arrow"?: boolean;
5422
+ /**
5423
+ * Disables the tooltip, preventing it from showing Useful for conditional tooltips based on application state
5424
+ * @default false
5425
+ */
5426
+ "disabled"?: boolean;
5427
+ /**
5428
+ * Makes the tooltip follow the mouse cursor When enabled: - Arrow is hidden - Tooltip position updates smoothly with cursor movement - Pointer events are disabled on tooltip to prevent interference
5429
+ * @default false
5430
+ */
5431
+ "follow"?: boolean;
5432
+ /**
5433
+ * Delay in milliseconds before hiding the tooltip Provides a grace period for mouse movements
5434
+ * @default 100
5435
+ */
5436
+ "hideDelay"?: number;
5437
+ /**
5438
+ * Simple text message to display in the tooltip Can be overridden by slotting content into the 'content' slot
4063
5439
  */
4064
5440
  "message"?: string;
4065
5441
  /**
4066
- * @prop {('top' | 'right' | 'bottom' | 'left')} placement - Defines the position of the tooltip relative to the target element. Default: 'top'
5442
+ * Distance in pixels between the tooltip and the trigger element Also used as the offset in 'follow' mode
5443
+ * @default 12
5444
+ */
5445
+ "offset"?: number;
5446
+ /**
5447
+ * Preferred placement of the tooltip relative to the trigger Note: Tooltip will automatically flip if there's not enough space - 'top': Above the trigger element - 'right': To the right of the trigger element - 'bottom': Below the trigger element - 'left': To the left of the trigger element
4067
5448
  * @default 'top'
4068
5449
  */
4069
- "placement"?: 'top' | 'right' | 'bottom' | 'left';
5450
+ "placement"?: TooltipPlacement;
4070
5451
  /**
4071
- * @prop {number} showDelay - Delay in milliseconds before showing or hiding the tooltip. Helps prevent flickering on quick mouse movements. Default: 150
5452
+ * Delay in milliseconds before showing the tooltip Useful to prevent tooltips from appearing on quick mouse movements
4072
5453
  * @default 150
4073
5454
  */
4074
5455
  "showDelay"?: number;
4075
5456
  /**
4076
- * @prop {('small' | 'medium' | 'large')} size - Defines the size of the tooltip. Controls the text size and padding of the tooltip content. Default: 'medium'
5457
+ * Size variant of the tooltip - 'small': Compact tooltip with minimal padding (text-size-3, py-1 px-2) - 'medium': Standard tooltip size (text-size-4, py-1.5 px-3) - 'large': Larger tooltip for more content (text-size-5, py-2 px-4)
4077
5458
  * @default 'medium'
4078
5459
  */
4079
- "size"?: 'small' | 'medium' | 'large';
5460
+ "size"?: TooltipSize;
4080
5461
  /**
4081
- * @prop {('click' | 'hover')} trigger - Defines the interaction type to show/hide the tooltip. 'click' toggles on click, 'hover' shows on mouse enter and hides on mouse leave. Default: 'hover'
5462
+ * How the tooltip is triggered - 'hover': Shows on mouse enter, hides on mouse leave - 'click': Toggles on click, closes on outside click or Escape key
4082
5463
  * @default 'hover'
4083
5464
  */
4084
- "trigger"?: 'click' | 'hover';
5465
+ "trigger"?: TooltipTrigger;
4085
5466
  }
4086
5467
  interface IntrinsicElements {
4087
5468
  "bcm-accordion": BcmAccordion;
@@ -4098,6 +5479,7 @@ declare namespace LocalJSX {
4098
5479
  "bcm-drawer": BcmDrawer;
4099
5480
  "bcm-dropdown": BcmDropdown;
4100
5481
  "bcm-dropdown-item": BcmDropdownItem;
5482
+ "bcm-file-upload": BcmFileUpload;
4101
5483
  "bcm-input": BcmInput;
4102
5484
  "bcm-linked": BcmLinked;
4103
5485
  "bcm-modal": BcmModal;
@@ -4105,14 +5487,12 @@ declare namespace LocalJSX {
4105
5487
  "bcm-popover": BcmPopover;
4106
5488
  "bcm-radio": BcmRadio;
4107
5489
  "bcm-radio-group": BcmRadioGroup;
5490
+ "bcm-segment": BcmSegment;
4108
5491
  "bcm-segmented-picker": BcmSegmentedPicker;
4109
- "bcm-segmented-picker-option": BcmSegmentedPickerOption;
4110
5492
  "bcm-shortcut": BcmShortcut;
4111
5493
  "bcm-switch": BcmSwitch;
5494
+ "bcm-tab": BcmTab;
4112
5495
  "bcm-tabs": BcmTabs;
4113
- "bcm-tabs-content": BcmTabsContent;
4114
- "bcm-tabs-list": BcmTabsList;
4115
- "bcm-tabs-trigger": BcmTabsTrigger;
4116
5496
  "bcm-text": BcmText;
4117
5497
  "bcm-textarea": BcmTextarea;
4118
5498
  "bcm-tooltip": BcmTooltip;
@@ -4258,8 +5638,49 @@ declare module "@stencil/core" {
4258
5638
  "bcm-button": LocalJSX.BcmButton & JSXBase.HTMLAttributes<HTMLBcmButtonElement>;
4259
5639
  "bcm-button-group": LocalJSX.BcmButtonGroup & JSXBase.HTMLAttributes<HTMLBcmButtonGroupElement>;
4260
5640
  /**
4261
- * @description A checkbox component that allows users to select or deselect an option.
4262
- * It also supports an indeterminate state.
5641
+ * @component BcmCheckbox
5642
+ * @description A form-associated checkbox component representing a boolean choice.
5643
+ * Integrates with native HTML forms via ElementInternals while supporting
5644
+ * **three validation strategies** via `validation-mode`:
5645
+ * - **`native`**
5646
+ * - Participates in native browser constraint validation.
5647
+ * - Sets the underlying input's `required`.
5648
+ * - Browser may show native validation bubbles when submit/reportValidity happens.
5649
+ * - **`silent`**
5650
+ * - Does **not** set native `required` (prevents browser bubble).
5651
+ * - Computes "missing required" internally and exposes it via `error` + `caption`.
5652
+ * - UI errors are **gated**: shown only after `touched` or a form submit attempt.
5653
+ * - **`none`**
5654
+ * - Value-only mode: submits value but never becomes invalid.
5655
+ * ## UI error gating (silent mode)
5656
+ * - `touched` becomes true after first user interaction
5657
+ * - `submitAttempted` becomes true when the parent form emits `submit`
5658
+ * ## Value behavior
5659
+ * - When checked → submits `value` (default: `"on"`).
5660
+ * - When unchecked → submits no value (`null`).
5661
+ * - When disabled → no submission and no validity participation.
5662
+ * ## Shadow Parts
5663
+ * - `checkbox` → root container
5664
+ * - `control` → visual checkbox box
5665
+ * - `icon` → icon container (check or minus)
5666
+ * - `label` → label text
5667
+ * - `caption` → helper/error text (silent mode UI)
5668
+ * - `input` → hidden native input
5669
+ * @example Basic usage
5670
+ * <bcm-checkbox name="terms" required>
5671
+ * I agree to the terms and conditions
5672
+ * </bcm-checkbox>
5673
+ * @example Silent validation (no native bubble)
5674
+ * <form>
5675
+ * <bcm-checkbox name="newsletter" required validation-mode="silent">
5676
+ * Subscribe to newsletter
5677
+ * </bcm-checkbox>
5678
+ * <button type="submit">Submit</button>
5679
+ * </form>
5680
+ * @example Value-only mode
5681
+ * <bcm-checkbox name="analytics" validation-mode="none">
5682
+ * Allow analytics
5683
+ * </bcm-checkbox>
4263
5684
  */
4264
5685
  "bcm-checkbox": LocalJSX.BcmCheckbox & JSXBase.HTMLAttributes<HTMLBcmCheckboxElement>;
4265
5686
  /**
@@ -4291,72 +5712,259 @@ declare module "@stencil/core" {
4291
5712
  * The component uses CSS variables for theming and Tailwind for styling.
4292
5713
  */
4293
5714
  "bcm-divider": LocalJSX.BcmDivider & JSXBase.HTMLAttributes<HTMLBcmDividerElement>;
5715
+ /**
5716
+ * @component BcmDrawer
5717
+ * @description A slide-in panel component built on the native HTML Dialog API.
5718
+ * Ideal for navigation menus, forms, and contextual information that slides in from any edge of the screen.
5719
+ * @example ```html
5720
+ * <!-- Basic usage -->
5721
+ * <bcm-drawer open header-text="Menu" position="left">
5722
+ * <nav>
5723
+ * <a href="/home">Home</a>
5724
+ * <a href="/about">About</a>
5725
+ * </nav>
5726
+ * </bcm-drawer>
5727
+ * <!-- Custom size and position -->
5728
+ * <bcm-drawer size="large" position="right">
5729
+ * <div slot="header">Settings</div>
5730
+ * <form>...</form>
5731
+ * <div slot="footer">
5732
+ * <button data-dismiss>Cancel</button>
5733
+ * <button>Save</button>
5734
+ * </div>
5735
+ * </bcm-drawer>
5736
+ * <!-- Custom size with CSS units -->
5737
+ * <bcm-drawer size="600px" position="bottom">
5738
+ * <p>Custom height drawer</p>
5739
+ * </bcm-drawer>
5740
+ * <!-- Programmatic usage -->
5741
+ * <bcm-drawer id="myDrawer">Content</bcm-drawer>
5742
+ * <script>
5743
+ * document.getElementById('myDrawer').show();
5744
+ * </script>
5745
+ * ```
5746
+ */
4294
5747
  "bcm-drawer": LocalJSX.BcmDrawer & JSXBase.HTMLAttributes<HTMLBcmDrawerElement>;
4295
5748
  "bcm-dropdown": LocalJSX.BcmDropdown & JSXBase.HTMLAttributes<HTMLBcmDropdownElement>;
4296
5749
  "bcm-dropdown-item": LocalJSX.BcmDropdownItem & JSXBase.HTMLAttributes<HTMLBcmDropdownItemElement>;
5750
+ "bcm-file-upload": LocalJSX.BcmFileUpload & JSXBase.HTMLAttributes<HTMLBcmFileUploadElement>;
4297
5751
  "bcm-input": LocalJSX.BcmInput & JSXBase.HTMLAttributes<HTMLBcmInputElement>;
5752
+ /**
5753
+ * @component BcmLinked
5754
+ * @description A flexible linked floating element component that displays contextual content relative to a trigger element.
5755
+ * Built on the native Popover API for top-layer rendering and Floating UI for intelligent positioning.
5756
+ * Supports different trigger types (click, hover, focus, manual) and comprehensive event system.
5757
+ * @example Basic Click Trigger
5758
+ * <bcm-linked trigger="click">
5759
+ * <button slot="trigger">Click Me</button>
5760
+ * <div>Floating content here</div>
5761
+ * </bcm-linked>
5762
+ * @example Hover Trigger with Delays
5763
+ * <bcm-linked trigger="hover" show-delay="200" hide-delay="100">
5764
+ * <span slot="trigger">Hover Me</span>
5765
+ * <div>This appears on hover</div>
5766
+ * </bcm-linked>
5767
+ * @example Manual Control
5768
+ * <bcm-linked id="my-linked" trigger="manual">
5769
+ * <button slot="trigger">Trigger</button>
5770
+ * <div>Controlled content</div>
5771
+ * </bcm-linked>
5772
+ * <script>
5773
+ * const linked = document.querySelector('#my-linked');
5774
+ * linked.show(); // Opens the floating element
5775
+ * linked.hide(); // Closes the floating element
5776
+ * </script>
5777
+ * @csspart floating - The floating container element
5778
+ * @csspart arrow - The arrow element pointing to the trigger
5779
+ * @csspart content - The content wrapper element
5780
+ */
4298
5781
  "bcm-linked": LocalJSX.BcmLinked & JSXBase.HTMLAttributes<HTMLBcmLinkedElement>;
5782
+ /**
5783
+ * @component BcmModal
5784
+ * @description A flexible modal dialog component built on the native HTML Dialog API.
5785
+ * Provides a powerful way to display content in a layer above the page with full keyboard and focus management.
5786
+ * @example ```html
5787
+ * <!-- Basic usage -->
5788
+ * <bcm-modal open header-text="Welcome" helper-text="Please read carefully">
5789
+ * <p>Modal content goes here</p>
5790
+ * <div slot="footer">
5791
+ * <button data-dismiss>Close</button>
5792
+ * </div>
5793
+ * </bcm-modal>
5794
+ * <!-- Custom size and placement -->
5795
+ * <bcm-modal size="large" placement="top">
5796
+ * <div slot="header">Custom Header</div>
5797
+ * <p>Content here</p>
5798
+ * <div slot="footer">
5799
+ * <button>Cancel</button>
5800
+ * <button>Confirm</button>
5801
+ * </div>
5802
+ * </bcm-modal>
5803
+ * <!-- Full screen modal -->
5804
+ * <bcm-modal full-screen no-footer>
5805
+ * <p>Full screen content</p>
5806
+ * </bcm-modal>
5807
+ * <!-- Programmatic usage -->
5808
+ * <bcm-modal id="myModal">Content</bcm-modal>
5809
+ * <script>
5810
+ * document.getElementById('myModal').show();
5811
+ * </script>
5812
+ * ```
5813
+ */
4299
5814
  "bcm-modal": LocalJSX.BcmModal & JSXBase.HTMLAttributes<HTMLBcmModalElement>;
4300
5815
  /**
4301
5816
  * @component BcmPopConfirm
4302
- * @description A floating confirmation pop-up component that prompts users for action confirmation, triggered by click or hover events.
4303
- * Offers customizable header, body content, and footer areas through slots, with accessibility and positioning features.
4304
- * @example Basic usage
4305
- * <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>
4306
- * @example With all slots and custom styling
4307
- * <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">
4308
- * <span slot="header">Custom Header Text</span>
4309
- * <span slot="body">Additional details here</span>
4310
- * <span slot="footer">Custom Footer Action</span>
5817
+ * @description A confirmation popover component that displays a confirmation dialog with customizable actions.
5818
+ * Built on the native Popover API for top-layer rendering and Floating UI for intelligent positioning.
5819
+ * Ideal for confirming destructive actions or important decisions inline.
5820
+ * @csspart container - The main popover container element
5821
+ * @csspart arrow - The arrow pointer element
5822
+ * @csspart body - The body/description section
5823
+ * @csspart footer - The footer section with action buttons
5824
+ * @example Basic Usage
5825
+ * ```html
5826
+ * <bcm-pop-confirm
5827
+ * header-text="Delete Item?"
5828
+ * description="Are you sure you want to delete this item? This action cannot be undone."
5829
+ * status="error"
5830
+ * >
5831
+ * <bcm-button status="error">Delete</bcm-button>
4311
5832
  * </bcm-pop-confirm>
4312
- * @example Event handling
4313
- * // Listen to confirmation events
4314
- * const popConfirm = document.querySelector('bcm-pop-confirm');
4315
- * popConfirm.addEventListener('bcmConfirm', () => {
4316
- * console.log('User confirmed the action!');
5833
+ * ```
5834
+ * @example With Event Handlers
5835
+ * ```html
5836
+ * <bcm-pop-confirm
5837
+ * id="deleteConfirm"
5838
+ * header-text="Confirm Delete"
5839
+ * description="This will permanently delete the item."
5840
+ * status="warning"
5841
+ * confirm-text="Yes, Delete"
5842
+ * cancel-text="No, Keep It"
5843
+ * >
5844
+ * <bcm-button>Delete Item</bcm-button>
5845
+ * </bcm-pop-confirm>
5846
+ * <script>
5847
+ * const popconfirm = document.getElementById('deleteConfirm');
5848
+ * popconfirm.addEventListener('bcmConfirm', () => {
5849
+ * console.log('User confirmed deletion');
5850
+ * // Perform delete operation
5851
+ * });
5852
+ * popconfirm.addEventListener('bcmCancel', () => {
5853
+ * console.log('User cancelled deletion');
5854
+ * });
5855
+ * </script>
5856
+ * ```
5857
+ * @example Different Status Types
5858
+ * ```html
5859
+ * <!-- Info (default) -->
5860
+ * <bcm-pop-confirm header-text="Information" description="This is an info message">
5861
+ * <bcm-button>Info</bcm-button>
5862
+ * </bcm-pop-confirm>
5863
+ * <!-- Success -->
5864
+ * <bcm-pop-confirm status="success" header-text="Confirm Action" description="Proceed with this action?">
5865
+ * <bcm-button status="success">Proceed</bcm-button>
5866
+ * </bcm-pop-confirm>
5867
+ * <!-- Warning -->
5868
+ * <bcm-pop-confirm status="warning" header-text="Warning" description="This action may have consequences">
5869
+ * <bcm-button status="warning">Continue</bcm-button>
5870
+ * </bcm-pop-confirm>
5871
+ * <!-- Error/Danger -->
5872
+ * <bcm-pop-confirm status="error" header-text="Danger Zone" description="This is a destructive action">
5873
+ * <bcm-button status="error">Delete</bcm-button>
5874
+ * </bcm-pop-confirm>
5875
+ * ```
5876
+ * @example Custom Content with Slots
5877
+ * ```html
5878
+ * <bcm-pop-confirm status="warning">
5879
+ * <bcm-button>Custom Confirm</bcm-button>
5880
+ * <div slot="header">
5881
+ * <strong>Custom Header</strong>
5882
+ * </div>
5883
+ * <div slot="body">
5884
+ * <p>This is custom body content with <strong>HTML formatting</strong>.</p>
5885
+ * <ul>
5886
+ * <li>Point 1</li>
5887
+ * <li>Point 2</li>
5888
+ * </ul>
5889
+ * </div>
5890
+ * <div slot="footer">
5891
+ * <bcm-button kind="outline" size="small">Maybe Later</bcm-button>
5892
+ * <bcm-button status="success" size="small">Confirm</bcm-button>
5893
+ * </div>
5894
+ * </bcm-pop-confirm>
5895
+ * ```
5896
+ * @example Different Sizes
5897
+ * ```html
5898
+ * <!-- Small -->
5899
+ * <bcm-pop-confirm size="small" header-text="Small" description="Compact confirmation">
5900
+ * <bcm-button size="small">Small</bcm-button>
5901
+ * </bcm-pop-confirm>
5902
+ * <!-- Medium (default) -->
5903
+ * <bcm-pop-confirm size="medium" header-text="Medium" description="Standard confirmation">
5904
+ * <bcm-button size="medium">Medium</bcm-button>
5905
+ * </bcm-pop-confirm>
5906
+ * <!-- Large -->
5907
+ * <bcm-pop-confirm size="large" header-text="Large" description="Spacious confirmation with more room for content">
5908
+ * <bcm-button size="large">Large</bcm-button>
5909
+ * </bcm-pop-confirm>
5910
+ * ```
5911
+ * @example Programmatic Control
5912
+ * ```html
5913
+ * <bcm-pop-confirm id="myConfirm" header-text="Confirm" description="Are you sure?">
5914
+ * <bcm-button>Trigger</bcm-button>
5915
+ * </bcm-pop-confirm>
5916
+ * <bcm-button id="showBtn">Show Programmatically</bcm-button>
5917
+ * <bcm-button id="hideBtn">Hide Programmatically</bcm-button>
5918
+ * <script>
5919
+ * const popconfirm = document.getElementById('myConfirm');
5920
+ * document.getElementById('showBtn').addEventListener('click', () => {
5921
+ * popconfirm.show();
4317
5922
  * });
4318
- * popConfirm.addEventListener('bcmCancel', () => {
4319
- * console.log('User canceled the action!');
5923
+ * document.getElementById('hideBtn').addEventListener('click', () => {
5924
+ * popconfirm.hide();
4320
5925
  * });
4321
- * // Programmatically control pop-up
4322
- * await popConfirm.show(); // Show the pop-up
4323
- * await popConfirm.hide(); // Hide the pop-up
4324
- * @prop {string} arrowColor - The color of the arrow pointing to the trigger element (default: 'var(--bcm-ui-color-background-basic-panel)')
4325
- * @prop {string} cancelText - Text displayed on the cancel button (default: 'Cancel')
4326
- * @prop {string} confirmText - Text displayed on the confirm button (default: 'Yes')
4327
- * @prop {string} description - The description or body content of the pop-up (default: '')
4328
- * @prop {string} headerText - The header text displayed at the top of the pop-up (default: '')
4329
- * @prop {Placement} placement - The placement position of the pop-up relative to the trigger (default: 'right')
4330
- * @prop {('small' | 'medium' | 'large')} size - The size of the pop-up, determining its dimensions (default: 'medium')
4331
- * @prop {('info' | 'error' | 'warning' | 'success' | 'default')} status - The status of the pop-up, affecting its icon and color (default: 'info')
4332
- * @prop {boolean} statusIcon - Whether to display a status icon based on the `status` prop (default: true)
4333
- * @prop {string} targetId - The ID of the trigger element (e.g., a button) that opens the pop-up
4334
- * @event {EventEmitter<void>} bcmConfirm - Emitted when the user confirms the action in the pop-up
4335
- * @event {EventEmitter<void>} bcmCancel - Emitted when the user cancels the action in the pop-up
4336
- * @csspart container - The root container element of the pop-up
4337
- * @csspart header - The header section with title and close icon
4338
- * @csspart content - The main content section of the pop-up
4339
- * @csspart footer - The footer section with confirm/cancel buttons
4340
- * @csspart arrow - The positioning arrow pointing to the trigger
4341
- * @css {string} --popover-radius - Border radius of the pop-up (default: defined in CSS)
4342
- * @css {string} --popover-bg - Background color of the pop-up
4343
- * @css {string} --text-color - Text color of the pop-up based on status
4344
- * @methods show() - Programmatically shows the pop-up
4345
- * hide() - Programmatically hides the pop-up
5926
+ * </script>
5927
+ * ```
5928
+ * @example Without Status Icon
5929
+ * ```html
5930
+ * <bcm-pop-confirm
5931
+ * header-text="Simple Confirmation"
5932
+ * description="No status icon shown"
5933
+ * status-icon={false}
5934
+ * >
5935
+ * <bcm-button>Click Me</bcm-button>
5936
+ * </bcm-pop-confirm>
5937
+ * ```
5938
+ * @example Different Placements
5939
+ * ```html
5940
+ * <bcm-pop-confirm placement="top" header-text="Top" description="Opens above">
5941
+ * <bcm-button>Top</bcm-button>
5942
+ * </bcm-pop-confirm>
5943
+ * <bcm-pop-confirm placement="right" header-text="Right" description="Opens to the right">
5944
+ * <bcm-button>Right</bcm-button>
5945
+ * </bcm-pop-confirm>
5946
+ * <bcm-pop-confirm placement="bottom" header-text="Bottom" description="Opens below">
5947
+ * <bcm-button>Bottom</bcm-button>
5948
+ * </bcm-pop-confirm>
5949
+ * <bcm-pop-confirm placement="left" header-text="Left" description="Opens to the left">
5950
+ * <bcm-button>Left</bcm-button>
5951
+ * </bcm-pop-confirm>
5952
+ * ```
4346
5953
  */
4347
5954
  "bcm-pop-confirm": LocalJSX.BcmPopConfirm & JSXBase.HTMLAttributes<HTMLBcmPopConfirmElement>;
4348
5955
  /**
4349
5956
  * @component BcmPopover
4350
5957
  * @description A flexible popover component that displays contextual information or content relative to a target element.
4351
- * Supports different sizes, trigger types (click or hover), placements (top, right, bottom, left), and can be controlled via slots or props.
5958
+ * Built on the native Popover API for top-layer rendering and Floating UI for intelligent positioning.
5959
+ * Supports different sizes, trigger types (click, hover, focus), placements, and comprehensive event system.
4352
5960
  * @example Basic Click Popover
4353
5961
  * <bcm-popover trigger="click" size="medium" placement="top">
4354
5962
  * <bcm-button>Click Me</bcm-button>
4355
5963
  * <span slot="header">Header</span>
4356
5964
  * <span slot="content">This is a simple popover content.</span>
4357
5965
  * </bcm-popover>
4358
- * @example Hover Popover with Props
4359
- * <bcm-popover trigger="hover" hover-delay="200" size="large" placement="right" header-text="Prop Header" message="This is a hover popover with props.">
5966
+ * @example Hover Popover with Delays
5967
+ * <bcm-popover trigger="hover" show-delay="200" hide-delay="100" size="large" placement="right" header-text="Prop Header" message="This is a hover popover with props.">
4360
5968
  * <bcm-button>Hover Me</bcm-button>
4361
5969
  * </bcm-popover>
4362
5970
  * @example Programmatic Control
@@ -4366,8 +5974,9 @@ declare module "@stencil/core" {
4366
5974
  * </bcm-popover>
4367
5975
  * <script>
4368
5976
  * const popover = document.querySelector('#my-popover');
4369
- * popover.openPopup(); // Opens the popover
4370
- * popover.closePopup(); // Closes the popover
5977
+ * popover.show(); // Opens the popover
5978
+ * popover.hide(); // Closes the popover
5979
+ * popover.toggle(); // Toggles the popover
4371
5980
  * </script>
4372
5981
  * @csspart popover - The root popover container element, stylable for the entire popover
4373
5982
  * @csspart header - The header section of the popover, stylable for the title area
@@ -4377,71 +5986,120 @@ declare module "@stencil/core" {
4377
5986
  "bcm-popover": LocalJSX.BcmPopover & JSXBase.HTMLAttributes<HTMLBcmPopoverElement>;
4378
5987
  "bcm-radio": LocalJSX.BcmRadio & JSXBase.HTMLAttributes<HTMLBcmRadioElement>;
4379
5988
  "bcm-radio-group": LocalJSX.BcmRadioGroup & JSXBase.HTMLAttributes<HTMLBcmRadioGroupElement>;
5989
+ /**
5990
+ * Individual segment option component
5991
+ */
5992
+ "bcm-segment": LocalJSX.BcmSegment & JSXBase.HTMLAttributes<HTMLBcmSegmentElement>;
5993
+ /**
5994
+ * Modern Segmented Picker component with CSS Grid-based indicator
5995
+ */
4380
5996
  "bcm-segmented-picker": LocalJSX.BcmSegmentedPicker & JSXBase.HTMLAttributes<HTMLBcmSegmentedPickerElement>;
4381
- "bcm-segmented-picker-option": LocalJSX.BcmSegmentedPickerOption & JSXBase.HTMLAttributes<HTMLBcmSegmentedPickerOptionElement>;
4382
5997
  "bcm-shortcut": LocalJSX.BcmShortcut & JSXBase.HTMLAttributes<HTMLBcmShortcutElement>;
4383
5998
  /**
4384
5999
  * @component BcmSwitch
4385
- * @description A customizable toggle switch component that provides an intuitive way to enable or disable options.
4386
- * Supports different sizes, label positions, error states, and accessibility features.
6000
+ * @description A form-associated toggle switch component representing a boolean choice.
6001
+ * It behaves like a checkbox and integrates with native HTML forms via ElementInternals.
6002
+ * This component supports **three validation strategies** via `validation-mode`:
6003
+ * - **`native`**:
6004
+ * - Uses native browser constraint validation.
6005
+ * - Sets the underlying input's `required` attribute.
6006
+ * - Browser may show the native validation bubble when the form calls `reportValidity()` / submit validation runs.
6007
+ * - **`silent`**:
6008
+ * - Does **not** rely on native `required` (prevents the browser bubble).
6009
+ * - Computes the "missing required" state internally and exposes it via `error` + `caption`.
6010
+ * - UI errors are **gated**: they appear only after the control is touched or after a submit attempt.
6011
+ * - **`none`**:
6012
+ * - Value-only mode (headless): participates in form value submission but never becomes invalid.
6013
+ * ## UI error gating (silent mode)
6014
+ * To avoid showing errors on initial render, the component tracks:
6015
+ * - `touched`: set after the first user interaction
6016
+ * - `submitAttempted`: set when the parent form emits `submit`
6017
+ * Only when `touched || submitAttempted` the component will show `error/caption` in `silent` mode.
6018
+ * ## Value behavior
6019
+ * - When checked, the component submits its `value` (default: `"on"`).
6020
+ * - When unchecked, no value is submitted.
6021
+ * - When disabled, the component does not participate in submission or validity.
4387
6022
  * @example Basic usage
4388
- * <bcm-switch label="Enable notifications"></bcm-switch>
4389
- * @example With error state
6023
+ * <bcm-switch name="newsletter" label="Receive newsletter?" />
6024
+ * @example Required with silent validation (no native bubble)
6025
+ * <form>
4390
6026
  * <bcm-switch
6027
+ * name="terms"
4391
6028
  * label="Accept terms"
4392
- * error={true}
4393
- * caption="You must accept the terms to continue">
4394
- * </bcm-switch>
4395
- * @example Disabled state
4396
- * <bcm-switch
4397
- * label="Advanced features"
4398
- * disabled={true}>
4399
- * </bcm-switch>
4400
- * @example With custom size and label position
4401
- * <bcm-switch
4402
- * label="Dark mode"
4403
- * size="large"
4404
- * labelPosition="left">
6029
+ * required
6030
+ * validation-mode="silent">
4405
6031
  * </bcm-switch>
6032
+ * <button type="submit">Submit</button>
6033
+ * </form>
6034
+ * @example Native validation mode (may show native bubble)
6035
+ * <bcm-switch name="terms" label="Accept terms" required validation-mode="native" />
6036
+ * @example Value-only mode (no validation)
6037
+ * <bcm-switch name="analytics" label="Allow analytics" validation-mode="none" />
6038
+ * @csspart base - Root container
6039
+ * @csspart switch-wrapper - Wrapper containing label + track
6040
+ * @csspart input - Hidden native input
6041
+ * @csspart label - Text label
6042
+ * @csspart dot-container - Switch track
6043
+ * @csspart dot - Switch knob
6044
+ * @csspart caption - Helper/error text
4406
6045
  */
4407
6046
  "bcm-switch": LocalJSX.BcmSwitch & JSXBase.HTMLAttributes<HTMLBcmSwitchElement>;
4408
6047
  /**
4409
- * @description Tab interface component
4410
- */
4411
- "bcm-tabs": LocalJSX.BcmTabs & JSXBase.HTMLAttributes<HTMLBcmTabsElement>;
4412
- /**
4413
- * @description Tab content panel component that displays when its corresponding tab is selected
6048
+ * Individual tab component - self-contained with label and content panel
4414
6049
  */
4415
- "bcm-tabs-content": LocalJSX.BcmTabsContent & JSXBase.HTMLAttributes<HTMLBcmTabsContentElement>;
6050
+ "bcm-tab": LocalJSX.BcmTab & JSXBase.HTMLAttributes<HTMLBcmTabElement>;
4416
6051
  /**
4417
- * @description Container component for tab triggers that includes the sliding indicator (inkbar)
6052
+ * Modern Tabs component with CSS-first approach
4418
6053
  */
4419
- "bcm-tabs-list": LocalJSX.BcmTabsList & JSXBase.HTMLAttributes<HTMLBcmTabsListElement>;
4420
- /**
4421
- * @description Tab trigger component that functions as a clickable tab button
4422
- */
4423
- "bcm-tabs-trigger": LocalJSX.BcmTabsTrigger & JSXBase.HTMLAttributes<HTMLBcmTabsTriggerElement>;
6054
+ "bcm-tabs": LocalJSX.BcmTabs & JSXBase.HTMLAttributes<HTMLBcmTabsElement>;
4424
6055
  "bcm-text": LocalJSX.BcmText & JSXBase.HTMLAttributes<HTMLBcmTextElement>;
4425
6056
  "bcm-textarea": LocalJSX.BcmTextarea & JSXBase.HTMLAttributes<HTMLBcmTextareaElement>;
4426
6057
  /**
4427
6058
  * @component BcmTooltip
4428
- * @description A lightweight tooltip component that displays brief contextual information when hovering or clicking on a target element.
4429
- * Supports different sizes, trigger types (click or hover), placements (top, right, bottom, left), and can be controlled via slots or props.
4430
- * @example Basic Hover Tooltip
4431
- * <bcm-tooltip trigger="hover" size="medium" placement="top" message="This is a tooltip.">
4432
- * <bcm-button>Hover Me</bcm-button>
6059
+ * @description A flexible tooltip component that provides contextual information on hover or click.
6060
+ * Built on the native Popover API for top-layer rendering and Floating UI for intelligent positioning.
6061
+ * Automatically handles overflow, flipping, and complex shadow DOM scenarios.
6062
+ * @example ```html
6063
+ * <!-- Basic usage with text message -->
6064
+ * <bcm-tooltip message="This is a tooltip">
6065
+ * <button>Hover me</button>
4433
6066
  * </bcm-tooltip>
4434
- * @example Click Tooltip with Programmatic Control
4435
- * <bcm-tooltip id="my-tooltip" trigger="click" message="Controlled tooltip.">
4436
- * <bcm-button>Click Me</bcm-button>
6067
+ * <!-- With custom rich content -->
6068
+ * <bcm-tooltip placement="right" size="large">
6069
+ * <button>Click me</button>
6070
+ * <div slot="content">
6071
+ * <strong>Rich content</strong>
6072
+ * <p>You can add any HTML here</p>
6073
+ * </div>
6074
+ * </bcm-tooltip>
6075
+ * <!-- Click trigger with custom delays -->
6076
+ * <bcm-tooltip trigger="click" show-delay="0" hide-delay="0">
6077
+ * <span>Click me</span>
6078
+ * </bcm-tooltip>
6079
+ * <!-- Mouse following mode -->
6080
+ * <bcm-tooltip follow={true} message="I follow your cursor!">
6081
+ * <div>Move your mouse here</div>
6082
+ * </bcm-tooltip>
6083
+ * <!-- Programmatic control -->
6084
+ * <bcm-tooltip id="myTooltip" message="Programmatic tooltip">
6085
+ * <span>Trigger</span>
4437
6086
  * </bcm-tooltip>
4438
6087
  * <script>
4439
- * const tooltip = document.querySelector('#my-tooltip');
4440
- * tooltip.openTooltip(); // Opens the tooltip
4441
- * tooltip.closeTooltip(); // Closes the tooltip
6088
+ * const tooltip = document.getElementById('myTooltip');
6089
+ * tooltip.show();
6090
+ * setTimeout(() => tooltip.hide(), 2000);
4442
6091
  * </script>
4443
- * @csspart tooltip - The root tooltip container element, stylable for the entire tooltip
4444
- * @csspart arrow - The arrow element of the tooltip, stylable for the positioning arrow
6092
+ * <!-- Custom styling with CSS parts -->
6093
+ * <style>
6094
+ * bcm-tooltip::part(tooltip) {
6095
+ * background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
6096
+ * border-radius: 12px;
6097
+ * }
6098
+ * bcm-tooltip::part(arrow) {
6099
+ * background: #667eea;
6100
+ * }
6101
+ * </style>
6102
+ * ```
4445
6103
  */
4446
6104
  "bcm-tooltip": LocalJSX.BcmTooltip & JSXBase.HTMLAttributes<HTMLBcmTooltipElement>;
4447
6105
  }