bromcom-ui-next 0.1.30 → 0.1.31

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (546) hide show
  1. package/dist/bromcom-ui/bcm-accordion-group.entry.esm.js.map +1 -1
  2. package/dist/bromcom-ui/bcm-accordion.entry.esm.js.map +1 -1
  3. package/dist/bromcom-ui/bcm-alert.entry.esm.js.map +1 -1
  4. package/dist/bromcom-ui/bcm-avatar.entry.esm.js.map +1 -1
  5. package/dist/bromcom-ui/bcm-badge.entry.esm.js.map +1 -1
  6. package/dist/bromcom-ui/bcm-basic-badge.entry.esm.js.map +1 -1
  7. package/dist/bromcom-ui/bcm-button-group.entry.esm.js.map +1 -1
  8. package/dist/bromcom-ui/bcm-button.entry.esm.js.map +1 -0
  9. package/dist/bromcom-ui/bcm-checkbox.entry.esm.js.map +1 -1
  10. package/dist/bromcom-ui/bcm-chip.entry.esm.js.map +1 -1
  11. package/dist/bromcom-ui/bcm-divider.entry.esm.js.map +1 -1
  12. package/dist/bromcom-ui/bcm-drawer.entry.esm.js.map +1 -0
  13. package/dist/bromcom-ui/bcm-dropdown-item.entry.esm.js.map +1 -1
  14. package/dist/bromcom-ui/bcm-dropdown.entry.esm.js.map +1 -1
  15. package/dist/bromcom-ui/bcm-file-upload.entry.esm.js.map +1 -0
  16. package/dist/bromcom-ui/bcm-input.entry.esm.js.map +1 -1
  17. package/dist/bromcom-ui/bcm-linked.entry.esm.js.map +1 -0
  18. package/dist/bromcom-ui/bcm-modal.entry.esm.js.map +1 -0
  19. package/dist/bromcom-ui/bcm-pop-confirm.entry.esm.js.map +1 -0
  20. package/dist/bromcom-ui/bcm-popover.entry.esm.js.map +1 -0
  21. package/dist/bromcom-ui/bcm-radio-group.entry.esm.js.map +1 -1
  22. package/dist/bromcom-ui/bcm-radio.entry.esm.js.map +1 -1
  23. package/dist/bromcom-ui/bcm-segment.bcm-segmented-picker.entry.esm.js.map +1 -0
  24. package/dist/bromcom-ui/bcm-shortcut.entry.esm.js.map +1 -1
  25. package/dist/bromcom-ui/bcm-switch.entry.esm.js.map +1 -1
  26. package/dist/bromcom-ui/bcm-tab.entry.esm.js.map +1 -0
  27. package/dist/bromcom-ui/bcm-tabs.entry.esm.js.map +1 -1
  28. package/dist/bromcom-ui/bcm-text.entry.esm.js.map +1 -1
  29. package/dist/bromcom-ui/bcm-textarea.entry.esm.js.map +1 -1
  30. package/dist/bromcom-ui/bcm-tooltip.entry.esm.js.map +1 -0
  31. package/dist/bromcom-ui/bromcom-ui.esm.js +1 -1
  32. package/dist/bromcom-ui/global/global.js +33 -30
  33. package/dist/bromcom-ui/p-010219cf.entry.js +2 -0
  34. package/dist/bromcom-ui/p-010219cf.entry.js.map +1 -0
  35. package/dist/bromcom-ui/p-01a4e00b.entry.js +2 -0
  36. package/dist/bromcom-ui/p-01a4e00b.entry.js.map +1 -0
  37. package/dist/bromcom-ui/p-14c63d61.entry.js +2 -0
  38. package/dist/bromcom-ui/p-14c63d61.entry.js.map +1 -0
  39. package/dist/bromcom-ui/p-20a94dec.entry.js +2 -0
  40. package/dist/bromcom-ui/p-20a94dec.entry.js.map +1 -0
  41. package/dist/bromcom-ui/p-398620c2.entry.js +2 -0
  42. package/dist/bromcom-ui/p-398620c2.entry.js.map +1 -0
  43. package/dist/bromcom-ui/p-3b898f90.entry.js +2 -0
  44. package/dist/bromcom-ui/p-3b898f90.entry.js.map +1 -0
  45. package/dist/bromcom-ui/p-43c85c84.entry.js +2 -0
  46. package/dist/bromcom-ui/p-43c85c84.entry.js.map +1 -0
  47. package/dist/bromcom-ui/p-4e6661a5.entry.js +2 -0
  48. package/dist/bromcom-ui/p-4e6661a5.entry.js.map +1 -0
  49. package/dist/bromcom-ui/p-52bb0cdc.entry.js +2 -0
  50. package/dist/bromcom-ui/p-52bb0cdc.entry.js.map +1 -0
  51. package/dist/bromcom-ui/p-61c1c1c8.entry.js +2 -0
  52. package/dist/bromcom-ui/p-61c1c1c8.entry.js.map +1 -0
  53. package/dist/bromcom-ui/p-82e4c5f2.entry.js +2 -0
  54. package/dist/bromcom-ui/p-82e4c5f2.entry.js.map +1 -0
  55. package/dist/bromcom-ui/p-86f85963.entry.js +2 -0
  56. package/dist/bromcom-ui/p-86f85963.entry.js.map +1 -0
  57. package/dist/bromcom-ui/p-9249c1d1.entry.js +2 -0
  58. package/dist/bromcom-ui/p-9249c1d1.entry.js.map +1 -0
  59. package/dist/bromcom-ui/p-B6Ppbs5O.js +3 -0
  60. package/dist/bromcom-ui/p-B6Ppbs5O.js.map +1 -0
  61. package/dist/bromcom-ui/p-DBDSgIvP.js +2 -0
  62. package/dist/bromcom-ui/p-DBDSgIvP.js.map +1 -0
  63. package/dist/bromcom-ui/p-DaE0ZLar.js +2 -0
  64. package/dist/bromcom-ui/p-DaE0ZLar.js.map +1 -0
  65. package/dist/bromcom-ui/p-a25d1cef.entry.js +2 -0
  66. package/dist/bromcom-ui/p-a25d1cef.entry.js.map +1 -0
  67. package/dist/bromcom-ui/p-a4cb2e79.entry.js +2 -0
  68. package/dist/bromcom-ui/p-a4cb2e79.entry.js.map +1 -0
  69. package/dist/bromcom-ui/p-a68925b4.entry.js +2 -0
  70. package/dist/bromcom-ui/p-a68925b4.entry.js.map +1 -0
  71. package/dist/bromcom-ui/p-a750186c.entry.js +2 -0
  72. package/dist/bromcom-ui/p-a750186c.entry.js.map +1 -0
  73. package/dist/bromcom-ui/p-ac768b56.entry.js +2 -0
  74. package/dist/bromcom-ui/p-ac768b56.entry.js.map +1 -0
  75. package/dist/bromcom-ui/p-b0b193e6.entry.js +2 -0
  76. package/dist/bromcom-ui/p-b0b193e6.entry.js.map +1 -0
  77. package/dist/bromcom-ui/p-bf4409ca.entry.js +2 -0
  78. package/dist/bromcom-ui/p-bf4409ca.entry.js.map +1 -0
  79. package/dist/bromcom-ui/p-c57fb29b.entry.js +2 -0
  80. package/dist/bromcom-ui/p-c57fb29b.entry.js.map +1 -0
  81. package/dist/bromcom-ui/{p-1507908f.entry.js → p-ccc310aa.entry.js} +2 -2
  82. package/dist/bromcom-ui/p-ccc310aa.entry.js.map +1 -0
  83. package/dist/bromcom-ui/p-d4ee962d.entry.js +2 -0
  84. package/dist/bromcom-ui/p-d4ee962d.entry.js.map +1 -0
  85. package/dist/bromcom-ui/p-e25a2f7a.entry.js +2 -0
  86. package/dist/bromcom-ui/p-e25a2f7a.entry.js.map +1 -0
  87. package/dist/bromcom-ui/p-e5b0b2ad.entry.js +2 -0
  88. package/dist/bromcom-ui/p-e5b0b2ad.entry.js.map +1 -0
  89. package/dist/bromcom-ui/p-e70d784d.entry.js +2 -0
  90. package/dist/bromcom-ui/p-e70d784d.entry.js.map +1 -0
  91. package/dist/bromcom-ui/p-e9fa3a22.entry.js +2 -0
  92. package/dist/bromcom-ui/p-e9fa3a22.entry.js.map +1 -0
  93. package/dist/bromcom-ui/p-ef281184.entry.js +2 -0
  94. package/dist/bromcom-ui/p-ef281184.entry.js.map +1 -0
  95. package/dist/bromcom-ui/{p-496014ca.entry.js → p-fb6f616c.entry.js} +2 -2
  96. package/dist/bromcom-ui/p-fb6f616c.entry.js.map +1 -0
  97. package/dist/bromcom-ui/p-fd31c70c.entry.js +2 -0
  98. package/dist/bromcom-ui/p-fd31c70c.entry.js.map +1 -0
  99. package/dist/bromcom-ui/p-nf_HKsGq.js +2 -0
  100. package/dist/bromcom-ui/{p-CUvT12BL.js.map → p-nf_HKsGq.js.map} +1 -1
  101. package/dist/cjs/base-choice-control-EmA4JRjR.js +54 -0
  102. package/dist/cjs/base-choice-control-EmA4JRjR.js.map +1 -0
  103. package/dist/cjs/bcm-accordion-group.cjs.entry.js +20 -18
  104. package/dist/cjs/bcm-accordion-group.entry.cjs.js.map +1 -1
  105. package/dist/cjs/bcm-accordion.cjs.entry.js +73 -56
  106. package/dist/cjs/bcm-accordion.entry.cjs.js.map +1 -1
  107. package/dist/cjs/bcm-alert.cjs.entry.js +21 -21
  108. package/dist/cjs/bcm-alert.entry.cjs.js.map +1 -1
  109. package/dist/cjs/bcm-avatar.cjs.entry.js +22 -12
  110. package/dist/cjs/bcm-avatar.entry.cjs.js.map +1 -1
  111. package/dist/cjs/bcm-badge.cjs.entry.js +114 -82
  112. package/dist/cjs/bcm-badge.entry.cjs.js.map +1 -1
  113. package/dist/cjs/bcm-basic-badge.cjs.entry.js +73 -59
  114. package/dist/cjs/bcm-basic-badge.entry.cjs.js.map +1 -1
  115. package/dist/cjs/bcm-button-group.cjs.entry.js +36 -24
  116. package/dist/cjs/bcm-button-group.entry.cjs.js.map +1 -1
  117. package/dist/cjs/bcm-button.cjs.entry.js +338 -0
  118. package/dist/cjs/bcm-button.entry.cjs.js.map +1 -0
  119. package/dist/cjs/bcm-checkbox.cjs.entry.js +284 -174
  120. package/dist/cjs/bcm-checkbox.entry.cjs.js.map +1 -1
  121. package/dist/cjs/bcm-chip.cjs.entry.js +38 -35
  122. package/dist/cjs/bcm-chip.entry.cjs.js.map +1 -1
  123. package/dist/cjs/bcm-divider.cjs.entry.js +55 -55
  124. package/dist/cjs/bcm-divider.entry.cjs.js.map +1 -1
  125. package/dist/cjs/bcm-drawer.cjs.entry.js +332 -0
  126. package/dist/cjs/bcm-drawer.entry.cjs.js.map +1 -0
  127. package/dist/cjs/bcm-dropdown-item.cjs.entry.js +36 -33
  128. package/dist/cjs/bcm-dropdown-item.entry.cjs.js.map +1 -1
  129. package/dist/cjs/bcm-dropdown.cjs.entry.js +18 -17
  130. package/dist/cjs/bcm-dropdown.entry.cjs.js.map +1 -1
  131. package/dist/cjs/bcm-file-upload.cjs.entry.js +552 -0
  132. package/dist/cjs/bcm-file-upload.entry.cjs.js.map +1 -0
  133. package/dist/cjs/bcm-input.cjs.entry.js +250 -158
  134. package/dist/cjs/bcm-input.entry.cjs.js.map +1 -1
  135. package/dist/cjs/bcm-linked.cjs.entry.js +452 -0
  136. package/dist/cjs/bcm-linked.entry.cjs.js.map +1 -0
  137. package/dist/cjs/bcm-modal.cjs.entry.js +360 -0
  138. package/dist/cjs/bcm-modal.entry.cjs.js.map +1 -0
  139. package/dist/cjs/bcm-pop-confirm.cjs.entry.js +381 -0
  140. package/dist/cjs/bcm-pop-confirm.entry.cjs.js.map +1 -0
  141. package/dist/cjs/bcm-popover.cjs.entry.js +451 -0
  142. package/dist/cjs/bcm-popover.entry.cjs.js.map +1 -0
  143. package/dist/cjs/bcm-radio-group.cjs.entry.js +103 -80
  144. package/dist/cjs/bcm-radio-group.entry.cjs.js.map +1 -1
  145. package/dist/cjs/bcm-radio.cjs.entry.js +239 -106
  146. package/dist/cjs/bcm-radio.entry.cjs.js.map +1 -1
  147. package/dist/cjs/bcm-segment.bcm-segmented-picker.entry.cjs.js.map +1 -0
  148. package/dist/cjs/bcm-segment_2.cjs.entry.js +335 -0
  149. package/dist/cjs/bcm-shortcut.cjs.entry.js +5 -4
  150. package/dist/cjs/bcm-shortcut.entry.cjs.js.map +1 -1
  151. package/dist/cjs/bcm-switch.cjs.entry.js +281 -148
  152. package/dist/cjs/bcm-switch.entry.cjs.js.map +1 -1
  153. package/dist/cjs/bcm-tab.cjs.entry.js +44 -0
  154. package/dist/cjs/bcm-tab.entry.cjs.js.map +1 -0
  155. package/dist/cjs/bcm-tabs.cjs.entry.js +191 -237
  156. package/dist/cjs/bcm-tabs.entry.cjs.js.map +1 -1
  157. package/dist/cjs/bcm-text.cjs.entry.js +86 -85
  158. package/dist/cjs/bcm-text.entry.cjs.js.map +1 -1
  159. package/dist/cjs/bcm-textarea.cjs.entry.js +224 -154
  160. package/dist/cjs/bcm-textarea.entry.cjs.js.map +1 -1
  161. package/dist/cjs/bcm-tooltip.cjs.entry.js +414 -0
  162. package/dist/cjs/bcm-tooltip.entry.cjs.js.map +1 -0
  163. package/dist/cjs/bromcom-ui.cjs.js +2 -2
  164. package/dist/cjs/floating-ui.dom-S9nP6zZt.js +1622 -0
  165. package/dist/{bromcom-ui/floating-ui.dom-ltNPqX34.js.map → cjs/floating-ui.dom-S9nP6zZt.js.map} +1 -1
  166. package/dist/cjs/{index-CmYzUr-k.js → index-1Qal-onT.js} +111 -33
  167. package/dist/cjs/index-1Qal-onT.js.map +1 -0
  168. package/dist/cjs/loader.cjs.js +2 -2
  169. package/dist/cjs/{validation-messages-BjfpSEWk.js → validation-messages-DieKlSG4.js} +6 -7
  170. package/dist/{esm/validation-messages-CUvT12BL.js.map → cjs/validation-messages-DieKlSG4.js.map} +1 -1
  171. package/dist/collection/collection-manifest.json +4 -5
  172. package/dist/collection/components/_shared/form/base-choice-control.js +90 -0
  173. package/dist/collection/components/_shared/form/base-choice-control.js.map +1 -0
  174. package/dist/collection/components/_shared/form/base-form-control.js +115 -0
  175. package/dist/collection/components/_shared/form/base-form-control.js.map +1 -0
  176. package/dist/collection/components/accordion/accordion.component.js +72 -55
  177. package/dist/collection/components/accordion/accordion.component.js.map +1 -1
  178. package/dist/collection/components/accordion/accordion.css +1 -1
  179. package/dist/collection/components/accordion-group/accordion-group.component.js +20 -18
  180. package/dist/collection/components/accordion-group/accordion-group.component.js.map +1 -1
  181. package/dist/collection/components/alert/alert.component.js +19 -21
  182. package/dist/collection/components/alert/alert.component.js.map +1 -1
  183. package/dist/collection/components/alert/alert.css +1 -1
  184. package/dist/collection/components/avatar/avatar.component.js +20 -12
  185. package/dist/collection/components/avatar/avatar.component.js.map +1 -1
  186. package/dist/collection/components/avatar/avatar.css +1 -1
  187. package/dist/collection/components/badge/badge.component.js +111 -81
  188. package/dist/collection/components/badge/badge.component.js.map +1 -1
  189. package/dist/collection/components/badge/badge.css +1 -1
  190. package/dist/collection/components/basic-badge/basic-badge.component.js +70 -58
  191. package/dist/collection/components/basic-badge/basic-badge.component.js.map +1 -1
  192. package/dist/collection/components/basic-badge/basic-badge.css +1 -1
  193. package/dist/collection/components/button/button.component.js +105 -84
  194. package/dist/collection/components/button/button.component.js.map +1 -1
  195. package/dist/collection/components/button/button.css +1 -1
  196. package/dist/collection/components/button-group/button-group.component.js +34 -23
  197. package/dist/collection/components/button-group/button-group.component.js.map +1 -1
  198. package/dist/collection/components/button-group/button-group.css +1 -1
  199. package/dist/collection/components/checkbox/checkbox.component.js +355 -236
  200. package/dist/collection/components/checkbox/checkbox.component.js.map +1 -1
  201. package/dist/collection/components/checkbox/checkbox.css +1 -1
  202. package/dist/collection/components/chip/chip.component.js +35 -34
  203. package/dist/collection/components/chip/chip.component.js.map +1 -1
  204. package/dist/collection/components/chip/chip.css +1 -1
  205. package/dist/collection/components/divider/divider.component.js +53 -55
  206. package/dist/collection/components/divider/divider.component.js.map +1 -1
  207. package/dist/collection/components/drawer/drawer.component.js +168 -144
  208. package/dist/collection/components/drawer/drawer.component.js.map +1 -1
  209. package/dist/collection/components/dropdown/dropdown.component.js +16 -16
  210. package/dist/collection/components/dropdown/dropdown.component.js.map +1 -1
  211. package/dist/collection/components/dropdown/dropdown.css +1 -1
  212. package/dist/collection/components/dropdown-item/dropdown-item.component.js +34 -32
  213. package/dist/collection/components/dropdown-item/dropdown-item.component.js.map +1 -1
  214. package/dist/collection/components/dropdown-item/dropdown-item.css +1 -1
  215. package/dist/collection/components/input/input.component.js +241 -155
  216. package/dist/collection/components/input/input.component.js.map +1 -1
  217. package/dist/collection/components/linked/linked.component.js +160 -138
  218. package/dist/collection/components/linked/linked.component.js.map +1 -1
  219. package/dist/collection/components/linked/linked.css +1 -1
  220. package/dist/collection/components/modal/modal.component.js +180 -156
  221. package/dist/collection/components/modal/modal.component.js.map +1 -1
  222. package/dist/collection/components/pop-confirm/pop-confirm.component.js +190 -159
  223. package/dist/collection/components/pop-confirm/pop-confirm.component.js.map +1 -1
  224. package/dist/collection/components/pop-confirm/pop-confirm.css +1 -1
  225. package/dist/collection/components/popover/popover.component.js +240 -212
  226. package/dist/collection/components/popover/popover.component.js.map +1 -1
  227. package/dist/collection/components/popover/popover.css +1 -1
  228. package/dist/collection/components/radio/radio.component.js +282 -106
  229. package/dist/collection/components/radio/radio.component.js.map +1 -1
  230. package/dist/collection/components/radio-group/radio-group.component.js +102 -80
  231. package/dist/collection/components/radio-group/radio-group.component.js.map +1 -1
  232. package/dist/collection/components/segmented-picker/segment.component.js +228 -0
  233. package/dist/collection/components/segmented-picker/segment.component.js.map +1 -0
  234. package/dist/collection/components/segmented-picker/segment.css +1 -0
  235. package/dist/collection/components/segmented-picker/segmented-picker.component.js +354 -139
  236. package/dist/collection/components/segmented-picker/segmented-picker.component.js.map +1 -1
  237. package/dist/collection/components/segmented-picker/segmented-picker.css +1 -1
  238. package/dist/collection/components/shortcut/shortcut.js +4 -5
  239. package/dist/collection/components/shortcut/shortcut.js.map +1 -1
  240. package/dist/collection/components/switch/switch.component.js +350 -280
  241. package/dist/collection/components/switch/switch.component.js.map +1 -1
  242. package/dist/collection/components/switch/switch.css +1 -1
  243. package/dist/collection/components/tabs/bcm-tab.css +1 -0
  244. package/dist/collection/components/tabs/bcm-tabs.css +1 -1
  245. package/dist/collection/components/tabs/tab.component.js +169 -0
  246. package/dist/collection/components/tabs/tab.component.js.map +1 -0
  247. package/dist/collection/components/tabs/tabs.component.js +221 -352
  248. package/dist/collection/components/tabs/tabs.component.js.map +1 -1
  249. package/dist/collection/components/text/text.component.js +84 -85
  250. package/dist/collection/components/text/text.component.js.map +1 -1
  251. package/dist/collection/components/text/text.css +1 -1
  252. package/dist/collection/components/textarea/textarea.component.js +216 -153
  253. package/dist/collection/components/textarea/textarea.component.js.map +1 -1
  254. package/dist/collection/components/tooltip/tooltip.component.js +164 -154
  255. package/dist/collection/components/tooltip/tooltip.component.js.map +1 -1
  256. package/dist/collection/components/upload/file-upload.component.js +905 -0
  257. package/dist/collection/components/upload/file-upload.component.js.map +1 -0
  258. package/dist/collection/components/upload/file-upload.css +1 -0
  259. package/dist/collection/global/global.js +33 -30
  260. package/dist/collection/utils/i18n.js +3 -4
  261. package/dist/collection/utils/i18n.js.map +1 -1
  262. package/dist/collection/utils/slot/check-slot-content.js +1 -2
  263. package/dist/collection/utils/slot/check-slot-content.js.map +1 -1
  264. package/dist/collection/utils/validation-messages.js +1 -1
  265. package/dist/collection/utils/validation-messages.js.map +1 -1
  266. package/dist/components/bcm-accordion-group.js +19 -17
  267. package/dist/components/bcm-accordion-group.js.map +1 -1
  268. package/dist/components/bcm-accordion.js +72 -55
  269. package/dist/components/bcm-accordion.js.map +1 -1
  270. package/dist/components/bcm-alert.js +1 -114
  271. package/dist/components/bcm-alert.js.map +1 -1
  272. package/dist/components/bcm-avatar.js +22 -12
  273. package/dist/components/bcm-avatar.js.map +1 -1
  274. package/dist/components/bcm-badge.js +1 -1
  275. package/dist/components/bcm-basic-badge.js +72 -58
  276. package/dist/components/bcm-basic-badge.js.map +1 -1
  277. package/dist/components/bcm-button-group.js +35 -23
  278. package/dist/components/bcm-button-group.js.map +1 -1
  279. package/dist/components/bcm-button.js +1 -1
  280. package/dist/components/bcm-checkbox.js +296 -184
  281. package/dist/components/bcm-checkbox.js.map +1 -1
  282. package/dist/components/bcm-chip.js +37 -34
  283. package/dist/components/bcm-chip.js.map +1 -1
  284. package/dist/components/bcm-divider.js +54 -54
  285. package/dist/components/bcm-divider.js.map +1 -1
  286. package/dist/components/bcm-drawer.js +169 -144
  287. package/dist/components/bcm-drawer.js.map +1 -1
  288. package/dist/components/bcm-dropdown-item.js +35 -32
  289. package/dist/components/bcm-dropdown-item.js.map +1 -1
  290. package/dist/components/bcm-dropdown.js +19 -18
  291. package/dist/components/bcm-dropdown.js.map +1 -1
  292. package/dist/components/{bcm-tabs-content.d.ts → bcm-file-upload.d.ts} +4 -4
  293. package/dist/components/bcm-file-upload.js +593 -0
  294. package/dist/components/bcm-file-upload.js.map +1 -0
  295. package/dist/components/bcm-input.js +244 -158
  296. package/dist/components/bcm-input.js.map +1 -1
  297. package/dist/components/bcm-linked.js +1 -1
  298. package/dist/components/bcm-modal.js +181 -156
  299. package/dist/components/bcm-modal.js.map +1 -1
  300. package/dist/components/bcm-pop-confirm.js +192 -160
  301. package/dist/components/bcm-pop-confirm.js.map +1 -1
  302. package/dist/components/bcm-popover.js +242 -213
  303. package/dist/components/bcm-popover.js.map +1 -1
  304. package/dist/components/bcm-radio-group.js +102 -79
  305. package/dist/components/bcm-radio-group.js.map +1 -1
  306. package/dist/components/bcm-radio.js +241 -108
  307. package/dist/components/bcm-radio.js.map +1 -1
  308. package/dist/components/{bcm-tabs-list.d.ts → bcm-segment.d.ts} +4 -4
  309. package/dist/components/bcm-segment.js +110 -0
  310. package/dist/components/bcm-segment.js.map +1 -0
  311. package/dist/components/bcm-segmented-picker.js +234 -115
  312. package/dist/components/bcm-segmented-picker.js.map +1 -1
  313. package/dist/components/bcm-shortcut.js +4 -3
  314. package/dist/components/bcm-shortcut.js.map +1 -1
  315. package/dist/components/bcm-switch.js +292 -156
  316. package/dist/components/bcm-switch.js.map +1 -1
  317. package/dist/components/{bcm-tabs-trigger.d.ts → bcm-tab.d.ts} +4 -4
  318. package/dist/components/bcm-tab.js +71 -0
  319. package/dist/components/bcm-tab.js.map +1 -0
  320. package/dist/components/bcm-tabs.js +196 -247
  321. package/dist/components/bcm-tabs.js.map +1 -1
  322. package/dist/components/bcm-text.js +85 -84
  323. package/dist/components/bcm-text.js.map +1 -1
  324. package/dist/components/bcm-textarea.js +218 -154
  325. package/dist/components/bcm-textarea.js.map +1 -1
  326. package/dist/components/bcm-tooltip.js +164 -153
  327. package/dist/components/bcm-tooltip.js.map +1 -1
  328. package/dist/components/index.js +105 -32
  329. package/dist/components/index.js.map +1 -1
  330. package/dist/components/p-5_TgtzQU.js +119 -0
  331. package/dist/components/p-5_TgtzQU.js.map +1 -0
  332. package/dist/components/p-RlBWOSgL.js +179 -0
  333. package/dist/components/p-RlBWOSgL.js.map +1 -0
  334. package/dist/components/p-SERXqWcS.js +51 -0
  335. package/dist/components/p-SERXqWcS.js.map +1 -0
  336. package/dist/components/{p-CUvT12BL.js → p-nf_HKsGq.js} +6 -7
  337. package/dist/components/p-nf_HKsGq.js.map +1 -0
  338. package/dist/components/{p-CsIBm0J5.js → p-xQIzBLsS.js} +108 -85
  339. package/dist/components/p-xQIzBLsS.js.map +1 -0
  340. package/dist/components/{p-6VLsKZvR.js → p-z9ESseGb.js} +163 -140
  341. package/dist/components/p-z9ESseGb.js.map +1 -0
  342. package/dist/esm/base-choice-control-CKR8UdZ6.js +52 -0
  343. package/dist/esm/base-choice-control-CKR8UdZ6.js.map +1 -0
  344. package/dist/esm/bcm-accordion-group.entry.js +20 -18
  345. package/dist/esm/bcm-accordion-group.entry.js.map +1 -1
  346. package/dist/esm/bcm-accordion.entry.js +73 -56
  347. package/dist/esm/bcm-accordion.entry.js.map +1 -1
  348. package/dist/esm/bcm-alert.entry.js +21 -21
  349. package/dist/esm/bcm-alert.entry.js.map +1 -1
  350. package/dist/esm/bcm-avatar.entry.js +22 -12
  351. package/dist/esm/bcm-avatar.entry.js.map +1 -1
  352. package/dist/esm/bcm-badge.entry.js +114 -82
  353. package/dist/esm/bcm-badge.entry.js.map +1 -1
  354. package/dist/esm/bcm-basic-badge.entry.js +73 -59
  355. package/dist/esm/bcm-basic-badge.entry.js.map +1 -1
  356. package/dist/esm/bcm-button-group.entry.js +36 -24
  357. package/dist/esm/bcm-button-group.entry.js.map +1 -1
  358. package/dist/esm/bcm-button.entry.js +336 -0
  359. package/dist/esm/bcm-button.entry.js.map +1 -0
  360. package/dist/esm/bcm-checkbox.entry.js +284 -174
  361. package/dist/esm/bcm-checkbox.entry.js.map +1 -1
  362. package/dist/esm/bcm-chip.entry.js +38 -35
  363. package/dist/esm/bcm-chip.entry.js.map +1 -1
  364. package/dist/esm/bcm-divider.entry.js +55 -55
  365. package/dist/esm/bcm-divider.entry.js.map +1 -1
  366. package/dist/esm/bcm-drawer.entry.js +330 -0
  367. package/dist/esm/bcm-drawer.entry.js.map +1 -0
  368. package/dist/esm/bcm-dropdown-item.entry.js +36 -33
  369. package/dist/esm/bcm-dropdown-item.entry.js.map +1 -1
  370. package/dist/esm/bcm-dropdown.entry.js +18 -17
  371. package/dist/esm/bcm-dropdown.entry.js.map +1 -1
  372. package/dist/esm/bcm-file-upload.entry.js +550 -0
  373. package/dist/esm/bcm-file-upload.entry.js.map +1 -0
  374. package/dist/esm/bcm-input.entry.js +250 -158
  375. package/dist/esm/bcm-input.entry.js.map +1 -1
  376. package/dist/esm/bcm-linked.entry.js +450 -0
  377. package/dist/esm/bcm-linked.entry.js.map +1 -0
  378. package/dist/esm/bcm-modal.entry.js +358 -0
  379. package/dist/esm/bcm-modal.entry.js.map +1 -0
  380. package/dist/esm/bcm-pop-confirm.entry.js +379 -0
  381. package/dist/esm/bcm-pop-confirm.entry.js.map +1 -0
  382. package/dist/esm/bcm-popover.entry.js +449 -0
  383. package/dist/esm/bcm-popover.entry.js.map +1 -0
  384. package/dist/esm/bcm-radio-group.entry.js +103 -80
  385. package/dist/esm/bcm-radio-group.entry.js.map +1 -1
  386. package/dist/esm/bcm-radio.entry.js +239 -106
  387. package/dist/esm/bcm-radio.entry.js.map +1 -1
  388. package/dist/esm/bcm-segment.bcm-segmented-picker.entry.js.map +1 -0
  389. package/dist/esm/bcm-segment_2.entry.js +332 -0
  390. package/dist/esm/bcm-shortcut.entry.js +5 -4
  391. package/dist/esm/bcm-shortcut.entry.js.map +1 -1
  392. package/dist/esm/bcm-switch.entry.js +281 -148
  393. package/dist/esm/bcm-switch.entry.js.map +1 -1
  394. package/dist/esm/bcm-tab.entry.js +42 -0
  395. package/dist/esm/bcm-tab.entry.js.map +1 -0
  396. package/dist/esm/bcm-tabs.entry.js +191 -237
  397. package/dist/esm/bcm-tabs.entry.js.map +1 -1
  398. package/dist/esm/bcm-text.entry.js +86 -85
  399. package/dist/esm/bcm-text.entry.js.map +1 -1
  400. package/dist/esm/bcm-textarea.entry.js +224 -154
  401. package/dist/esm/bcm-textarea.entry.js.map +1 -1
  402. package/dist/esm/bcm-tooltip.entry.js +412 -0
  403. package/dist/esm/bcm-tooltip.entry.js.map +1 -0
  404. package/dist/esm/bromcom-ui.js +3 -3
  405. package/dist/esm/floating-ui.dom-DBDSgIvP.js +1615 -0
  406. package/dist/esm/floating-ui.dom-DBDSgIvP.js.map +1 -0
  407. package/dist/esm/{index-CRwAh9Np.js → index-B6Ppbs5O.js} +111 -34
  408. package/dist/esm/index-B6Ppbs5O.js.map +1 -0
  409. package/dist/esm/loader.js +3 -3
  410. package/dist/esm/{validation-messages-CUvT12BL.js → validation-messages-nf_HKsGq.js} +6 -7
  411. package/dist/{cjs/validation-messages-BjfpSEWk.js.map → esm/validation-messages-nf_HKsGq.js.map} +1 -1
  412. package/dist/types/components/_shared/form/base-choice-control.d.ts +15 -0
  413. package/dist/types/components/_shared/form/base-form-control.d.ts +11 -0
  414. package/dist/types/components/checkbox/checkbox.component.d.ts +89 -71
  415. package/dist/types/components/input/input.component.d.ts +5 -0
  416. package/dist/types/components/radio/radio.component.d.ts +21 -0
  417. package/dist/types/components/segmented-picker/segment.component.d.ts +42 -0
  418. package/dist/types/components/segmented-picker/segmented-picker.component.d.ts +91 -24
  419. package/dist/types/components/switch/switch.component.d.ts +83 -43
  420. package/dist/types/components/tabs/tab.component.d.ts +33 -0
  421. package/dist/types/components/tabs/tabs.component.d.ts +51 -64
  422. package/dist/types/components/textarea/textarea.component.d.ts +5 -0
  423. package/dist/types/components/upload/file-upload.component.d.ts +107 -0
  424. package/dist/types/components.d.ts +830 -382
  425. package/package.json +2 -2
  426. package/dist/bromcom-ui/_commonjsHelpers-CvGrISen.js.map +0 -1
  427. package/dist/bromcom-ui/bcm-button.bcm-drawer.bcm-linked.bcm-modal.bcm-pop-confirm.bcm-popover.bcm-tooltip.entry.esm.js.map +0 -1
  428. package/dist/bromcom-ui/bcm-segmented-picker-option.entry.esm.js.map +0 -1
  429. package/dist/bromcom-ui/bcm-segmented-picker.entry.esm.js.map +0 -1
  430. package/dist/bromcom-ui/bcm-tabs-content.entry.esm.js.map +0 -1
  431. package/dist/bromcom-ui/bcm-tabs-list.entry.esm.js.map +0 -1
  432. package/dist/bromcom-ui/bcm-tabs-trigger.entry.esm.js.map +0 -1
  433. package/dist/bromcom-ui/generate-id-Crb5QsB-.js.map +0 -1
  434. package/dist/bromcom-ui/index-40rmUZjU.js.map +0 -1
  435. package/dist/bromcom-ui/index-BCaJmHBB.js.map +0 -1
  436. package/dist/bromcom-ui/p-0c7c6896.entry.js +0 -2
  437. package/dist/bromcom-ui/p-0c7c6896.entry.js.map +0 -1
  438. package/dist/bromcom-ui/p-11d0e649.entry.js +0 -2
  439. package/dist/bromcom-ui/p-11d0e649.entry.js.map +0 -1
  440. package/dist/bromcom-ui/p-12f38632.entry.js +0 -2
  441. package/dist/bromcom-ui/p-12f38632.entry.js.map +0 -1
  442. package/dist/bromcom-ui/p-13cbd1f5.entry.js +0 -2
  443. package/dist/bromcom-ui/p-13cbd1f5.entry.js.map +0 -1
  444. package/dist/bromcom-ui/p-1507908f.entry.js.map +0 -1
  445. package/dist/bromcom-ui/p-1ce9913f.entry.js +0 -2
  446. package/dist/bromcom-ui/p-1ce9913f.entry.js.map +0 -1
  447. package/dist/bromcom-ui/p-206d767e.entry.js +0 -2
  448. package/dist/bromcom-ui/p-206d767e.entry.js.map +0 -1
  449. package/dist/bromcom-ui/p-3cf7a7f4.entry.js +0 -2
  450. package/dist/bromcom-ui/p-3cf7a7f4.entry.js.map +0 -1
  451. package/dist/bromcom-ui/p-4505feba.entry.js +0 -2
  452. package/dist/bromcom-ui/p-4505feba.entry.js.map +0 -1
  453. package/dist/bromcom-ui/p-496014ca.entry.js.map +0 -1
  454. package/dist/bromcom-ui/p-4a932cd3.entry.js +0 -2
  455. package/dist/bromcom-ui/p-4a932cd3.entry.js.map +0 -1
  456. package/dist/bromcom-ui/p-4e554b8d.entry.js +0 -2
  457. package/dist/bromcom-ui/p-4e554b8d.entry.js.map +0 -1
  458. package/dist/bromcom-ui/p-57c4c4c4.entry.js +0 -2
  459. package/dist/bromcom-ui/p-57c4c4c4.entry.js.map +0 -1
  460. package/dist/bromcom-ui/p-61293ab2.entry.js +0 -2
  461. package/dist/bromcom-ui/p-61293ab2.entry.js.map +0 -1
  462. package/dist/bromcom-ui/p-61789456.entry.js +0 -2
  463. package/dist/bromcom-ui/p-61789456.entry.js.map +0 -1
  464. package/dist/bromcom-ui/p-65d0f188.entry.js +0 -2
  465. package/dist/bromcom-ui/p-65d0f188.entry.js.map +0 -1
  466. package/dist/bromcom-ui/p-83f707dc.entry.js +0 -2
  467. package/dist/bromcom-ui/p-83f707dc.entry.js.map +0 -1
  468. package/dist/bromcom-ui/p-8ba02e7e.entry.js +0 -2
  469. package/dist/bromcom-ui/p-8ba02e7e.entry.js.map +0 -1
  470. package/dist/bromcom-ui/p-9e9bf32e.entry.js +0 -2
  471. package/dist/bromcom-ui/p-9e9bf32e.entry.js.map +0 -1
  472. package/dist/bromcom-ui/p-CRwAh9Np.js +0 -3
  473. package/dist/bromcom-ui/p-CRwAh9Np.js.map +0 -1
  474. package/dist/bromcom-ui/p-CUvT12BL.js +0 -2
  475. package/dist/bromcom-ui/p-c87a6acf.entry.js +0 -2
  476. package/dist/bromcom-ui/p-c87a6acf.entry.js.map +0 -1
  477. package/dist/bromcom-ui/p-e0e235a8.entry.js +0 -2
  478. package/dist/bromcom-ui/p-e0e235a8.entry.js.map +0 -1
  479. package/dist/bromcom-ui/p-e1ce8b55.entry.js +0 -2
  480. package/dist/bromcom-ui/p-e1ce8b55.entry.js.map +0 -1
  481. package/dist/bromcom-ui/p-e4dddb0b.entry.js +0 -2
  482. package/dist/bromcom-ui/p-e4dddb0b.entry.js.map +0 -1
  483. package/dist/bromcom-ui/p-f9426924.entry.js +0 -2
  484. package/dist/bromcom-ui/p-f9426924.entry.js.map +0 -1
  485. package/dist/bromcom-ui/p-faa0e62c.entry.js +0 -2
  486. package/dist/bromcom-ui/p-faa0e62c.entry.js.map +0 -1
  487. package/dist/bromcom-ui/p-fcb4399f.entry.js +0 -2
  488. package/dist/bromcom-ui/p-fcb4399f.entry.js.map +0 -1
  489. package/dist/bromcom-ui/tv-SlGJ5EfR.js.map +0 -1
  490. package/dist/bromcom-ui/validation-messages-CUvT12BL.js.map +0 -1
  491. package/dist/cjs/bcm-button.bcm-drawer.bcm-linked.bcm-modal.bcm-pop-confirm.bcm-popover.bcm-tooltip.entry.cjs.js.map +0 -1
  492. package/dist/cjs/bcm-button_7.cjs.entry.js +0 -4131
  493. package/dist/cjs/bcm-segmented-picker-option.cjs.entry.js +0 -105
  494. package/dist/cjs/bcm-segmented-picker-option.entry.cjs.js.map +0 -1
  495. package/dist/cjs/bcm-segmented-picker.cjs.entry.js +0 -142
  496. package/dist/cjs/bcm-segmented-picker.entry.cjs.js.map +0 -1
  497. package/dist/cjs/bcm-tabs-content.cjs.entry.js +0 -18
  498. package/dist/cjs/bcm-tabs-content.entry.cjs.js.map +0 -1
  499. package/dist/cjs/bcm-tabs-list.cjs.entry.js +0 -82
  500. package/dist/cjs/bcm-tabs-list.entry.cjs.js.map +0 -1
  501. package/dist/cjs/bcm-tabs-trigger.cjs.entry.js +0 -120
  502. package/dist/cjs/bcm-tabs-trigger.entry.cjs.js.map +0 -1
  503. package/dist/cjs/index-CmYzUr-k.js.map +0 -1
  504. package/dist/collection/components/segmented-picker/segmented-picker-option.component.js +0 -253
  505. package/dist/collection/components/segmented-picker/segmented-picker-option.component.js.map +0 -1
  506. package/dist/collection/components/segmented-picker/segmented-picker-option.css +0 -1
  507. package/dist/collection/components/tabs/tabs-content.component.js +0 -46
  508. package/dist/collection/components/tabs/tabs-content.component.js.map +0 -1
  509. package/dist/collection/components/tabs/tabs-content.css +0 -1
  510. package/dist/collection/components/tabs/tabs-list.component.js +0 -133
  511. package/dist/collection/components/tabs/tabs-list.component.js.map +0 -1
  512. package/dist/collection/components/tabs/tabs-list.css +0 -1
  513. package/dist/collection/components/tabs/tabs-trigger.component.js +0 -267
  514. package/dist/collection/components/tabs/tabs-trigger.component.js.map +0 -1
  515. package/dist/collection/components/tabs/tabs-trigger.css +0 -1
  516. package/dist/components/bcm-segmented-picker-option.d.ts +0 -11
  517. package/dist/components/bcm-segmented-picker-option.js +0 -133
  518. package/dist/components/bcm-segmented-picker-option.js.map +0 -1
  519. package/dist/components/bcm-tabs-content.js +0 -41
  520. package/dist/components/bcm-tabs-content.js.map +0 -1
  521. package/dist/components/bcm-tabs-list.js +0 -106
  522. package/dist/components/bcm-tabs-list.js.map +0 -1
  523. package/dist/components/bcm-tabs-trigger.js +0 -148
  524. package/dist/components/bcm-tabs-trigger.js.map +0 -1
  525. package/dist/components/p-6VLsKZvR.js.map +0 -1
  526. package/dist/components/p-CUvT12BL.js.map +0 -1
  527. package/dist/components/p-CaemikSK.js +0 -147
  528. package/dist/components/p-CaemikSK.js.map +0 -1
  529. package/dist/components/p-CsIBm0J5.js.map +0 -1
  530. package/dist/esm/bcm-button.bcm-drawer.bcm-linked.bcm-modal.bcm-pop-confirm.bcm-popover.bcm-tooltip.entry.js.map +0 -1
  531. package/dist/esm/bcm-button_7.entry.js +0 -4123
  532. package/dist/esm/bcm-segmented-picker-option.entry.js +0 -103
  533. package/dist/esm/bcm-segmented-picker-option.entry.js.map +0 -1
  534. package/dist/esm/bcm-segmented-picker.entry.js +0 -140
  535. package/dist/esm/bcm-segmented-picker.entry.js.map +0 -1
  536. package/dist/esm/bcm-tabs-content.entry.js +0 -16
  537. package/dist/esm/bcm-tabs-content.entry.js.map +0 -1
  538. package/dist/esm/bcm-tabs-list.entry.js +0 -80
  539. package/dist/esm/bcm-tabs-list.entry.js.map +0 -1
  540. package/dist/esm/bcm-tabs-trigger.entry.js +0 -118
  541. package/dist/esm/bcm-tabs-trigger.entry.js.map +0 -1
  542. package/dist/esm/index-CRwAh9Np.js.map +0 -1
  543. package/dist/types/components/segmented-picker/segmented-picker-option.component.d.ts +0 -30
  544. package/dist/types/components/tabs/tabs-content.component.d.ts +0 -13
  545. package/dist/types/components/tabs/tabs-list.component.d.ts +0 -20
  546. package/dist/types/components/tabs/tabs-trigger.component.d.ts +0 -49
@@ -1,5 +1,7 @@
1
1
  import { p as proxyCustomElement, H, c as createEvent, h } from './index.js';
2
2
  import { t as tv } from './p-CEcVC0yX.js';
3
+ import { g as getValidationMessage } from './p-nf_HKsGq.js';
4
+ import { g as generateId } from './p-IBjzkjef.js';
3
5
 
4
6
  const radioCss = ".block{display:block}:host{display:block}.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.bcm-ui-element{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:Inter,sans-serif}.sr-only{clip:rect(0,0,0,0);border-width:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.pointer-events-none{pointer-events:none}.static{position:static}.absolute{position:absolute}.relative{position:relative}.flex{display:flex}.inline-flex{display:inline-flex}.size-2{height:.5rem;width:.5rem}.size-2\\.5{height:.625rem;width:.625rem}.size-3{height:.75rem;width:.75rem}.size-3\\.5{height:.875rem;width:.875rem}.size-4{height:1rem;width:1rem}.size-\\[18px\\]{height:18px;width:18px}.cursor-default{cursor:default}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.appearance-none{appearance:none}.flex-row{flex-direction:row}.flex-row-reverse{flex-direction:row-reverse}.items-center{align-items:center}.justify-center{justify-content:center}.gap-2{gap:.5rem}.gap-2\\.5{gap:.625rem}.gap-3{gap:.75rem}.rounded-full{border-radius:var(--bcm-ui-border-radius-full,9999px)}.bg-\\[--bcm-radio-bg\\]{background-color:var(--bcm-radio-bg)}.bg-\\[--bcm-radio-checked\\]{background-color:var(--bcm-radio-checked)}.text-size-4{font-size:var(--bcm-ui-font-size-4,14px);line-height:var(--bcm-ui-line-height-4,20px)}.text-size-5{font-size:var(--bcm-ui-font-size-5,16px);line-height:var(--bcm-ui-line-height-5,24px)}.text-size-6{font-size:var(--bcm-ui-font-size-6,18px);line-height:var(--bcm-ui-line-height-6,24px)}.font-medium{font-weight:500}.text-\\[--bcm-radio-text-color\\]{color:var(--bcm-radio-text-color)}.opacity-0{opacity:0}.opacity-100{opacity:1}.shadow{--tw-shadow:var(--bcm-ui-box-shadow-default);--tw-shadow-colored:var(--bcm-ui-box-shadow-default)}.shadow,.shadow-\\[inset_0_0_0_1px_var\\(--bcm-radio-border\\)\\]{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\\[inset_0_0_0_1px_var\\(--bcm-radio-border\\)\\]{--tw-shadow:inset 0 0 0 1px var(--bcm-radio-border);--tw-shadow-colored:inset 0 0 0 1px var(--tw-shadow-color)}.shadow-\\[inset_0_0_0_3px_var\\(--bcm-radio-border\\)\\]{--tw-shadow:inset 0 0 0 3px var(--bcm-radio-border);--tw-shadow-colored:inset 0 0 0 3px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.focus-visible\\:ring:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.group:hover .group-hover\\:shadow-\\[inset_0_0_0_1px_var\\(--bcm-radio-border-hover\\)\\]{--tw-shadow:inset 0 0 0 1px var(--bcm-radio-border-hover);--tw-shadow-colored:inset 0 0 0 1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}";
5
7
 
@@ -13,115 +15,166 @@ const BcmRadio$1 = /*@__PURE__*/ proxyCustomElement(class BcmRadio extends H {
13
15
  this.bcmRadioChange = createEvent(this, "bcmRadioChange", 1);
14
16
  this.bcmBlur = createEvent(this, "bcmBlur", 1);
15
17
  this.bcmFocus = createEvent(this, "bcmFocus", 1);
16
- /**
17
- * Whether the radio button is selected.
18
- * @prop
19
- * @defaultValue false
20
- */
21
- this.checked = false;
22
- /**
23
- * Defines the size of the radio button: 'small' | 'medium' | 'large'.
24
- * @prop
25
- * @defaultValue 'medium'
26
- */
27
- this.size = 'medium';
28
- /**
29
- * Whether the radio button is disabled.
30
- * @prop
31
- * @defaultValue false
32
- */
33
- this.disabled = false;
34
- /**
35
- * Whether the radio button is readonly.
36
- * @prop
37
- * @defaultValue false
38
- */
39
- this.readonly = false;
40
- /**
41
- * Position of the label relative to the radio button: 'right' | 'left'.
42
- * @prop
43
- * @defaultValue 'right'
44
- */
45
- this.labelPosition = 'right';
46
- /**
47
- * Whether the radio button is in an error state.
48
- * @prop
49
- * @defaultValue false
50
- */
51
- this.error = false;
52
- this.getRadioClass = tv({
53
- slots: {
54
- container: 'bcm-ui-element bcm-radio group',
55
- dot: 'absolute rounded-full transition bg-[--bcm-radio-checked]',
56
- dotContainer: 'relative rounded-full flex items-center justify-center shadow-[inset_0_0_0_1px_var(--bcm-radio-border)] bg-[--bcm-radio-bg] transition group-hover:shadow-[inset_0_0_0_1px_var(--bcm-radio-border-hover)]',
57
- labelClass: 'font-medium text-[--bcm-radio-text-color]',
58
- },
59
- variants: {
60
- size: {
61
- small: {
62
- container: 'gap-2',
63
- dotContainer: 'size-3.5',
64
- dot: 'size-2',
65
- labelClass: 'text-size-4',
66
- },
67
- medium: {
68
- container: 'gap-2.5',
69
- dotContainer: 'size-4',
70
- dot: 'size-2.5',
71
- labelClass: 'text-size-5',
72
- },
73
- large: {
74
- container: 'gap-3',
75
- dotContainer: 'size-[18px]',
76
- dot: 'size-3',
77
- labelClass: 'text-size-6',
78
- },
79
- },
80
- checked: {
81
- true: {
82
- dot: 'opacity-100',
83
- },
84
- false: {
85
- dot: 'opacity-0',
86
- },
87
- },
88
- disabled: {
89
- true: {
90
- container: 'cursor-not-allowed',
91
- },
92
- false: {
93
- container: 'cursor-pointer focus-visible:ring',
94
- },
95
- },
96
- readonly: {
97
- true: {
98
- container: 'cursor-default pointer-events-none',
99
- dot: 'opacity-100',
100
- dotContainer: 'shadow-[inset_0_0_0_3px_var(--bcm-radio-border)]',
101
- },
102
- false: '',
103
- },
104
- labelPosition: {
105
- left: {
106
- container: 'inline-flex flex-row-reverse items-center',
107
- },
108
- right: {
109
- container: 'inline-flex flex-row items-center',
110
- },
111
- },
112
- },
113
- }, {
114
- twMerge: false,
115
- });
18
+ this.internals = this.attachInternals();
19
+ }
20
+ get host() { return this; }
21
+ internals;
22
+ _id = generateId('bcm-radio');
23
+ /**
24
+ * The text label to display next to the radio button.
25
+ * @prop
26
+ * @defaultValue undefined
27
+ */
28
+ label;
29
+ /**
30
+ * The name attribute for the radio input, used to group radio buttons.
31
+ * @prop
32
+ * @defaultValue undefined
33
+ */
34
+ name;
35
+ /**
36
+ * The value of the radio button, submitted with the form.
37
+ * @prop
38
+ * @defaultValue undefined
39
+ */
40
+ value;
41
+ /**
42
+ * Whether the radio button is selected.
43
+ * @prop
44
+ * @defaultValue false
45
+ */
46
+ checked = false;
47
+ /**
48
+ * Defines the size of the radio button: 'small' | 'medium' | 'large'.
49
+ * @prop
50
+ * @defaultValue 'medium'
51
+ */
52
+ size = 'medium';
53
+ /**
54
+ * Whether the radio button is disabled.
55
+ * @prop
56
+ * @defaultValue false
57
+ */
58
+ disabled = false;
59
+ /**
60
+ * Whether the radio button is readonly.
61
+ * @prop
62
+ * @defaultValue false
63
+ */
64
+ readonly = false;
65
+ /**
66
+ * Position of the label relative to the radio button: 'right' | 'left'.
67
+ * @prop
68
+ * @defaultValue 'right'
69
+ */
70
+ labelPosition = 'right';
71
+ /**
72
+ * Whether the radio button is in an error state.
73
+ * @prop
74
+ * @defaultValue false
75
+ */
76
+ error = false;
77
+ /**
78
+ * Whether at least one radio in this group is required.
79
+ * (HTML)
80
+ */
81
+ required = false;
82
+ /** Internal checked state to control visuals + form internals */
83
+ internalChecked = false;
84
+ bcmRadioChange;
85
+ bcmBlur;
86
+ bcmFocus;
87
+ inputEl;
88
+ // ---- LIFECYCLE ----
89
+ componentWillLoad() {
90
+ this.host.setAttribute('tabindex', '-1');
91
+ this.internalChecked = !!this.checked;
92
+ this.updateFormValueAndValidity();
93
+ }
94
+ componentDidLoad() {
95
+ this.syncNativeChecked();
116
96
  }
117
97
  handleClick() {
118
98
  if (this.readonly || this.disabled)
119
99
  return;
120
- if (!this.checked) {
100
+ if (!this.internalChecked) {
101
+ this.internalChecked = true;
121
102
  this.checked = true;
103
+ this.uncheckSiblings();
104
+ this.updateFormValueAndValidity();
122
105
  this.bcmRadioChange.emit();
123
106
  }
124
107
  }
108
+ updateFormValueAndValidity() {
109
+ if (!this.internals)
110
+ return;
111
+ const formValue = this.internalChecked ? this.value ?? 'on' : null;
112
+ this.internals.setFormValue(formValue);
113
+ const groupRequired = this.isGroupRequired();
114
+ if (!groupRequired || this.disabled) {
115
+ this.internals.setValidity({});
116
+ return;
117
+ }
118
+ if (!this.isGroupLeader()) {
119
+ this.internals.setValidity({});
120
+ return;
121
+ }
122
+ const groupChecked = this.isGroupChecked();
123
+ if (!groupChecked) {
124
+ this.internals.setValidity({ valueMissing: true }, getValidationMessage ? getValidationMessage('required') : 'This field is required.');
125
+ }
126
+ else {
127
+ this.internals.setValidity({});
128
+ }
129
+ }
130
+ isGroupRequired() {
131
+ const root = this.host.getRootNode() || document;
132
+ const radios = Array.from(root.querySelectorAll(`bcm-radio[name="${this.name}"]`));
133
+ return radios.some(r => r.required);
134
+ }
135
+ isGroupChecked() {
136
+ const root = this.host.getRootNode() || document;
137
+ const radios = root.querySelectorAll(`bcm-radio[name="${this.name}"]`);
138
+ return Array.from(radios).some((el) => el.checked);
139
+ }
140
+ isGroupLeader() {
141
+ const root = this.host.getRootNode() || document;
142
+ const radios = Array.from(root.querySelectorAll(`bcm-radio[name="${this.name}"]`));
143
+ return radios[0] === this.host;
144
+ }
145
+ formResetCallback() {
146
+ this.checked = false;
147
+ this.internalChecked = false;
148
+ this.syncNativeChecked();
149
+ this.updateFormValueAndValidity();
150
+ }
151
+ // ---- WATCHERS ----
152
+ onCheckedChange(newVal) {
153
+ this.internalChecked = !!newVal;
154
+ this.syncNativeChecked();
155
+ this.updateFormValueAndValidity();
156
+ }
157
+ onInternalCheckedChange() {
158
+ this.syncNativeChecked();
159
+ this.updateFormValueAndValidity();
160
+ }
161
+ // ---- INTERNAL HELPERS ----
162
+ syncNativeChecked() {
163
+ if (this.inputEl) {
164
+ this.inputEl.checked = this.internalChecked;
165
+ }
166
+ }
167
+ uncheckSiblings() {
168
+ if (!this.name)
169
+ return;
170
+ const root = this.host.getRootNode() || document;
171
+ const others = root.querySelectorAll ? root.querySelectorAll(`bcm-radio[name="${this.name}"]`) : [];
172
+ others.forEach((el) => {
173
+ if (el === this.host)
174
+ return;
175
+ el.checked = false;
176
+ });
177
+ }
125
178
  getRadioStyle() {
126
179
  const defaultStyle = {
127
180
  '--bcm-radio-bg': 'var(--bcm-ui-color-background-default-default)',
@@ -151,30 +204,110 @@ const BcmRadio$1 = /*@__PURE__*/ proxyCustomElement(class BcmRadio extends H {
151
204
  '--bcm-radio-border-hover': 'var(--bcm-ui-color-border-disabled)',
152
205
  '--bcm-radio-text-color': 'var(--bcm-ui-color-text-default)',
153
206
  };
154
- return Object.assign(Object.assign(Object.assign(Object.assign({}, defaultStyle), (this.error && errorStyle)), (this.disabled && disabledStyle)), (this.readonly && readonlyStyle));
207
+ return {
208
+ ...defaultStyle,
209
+ ...(this.error && errorStyle),
210
+ ...(this.disabled && disabledStyle),
211
+ ...(this.readonly && readonlyStyle),
212
+ };
155
213
  }
214
+ getRadioClass = tv({
215
+ slots: {
216
+ container: 'bcm-ui-element bcm-radio group',
217
+ dot: 'absolute rounded-full transition bg-[--bcm-radio-checked]',
218
+ dotContainer: 'relative rounded-full flex items-center justify-center shadow-[inset_0_0_0_1px_var(--bcm-radio-border)] bg-[--bcm-radio-bg] transition group-hover:shadow-[inset_0_0_0_1px_var(--bcm-radio-border-hover)]',
219
+ labelClass: 'font-medium text-[--bcm-radio-text-color]',
220
+ },
221
+ variants: {
222
+ size: {
223
+ small: {
224
+ container: 'gap-2',
225
+ dotContainer: 'size-3.5',
226
+ dot: 'size-2',
227
+ labelClass: 'text-size-4',
228
+ },
229
+ medium: {
230
+ container: 'gap-2.5',
231
+ dotContainer: 'size-4',
232
+ dot: 'size-2.5',
233
+ labelClass: 'text-size-5',
234
+ },
235
+ large: {
236
+ container: 'gap-3',
237
+ dotContainer: 'size-[18px]',
238
+ dot: 'size-3',
239
+ labelClass: 'text-size-6',
240
+ },
241
+ },
242
+ checked: {
243
+ true: {
244
+ dot: 'opacity-100',
245
+ },
246
+ false: {
247
+ dot: 'opacity-0',
248
+ },
249
+ },
250
+ disabled: {
251
+ true: {
252
+ container: 'cursor-not-allowed',
253
+ },
254
+ false: {
255
+ container: 'cursor-pointer focus-visible:ring',
256
+ },
257
+ },
258
+ readonly: {
259
+ true: {
260
+ container: 'cursor-default pointer-events-none',
261
+ dot: 'opacity-100',
262
+ dotContainer: 'shadow-[inset_0_0_0_3px_var(--bcm-radio-border)]',
263
+ },
264
+ false: '',
265
+ },
266
+ labelPosition: {
267
+ left: {
268
+ container: 'inline-flex flex-row-reverse items-center',
269
+ },
270
+ right: {
271
+ container: 'inline-flex flex-row items-center',
272
+ },
273
+ },
274
+ },
275
+ }, {
276
+ twMerge: false,
277
+ });
156
278
  render() {
157
279
  const { container, dot, dotContainer, labelClass } = this.getRadioClass({
158
280
  size: this.size,
159
- checked: this.checked,
281
+ checked: this.internalChecked,
160
282
  disabled: this.disabled,
161
283
  readonly: this.readonly,
162
284
  labelPosition: this.labelPosition,
163
285
  });
164
- return (h("label", { key: '08ec0c4fc58c644ea64f5a555a28d85e3a461d20', class: container(), style: this.getRadioStyle() }, h("input", { key: 'e9e151e8bd0d85636a571e3df0da740da9b882ba', "aria-label": this.label, role: "radio", "aria-checked": this.checked.toString(), type: "radio", name: this.name, value: this.value, disabled: this.disabled, readOnly: this.readonly, checked: this.checked, class: "appearance-none sr-only", onClick: () => this.handleClick(), onFocus: e => this.bcmFocus.emit(e), onBlur: e => this.bcmBlur.emit(e) }), h("div", { key: '59822922a1e3c29f3e91b18c06d52d0a21ac981d', class: dotContainer() }, h("div", { key: '0bf638ed15145e2359d54fb1fb013dbcf19cdbb6', class: dot() })), h("span", { key: '86b95c35426abd26f800f4509f3a996f58865263', class: labelClass() }, h("slot", { key: 'e55448e4009dfaee59d056237e67e5a548013db0' }, this.label))));
286
+ const inputId = this._id + '-input';
287
+ return (h("label", { key: '0833a3d2521764dd8d82f9d8eab381c28b9b12fa', class: container(), style: this.getRadioStyle(), htmlFor: inputId }, h("input", { key: 'cfe8ed382b800b727705c790d3b3b953ed6bc402', id: inputId, "aria-label": this.label, role: "radio", "aria-checked": this.internalChecked.toString(), "aria-invalid": this.error, "aria-required": this.required, type: "radio", name: this.name, value: this.value, disabled: this.disabled, readOnly: this.readonly, checked: this.internalChecked, class: "appearance-none sr-only", onClick: () => this.handleClick(), onFocus: e => this.bcmFocus.emit(e), onBlur: e => this.bcmBlur.emit(e), ref: el => (this.inputEl = el) }), h("div", { key: '5393c76f1ff89afa5d0160e68f809603dd3e610d', class: dotContainer() }, h("div", { key: 'af362f3307977227a2f314dfcd2cf9d770bc30df', class: dot() })), h("span", { key: 'e911baf861c579b193f56e216225acbcde0a23da', class: labelClass() }, h("slot", { key: '18af978c84f9213a2a382e198a6b3bd9b775a7ea' }, this.label))));
165
288
  }
166
- get host() { return this; }
289
+ static get formAssociated() { return true; }
290
+ static get watchers() { return {
291
+ "checked": ["onCheckedChange"],
292
+ "internalChecked": ["onInternalCheckedChange"]
293
+ }; }
167
294
  static get style() { return radioCss; }
168
- }, [257, "bcm-radio", {
295
+ }, [321, "bcm-radio", {
296
+ "_id": [513, "id"],
169
297
  "label": [1],
170
298
  "name": [1],
171
299
  "value": [1],
172
- "checked": [516],
300
+ "checked": [1540],
173
301
  "size": [1],
174
302
  "disabled": [4],
175
303
  "readonly": [4],
176
304
  "labelPosition": [1, "label-position"],
177
- "error": [4]
305
+ "error": [4],
306
+ "required": [4],
307
+ "internalChecked": [32]
308
+ }, undefined, {
309
+ "checked": ["onCheckedChange"],
310
+ "internalChecked": ["onInternalCheckedChange"]
178
311
  }]);
179
312
  function defineCustomElement$1() {
180
313
  if (typeof customElements === "undefined") {
@@ -1 +1 @@
1
- {"file":"bcm-radio.js","mappings":";;;AAAA,MAAM,QAAQ,GAAG,w9GAAw9G;;MCiD59GA,UAAQ,iBAAAC,kBAAA,CAAA,MAAA,QAAA,SAAAC,CAAA,CAAA;AALrB,IAAA,WAAA,CAAA,YAAA,EAAA;;;;;;;;;AAgCE;;;;AAIG;AAEH,QAAA,IAAO,CAAA,OAAA,GAAY,KAAK;AAExB;;;;AAIG;AAEH,QAAA,IAAI,CAAA,IAAA,GAAiC,QAAQ;AAE7C;;;;AAIG;AAEH,QAAA,IAAQ,CAAA,QAAA,GAAG,KAAK;AAEhB;;;;AAIG;AAEH,QAAA,IAAQ,CAAA,QAAA,GAAG,KAAK;AAEhB;;;;AAIG;AAEH,QAAA,IAAa,CAAA,aAAA,GAAqB,OAAO;AAEzC;;;;AAIG;AAEH,QAAA,IAAK,CAAA,KAAA,GAAY,KAAK;AAyEd,QAAA,IAAa,CAAA,aAAA,GAAG,EAAE,CACxB;AACE,YAAA,KAAK,EAAE;AACL,gBAAA,SAAS,EAAE,gCAAgC;AAC3C,gBAAA,GAAG,EAAE,2DAA2D;AAChE,gBAAA,YAAY,EACV,2MAA2M;AAC7M,gBAAA,UAAU,EAAE,2CAA2C;AACxD,aAAA;AACD,YAAA,QAAQ,EAAE;AACR,gBAAA,IAAI,EAAE;AACJ,oBAAA,KAAK,EAAE;AACL,wBAAA,SAAS,EAAE,OAAO;AAClB,wBAAA,YAAY,EAAE,UAAU;AACxB,wBAAA,GAAG,EAAE,QAAQ;AACb,wBAAA,UAAU,EAAE,aAAa;AAC1B,qBAAA;AACD,oBAAA,MAAM,EAAE;AACN,wBAAA,SAAS,EAAE,SAAS;AACpB,wBAAA,YAAY,EAAE,QAAQ;AACtB,wBAAA,GAAG,EAAE,UAAU;AACf,wBAAA,UAAU,EAAE,aAAa;AAC1B,qBAAA;AACD,oBAAA,KAAK,EAAE;AACL,wBAAA,SAAS,EAAE,OAAO;AAClB,wBAAA,YAAY,EAAE,aAAa;AAC3B,wBAAA,GAAG,EAAE,QAAQ;AACb,wBAAA,UAAU,EAAE,aAAa;AAC1B,qBAAA;AACF,iBAAA;AACD,gBAAA,OAAO,EAAE;AACP,oBAAA,IAAI,EAAE;AACJ,wBAAA,GAAG,EAAE,aAAa;AACnB,qBAAA;AACD,oBAAA,KAAK,EAAE;AACL,wBAAA,GAAG,EAAE,WAAW;AACjB,qBAAA;AACF,iBAAA;AACD,gBAAA,QAAQ,EAAE;AACR,oBAAA,IAAI,EAAE;AACJ,wBAAA,SAAS,EAAE,oBAAoB;AAChC,qBAAA;AACD,oBAAA,KAAK,EAAE;AACL,wBAAA,SAAS,EAAE,mCAAmC;AAC/C,qBAAA;AACF,iBAAA;AACD,gBAAA,QAAQ,EAAE;AACR,oBAAA,IAAI,EAAE;AACJ,wBAAA,SAAS,EAAE,oCAAoC;AAC/C,wBAAA,GAAG,EAAE,aAAa;AAClB,wBAAA,YAAY,EAAE,kDAAkD;AACjE,qBAAA;AACD,oBAAA,KAAK,EAAE,EAAE;AACV,iBAAA;AACD,gBAAA,aAAa,EAAE;AACb,oBAAA,IAAI,EAAE;AACJ,wBAAA,SAAS,EAAE,2CAA2C;AACvD,qBAAA;AACD,oBAAA,KAAK,EAAE;AACL,wBAAA,SAAS,EAAE,mCAAmC;AAC/C,qBAAA;AACF,iBAAA;AACF,aAAA;SACF,EACD;AACE,YAAA,OAAO,EAAE,KAAK;AACf,SAAA,CACF;AAqCF;IAzJS,WAAW,GAAA;AACjB,QAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ;YAAE;AACpC,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACjB,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;;;IAItB,aAAa,GAAA;AACnB,QAAA,MAAM,YAAY,GAAG;AACnB,YAAA,gBAAgB,EAAE,gDAAgD;AAClE,YAAA,oBAAoB,EAAE,qCAAqC;AAC3D,YAAA,0BAA0B,EAAE,oCAAoC;AAChE,YAAA,qBAAqB,EAAE,gDAAgD;AACvE,YAAA,wBAAwB,EAAE,kCAAkC;SAC7D;AAED,QAAA,MAAM,UAAU,GAAG;AACjB,YAAA,gBAAgB,EAAE,oDAAoD;AACtE,YAAA,oBAAoB,EAAE,kCAAkC;AACxD,YAAA,0BAA0B,EAAE,kCAAkC;AAC9D,YAAA,qBAAqB,EAAE,8CAA8C;AACrE,YAAA,wBAAwB,EAAE,kCAAkC;SAC7D;AAED,QAAA,MAAM,aAAa,GAAG;AACpB,YAAA,gBAAgB,EAAE,iDAAiD;AACnE,YAAA,oBAAoB,EAAE,qCAAqC;AAC3D,YAAA,0BAA0B,EAAE,qCAAqC;AACjE,YAAA,qBAAqB,EAAE,iDAAiD;AACxE,YAAA,wBAAwB,EAAE,mCAAmC;SAC9D;AAED,QAAA,MAAM,aAAa,GAAG;AACpB,YAAA,gBAAgB,EAAE,aAAa;AAC/B,YAAA,oBAAoB,EAAE,qCAAqC;AAC3D,YAAA,qBAAqB,EAAE,gDAAgD;AACvE,YAAA,0BAA0B,EAAE,qCAAqC;AACjE,YAAA,wBAAwB,EAAE,kCAAkC;SAC7D;QAED,OACK,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,YAAY,CACZ,GAAC,IAAI,CAAC,KAAK,IAAI,UAAU,EAAC,GACzB,IAAI,CAAC,QAAQ,IAAI,aAAa,EAC/B,GAAC,IAAI,CAAC,QAAQ,IAAI,aAAa,EAClC;;IAwEJ,MAAM,GAAA;AACJ,QAAA,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,YAAY,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC;YACtE,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,aAAa,EAAE,IAAI,CAAC,aAAa;AAClC,SAAA,CAAC;QAEF,QACE,CAAA,CAAA,OAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAO,KAAK,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,EAAA,EACpD,CACc,CAAA,OAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,YAAA,EAAA,IAAI,CAAC,KAAK,EACtB,IAAI,EAAC,OAAO,kBACE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EACrC,IAAI,EAAC,OAAO,EACZ,IAAI,EAAE,IAAI,CAAC,IAAI,EACf,KAAK,EAAE,IAAI,CAAC,KAAK,EACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ,EACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ,EACvB,OAAO,EAAE,IAAI,CAAC,OAAO,EACrB,KAAK,EAAC,yBAAyB,EAC/B,OAAO,EAAE,MAAM,IAAI,CAAC,WAAW,EAAE,EACjC,OAAO,EAAE,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EACnC,MAAM,EAAE,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAC1B,CAAA,EACT,CAAK,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAE,YAAY,EAAE,EAAA,EACxB,CAAA,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAK,KAAK,EAAE,GAAG,EAAE,GAAQ,CACrB,EACN,CAAM,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAE,UAAU,EAAE,EAAA,EACvB,CAAA,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,EAAO,IAAI,CAAC,KAAK,CAAQ,CACpB,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","names":["BcmRadio","__stencil_proxyCustomElement","HTMLElement"],"sources":["src/components/radio/radio.css?tag=bcm-radio&encapsulation=shadow","src/components/radio/radio.component.tsx"],"sourcesContent":[":host {\n display: block;\n}\n","/**\n * @component BcmRadio\n * @description A customizable radio button component for forms, supporting various sizes, states, and label positioning.\n * It can be used to select a single option from a group of choices, with support for error, disabled, and readonly states.\n *\n * @example\n * <bcm-radio label=\"Option 1\" name=\"group1\" value=\"1\" size=\"medium\" label-position=\"right\">\n * Option 1\n * </bcm-radio>\n *\n * @example Radio with error state\n * <bcm-radio label=\"Error Option\" name=\"group1\" value=\"2\" error={true}>\n * Error Option\n * </bcm-radio>\n *\n * @prop {string} label - The text label to display next to the radio button.\n * @prop {string} name - The name attribute for the radio input, used to group radio buttons.\n * @prop {string} value - The value of the radio button, submitted with the form.\n * @prop {boolean} checked - Whether the radio button is selected.\n * @defaultValue false\n * @prop {RadioSize} size - Defines the size of the radio button: 'small' | 'medium' | 'large'.\n * @defaultValue 'medium'\n * @prop {boolean} disabled - Whether the radio button is disabled.\n * @defaultValue false\n * @prop {boolean} readonly - Whether the radio button is readonly.\n * @defaultValue false\n * @prop {LabelPosition} labelPosition - Position of the label relative to the radio button: 'right' | 'left'.\n * @defaultValue 'right'\n * @prop {boolean} error - Whether the radio button is in an error state.\n * @defaultValue false\n *\n * @event {EventEmitter<void>} bcmRadioChange - Emitted when the radio button's checked state changes.\n * @event {EventEmitter<FocusEvent>} bcmFocus - Emitted when the radio button gains focus.\n * @event {EventEmitter<FocusEvent>} bcmBlur - Emitted when the radio button loses focus.\n *\n * @csspart container - The root label element wrapping the radio button and label.\n * @csspart dotContainer - The container for the radio button dot.\n * @csspart dot - The inner dot of the radio button.\n * @csspart label - The label text element.\n */\n\nimport { Component, ComponentInterface, Prop, h, Element, Event, EventEmitter } from '@stencil/core';\nimport { tv } from '@utils/tv';\n\n@Component({\n tag: 'bcm-radio',\n styleUrl: 'radio.css',\n shadow: true,\n})\nexport class BcmRadio implements ComponentInterface {\n @Element() host: HTMLBcmRadioElement;\n\n /**\n * The text label to display next to the radio button.\n * @prop\n * @defaultValue undefined\n */\n @Prop()\n label: string;\n\n /**\n * The name attribute for the radio input, used to group radio buttons.\n * @prop\n * @defaultValue undefined\n */\n @Prop()\n name: string;\n\n /**\n * The value of the radio button, submitted with the form.\n * @prop\n * @defaultValue undefined\n */\n @Prop()\n value: string;\n\n /**\n * Whether the radio button is selected.\n * @prop\n * @defaultValue false\n */\n @Prop({ reflect: true })\n checked: boolean = false;\n\n /**\n * Defines the size of the radio button: 'small' | 'medium' | 'large'.\n * @prop\n * @defaultValue 'medium'\n */\n @Prop()\n size: 'small' | 'medium' | 'large' = 'medium';\n\n /**\n * Whether the radio button is disabled.\n * @prop\n * @defaultValue false\n */\n @Prop()\n disabled = false;\n\n /**\n * Whether the radio button is readonly.\n * @prop\n * @defaultValue false\n */\n @Prop()\n readonly = false;\n\n /**\n * Position of the label relative to the radio button: 'right' | 'left'.\n * @prop\n * @defaultValue 'right'\n */\n @Prop()\n labelPosition: 'right' | 'left' = 'right';\n\n /**\n * Whether the radio button is in an error state.\n * @prop\n * @defaultValue false\n */\n @Prop()\n error: boolean = false;\n\n @Event({\n composed: false,\n bubbles: false,\n cancelable: true,\n eventName: 'bcmRadioChange',\n })\n bcmRadioChange: EventEmitter<void>;\n\n @Event({\n composed: false,\n bubbles: false,\n cancelable: true,\n })\n bcmBlur: EventEmitter<FocusEvent>;\n\n @Event({\n composed: false,\n bubbles: false,\n cancelable: true,\n })\n bcmFocus: EventEmitter<FocusEvent>;\n\n private handleClick(): void {\n if (this.readonly || this.disabled) return;\n if (!this.checked) {\n this.checked = true;\n this.bcmRadioChange.emit();\n }\n }\n\n private getRadioStyle() {\n const defaultStyle = {\n '--bcm-radio-bg': 'var(--bcm-ui-color-background-default-default)',\n '--bcm-radio-border': 'var(--bcm-ui-color-border-disabled)',\n '--bcm-radio-border-hover': 'var(--bcm-ui-color-border-primary)',\n '--bcm-radio-checked': 'var(--bcm-ui-color-background-primary-default)',\n '--bcm-radio-text-color': 'var(--bcm-ui-color-text-default)',\n };\n\n const errorStyle = {\n '--bcm-radio-bg': 'var(--bcm-ui-color-background-palette-red-default)',\n '--bcm-radio-border': 'var(--bcm-ui-color-border-error)',\n '--bcm-radio-border-hover': 'var(--bcm-ui-color-border-error)',\n '--bcm-radio-checked': 'var(--bcm-ui-color-background-error-default)',\n '--bcm-radio-text-color': 'var(--bcm-ui-color-text-default)',\n };\n\n const disabledStyle = {\n '--bcm-radio-bg': 'var(--bcm-ui-color-background-disabled-default)',\n '--bcm-radio-border': 'var(--bcm-ui-color-border-disabled)',\n '--bcm-radio-border-hover': 'var(--bcm-ui-color-border-disabled)',\n '--bcm-radio-checked': 'var(--bcm-ui-color-background-disabled-default)',\n '--bcm-radio-text-color': 'var(--bcm-ui-color-text-disabled)',\n };\n\n const readonlyStyle = {\n '--bcm-radio-bg': 'transparent',\n '--bcm-radio-border': 'var(--bcm-ui-color-border-disabled)',\n '--bcm-radio-checked': 'var(--bcm-ui-color-background-default-default)',\n '--bcm-radio-border-hover': 'var(--bcm-ui-color-border-disabled)',\n '--bcm-radio-text-color': 'var(--bcm-ui-color-text-default)',\n };\n\n return {\n ...defaultStyle,\n ...(this.error && errorStyle),\n ...(this.disabled && disabledStyle),\n ...(this.readonly && readonlyStyle),\n };\n }\n\n private getRadioClass = tv(\n {\n slots: {\n container: 'bcm-ui-element bcm-radio group',\n dot: 'absolute rounded-full transition bg-[--bcm-radio-checked]',\n dotContainer:\n 'relative rounded-full flex items-center justify-center shadow-[inset_0_0_0_1px_var(--bcm-radio-border)] bg-[--bcm-radio-bg] transition group-hover:shadow-[inset_0_0_0_1px_var(--bcm-radio-border-hover)]',\n labelClass: 'font-medium text-[--bcm-radio-text-color]',\n },\n variants: {\n size: {\n small: {\n container: 'gap-2',\n dotContainer: 'size-3.5',\n dot: 'size-2',\n labelClass: 'text-size-4',\n },\n medium: {\n container: 'gap-2.5',\n dotContainer: 'size-4',\n dot: 'size-2.5',\n labelClass: 'text-size-5',\n },\n large: {\n container: 'gap-3',\n dotContainer: 'size-[18px]',\n dot: 'size-3',\n labelClass: 'text-size-6',\n },\n },\n checked: {\n true: {\n dot: 'opacity-100',\n },\n false: {\n dot: 'opacity-0',\n },\n },\n disabled: {\n true: {\n container: 'cursor-not-allowed',\n },\n false: {\n container: 'cursor-pointer focus-visible:ring',\n },\n },\n readonly: {\n true: {\n container: 'cursor-default pointer-events-none',\n dot: 'opacity-100',\n dotContainer: 'shadow-[inset_0_0_0_3px_var(--bcm-radio-border)]',\n },\n false: '',\n },\n labelPosition: {\n left: {\n container: 'inline-flex flex-row-reverse items-center',\n },\n right: {\n container: 'inline-flex flex-row items-center',\n },\n },\n },\n },\n {\n twMerge: false,\n },\n );\n\n render() {\n const { container, dot, dotContainer, labelClass } = this.getRadioClass({\n size: this.size,\n checked: this.checked,\n disabled: this.disabled,\n readonly: this.readonly,\n labelPosition: this.labelPosition,\n });\n\n return (\n <label class={container()} style={this.getRadioStyle()}>\n <input\n aria-label={this.label}\n role=\"radio\"\n aria-checked={this.checked.toString()}\n type=\"radio\"\n name={this.name}\n value={this.value}\n disabled={this.disabled}\n readOnly={this.readonly}\n checked={this.checked}\n class=\"appearance-none sr-only\"\n onClick={() => this.handleClick()}\n onFocus={e => this.bcmFocus.emit(e)}\n onBlur={e => this.bcmBlur.emit(e)}\n ></input>\n <div class={dotContainer()}>\n <div class={dot()}></div>\n </div>\n <span class={labelClass()}>\n <slot>{this.label}</slot>\n </span>\n </label>\n );\n }\n}\n"],"version":3}
1
+ {"file":"bcm-radio.js","mappings":"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","names":["BcmRadio","__stencil_proxyCustomElement","HTMLElement"],"sources":["src/components/radio/radio.css?tag=bcm-radio&encapsulation=shadow","src/components/radio/radio.component.tsx"],"sourcesContent":[":host {\n display: block;\n}\n","/**\n * @component BcmRadio\n * @description A customizable radio button component for forms, supporting various sizes, states, and label positioning.\n * It can be used to select a single option from a group of choices, with support for error, disabled, and readonly states.\n *\n * @example\n * <bcm-radio label=\"Option 1\" name=\"group1\" value=\"1\" size=\"medium\" label-position=\"right\">\n * Option 1\n * </bcm-radio>\n *\n * @example Radio with error state\n * <bcm-radio label=\"Error Option\" name=\"group1\" value=\"2\" error={true}>\n * Error Option\n * </bcm-radio>\n *\n * @prop {string} label - The text label to display next to the radio button.\n * @prop {string} name - The name attribute for the radio input, used to group radio buttons.\n * @prop {string} value - The value of the radio button, submitted with the form.\n * @prop {boolean} checked - Whether the radio button is selected.\n * @defaultValue false\n * @prop {RadioSize} size - Defines the size of the radio button: 'small' | 'medium' | 'large'.\n * @defaultValue 'medium'\n * @prop {boolean} disabled - Whether the radio button is disabled.\n * @defaultValue false\n * @prop {boolean} readonly - Whether the radio button is readonly.\n * @defaultValue false\n * @prop {LabelPosition} labelPosition - Position of the label relative to the radio button: 'right' | 'left'.\n * @defaultValue 'right'\n * @prop {boolean} error - Whether the radio button is in an error state.\n * @defaultValue false\n *\n * @event {EventEmitter<void>} bcmRadioChange - Emitted when the radio button's checked state changes.\n * @event {EventEmitter<FocusEvent>} bcmFocus - Emitted when the radio button gains focus.\n * @event {EventEmitter<FocusEvent>} bcmBlur - Emitted when the radio button loses focus.\n *\n * @csspart container - The root label element wrapping the radio button and label.\n * @csspart dotContainer - The container for the radio button dot.\n * @csspart dot - The inner dot of the radio button.\n * @csspart label - The label text element.\n */\n\nimport { Component, ComponentInterface, Prop, h, Element, Event, EventEmitter, Watch, State, AttachInternals } from '@stencil/core';\nimport { tv } from '@utils/tv';\nimport { getValidationMessage } from '../../utils/validation-messages';\nimport { generateId } from '@utils/id/generate-id';\n\n@Component({\n tag: 'bcm-radio',\n styleUrl: 'radio.css',\n shadow: true,\n formAssociated: true,\n})\nexport class BcmRadio implements ComponentInterface {\n @Element() host: HTMLBcmRadioElement;\n\n @AttachInternals() internals: ElementInternals;\n\n @Prop({ attribute: 'id', reflect: true })\n _id?: string = generateId('bcm-radio');\n\n /**\n * The text label to display next to the radio button.\n * @prop\n * @defaultValue undefined\n */\n @Prop()\n label: string;\n\n /**\n * The name attribute for the radio input, used to group radio buttons.\n * @prop\n * @defaultValue undefined\n */\n @Prop()\n name: string;\n\n /**\n * The value of the radio button, submitted with the form.\n * @prop\n * @defaultValue undefined\n */\n @Prop()\n value: string;\n\n /**\n * Whether the radio button is selected.\n * @prop\n * @defaultValue false\n */\n @Prop({ reflect: true, mutable: true })\n checked: boolean = false;\n\n /**\n * Defines the size of the radio button: 'small' | 'medium' | 'large'.\n * @prop\n * @defaultValue 'medium'\n */\n @Prop()\n size: 'small' | 'medium' | 'large' = 'medium';\n\n /**\n * Whether the radio button is disabled.\n * @prop\n * @defaultValue false\n */\n @Prop()\n disabled = false;\n\n /**\n * Whether the radio button is readonly.\n * @prop\n * @defaultValue false\n */\n @Prop()\n readonly = false;\n\n /**\n * Position of the label relative to the radio button: 'right' | 'left'.\n * @prop\n * @defaultValue 'right'\n */\n @Prop()\n labelPosition: 'right' | 'left' = 'right';\n\n /**\n * Whether the radio button is in an error state.\n * @prop\n * @defaultValue false\n */\n @Prop()\n error: boolean = false;\n\n /**\n * Whether at least one radio in this group is required.\n * (HTML)\n */\n @Prop()\n required: boolean = false;\n\n /** Internal checked state to control visuals + form internals */\n @State() internalChecked: boolean = false;\n\n @Event({\n composed: false,\n bubbles: false,\n cancelable: true,\n eventName: 'bcmRadioChange',\n })\n bcmRadioChange: EventEmitter<void>;\n\n @Event({\n composed: false,\n bubbles: false,\n cancelable: true,\n })\n bcmBlur: EventEmitter<FocusEvent>;\n\n @Event({\n composed: false,\n bubbles: false,\n cancelable: true,\n })\n bcmFocus: EventEmitter<FocusEvent>;\n\n private inputEl: HTMLInputElement;\n\n // ---- LIFECYCLE ----\n\n componentWillLoad() {\n this.host.setAttribute('tabindex', '-1');\n this.internalChecked = !!this.checked;\n this.updateFormValueAndValidity();\n }\n\n componentDidLoad() {\n this.syncNativeChecked();\n }\n\n private handleClick(): void {\n if (this.readonly || this.disabled) return;\n\n if (!this.internalChecked) {\n this.internalChecked = true;\n this.checked = true;\n this.uncheckSiblings();\n this.updateFormValueAndValidity();\n this.bcmRadioChange.emit();\n }\n }\n\n private updateFormValueAndValidity() {\n if (!this.internals) return;\n\n const formValue = this.internalChecked ? this.value ?? 'on' : null;\n this.internals.setFormValue(formValue);\n\n const groupRequired = this.isGroupRequired();\n\n if (!groupRequired || this.disabled) {\n this.internals.setValidity({});\n return;\n }\n\n if (!this.isGroupLeader()) {\n this.internals.setValidity({});\n return;\n }\n\n const groupChecked = this.isGroupChecked();\n\n if (!groupChecked) {\n this.internals.setValidity({ valueMissing: true }, getValidationMessage ? getValidationMessage('required') : 'This field is required.');\n } else {\n this.internals.setValidity({});\n }\n }\n\n private isGroupRequired(): boolean {\n const root = (this.host.getRootNode() as Document | ShadowRoot) || document;\n const radios = Array.from(root.querySelectorAll(`bcm-radio[name=\"${this.name}\"]`)) as any[];\n return radios.some(r => r.required);\n }\n\n private isGroupChecked(): boolean {\n const root = (this.host.getRootNode() as Document | ShadowRoot) || document;\n const radios = root.querySelectorAll(`bcm-radio[name=\"${this.name}\"]`);\n return Array.from(radios).some((el: any) => el.checked);\n }\n\n private isGroupLeader(): boolean {\n const root = (this.host.getRootNode() as Document | ShadowRoot) || document;\n const radios = Array.from(root.querySelectorAll(`bcm-radio[name=\"${this.name}\"]`));\n return radios[0] === this.host;\n }\n\n formResetCallback() {\n this.checked = false;\n this.internalChecked = false;\n this.syncNativeChecked();\n this.updateFormValueAndValidity();\n }\n\n // ---- WATCHERS ----\n\n @Watch('checked')\n onCheckedChange(newVal: boolean) {\n this.internalChecked = !!newVal;\n this.syncNativeChecked();\n this.updateFormValueAndValidity();\n }\n\n @Watch('internalChecked')\n onInternalCheckedChange() {\n this.syncNativeChecked();\n this.updateFormValueAndValidity();\n }\n\n // ---- INTERNAL HELPERS ----\n\n private syncNativeChecked() {\n if (this.inputEl) {\n this.inputEl.checked = this.internalChecked;\n }\n }\n\n private uncheckSiblings() {\n if (!this.name) return;\n\n const root = (this.host.getRootNode() as Document | ShadowRoot) || document;\n const others = (root as any).querySelectorAll ? (root as any).querySelectorAll(`bcm-radio[name=\"${this.name}\"]`) : [];\n\n others.forEach((el: any) => {\n if (el === this.host) return;\n el.checked = false;\n });\n }\n\n private getRadioStyle() {\n const defaultStyle = {\n '--bcm-radio-bg': 'var(--bcm-ui-color-background-default-default)',\n '--bcm-radio-border': 'var(--bcm-ui-color-border-disabled)',\n '--bcm-radio-border-hover': 'var(--bcm-ui-color-border-primary)',\n '--bcm-radio-checked': 'var(--bcm-ui-color-background-primary-default)',\n '--bcm-radio-text-color': 'var(--bcm-ui-color-text-default)',\n };\n\n const errorStyle = {\n '--bcm-radio-bg': 'var(--bcm-ui-color-background-palette-red-default)',\n '--bcm-radio-border': 'var(--bcm-ui-color-border-error)',\n '--bcm-radio-border-hover': 'var(--bcm-ui-color-border-error)',\n '--bcm-radio-checked': 'var(--bcm-ui-color-background-error-default)',\n '--bcm-radio-text-color': 'var(--bcm-ui-color-text-default)',\n };\n\n const disabledStyle = {\n '--bcm-radio-bg': 'var(--bcm-ui-color-background-disabled-default)',\n '--bcm-radio-border': 'var(--bcm-ui-color-border-disabled)',\n '--bcm-radio-border-hover': 'var(--bcm-ui-color-border-disabled)',\n '--bcm-radio-checked': 'var(--bcm-ui-color-background-disabled-default)',\n '--bcm-radio-text-color': 'var(--bcm-ui-color-text-disabled)',\n };\n\n const readonlyStyle = {\n '--bcm-radio-bg': 'transparent',\n '--bcm-radio-border': 'var(--bcm-ui-color-border-disabled)',\n '--bcm-radio-checked': 'var(--bcm-ui-color-background-default-default)',\n '--bcm-radio-border-hover': 'var(--bcm-ui-color-border-disabled)',\n '--bcm-radio-text-color': 'var(--bcm-ui-color-text-default)',\n };\n\n return {\n ...defaultStyle,\n ...(this.error && errorStyle),\n ...(this.disabled && disabledStyle),\n ...(this.readonly && readonlyStyle),\n };\n }\n\n private getRadioClass = tv(\n {\n slots: {\n container: 'bcm-ui-element bcm-radio group',\n dot: 'absolute rounded-full transition bg-[--bcm-radio-checked]',\n dotContainer:\n 'relative rounded-full flex items-center justify-center shadow-[inset_0_0_0_1px_var(--bcm-radio-border)] bg-[--bcm-radio-bg] transition group-hover:shadow-[inset_0_0_0_1px_var(--bcm-radio-border-hover)]',\n labelClass: 'font-medium text-[--bcm-radio-text-color]',\n },\n variants: {\n size: {\n small: {\n container: 'gap-2',\n dotContainer: 'size-3.5',\n dot: 'size-2',\n labelClass: 'text-size-4',\n },\n medium: {\n container: 'gap-2.5',\n dotContainer: 'size-4',\n dot: 'size-2.5',\n labelClass: 'text-size-5',\n },\n large: {\n container: 'gap-3',\n dotContainer: 'size-[18px]',\n dot: 'size-3',\n labelClass: 'text-size-6',\n },\n },\n checked: {\n true: {\n dot: 'opacity-100',\n },\n false: {\n dot: 'opacity-0',\n },\n },\n disabled: {\n true: {\n container: 'cursor-not-allowed',\n },\n false: {\n container: 'cursor-pointer focus-visible:ring',\n },\n },\n readonly: {\n true: {\n container: 'cursor-default pointer-events-none',\n dot: 'opacity-100',\n dotContainer: 'shadow-[inset_0_0_0_3px_var(--bcm-radio-border)]',\n },\n false: '',\n },\n labelPosition: {\n left: {\n container: 'inline-flex flex-row-reverse items-center',\n },\n right: {\n container: 'inline-flex flex-row items-center',\n },\n },\n },\n },\n {\n twMerge: false,\n },\n );\n\n render() {\n const { container, dot, dotContainer, labelClass } = this.getRadioClass({\n size: this.size,\n checked: this.internalChecked,\n disabled: this.disabled,\n readonly: this.readonly,\n labelPosition: this.labelPosition,\n });\n\n const inputId = this._id + '-input';\n\n return (\n <label class={container()} style={this.getRadioStyle()} htmlFor={inputId}>\n <input\n id={inputId}\n aria-label={this.label}\n role=\"radio\"\n aria-checked={this.internalChecked.toString()}\n aria-invalid={this.error}\n aria-required={this.required}\n type=\"radio\"\n name={this.name}\n value={this.value}\n disabled={this.disabled}\n readOnly={this.readonly}\n checked={this.internalChecked}\n class=\"appearance-none sr-only\"\n onClick={() => this.handleClick()}\n onFocus={e => this.bcmFocus.emit(e)}\n onBlur={e => this.bcmBlur.emit(e)}\n ref={el => (this.inputEl = el as HTMLInputElement)}\n ></input>\n <div class={dotContainer()}>\n <div class={dot()}></div>\n </div>\n <span class={labelClass()}>\n <slot>{this.label}</slot>\n </span>\n </label>\n );\n }\n}\n"],"version":3}
@@ -1,9 +1,9 @@
1
1
  import type { Components, JSX } from "../types/components";
2
2
 
3
- interface BcmTabsList extends Components.BcmTabsList, HTMLElement {}
4
- export const BcmTabsList: {
5
- prototype: BcmTabsList;
6
- new (): BcmTabsList;
3
+ interface BcmSegment extends Components.BcmSegment, HTMLElement {}
4
+ export const BcmSegment: {
5
+ prototype: BcmSegment;
6
+ new (): BcmSegment;
7
7
  };
8
8
  /**
9
9
  * Used to define this component and all nested components recursively.
@@ -0,0 +1,110 @@
1
+ import { p as proxyCustomElement, H, c as createEvent, h, a as Host } from './index.js';
2
+ import { t as tv } from './p-CEcVC0yX.js';
3
+
4
+ const segmentCss = ".absolute{position:absolute}.relative{position:relative}.flex{display:flex}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}:host{align-items:center;display:flex;position:relative;width:100%}.segment{flex:1;white-space:nowrap;width:100%}.divider{background-color:var(--bcm-ui-color-border-default);height:20px;pointer-events:none;position:absolute;right:0;top:50%;transform:translateY(-50%);transition:opacity .8s cubic-bezier(.4,0,.2,1);width:1px}.divider-hidden{opacity:0}.static{position:static}.z-20{z-index:20}.hidden{display:none}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.select-none{user-select:none}.border-none{border-style:none}.bg-transparent{background-color:transparent}.px-3{padding-left:.75rem;padding-right:.75rem}.py-1{padding-bottom:.25rem;padding-top:.25rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.py-px{padding-bottom:1px;padding-top:1px}.text-center{text-align:center}.text-size-4{font-size:var(--bcm-ui-font-size-4,14px);line-height:var(--bcm-ui-line-height-4,20px)}.text-size-5{font-size:var(--bcm-ui-font-size-5,16px);line-height:var(--bcm-ui-line-height-5,24px)}.text-size-6{font-size:var(--bcm-ui-font-size-6,18px);line-height:var(--bcm-ui-line-height-6,24px)}.font-medium{font-weight:500}.text-color-header{color:var(--bcm-ui-color-text-header)}.text-color-helper{color:var(--bcm-ui-color-text-helper)}.opacity-50{opacity:.5}.shadow{--tw-shadow:var(--bcm-ui-box-shadow-default);--tw-shadow-colored:var(--bcm-ui-box-shadow-default);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.hover\\:text-color-header:hover{color:var(--bcm-ui-color-text-header)}";
5
+
6
+ const BcmSegment$1 = /*@__PURE__*/ proxyCustomElement(class BcmSegment extends H {
7
+ constructor(registerHost) {
8
+ super();
9
+ if (registerHost !== false) {
10
+ this.__registerHost();
11
+ }
12
+ this.__attachShadow();
13
+ this.bcmSegmentClick = createEvent(this, "bcmSegmentClick", 5);
14
+ }
15
+ get el() { return this; }
16
+ /**
17
+ * Unique identifier for this segment
18
+ */
19
+ value;
20
+ /**
21
+ * Disabled state
22
+ */
23
+ disabled = false;
24
+ /**
25
+ * Selected state (controlled by parent)
26
+ */
27
+ selected = false;
28
+ /**
29
+ * Size variant (inherited from parent)
30
+ */
31
+ size = 'medium';
32
+ /**
33
+ * Index of this segment (inherited from parent)
34
+ */
35
+ index = 0;
36
+ /**
37
+ * Index of currently active segment (inherited from parent)
38
+ */
39
+ activeIndex = 0;
40
+ /**
41
+ * Internal event emitted when segment is clicked
42
+ */
43
+ bcmSegmentClick;
44
+ handleClick = () => {
45
+ if (!this.disabled) {
46
+ this.bcmSegmentClick.emit(this.value);
47
+ }
48
+ };
49
+ /**
50
+ * Tailwind class configuration
51
+ */
52
+ segmentClass = tv({
53
+ base: 'segment relative z-20 px-3 text-center font-medium transition-colors border-none bg-transparent select-none',
54
+ variants: {
55
+ size: {
56
+ small: 'text-size-4 py-px',
57
+ medium: 'text-size-5 py-1',
58
+ large: 'text-size-6 py-2',
59
+ },
60
+ selected: {
61
+ true: 'text-color-header',
62
+ false: 'text-color-helper',
63
+ },
64
+ disabled: {
65
+ true: 'cursor-not-allowed opacity-50',
66
+ false: 'cursor-pointer hover:text-color-header',
67
+ },
68
+ },
69
+ });
70
+ render() {
71
+ // Determine if divider should be hidden
72
+ // Hide divider if this segment or the next segment is active
73
+ const hideDivider = this.selected || this.index === this.activeIndex - 1;
74
+ return (h(Host, { key: 'fd8cc62e6cc3a1ad5eb40390c47907cc3c97a7b9', role: "radio", "aria-checked": this.selected.toString() }, h("button", { key: '17c5b00494a44939ec6556df9ee11b4fdf8d12e2', class: this.segmentClass({
75
+ size: this.size,
76
+ selected: this.selected,
77
+ disabled: this.disabled,
78
+ }), onClick: this.handleClick, disabled: this.disabled, type: "button" }, h("slot", { key: '20d275dcee6f951825facb6a171a57d96ec73f00' })), h("div", { key: '88fc43e25f3967569dbc5e56a5837fbedc3407e8', class: `divider ${hideDivider ? 'divider-hidden' : ''}` })));
79
+ }
80
+ static get style() { return segmentCss; }
81
+ }, [257, "bcm-segment", {
82
+ "value": [513],
83
+ "disabled": [516],
84
+ "selected": [1540],
85
+ "size": [1025],
86
+ "index": [1026],
87
+ "activeIndex": [1026, "active-index"]
88
+ }]);
89
+ function defineCustomElement$1() {
90
+ if (typeof customElements === "undefined") {
91
+ return;
92
+ }
93
+ const components = ["bcm-segment"];
94
+ components.forEach(tagName => { switch (tagName) {
95
+ case "bcm-segment":
96
+ if (!customElements.get(tagName)) {
97
+ customElements.define(tagName, BcmSegment$1);
98
+ }
99
+ break;
100
+ } });
101
+ }
102
+ defineCustomElement$1();
103
+
104
+ const BcmSegment = BcmSegment$1;
105
+ const defineCustomElement = defineCustomElement$1;
106
+
107
+ export { BcmSegment, defineCustomElement };
108
+ //# sourceMappingURL=bcm-segment.js.map
109
+
110
+ //# sourceMappingURL=bcm-segment.js.map
@@ -0,0 +1 @@
1
+ {"file":"bcm-segment.js","mappings":";;;AAAA,MAAM,UAAU,GAAG,wrEAAwrE;;MCY9rEA,YAAU,iBAAAC,kBAAA,CAAA,MAAA,UAAA,SAAAC,CAAA,CAAA;;;;;;;;;;AAGrB;;AAEG;AAEH,IAAA,KAAK;AAEL;;AAEG;IAEH,QAAQ,GAAY,KAAK;AAEzB;;AAEG;IAEH,QAAQ,GAAY,KAAK;AAEzB;;AAEG;IAEH,IAAI,GAAiC,QAAQ;AAE7C;;AAEG;IAEH,KAAK,GAAW,CAAC;AAEjB;;AAEG;IAEH,WAAW,GAAW,CAAC;AAEvB;;AAEG;AAOH,IAAA,eAAe;IAEP,WAAW,GAAG,MAAK;AACzB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;;AAEzC,KAAC;AAED;;AAEG;IACK,YAAY,GAAG,EAAE,CAAC;AACxB,QAAA,IAAI,EAAE,6GAA6G;AACnH,QAAA,QAAQ,EAAE;AACR,YAAA,IAAI,EAAE;AACJ,gBAAA,KAAK,EAAE,mBAAmB;AAC1B,gBAAA,MAAM,EAAE,kBAAkB;AAC1B,gBAAA,KAAK,EAAE,kBAAkB;AAC1B,aAAA;AACD,YAAA,QAAQ,EAAE;AACR,gBAAA,IAAI,EAAE,mBAAmB;AACzB,gBAAA,KAAK,EAAE,mBAAmB;AAC3B,aAAA;AACD,YAAA,QAAQ,EAAE;AACR,gBAAA,IAAI,EAAE,+BAA+B;AACrC,gBAAA,KAAK,EAAE,wCAAwC;AAChD,aAAA;AACF,SAAA;AACF,KAAA,CAAC;IAEF,MAAM,GAAA;;;AAGJ,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,WAAW,GAAG,CAAC;AAExE,QAAA,QACE,CAAA,CAAC,IAAI,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAC,IAAI,EAAC,OAAO,EAAA,cAAA,EAAe,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAA,EACvD,CAAA,CAAA,QAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EACE,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC;gBACvB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;aACxB,CAAC,EACF,OAAO,EAAE,IAAI,CAAC,WAAW,EACzB,QAAQ,EAAE,IAAI,CAAC,QAAQ,EACvB,IAAI,EAAC,QAAQ,EAAA,EAEb,CAAA,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,CAAQ,CACD,EAET,CAAA,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAK,KAAK,EAAE,CAAW,QAAA,EAAA,WAAW,GAAG,gBAAgB,GAAG,EAAE,CAAA,CAAE,EAAI,CAAA,CAC3D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","names":["BcmSegment","__stencil_proxyCustomElement","HTMLElement"],"sources":["src/components/segmented-picker/segment.css?tag=bcm-segment&encapsulation=shadow","src/components/segmented-picker/segment.component.tsx"],"sourcesContent":[":host {\n display: flex;\n align-items: center;\n position: relative;\n width: 100%;\n}\n\n.segment {\n white-space: nowrap;\n flex: 1;\n width: 100%;\n}\n\n.divider {\n position: absolute;\n right: 0;\n top: 50%;\n transform: translateY(-50%);\n width: 1px;\n height: 20px;\n background-color: var(--bcm-ui-color-border-default);\n transition: opacity 800ms cubic-bezier(0.4, 0, 0.2, 1);\n pointer-events: none;\n}\n\n.divider-hidden {\n opacity: 0;\n}\n","import { Component, Prop, h, Host, Element, Event, EventEmitter } from '@stencil/core';\nimport { tv } from '@utils/tv';\n\n/**\n * Individual segment option component\n * @slot - Default slot for segment label content\n */\n@Component({\n tag: 'bcm-segment',\n styleUrl: 'segment.css',\n shadow: true,\n})\nexport class BcmSegment {\n @Element() el: HTMLElement;\n\n /**\n * Unique identifier for this segment\n */\n @Prop({ reflect: true })\n value!: string;\n\n /**\n * Disabled state\n */\n @Prop({ reflect: true })\n disabled: boolean = false;\n\n /**\n * Selected state (controlled by parent)\n */\n @Prop({ mutable: true, reflect: true })\n selected: boolean = false;\n\n /**\n * Size variant (inherited from parent)\n */\n @Prop({ mutable: true })\n size: 'small' | 'medium' | 'large' = 'medium';\n\n /**\n * Index of this segment (inherited from parent)\n */\n @Prop({ mutable: true })\n index: number = 0;\n\n /**\n * Index of currently active segment (inherited from parent)\n */\n @Prop({ mutable: true })\n activeIndex: number = 0;\n\n /**\n * Internal event emitted when segment is clicked\n */\n @Event({\n composed: false,\n bubbles: true,\n cancelable: true,\n eventName: 'bcmSegmentClick',\n })\n bcmSegmentClick: EventEmitter<string>;\n\n private handleClick = () => {\n if (!this.disabled) {\n this.bcmSegmentClick.emit(this.value);\n }\n };\n\n /**\n * Tailwind class configuration\n */\n private segmentClass = tv({\n base: 'segment relative z-20 px-3 text-center font-medium transition-colors border-none bg-transparent select-none',\n variants: {\n size: {\n small: 'text-size-4 py-px',\n medium: 'text-size-5 py-1',\n large: 'text-size-6 py-2',\n },\n selected: {\n true: 'text-color-header',\n false: 'text-color-helper',\n },\n disabled: {\n true: 'cursor-not-allowed opacity-50',\n false: 'cursor-pointer hover:text-color-header',\n },\n },\n });\n\n render() {\n // Determine if divider should be hidden\n // Hide divider if this segment or the next segment is active\n const hideDivider = this.selected || this.index === this.activeIndex - 1;\n\n return (\n <Host role=\"radio\" aria-checked={this.selected.toString()}>\n <button\n class={this.segmentClass({\n size: this.size,\n selected: this.selected,\n disabled: this.disabled,\n })}\n onClick={this.handleClick}\n disabled={this.disabled}\n type=\"button\"\n >\n <slot />\n </button>\n {/* Divider after each segment except the last one */}\n <div class={`divider ${hideDivider ? 'divider-hidden' : ''}`} />\n </Host>\n );\n }\n}\n"],"version":3}