bitboss-ui 3.0.0-beta.35 → 3.0.0-beta.36

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 (299) hide show
  1. package/README.md +1 -1
  2. package/bin/bitboss-ui-mcp.mjs +12 -1
  3. package/dist/ai/BbAccordion.md +6 -6
  4. package/dist/ai/BbAlert.md +6 -1
  5. package/dist/ai/BbAvatar.md +1 -0
  6. package/dist/ai/BbBadge.md +15 -15
  7. package/dist/ai/BbBadgeButton.md +2 -2
  8. package/dist/ai/BbBreadcrumbs.md +11 -4
  9. package/dist/ai/BbButton.md +24 -21
  10. package/dist/ai/BbCalendar.md +23 -15
  11. package/dist/ai/BbCheckbox.md +13 -14
  12. package/dist/ai/BbCheckboxGroup.md +23 -16
  13. package/dist/ai/BbColorInput.md +22 -23
  14. package/dist/ai/BbColorPalette.md +6 -6
  15. package/dist/ai/BbConfirm.md +3 -3
  16. package/dist/ai/BbConfirmPortal.md +1 -1
  17. package/dist/ai/BbDatePicker.md +27 -24
  18. package/dist/ai/BbDatePickerInput.md +23 -34
  19. package/dist/ai/BbDialog.md +7 -7
  20. package/dist/ai/BbDropdown.md +17 -13
  21. package/dist/ai/BbDropdownButton.md +26 -15
  22. package/dist/ai/BbDropdownGroup.md +5 -5
  23. package/dist/ai/BbDropzone.md +6 -6
  24. package/dist/ai/BbForm.md +1 -1
  25. package/dist/ai/BbNumberInput.md +19 -20
  26. package/dist/ai/BbOffCanvas.md +8 -8
  27. package/dist/ai/BbPagination.md +2 -2
  28. package/dist/ai/BbPopover.md +7 -7
  29. package/dist/ai/BbRadio.md +13 -14
  30. package/dist/ai/BbRadioGroup.md +23 -16
  31. package/dist/ai/BbRating.md +18 -21
  32. package/dist/ai/BbSelect.md +57 -35
  33. package/dist/ai/BbSelectPopover.md +29 -29
  34. package/dist/ai/BbSlider.md +12 -13
  35. package/dist/ai/BbSwitch.md +14 -15
  36. package/dist/ai/BbSwitchGroup.md +23 -16
  37. package/dist/ai/BbTable.md +217 -58
  38. package/dist/ai/BbTabs.md +168 -88
  39. package/dist/ai/BbTabsList.md +28 -9
  40. package/dist/ai/{BbTabsPanes.md → BbTabsPanels.md} +28 -10
  41. package/dist/ai/BbTabsRoot.md +9 -27
  42. package/dist/ai/BbTag.md +52 -51
  43. package/dist/ai/BbTextInput.md +22 -21
  44. package/dist/ai/BbTextarea.md +23 -22
  45. package/dist/ai/BbTimePicker.md +18 -13
  46. package/dist/ai/BbTimePickerInput.md +24 -21
  47. package/dist/ai/BbToast.md +128 -31
  48. package/dist/ai/BbToastPortal.md +18 -18
  49. package/dist/ai/BbTooltip.md +2 -2
  50. package/dist/ai/BbTree.md +6 -6
  51. package/dist/ai/ChipsBox.md +20 -20
  52. package/dist/ai/CommaBox.md +2 -2
  53. package/dist/ai/CommonFieldInput.md +2 -2
  54. package/dist/ai/CommonPopover.md +5 -5
  55. package/dist/ai/CommonTimeSelector.md +8 -6
  56. package/dist/ai/FlatListBox.md +4 -4
  57. package/dist/ai/GroupedListBox.md +4 -4
  58. package/dist/ai/ListBox.md +8 -8
  59. package/dist/ai/OptionsContainer.md +1 -1
  60. package/dist/ai/changelog.json +102 -10
  61. package/dist/ai/components.json +3424 -1212
  62. package/dist/ai/composables/useBbTableContext.md +7 -3
  63. package/dist/ai/composables/useToast.md +1 -1
  64. package/dist/ai/guides/design-language.md +33 -33
  65. package/dist/ai/guides/design-tokens.md +19 -19
  66. package/dist/ai/guides/icons-policy.md +5 -7
  67. package/dist/ai/guides/installation-and-plugin-setup.md +34 -1
  68. package/dist/ai/guides/migration/components/bb-badge.md +5 -5
  69. package/dist/ai/guides/migration/components/bb-checkbox-group.md +17 -18
  70. package/dist/ai/guides/migration/components/bb-chip.md +6 -6
  71. package/dist/ai/guides/migration/components/bb-date-picker-input.md +5 -5
  72. package/dist/ai/guides/migration/components/bb-dialog.md +4 -4
  73. package/dist/ai/guides/migration/components/bb-rating.md +11 -10
  74. package/dist/ai/guides/migration/components/bb-select.md +1 -1
  75. package/dist/ai/guides/migration/components/bb-table.md +27 -27
  76. package/dist/ai/guides/migration/components/bb-tabs.md +27 -21
  77. package/dist/ai/guides/migration/components/bb-tag.md +9 -8
  78. package/dist/ai/guides/migration/components/bb-toast.md +1 -1
  79. package/dist/ai/guides/migration/components/bb-tree.md +1 -1
  80. package/dist/ai/guides/migration/components/use-confirm.md +1 -1
  81. package/dist/ai/guides/migration/v2-to-v3.md +134 -94
  82. package/dist/ai/guides/migration/v3-beta-css-classes.md +723 -0
  83. package/dist/ai/guides/options-items-playbook.md +5 -0
  84. package/dist/ai/guides/passthrough.md +91 -62
  85. package/dist/ai/index.md +5 -4
  86. package/dist/ai/source/BbAccordion.md +2 -1
  87. package/dist/ai/source/BbAvatar.md +6 -0
  88. package/dist/ai/source/BbBadge.md +16 -16
  89. package/dist/ai/source/BbBadgeButton.md +14 -14
  90. package/dist/ai/source/BbBreadcrumbs.md +51 -5
  91. package/dist/ai/source/BbButton.md +81 -7
  92. package/dist/ai/source/BbCalendar.md +98 -45
  93. package/dist/ai/source/BbCheckbox.md +2 -1
  94. package/dist/ai/source/BbCheckboxGroup.md +122 -94
  95. package/dist/ai/source/BbCollapsible.md +6 -0
  96. package/dist/ai/source/BbColorInput.md +14 -2
  97. package/dist/ai/source/BbColorPalette.md +10 -12
  98. package/dist/ai/source/BbConfirm.md +5 -2
  99. package/dist/ai/source/BbConfirmPortal.md +6 -3
  100. package/dist/ai/source/BbDatePicker.md +33 -14
  101. package/dist/ai/source/BbDatePickerInput.md +23 -27
  102. package/dist/ai/source/BbDialog.md +21 -4
  103. package/dist/ai/source/BbDropdown.md +20 -11
  104. package/dist/ai/source/BbDropdownButton.md +32 -5
  105. package/dist/ai/source/BbDropdownGroup.md +15 -9
  106. package/dist/ai/source/BbDropzone.md +7 -6
  107. package/dist/ai/source/BbIndicator.md +5 -5
  108. package/dist/ai/source/BbNumberInput.md +8 -1
  109. package/dist/ai/source/BbOffCanvas.md +35 -18
  110. package/dist/ai/source/BbPagination.md +16 -8
  111. package/dist/ai/source/BbPopover.md +6 -2
  112. package/dist/ai/source/BbRadio.md +2 -1
  113. package/dist/ai/source/BbRadioGroup.md +105 -92
  114. package/dist/ai/source/BbRating.md +17 -12
  115. package/dist/ai/source/BbSelect.md +97 -23
  116. package/dist/ai/source/BbSelectPopover.md +38 -37
  117. package/dist/ai/source/BbSlider.md +2 -1
  118. package/dist/ai/source/BbSwitchGroup.md +104 -92
  119. package/dist/ai/source/BbTable.md +315 -159
  120. package/dist/ai/source/BbTabs.md +193 -41
  121. package/dist/ai/source/BbTabsList.md +212 -54
  122. package/dist/ai/source/{BbTabsPanes.md → BbTabsPanels.md} +189 -50
  123. package/dist/ai/source/BbTabsRoot.md +148 -31
  124. package/dist/ai/source/BbTag.md +84 -23
  125. package/dist/ai/source/BbTextInput.md +13 -1
  126. package/dist/ai/source/BbTextarea.md +10 -2
  127. package/dist/ai/source/BbTimePicker.md +52 -13
  128. package/dist/ai/source/BbTimePickerInput.md +45 -10
  129. package/dist/ai/source/BbToast.md +113 -48
  130. package/dist/ai/source/BbToastPortal.md +117 -49
  131. package/dist/ai/source/BbTooltip.md +2 -2
  132. package/dist/ai/source/BbTree.md +4 -4
  133. package/dist/ai/source/ChipsBox.md +17 -7
  134. package/dist/ai/source/CommaBox.md +16 -9
  135. package/dist/ai/source/CommonField.md +7 -4
  136. package/dist/ai/source/CommonFieldInput.md +2 -0
  137. package/dist/ai/source/CommonTimeSelector.md +107 -25
  138. package/dist/ai/source/FlatListBox.md +6 -5
  139. package/dist/ai/source/GroupedListBox.md +6 -5
  140. package/dist/ai/source/OptionsContainer.md +12 -10
  141. package/dist/components/BbAccordion/types.d.ts +2 -1
  142. package/dist/components/BbBadge/BadgeBodyContent.vue_vue_type_script_setup_true_lang.js +4 -4
  143. package/dist/components/BbBadge/BbBadge.vue_vue_type_script_setup_true_lang.js +2 -2
  144. package/dist/components/BbBaseButton/BbBaseButton.vue_vue_type_script_setup_true_lang.js +5 -5
  145. package/dist/components/BbBreadcrumbs/BbBreadcrumbs.vue_vue_type_script_setup_true_lang.js +107 -98
  146. package/dist/components/BbButton/BbButton.vue.d.ts +5 -0
  147. package/dist/components/BbButton/BbButton.vue_vue_type_script_setup_true_lang.js +1 -1
  148. package/dist/components/BbButton/types.d.ts +64 -0
  149. package/dist/components/BbCalendar/BbCalendar.vue_vue_type_script_setup_true_lang.js +203 -172
  150. package/dist/components/BbCalendar/CalendarMonthPanel.vue_vue_type_script_setup_true_lang.js +1 -1
  151. package/dist/components/BbCalendar/CalendarYearPanel.vue_vue_type_script_setup_true_lang.js +1 -1
  152. package/dist/components/BbCalendar/types.d.ts +18 -8
  153. package/dist/components/BbCalendar/types.js +3 -2
  154. package/dist/components/BbCalendar/useCalendarGrid.js +14 -14
  155. package/dist/components/BbCalendar/useDayGrid.js +1 -1
  156. package/dist/components/BbCheckbox/types.d.ts +2 -1
  157. package/dist/components/BbCheckboxGroup/BbCheckboxGroup.vue_vue_type_script_setup_true_lang.js +103 -103
  158. package/dist/components/BbCheckboxGroup/types.d.ts +2 -1
  159. package/dist/components/BbColorInput/BbColorInput.vue.d.ts +2 -2
  160. package/dist/components/BbColorInput/types.d.ts +14 -2
  161. package/dist/components/BbColorPalette/BbColorPalette.vue.d.ts +2 -2
  162. package/dist/components/BbColorPalette/BbColorPalette.vue_vue_type_script_setup_true_lang.js +2 -2
  163. package/dist/components/BbColorPalette/types.d.ts +2 -2
  164. package/dist/components/BbConfirm/BbConfirm.vue_vue_type_script_setup_true_lang.js +5 -2
  165. package/dist/components/BbConfirm/BbConfirmPortal.vue.d.ts +1 -0
  166. package/dist/components/BbDatePicker/BbDatePicker.vue.d.ts +2 -2
  167. package/dist/components/BbDatePicker/BbDatePicker.vue_vue_type_script_setup_true_lang.js +52 -36
  168. package/dist/components/BbDatePicker/types.d.ts +13 -5
  169. package/dist/components/BbDatePicker/types.js +3 -2
  170. package/dist/components/BbDatePickerInput/BbDatePickerInput.vue.d.ts +2 -2
  171. package/dist/components/BbDatePickerInput/BbDatePickerInput.vue_vue_type_script_setup_true_lang.js +348 -340
  172. package/dist/components/BbDatePickerInput/types.d.ts +10 -3
  173. package/dist/components/BbDatePickerInput/types.js +3 -2
  174. package/dist/components/BbDialog/BbDialog.vue.d.ts +1 -1
  175. package/dist/components/BbDialog/BbDialog.vue_vue_type_script_setup_true_lang.js +131 -122
  176. package/dist/components/BbDropdown/AdaptiveDropdown.vue_vue_type_script_setup_true_lang.js +2 -2
  177. package/dist/components/BbDropdown/BbDropdown.vue.d.ts +4 -4
  178. package/dist/components/BbDropdown/BbDropdown.vue_vue_type_script_setup_true_lang.js +177 -176
  179. package/dist/components/BbDropdown/BbDropdownGroup.vue.d.ts +4 -0
  180. package/dist/components/BbDropdown/BbDropdownList.vue_vue_type_script_setup_true_lang.js +5 -5
  181. package/dist/components/BbDropdown/DropdownPipelineResolver.vue_vue_type_script_setup_true_lang.js +102 -102
  182. package/dist/components/BbDropdown/types.d.ts +3 -1
  183. package/dist/components/BbDropdownButton/BbDropdownButton.vue.d.ts +4 -4
  184. package/dist/components/BbDropdownButton/BbDropdownButton.vue_vue_type_script_setup_true_lang.js +34 -23
  185. package/dist/components/BbDropdownButton/types.d.ts +13 -2
  186. package/dist/components/BbDropdownButton/types.js +2 -0
  187. package/dist/components/BbDropzone/BbDropzone.vue_vue_type_script_setup_true_lang.js +3 -3
  188. package/dist/components/BbDropzone/types.d.ts +2 -1
  189. package/dist/components/BbIndicator/BbIndicator.vue_vue_type_script_setup_true_lang.js +1 -1
  190. package/dist/components/BbNumberInput/types.d.ts +8 -1
  191. package/dist/components/BbOffCanvas/BbOffCanvas.vue.d.ts +1 -1
  192. package/dist/components/BbOffCanvas/BbOffCanvas.vue_vue_type_script_setup_true_lang.js +186 -178
  193. package/dist/components/BbPagination/BbPagination.vue_vue_type_script_setup_true_lang.js +65 -57
  194. package/dist/components/BbPopover/BbPopover.vue.d.ts +1 -1
  195. package/dist/components/BbPopover/BbPopover.vue_vue_type_script_setup_true_lang.js +1 -1
  196. package/dist/components/BbPopover/types.d.ts +2 -1
  197. package/dist/components/BbRadio/types.d.ts +2 -1
  198. package/dist/components/BbRadioGroup/BbRadioGroup.vue_vue_type_script_setup_true_lang.js +68 -68
  199. package/dist/components/BbRadioGroup/types.d.ts +2 -1
  200. package/dist/components/BbRating/BbRating.vue_vue_type_script_setup_true_lang.js +6 -6
  201. package/dist/components/BbRating/types.d.ts +5 -2
  202. package/dist/components/BbSelect/BbSelect.vue_vue_type_script_setup_true_lang.js +41 -22
  203. package/dist/components/BbSelect/types.d.ts +42 -11
  204. package/dist/components/BbSelect/types.js +17 -5
  205. package/dist/components/BbSelectPopover/BbSelectPopover.vue_vue_type_script_setup_true_lang.js +306 -306
  206. package/dist/components/BbSlider/types.d.ts +2 -1
  207. package/dist/components/BbSwitchGroup/BbSwitchGroup.vue_vue_type_script_setup_true_lang.js +102 -102
  208. package/dist/components/BbTable/BbTable.vue_vue_type_script_setup_true_lang.js +892 -771
  209. package/dist/components/BbTable/BbTableDataRow.d.ts +3 -3
  210. package/dist/components/BbTable/BbTableDataRow.js +17 -7
  211. package/dist/components/BbTable/BbTableSelectToggle.d.ts +17 -0
  212. package/dist/components/BbTable/BbTableSelectToggle.js +8 -0
  213. package/dist/components/BbTable/types.d.ts +52 -10
  214. package/dist/components/BbTable/types.js +14 -1
  215. package/dist/components/BbTabs/BbTabs.vue_vue_type_script_setup_true_lang.js +44 -23
  216. package/dist/components/BbTabs/BbTabsList.vue_vue_type_script_setup_true_lang.js +101 -64
  217. package/dist/components/BbTabs/BbTabsPanels.vue.d.ts +12 -0
  218. package/dist/components/BbTabs/BbTabsPanels.vue.js +6 -0
  219. package/dist/components/BbTabs/BbTabsPanels.vue_vue_type_script_setup_true_lang.js +59 -0
  220. package/dist/components/BbTabs/BbTabsRoot.vue_vue_type_script_setup_true_lang.js +0 -10
  221. package/dist/components/BbTabs/types.d.ts +115 -28
  222. package/dist/components/BbTabs/types.js +24 -1
  223. package/dist/components/BbTag/BbTag.vue_vue_type_script_setup_true_lang.js +17 -8
  224. package/dist/components/BbTag/types.d.ts +47 -14
  225. package/dist/components/BbTag/types.js +19 -5
  226. package/dist/components/BbTextInput/BbTextInput.vue_vue_type_script_setup_true_lang.js +5 -5
  227. package/dist/components/BbTextInput/types.d.ts +8 -1
  228. package/dist/components/BbTextarea/types.d.ts +10 -2
  229. package/dist/components/BbTimePicker/BbTimePicker.vue.d.ts +2 -2
  230. package/dist/components/BbTimePicker/BbTimePicker.vue_vue_type_script_setup_true_lang.js +28 -4
  231. package/dist/components/BbTimePicker/types.d.ts +28 -7
  232. package/dist/components/BbTimePicker/types.js +7 -1
  233. package/dist/components/BbTimePickerInput/BbTimePickerInput.vue.d.ts +2 -2
  234. package/dist/components/BbTimePickerInput/BbTimePickerInput.vue_vue_type_script_setup_true_lang.js +25 -3
  235. package/dist/components/BbTimePickerInput/types.d.ts +28 -5
  236. package/dist/components/BbTimePickerInput/types.js +2 -0
  237. package/dist/components/BbToast/BbToast.vue_vue_type_script_setup_true_lang.js +12 -0
  238. package/dist/components/BbToast/BbToastMessage.vue.d.ts +3 -3
  239. package/dist/components/BbToast/BbToastMessage.vue_vue_type_script_setup_true_lang.js +72 -70
  240. package/dist/components/BbToast/BbToastPortal.vue.d.ts +1 -0
  241. package/dist/components/BbToast/BbToastRegion.vue.d.ts +2 -2
  242. package/dist/components/BbToast/types.d.ts +35 -10
  243. package/dist/components/BbToast/types.js +16 -1
  244. package/dist/components/BbTooltip/BbTooltip.vue_vue_type_script_setup_true_lang.js +1 -1
  245. package/dist/components/BbTree/BbTreeLevel.vue_vue_type_script_setup_true_lang.js +4 -4
  246. package/dist/components/ChipsBox/ChipsBox.vue_vue_type_script_setup_true_lang.js +41 -41
  247. package/dist/components/ChipsBox/types.d.ts +4 -3
  248. package/dist/components/CommaBox/CommaBox.vue_vue_type_script_setup_true_lang.js +2 -2
  249. package/dist/components/CommaBox/types.d.ts +4 -3
  250. package/dist/components/CommonField/CommonField.vue_vue_type_script_setup_true_lang.js +4 -3
  251. package/dist/components/CommonFieldInput/CommonFieldInput.vue_vue_type_script_setup_true_lang.js +5 -1
  252. package/dist/components/CommonPopover/CommonPopover.vue.d.ts +1 -1
  253. package/dist/components/CommonTimeSelector/CommonTimeSelector.vue.d.ts +19 -3
  254. package/dist/components/CommonTimeSelector/CommonTimeSelector.vue_vue_type_script_setup_true_lang.js +114 -89
  255. package/dist/components/FlatListBox/FlatListBox.vue_vue_type_script_setup_true_lang.js +105 -104
  256. package/dist/components/GroupedListBox/GroupedListBox.vue_vue_type_script_setup_true_lang.js +6 -5
  257. package/dist/components/OptionsContainer/OptionsContainer.vue_vue_type_script_setup_true_lang.js +5 -3
  258. package/dist/components/OptionsContainer/types.d.ts +2 -2
  259. package/dist/composables/useBbTableContext.d.ts +33 -1
  260. package/dist/composables/useBbTableContext.js +83 -81
  261. package/dist/composables/useBbTabsContext.d.ts +10 -18
  262. package/dist/composables/useBbTabsContext.js +123 -133
  263. package/dist/composables/useCoarsePointer.js +7 -10
  264. package/dist/composables/useHydrated.d.ts +18 -0
  265. package/dist/composables/useHydrated.js +13 -7
  266. package/dist/composables/useMobile.js +8 -11
  267. package/dist/composables/usePassthrough.d.ts +22 -1
  268. package/dist/composables/usePassthrough.js +76 -63
  269. package/dist/composables/useViewportWidth.d.ts +5 -39
  270. package/dist/composables/useViewportWidth.js +13 -7
  271. package/dist/deprecation/ai-deprecations.json.d.ts +22 -0
  272. package/dist/deprecation/ai-deprecations.json.js +1 -1
  273. package/dist/index.d.ts +2 -2
  274. package/dist/index.js +29 -29
  275. package/dist/llms-full.txt +2464 -1190
  276. package/dist/llms-medium.txt +70 -37
  277. package/dist/llms.txt +2 -1
  278. package/dist/nuxt-auto-imports.js +1 -1
  279. package/dist/nuxt-module.d.ts +7 -0
  280. package/dist/nuxt.js +26 -17
  281. package/dist/plugin.js +24 -17
  282. package/dist/runtime/nuxt-plugin.js +26 -22
  283. package/dist/styles.css +2 -2
  284. package/dist/types/ToastVariant.d.ts +1 -1
  285. package/dist/types/passthrough.d.ts +1 -1
  286. package/dist/types/ptComponentMap.d.ts +13 -11
  287. package/dist/utils/versionCheck.js +1 -1
  288. package/dist/validated/BbDatePickerInput.vue_vue_type_script_setup_true_lang.js +32 -16
  289. package/dist/validated/BbSelect.vue.d.ts +36 -18
  290. package/dist/validated/BbSelect.vue_vue_type_script_setup_true_lang.js +27 -9
  291. package/dist/validated/BbTag.vue_vue_type_script_setup_true_lang.js +16 -7
  292. package/dist/validated/BbTimePickerInput.vue_vue_type_script_setup_true_lang.js +18 -0
  293. package/llms.txt +2 -1
  294. package/package.json +13 -6
  295. package/scripts/lib/component-attr-targets.ts +6 -0
  296. package/scripts/lib/validate-bb-markup.mjs +120 -5
  297. package/dist/components/BbTabs/BbTabsPanes.vue.d.ts +0 -16
  298. package/dist/components/BbTabs/BbTabsPanes.vue.js +0 -6
  299. package/dist/components/BbTabs/BbTabsPanes.vue_vue_type_script_setup_true_lang.js +0 -36
package/README.md CHANGED
@@ -78,7 +78,7 @@ Product-ready components with labels, hints, errors, and consistent styling:
78
78
 
79
79
  - **Forms & actions:** `BbTextInput`, `BbTextarea`, `BbNumberInput`, `BbSelect`, `BbSelectPopover`, `BbCheckbox`, `BbCheckboxGroup`, `BbRadio`, `BbRadioGroup`, `BbSwitch`, `BbSwitchGroup`, `BbSlider`, `BbRating`, `BbColorInput`, `BbColorPalette`, `BbDatePicker`, `BbDatePickerInput`, `BbTimePicker`, `BbTimePickerInput`, `BbButton`, `BbBadge`, `BbBadgeButton`, `BbIndicator`, `BbTag`, `BbDropdown`, `BbDropdownGroup`, `BbDropdownButton`, `BbAsterisk`
80
80
  - **Feedback:** `BbAlert`, `BbProgress`, `BbSpinner`, `BbToast`, `BbToastPortal`, `BbTooltip`
81
- - **Layout & navigation:** `BbAccordion`, `BbCollapsible`, `BbTabs` (+ `BbTabsRoot`, `BbTabsList`, `BbTabsPanes`), `BbBreadcrumbs`, `BbPagination`, `BbSmoothHeight`
81
+ - **Layout & navigation:** `BbAccordion`, `BbCollapsible`, `BbTabs` (+ `BbTabsRoot`, `BbTabsList`, `BbTabsPanels`), `BbBreadcrumbs`, `BbPagination`, `BbSmoothHeight`
82
82
  - **Overlays & panels:** `BbDialog`, `BbConfirm`, `BbConfirmPortal`, `BbOffCanvas`, `BbPopover`
83
83
  - **Data:** `BbTable`, `BbTree`
84
84
  - **Media & files:** `BbAvatar`, `BbDropzone`, `BbIcon`
@@ -316,6 +316,8 @@ function searchComponents({ query, limit, includeReferenceOnly } = {}) {
316
316
  ...(type.deprecated ? { deprecated: true } : {}),
317
317
  ...(type.replacedBy ? { replacedBy: type.replacedBy } : {}),
318
318
  usedBy: type.usedBy ?? [],
319
+ // The short answer only; get_component(name) has the definition.
320
+ ...(type.values ? { values: type.values } : {}),
319
321
  import: `import type { ${type.replacedBy ?? type.name} } from 'bitboss-ui';`,
320
322
  }));
321
323
 
@@ -425,9 +427,16 @@ function getComponent({ name, maxChars } = {}) {
425
427
  ...(type.replacedBy ? { replacedBy: type.replacedBy } : {}),
426
428
  component: type.component,
427
429
  usedBy: type.usedBy ?? [],
430
+ // What it is (Q50.2): the declaration, the accepted values when
431
+ // finite (open when `extensibleVia` names a registry), and the
432
+ // resolved fields when the declaration leans on a private type.
433
+ ...(type.definition ? { definition: type.definition } : {}),
434
+ ...(type.values ? { values: type.values } : {}),
435
+ ...(type.extensibleVia ? { extensibleVia: type.extensibleVia } : {}),
436
+ ...(type.fields ? { fields: type.fields } : {}),
428
437
  import: `import type { ${type.replacedBy ?? name} } from 'bitboss-ui';`,
429
438
  hint: use
430
- ? `A type, not a component: it types ${possessive(use.component)} \`${use.name}\` ${use.surface}. Call get_component('${use.component}') for the contract that documents its fields.`
439
+ ? `A type, not a component: it types ${possessive(use.component)} \`${use.name}\` ${use.surface}. \`definition\` above is the type itself; call get_component('${use.component}') to see it in use.`
431
440
  : 'A type, not a component — import it for the value you pass, never write it as a tag.',
432
441
  };
433
442
  }
@@ -467,6 +476,8 @@ function getComponent({ name, maxChars } = {}) {
467
476
  name: type.name,
468
477
  usage: type.usage,
469
478
  usedBy: (type.usedBy ?? []).filter((use) => use.component === entry.name),
479
+ ...(type.values ? { values: type.values } : {}),
480
+ ...(type.extensibleVia ? { extensibleVia: type.extensibleVia } : {}),
470
481
  import: `import type { ${type.name} } from 'bitboss-ui';`,
471
482
  }));
472
483
 
@@ -234,13 +234,13 @@ const endpoints = ref<Endpoint[]>([
234
234
  Non-scoped so variant classes on the child badge receive the accents. -->
235
235
  <style>
236
236
  .bb-badge.bb-badge--soft-blue {
237
- --accent: #2563eb;
237
+ --accent: var(--bb-info);
238
238
  }
239
239
  .bb-badge.bb-badge--soft-green {
240
- --accent: #16a34a;
240
+ --accent: var(--bb-success);
241
241
  }
242
242
  .bb-badge.bb-badge--soft-red {
243
- --accent: #dc2626;
243
+ --accent: var(--bb-danger);
244
244
  }
245
245
  .bb-badge.bb-badge--soft-blue,
246
246
  .bb-badge.bb-badge--soft-green,
@@ -619,7 +619,7 @@ grammar, the merge rules and the global map are in the
619
619
  | --- | --- | --- | --- | --- |
620
620
  | `pt:<part>`, `pt:<part>:<state>`, `pt` | `PtValue` | | | Passthrough — a class list, or `{ class, style, attrs }`, bound to one named part of the component; the state form applies only while that state is on. Parts: `header`, `panel`, `root`. States: `open`. What each one is: _Passthrough parts and states_ below. `pt` is the object form with the same keys minus the prefix (`{ icon: '…', 'icon:loading': '…' }`). See `guides/passthrough.md`. |
621
621
  | `eager` | `boolean \| undefined` | `false` | | Prevents rendering content before it's made visible. |
622
- | `id` | `string \| undefined` | | | The identifier of the component. |
622
+ | `id` | `string \| undefined` | | | The root's `id`; the header button's id (`<id>_header`) derives from it. Generated when omitted. |
623
623
  | `modelValue` | `boolean \| undefined` | `false` | | Used by v-model to trigger opening / closing the collapsible. An accordion with no `v-model` starts closed. |
624
624
  | `transitionDuration` | `number \| undefined` | `250` | | How long the transition has to last in milliseconds |
625
625
 
@@ -641,7 +641,7 @@ States are listed in precedence order: when two are on at once and their entries
641
641
 
642
642
  ## Events
643
643
 
644
- - `update:modelValue` — `(event: "update:modelValue", value: boolean): void`
644
+ - `update:modelValue` — `(value: boolean): void` — Emitted with the new value whenever `v-model` changes.
645
645
 
646
646
  ## Slots
647
647
 
@@ -664,4 +664,4 @@ States are listed in precedence order: when two are on at once and their entries
664
664
  ## See Also
665
665
 
666
666
  - [BbCollapsible](./BbCollapsible.md) — Toggles visibility of collapsible content blocks.
667
- - [BbTabs](./BbTabs.md) — Switches between tabbed content views (shadcn-like strip; the co-located BbTabsRoot / BbTabsList / BbTabsPanes exports enable split layouts).
667
+ - [BbTabs](./BbTabs.md) — Switches between tabbed content views (shadcn-like strip; the co-located BbTabsRoot / BbTabsList / BbTabsPanels exports enable split layouts).
@@ -53,6 +53,11 @@ the user should attend to; `destructive` reports a failure or dangerous state.
53
53
  An alert reads far better with a matching leading `icon`, so treat variant and
54
54
  icon as a pair.
55
55
 
56
+ There is no `success` or `info` alert, on purpose (the built-in ramps stay
57
+ closed): a confirmation is usually a toast, and a neutral note is `outline`
58
+ with an icon. When an app needs one anyway, register it with the plugin's
59
+ `alertVariants` option and colour it from `--bb-success` / `--bb-info`.
60
+
56
61
  **Semantic variants, each with a fitting icon**
57
62
 
58
63
  ```vue
@@ -475,7 +480,7 @@ full grammar, the merge rules and the global map are in the
475
480
 
476
481
  ## Events
477
482
 
478
- - `update:modelValue` — `(event: "update:modelValue", value: boolean): void`
483
+ - `update:modelValue` — `(value: boolean): void` — Emitted with the new value whenever `v-model` changes.
479
484
 
480
485
  ## Slots
481
486
 
@@ -648,6 +648,7 @@ Set these on the element, or on a class you put on it, to retune this component
648
648
  | `--bg` | `.bb-avatar` | `var(--bb-primary)` | fallback surface (an image covers it) |
649
649
  | `--fg` | `.bb-avatar` | `var(--bb-primary-fg)` | Initials; the built-in icon is an 80/20 mix of this toward --bg |
650
650
  | `--default-icon-size` | `.bb-avatar` | `clamp(14px, calc(var(--size) * 0.7), 48px)` | Built-in fallback icon: 70% of the avatar, floored at 14px and capped at 48px. `--size` is the avatar's own box, set inline from the `size` prop. |
651
+ | `--fs` | `.bb-avatar` | `max(8px, calc(var(--size) * 0.4))` | Initials: 40% of the avatar, floored at 8px |
651
652
  | `--elev` | `.bb-avatar` | `var(--bb-elev-sm)` | The theme's resting lift on small chrome (Q44.15), declared here so an ancestor's `--elev` cannot reach in; `--elev: none` flattens one. |
652
653
  | `--size` | `.bb-avatar__default-icon` | `var(--default-icon-size)` | |
653
654
 
@@ -161,19 +161,19 @@ const invoices: InvoiceRow[] = [
161
161
  Non-scoped so variant classes on the child badge receive the accents. -->
162
162
  <style>
163
163
  .bb-badge.bb-badge--soft-gray {
164
- --accent: #64748b;
164
+ --accent: var(--bb-text-muted);
165
165
  }
166
166
  .bb-badge.bb-badge--soft-blue {
167
- --accent: #2563eb;
167
+ --accent: var(--bb-info);
168
168
  }
169
169
  .bb-badge.bb-badge--soft-green {
170
- --accent: #16a34a;
170
+ --accent: var(--bb-success);
171
171
  }
172
172
  .bb-badge.bb-badge--soft-amber {
173
- --accent: #d97706;
173
+ --accent: var(--bb-warn);
174
174
  }
175
175
  .bb-badge.bb-badge--soft-red {
176
- --accent: #dc2626;
176
+ --accent: var(--bb-danger);
177
177
  }
178
178
 
179
179
  .bb-badge.bb-badge--soft-gray,
@@ -650,12 +650,12 @@ and the clear control be independent controls:
650
650
  <!-- <button>/<a> in button mode -->
651
651
  <svg class="bb-badge__prepend-icon" />
652
652
  <!-- or __icon / BbSpinner -->
653
- <span class="bb-badge__content">label</span>
653
+ <span class="bb-badge__text">label</span>
654
654
  </span>
655
655
  <span class="bb-badge__trailing">
656
656
  <!-- only when needed -->
657
657
  <svg class="bb-badge__append-icon" />
658
- <button class="bb-badge__clear-button">…</button>
658
+ <button class="bb-badge__clear">…</button>
659
659
  </span>
660
660
  </span>
661
661
  ```
@@ -669,7 +669,7 @@ Focus is always ringed on the **whole pill** (never on the inner control), for
669
669
  the body and the clear button alike; the clear button additionally lights its
670
670
  glyph. The class hooks above are the supported styling surface —
671
671
  `.bb-badge__body` and `.bb-badge__trailing` are new, so avoid direct-child
672
- selectors like `.bb-badge > .bb-badge__content`, which no longer match.
672
+ selectors like `.bb-badge > .bb-badge__text`, which no longer match.
673
673
 
674
674
  ### Restyling with passthrough
675
675
 
@@ -767,13 +767,13 @@ const endpoints: Endpoint[] = [
767
767
  Non-scoped so variant classes on the child badge receive the accents. -->
768
768
  <style>
769
769
  .bb-badge.bb-badge--soft-blue {
770
- --accent: #2563eb;
770
+ --accent: var(--bb-info);
771
771
  }
772
772
  .bb-badge.bb-badge--soft-green {
773
- --accent: #16a34a;
773
+ --accent: var(--bb-success);
774
774
  }
775
775
  .bb-badge.bb-badge--soft-red {
776
- --accent: #dc2626;
776
+ --accent: var(--bb-danger);
777
777
  }
778
778
  .bb-badge.bb-badge--soft-blue,
779
779
  .bb-badge.bb-badge--soft-green,
@@ -874,7 +874,7 @@ States are listed in precedence order: when two are on at once and their entries
874
874
 
875
875
  ## Events
876
876
 
877
- - `click:clear` — `(event: "click:clear", event: MouseEvent): void`
877
+ - `click:clear` — `(event: MouseEvent): void` — Emitted when the clear button is pressed (only rendered when `clearable`).
878
878
 
879
879
  ## Slots
880
880
 
@@ -892,11 +892,11 @@ Set these on the element, or on a class you put on it, to retune this component
892
892
  | `--border-color` | `.bb-badge` | `transparent` | |
893
893
  | `--ring-color` | `.bb-badge` | `var(--bb-primary-ring)` | focus ring colour, per variant |
894
894
  | `--ring-size` | `.bb-badge` | `var(--bb-ring-size)` | focus ring width |
895
- | `--min-size-md` | `.bb-badge` | `calc(var(--bb-control-h) - 16px)` | 16px at the default |
895
+ | `--min-size-md` | `.bb-badge` | `calc(var(--bb-control-h) - 14px)` | 18px at the default |
896
896
  | `--min-size` | `.bb-badge` | `var(--min-size-md)` | pill min height and min width |
897
897
  | `--elev` | `.bb-badge` | `var(--bb-elev-sm)` | Resting lift. Invisible while `--bb-elev` is its default transparent layer. A chip is small enough that a theme wanting a different lift here than on a button sets `--elev` on this class. |
898
898
  | `--r` | `.bb-badge` | `calc(var(--bb-radius) * 0.5)` | Pill corners; the body and trailing wrappers round their outer edges to match |
899
- | `--fs` | `.bb-badge` | `calc(var(--bb-fs) - 4px)` | Label. Sizes are offsets from the density masters (--bb-fs, --bb-control-h), like BbButton's, so a denser theme scales the pill. |
899
+ | `--fs` | `.bb-badge` | `calc(var(--bb-fs) - 2px)` | 12px at the default (Q49.25) |
900
900
  | `--icon-size` | `.bb-badge` | `12px` | leading/append icons (passed to BbIcon as --size) |
901
901
  | `--gap` | `.bb-badge` | `3px` | space between label, icons and the trailing side |
902
902
  | `--px` | `.bb-badge` | `6px` | base side padding; the modifiers below scale it per side |
@@ -914,7 +914,7 @@ Set these on the element, or on a class you put on it, to retune this component
914
914
  - **CSS custom properties** listed on a node are declared on THAT node's root and read by elements inside it. Set one on that node's root or on the element inside it that reads it — the pt part that lands there is how you reach it (`pt:box="[--border-color:…]"` on a text input) — never on `BbBadge`'s root, where the node's own declaration masks it (design-tokens guide, _Overriding one from a consumer app_, rule 0).
915
915
  - Listed nodes are the ones `BbBadge`'s API reaches or that declare a documented CSS variable; the rest fold into "also mounts". The complete tree, repeats and undocumented locals included, is the `tree` field of this component in `components.json`.
916
916
 
917
- - `BbBadge` _(this component)_ — its own template binds: `spinner` → `BbSpinner`, `icon` → `BbIcon`, `clear` → `button.bb-badge__clear-button`
917
+ - `BbBadge` _(this component)_ — its own template binds: `spinner` → `BbSpinner`, `icon` → `BbIcon`, `clear` → `button.bb-badge__clear`
918
918
  - Also mounts `BbIcon`, `BbSpinner`, `BadgeBodyContent`
919
919
 
920
920
  ## See Also
@@ -88,11 +88,11 @@ Set these on the element, or on a class you put on it, to retune this component
88
88
  | `--border-color` | `.bb-badge` | `transparent` | |
89
89
  | `--ring-color` | `.bb-badge` | `var(--bb-primary-ring)` | focus ring colour, per variant |
90
90
  | `--ring-size` | `.bb-badge` | `var(--bb-ring-size)` | focus ring width |
91
- | `--min-size-md` | `.bb-badge` | `calc(var(--bb-control-h) - 16px)` | 16px at the default |
91
+ | `--min-size-md` | `.bb-badge` | `calc(var(--bb-control-h) - 14px)` | 18px at the default |
92
92
  | `--min-size` | `.bb-badge` | `var(--min-size-md)` | pill min height and min width |
93
93
  | `--elev` | `.bb-badge` | `var(--bb-elev-sm)` | Resting lift. Invisible while `--bb-elev` is its default transparent layer. A chip is small enough that a theme wanting a different lift here than on a button sets `--elev` on this class. |
94
94
  | `--r` | `.bb-badge` | `calc(var(--bb-radius) * 0.5)` | Pill corners; the body and trailing wrappers round their outer edges to match |
95
- | `--fs` | `.bb-badge` | `calc(var(--bb-fs) - 4px)` | Label. Sizes are offsets from the density masters (--bb-fs, --bb-control-h), like BbButton's, so a denser theme scales the pill. |
95
+ | `--fs` | `.bb-badge` | `calc(var(--bb-fs) - 2px)` | 12px at the default (Q49.25) |
96
96
  | `--icon-size` | `.bb-badge` | `12px` | leading/append icons (passed to BbIcon as --size) |
97
97
  | `--gap` | `.bb-badge` | `3px` | space between label, icons and the trailing side |
98
98
  | `--px` | `.bb-badge` | `6px` | base side padding; the modifiers below scale it per side |
@@ -157,6 +157,13 @@ visible. Hidden crumbs keep their full navigation target inside the menu, so
157
157
  nothing becomes unreachable. Just pass the full `items` array and let the
158
158
  component measure — narrow the frame below to watch it collapse.
159
159
 
160
+ **The current page never folds.** When not even it fits beside the `…`, every
161
+ other crumb goes into the menu and the current page stays, its label truncated
162
+ with an ellipsis (the full text in a tooltip and to assistive tech). That is the
163
+ floor: in a very narrow toolbar the trail reads `… / Quarterly rev…`. If that is
164
+ too little, give the trail its own full-width row, or shorten the last label
165
+ (`text` is yours).
166
+
160
167
  **Overflow folds into an ellipsis menu**
161
168
 
162
169
  ```vue
@@ -722,13 +729,13 @@ States are listed in precedence order: when two are on at once and their entries
722
729
 
723
730
  - `BbBreadcrumbs` _(this component)_ — its own template binds: `item` → `li.bb-breadcrumbs__item`, `icon` → `BbIcon`, `text` → `span.bb-breadcrumbs__text`
724
731
  - `BbBaseButton` _(public — [contract](./BbBaseButton.md))_ — its own pt parts (`BbBaseButton`): `root` → `RouterComponent`, `root` → `a`, `root` → `component`; also mounts `RouterComponent`
725
- - `BbDropdown` _(public — [contract](./BbDropdown.md))_ — its own pt parts (`BbDropdown`): `panel` → `CommonPopover`, `root` → `CommonPopover`, `header` → `div.bb-dropdown__header`, `list` → `span.bb-dropdown__items-container`, `footer` → `div.bb-dropdown__footer`; documented CSS variables: `--menu-inset`; also mounts `CommonPopover`, `DropdownPipelineResolver`
732
+ - `BbDropdown` _(public — [contract](./BbDropdown.md))_ — its own pt parts (`BbDropdown`): `panel` → `CommonPopover`, `root` → `CommonPopover`, `header` → `div.bb-dropdown__header`, `list` → `span.bb-dropdown__list`, `footer` → `div.bb-dropdown__footer`; documented CSS variables: `--menu-inset`; also mounts `CommonPopover`, `DropdownPipelineResolver`
726
733
  - `BbDropdownList` _(internal — not importable, reach it through `BbDropdown`)_ — also mounts `BbBaseButton`, `BbIcon`, `CommonPopover`, `BbDropdownList`
727
- - `BbBadge` _(public — [contract](./BbBadge.md))_ — its own pt parts (`BbBadge`): `spinner` → `BbSpinner`, `icon` → `BbIcon`, `clear` → `button.bb-badge__clear-button`; documented CSS variables: `--bg`, `--fg`, `--bw`, `--ring-color`, `--ring-size`, `--min-size-md`, `--min-size`, `--elev`, `--r`, `--fs`, `--icon-size`, `--gap`, `--px`, `--clear-size`, `--pad-left`; also mounts `BbIcon`, `BbSpinner`, `BadgeBodyContent`
734
+ - `BbBadge` _(public — [contract](./BbBadge.md))_ — its own pt parts (`BbBadge`): `spinner` → `BbSpinner`, `icon` → `BbIcon`, `clear` → `button.bb-badge__clear`; documented CSS variables: `--bg`, `--fg`, `--bw`, `--ring-color`, `--ring-size`, `--min-size-md`, `--min-size`, `--elev`, `--r`, `--fs`, `--icon-size`, `--gap`, `--px`, `--clear-size`, `--pad-left`; also mounts `BbIcon`, `BbSpinner`, `BadgeBodyContent`
728
735
  - `AdaptiveDropdown` _(internal — not importable, reach it through `BbDropdown`)_ — hands `BbOffCanvas` the pt map `{ header: 'header', footer: 'footer', panel: 'root', sheet: 'root' }` (ours → theirs); also mounts `BbSmoothHeight`, `BbDropdownList`
729
- - `BbOffCanvas` _(public — [contract](./BbOffCanvas.md))_ — its own pt parts (`BbOffCanvas`): `header` → `div.bb-offcanvas__header`, `title` → `span.bb-offcanvas__title`, `description` → `p.bb-offcanvas__description`, `close` → `CloseButton`, `content` → `div.bb-offcanvas__body`, `footer` → `div.bb-offcanvas__footer`; documented CSS variables: `--stack-x`, `--stack-fill`, `--stack-transition-duration`, `--px`, `--handle-w`, `--handle-h`, `--handle-bg`, `--safe-top`, `--close-size`
736
+ - `BbOffCanvas` _(public — [contract](./BbOffCanvas.md))_ — its own pt parts (`BbOffCanvas`): `header` → `div.bb-offcanvas__header`, `title` → `span.bb-offcanvas__title`, `description` → `p.bb-offcanvas__description`, `close` → `CloseButton`, `content` → `div.bb-offcanvas__content`, `footer` → `div.bb-offcanvas__footer`; documented CSS variables: `--stack-x`, `--stack-fill`, `--stack-transition-duration`, `--px`, `--handle-w`, `--handle-h`, `--handle-bg`, `--safe-top`, `--close-size`
730
737
  - `CloseButton` _(internal — not importable, reach it through `BbOffCanvas`)_ — documented CSS variables: `--size`, `--p`
731
- - `BbButton` _(public — [contract](./BbButton.md))_ — its own pt parts (`BbButton`): `root` → `BbBaseButton`, `spinner` → `BbSpinner`, `icon` → `BbIcon`, `text` → `span.bb-button__content`; documented CSS variables: `--h-xs`, `--h`, `--icon-size`, `--px`, `--fs`, `--r`, `--gap`, `--bg`, `--bg-hover`, `--bg-pressed`, `--fg`, `--border-color`, `--ring-color`, `--ring-size`, `--bw`, `--fg-hover`, `--border-hover`, `--fg-pressed`, `--border-pressed`, `--bg-disabled`, `--fg-disabled`, `--border-disabled`, `--opacity-disabled`, `--elev-tier`, `--elev`; also mounts `BbIcon`, `BbBaseButton`, `BbSpinner`
738
+ - `BbButton` _(public — [contract](./BbButton.md))_ — its own pt parts (`BbButton`): `root` → `BbBaseButton`, `spinner` → `BbSpinner`, `icon` → `BbIcon`, `text` → `span.bb-button__text`; documented CSS variables: `--h-xs`, `--h`, `--icon-size`, `--px`, `--fs`, `--r`, `--gap`, `--bg`, `--bg-hover`, `--bg-pressed`, `--fg`, `--border-color`, `--ring-color`, `--ring-size`, `--bw`, `--fg-hover`, `--border-hover`, `--fg-pressed`, `--border-pressed`, `--bg-disabled`, `--fg-disabled`, `--border-disabled`, `--opacity-disabled`, `--elev-tier`, `--elev`; also mounts `BbIcon`, `BbBaseButton`, `BbSpinner`
732
739
  - Also mounts `BbIcon`
733
740
 
734
741
  ## See Also
@@ -56,8 +56,11 @@ Start with the built-in ladder: `primary`, `secondary`, `outline`, `ghost`,
56
56
  everything else is `secondary`, `outline` or `ghost`. Reserve `destructive` for
57
57
  irreversible actions (and gate them behind `useConfirm`). `link` is navigation
58
58
  disguised as text — pair it with `href`/`to`, not with heavy actions.
59
- `variant="none"` renders structure with no variant styling — an escape hatch,
60
- avoid it.
59
+ `variant="none"` is a blank starting point: the button keeps its structure,
60
+ behaviour and accessibility but takes no look, so your own classes don't have
61
+ to fight a built-in one. You then own hover, focus and disabled. It is fine for
62
+ a one-off; keep the inline styling short, and when the same look shows up
63
+ again, register it as a real variant instead.
61
64
 
62
65
  **`link` changes color, not layout.** It keeps the button box: the size scale's
63
66
  height and horizontal padding still apply, so it occupies button space and never
@@ -994,7 +997,7 @@ Gotchas (real behavior, verified against source):
994
997
 
995
998
  - A `v-model` bound to an undefined value is not a toggle yet — the first click
996
999
  won't set it. Seed the model.
997
- - Every default-slot child lands inside one `.bb-button__content` span, so
1000
+ - Every default-slot child lands inside one `.bb-button__text` span, so
998
1001
  sibling elements sit inline with no gap and the button's own flex layout
999
1002
  cannot space them — `class="justify-between"` on the button reaches the
1000
1003
  content span, not its children, and `Label` + `142` renders as `Label142`.
@@ -1058,7 +1061,7 @@ Anti-patterns:
1058
1061
  | `cacheFor` | `string \| number \| (string \| number)[] \| undefined` | | | Inertia: how long a prefetched response stays fresh before it is re-fetched. A single duration, or `[staleAfter, expiresAfter]`. Typed platform-agnostically (matching BbButton) so the library's types never require `@inertiajs/vue3` to be in… |
1059
1062
  | `cacheTags` | `string \| string[] \| undefined` | | | Inertia: tags to file this visit's prefetch cache under, so a later request can invalidate the whole tagged group. |
1060
1063
  | `component` | `string \| undefined` | | | Inertia: the page component this visit resolves to. Rarely set by hand — the server normally decides it. |
1061
- | `data` | `object \| undefined` | | | |
1064
+ | `data` | `object \| undefined` | | | Request payload forwarded to Inertia when navigating via `href` in an Inertia-enabled app. Ignored when not using Inertia. |
1062
1065
  | `disableAutoLoading` | `boolean \| undefined` | `false` | | Disables the automatic loading state that tracks async click handlers (enabled by default). |
1063
1066
  | `disabled` | `boolean \| undefined` | `false` | | Disables the component: native `disabled` (or `aria-disabled` on a link), muted paint. Beside `loading`, loading wins the look (spinner and variant colours) and this only adds the native blocking — redundant but harmless. |
1064
1067
  | `download` | `string \| boolean \| undefined` | | | Marks an `href` link as a download: renders a plain `<a download>` doing a native navigation (never an Inertia/router visit), so file downloads work. Pass a string for the suggested filename. A native-anchor signal alongside `target` and `e… |
@@ -1067,32 +1070,32 @@ Anti-patterns:
1067
1070
  | `external` | `boolean \| undefined` | `false` | | Forces an `href` link to render as a plain `<a>` (native navigation), bypassing Inertia/router interception — same intent as Nuxt's `external`. A native-anchor signal alongside `target` and `download`. |
1068
1071
  | `falseValue` | `any` | `false` | | Value emitted when the toggle is deactivated. |
1069
1072
  | `group` | `boolean \| undefined` | `false` | | Identifies the button as part of a button group. |
1070
- | `headers` | `object \| undefined` | | | |
1073
+ | `headers` | `object \| undefined` | | | Additional HTTP headers forwarded to Inertia when navigating via `href` in an Inertia-enabled app. |
1071
1074
  | `href` | `string \| undefined` | | | Returns the hyperlink's URL. Can be set, to change the URL. |
1072
1075
  | `icon` | `string \| undefined` | | | Used when only an icon with no text should be displayed. |
1073
1076
  | `instant` | `boolean \| undefined` | `false` | | Inertia: navigate optimistically on click and reconcile when the response lands, instead of waiting for the round trip. |
1074
1077
  | `interactiveWhileLoading` | `boolean \| undefined` | `false` | | Keeps the button clickable while it is loading. Buttons are disabled while loading by default; this escape hatch exists for toggles that must stay interactive (e.g. the dropdown-button caret). |
1075
1078
  | `loading` | `boolean \| undefined` | `false` | | Triggers a loading indicator. A loading button is soft-disabled on its own (`aria-disabled`, out of the tab order, clicks and navigation blocked) and keeps its variant colours; with `disabled` set too, loading still wins the look. |
1076
- | `method` | `"get" \| "post" \| "put" \| "patch" \| "delete" \| undefined` | | | |
1077
- | `modelValue` | `any` | | | |
1078
- | `onBefore` | `(() => void) \| undefined` | | | |
1079
- | `onCancel` | `(() => void) \| undefined` | | | |
1080
- | `onCancelToken` | `((cancelToken: unknown) => void) \| undefined` | | | |
1079
+ | `method` | `"get" \| "post" \| "put" \| "patch" \| "delete" \| undefined` | | | HTTP method used for Inertia navigation when `href` is provided in an Inertia-enabled app. Ignored otherwise. |
1080
+ | `modelValue` | `any` | | | Makes the button a toggle: clicking flips the model between `trueValue` and `falseValue`, and the button reports `aria-pressed`. Leave it unbound for a plain button. |
1081
+ | `onBefore` | `(() => void) \| undefined` | | | Lifecycle hook invoked by Inertia right before the request is sent. |
1082
+ | `onCancel` | `(() => void) \| undefined` | | | Lifecycle hook invoked by Inertia when a request is cancelled. |
1083
+ | `onCancelToken` | `((cancelToken: unknown) => void) \| undefined` | | | Receives the Inertia cancel token source when a request is initiated. Can be used to cancel the request. Typed platform-agnostically (matching BbButton) so the library's types never require `@inertiajs/vue3` to be installed. |
1081
1084
  | `onError` | `((errors: Record<string, string>) => void) \| undefined` | | | Lifecycle hook invoked by Inertia when the server responds with VALIDATION errors — the ordinary 422 path. This is the only failure callback Inertia's `Link` accepts. `onHttpException` (server answered 5xx) and `onNetworkError` (the request… |
1082
- | `onFinish` | `(() => void) \| undefined` | | | |
1083
- | `only` | `string[] \| undefined` | | | |
1085
+ | `onFinish` | `(() => void) \| undefined` | | | Lifecycle hook invoked by Inertia after the request has finished (regardless of success or error). |
1086
+ | `only` | `string[] \| undefined` | | | Limits the properties that are preserved in Inertia partial reloads. |
1084
1087
  | `onPrefetched` | `(() => void) \| undefined` | | | Lifecycle hook invoked by Inertia when a prefetch for this link has completed and is cached. |
1085
1088
  | `onPrefetching` | `(() => void) \| undefined` | | | Lifecycle hook invoked by Inertia when a prefetch for this link starts. |
1086
- | `onProgress` | `((progress: { percentage: number \| undefined; }) => void) \| undefined` | | | |
1087
- | `onStart` | `(() => void) \| undefined` | | | |
1088
- | `onSuccess` | `(() => void) \| undefined` | | | |
1089
+ | `onProgress` | `((progress: { percentage: number \| undefined; }) => void) \| undefined` | | | Progress callback invoked by Inertia with the upload/download percentage when available. |
1090
+ | `onStart` | `(() => void) \| undefined` | | | Lifecycle hook invoked by Inertia when a request starts. |
1091
+ | `onSuccess` | `(() => void) \| undefined` | | | Lifecycle hook invoked by Inertia when a request succeeds. |
1089
1092
  | `pageProps` | `Record<string, unknown> \| ((currentProps: Record<string, unknown>, sharedProps: Record<string, unknown>) => Record<string, unknown>) \| null \| undefined` | | | Inertia: props to merge into the next page optimistically, before the server responds. Either an object or a function of the current props. Typed platform-agnostically (matching BbButton) so the library's types never require `@inertiajs/vue… |
1090
1093
  | `prefetch` | `string \| boolean \| string[] \| undefined` | | | Inertia: fetch and cache this link's page ahead of the click. `true` uses the default trigger; a string or list of strings picks them (`'mount'`, `'hover'`, `'click'`). |
1091
1094
  | `prepend:icon` | `string \| undefined` | | | Icon to be added on the left of the text. |
1092
- | `preserveScroll` | `boolean \| ((props: Record<string, unknown>) => boolean) \| undefined` | | | |
1093
- | `preserveState` | `boolean \| ((props: Record<string, unknown>) => boolean) \| null \| undefined` | | | |
1095
+ | `preserveScroll` | `boolean \| ((props: Record<string, unknown>) => boolean) \| undefined` | `false` | | Controls whether Inertia should preserve the current scroll position after navigation. Can be a boolean or a predicate receiving the visit props. |
1096
+ | `preserveState` | `boolean \| ((props: Record<string, unknown>) => boolean) \| null \| undefined` | `false` | | Controls whether Inertia should preserve the current state after navigation. Can be a boolean or a predicate receiving the visit props. |
1094
1097
  | `preserveUrl` | `boolean \| undefined` | `false` | | Inertia: keep the current URL in the address bar even though the page content changes. |
1095
- | `queryStringArrayFormat` | `"brackets" \| "indices" \| undefined` | | | |
1098
+ | `queryStringArrayFormat` | `"brackets" \| "indices" \| undefined` | `'brackets'` | | Format to use when serializing array values into the query string for Inertia requests. |
1096
1099
  | `replace` | `boolean \| undefined` | `false` | | Calls `router.replace` instead of `router.push`. |
1097
1100
  | `size` | `Responsive<Sizes> \| undefined` | `"md"` | | Sets the size of the button. A single value applies at every breakpoint; a per-breakpoint map (e.g. `{ default: 'sm', lg: 'md' }`) switches responsively. Purely CSS-driven — no runtime breakpoint watching. |
1098
1101
  | `tag` | `ButtonTag \| undefined` | `'button'` | | Element to render for the plain (non-link, non-router) button: `'button'` (default), `'div'`/`'span'` when nesting inside another button or link, or `'label'` for a file-upload trigger. Ignored when `href`/`to` make the button render as a l… |
@@ -1101,7 +1104,7 @@ Anti-patterns:
1101
1104
  | `to` | `string \| wt \| bt \| undefined` | | | Route Location the link should navigate to when clicked on. |
1102
1105
  | `trueValue` | `any` | `true` | | Value emitted when the toggle is activated. |
1103
1106
  | `type` | `"button" \| "submit" \| "reset" \| undefined` | | | Gets the classification and default behavior of the button. |
1104
- | `variant` | `ButtonVariantType \| undefined` | `"primary"` | | Visual variant of the button. Controls colors and surface style while keeping spacing and sizing unchanged. |
1107
+ | `variant` | `ButtonVariantType \| undefined` | `"primary"` | | Visual variant of the button. Controls colors and surface style while keeping spacing and sizing unchanged. `'none'` is a blank starting point: the button keeps its structure and behaviour but takes no look, so your own classes don't fight … |
1105
1108
  | `viewTransition` | `boolean \| undefined` | `false` | | Inertia: run the page swap inside a View Transition, where the browser supports one. |
1106
1109
 
1107
1110
  ## Passthrough parts and states
@@ -1124,7 +1127,7 @@ States are listed in precedence order: when two are on at once and their entries
1124
1127
 
1125
1128
  ## Events
1126
1129
 
1127
- - `update:modelValue` — `(event: "update:modelValue", value: any): void`
1130
+ - `update:modelValue` — `(value: any): void` — Emitted with the new value whenever `v-model` changes.
1128
1131
 
1129
1132
  ## Slots
1130
1133
 
@@ -1206,7 +1209,7 @@ Set these on the element, or on a class you put on it, to retune this component
1206
1209
  - **CSS custom properties** listed on a node are declared on THAT node's root and read by elements inside it. Set one on that node's root or on the element inside it that reads it — the pt part that lands there is how you reach it (`pt:box="[--border-color:…]"` on a text input) — never on `BbButton`'s root, where the node's own declaration masks it (design-tokens guide, _Overriding one from a consumer app_, rule 0).
1207
1210
  - Listed nodes are the ones `BbButton`'s API reaches or that declare a documented CSS variable; the rest fold into "also mounts". The complete tree, repeats and undocumented locals included, is the `tree` field of this component in `components.json`.
1208
1211
 
1209
- - `BbButton` _(this component)_ — its own template binds: `root` → `BbBaseButton`, `spinner` → `BbSpinner`, `icon` → `BbIcon`, `text` → `span.bb-button__content`
1212
+ - `BbButton` _(this component)_ — its own template binds: `root` → `BbBaseButton`, `spinner` → `BbSpinner`, `icon` → `BbIcon`, `text` → `span.bb-button__text`
1210
1213
  - `BbBaseButton` _(public — [contract](./BbBaseButton.md))_ — its own pt parts (`BbBaseButton`): `root` → `RouterComponent`, `root` → `a`, `root` → `component`; also mounts `RouterComponent`
1211
1214
  - Also mounts `BbIcon`, `BbSpinner`
1212
1215
 
@@ -17,6 +17,9 @@
17
17
  | `pt:arrow` | the root of `BbBaseButton` | `BbBaseButton` ([contract](./BbBaseButton.md)) |
18
18
  | `pt:month` | the root of `BbBaseButton` | `BbBaseButton` ([contract](./BbBaseButton.md)) |
19
19
  | `pt:year` | the root of `BbBaseButton` | `BbBaseButton` ([contract](./BbBaseButton.md)) |
20
+ | `pt:header` | `div.bb-time-selector__header` | `CommonTimeSelector` _(internal)_ |
21
+ | `pt:cellColumnHeader` | `div.bb-time-selector__cell-column-header` | `CommonTimeSelector` _(internal)_ |
22
+ | `pt:item` | the root of `BbBaseButton` | `BbBaseButton` ([contract](./BbBaseButton.md)) |
20
23
 
21
24
  ## Usage & Guidelines
22
25
 
@@ -470,7 +473,7 @@ and attributes — optionally only while a state is on. Parts: `root` (the
470
473
  calendar's box, where a consumer `class` lands too; it carries the sizing
471
474
  tokens, so `pt:root="[--px:2px]"` tightens the padding and the grid width
472
475
  follows), `header` (the navigation bar), `arrow` (the previous / next
473
- buttons), `month` and `year` (the heading buttons), `columnHeader` (each
476
+ buttons), `month` and `year` (the heading buttons), `cellColumnHeader` (each
474
477
  weekday letter), `day` (one whole day cell) and `dayButton` (the button
475
478
  inside it), `monthItem` and `yearItem` (one button of the month / year
476
479
  panel).
@@ -485,7 +488,11 @@ open. The cells resolve per node — on `day` and `dayButton`: `selected`,
485
488
 
486
489
  `day` is the whole cell and `dayButton` the rounded mark inside it: a
487
490
  background on `pt:day` paints the full cell square, so restyle the mark on
488
- `pt:day-button`. The time rail is not a part.
491
+ `pt:day-button`. With `type="datetime"` the time rail takes the same words
492
+ as `BbTimePicker`: `item` is one entry (`selected`, and `disabled` outside the
493
+ bound's time on the day `min` / `max` falls on), and `header` /
494
+ `cellColumnHeader` land on its readout and column letters too — one
495
+ `pt:header` styles the navigation bar and the readout together.
489
496
 
490
497
  ```vue
491
498
  <BbCalendar
@@ -522,14 +529,14 @@ the page is `BbDatePicker`.
522
529
 
523
530
  | Prop | Type | Default | Required | Description |
524
531
  | --- | --- | --- | --- | --- |
525
- | `pt:<part>`, `pt:<part>:<state>`, `pt` | `PtValue` | | | Passthrough — a class list, or `{ class, style, attrs }`, bound to one named part of the component; the state form applies only while that state is on. Parts: `arrow`, `columnHeader`, `day`, `dayButton`, `header`, `month`, `monthItem`, `root`, `year`, `yearItem`. States: `active`, `disabled`, `highlighted`, `inRange`, `outside`, `rangeEnd`, `rangeStart`, `selected`, `today`. What each one is: _Passthrough parts and states_ below. `pt` is the object form with the same keys minus the prefix (`{ icon: '…', 'icon:loading': '…' }`). See `guides/passthrough.md`. |
532
+ | `pt:<part>`, `pt:<part>:<state>`, `pt` | `PtValue` | | | Passthrough — a class list, or `{ class, style, attrs }`, bound to one named part of the component; the state form applies only while that state is on. Parts: `arrow`, `cellColumnHeader`, `day`, `dayButton`, `header`, `item`, `month`, `monthItem`, `root`, `year`, `yearItem`. States: `active`, `disabled`, `highlighted`, `inRange`, `outside`, `rangeEnd`, `rangeStart`, `selected`, `today`. What each one is: _Passthrough parts and states_ below. `pt` is the object form with the same keys minus the prefix (`{ icon: '…', 'icon:loading': '…' }`). See `guides/passthrough.md`. |
526
533
  | `activeSegment` | `BbCalendarSegment \| undefined` | | | Which end the time rail edits in range + `type="datetime"` (`v-model:active-segment`). Standalone use manages this internally; an embedding host (the date input) drives it from its focused field. Ignored outside range + datetime. |
527
534
  | `ampm` | `boolean \| undefined` | `false` | | 12-hour display with an AM/PM column (requires `type="datetime"`); emits stay 24h. |
528
535
  | `disabled` | `boolean \| undefined` | `false` | | Disables every cell, the navigation and the time rail. |
529
536
  | `firstDayOfWeek` | `0 \| 1 \| 2 \| 3 \| 4 \| 5 \| 6 \| undefined` | `1` | | First day of the week (0 = Sunday … 6 = Saturday). |
530
537
  | `floating` | `boolean \| undefined` | `false` | | Emit plain calendar strings instead of zoned ISO instants. Implied (and forced) by `type="month"` and `type="year"`. |
531
- | `max` | `string \| undefined` | | | Maximum selectable value, in this `type`'s shape. A finer bound is accepted and ceiled to the unit, with a warning. |
532
- | `min` | `string \| undefined` | | | Minimum selectable value, in this `type`'s shape — `YYYY-MM-DD` (`YYYY-MM-DDTHH:mm` with `datetime`, `YYYY-MM` with `month`, `YYYY` with `year`). A finer bound is accepted and floored to the unit, with a warning. |
538
+ | `max` | `string \| undefined` | | | Maximum selectable value, in this `type`'s shape. A finer bound is accepted and ceiled to the unit, with a warning. With `datetime`, on its own day the time rail disables the times after it. |
539
+ | `min` | `string \| undefined` | | | Minimum selectable value, in this `type`'s shape — `YYYY-MM-DD` (`YYYY-MM-DDTHH:mm` with `datetime`, `YYYY-MM` with `month`, `YYYY` with `year`). A finer bound is accepted and floored to the unit, with a warning. With `datetime`, the grid d… |
533
540
  | `modelValue` | `string \| string[] \| null` | | yes | v-model value. `null` for empty, a single string for single selection, or a two-element `[start, end]` array when `range` is true (a sorted array under `multiple`). The string shape follows `type`: `YYYY-MM-DD` when `floating` (`YYYY-MM` fo… |
534
541
  | `multiple` | `boolean \| undefined` | `false` | | Enables multi-selection: every pick toggles a value in or out of a sorted array. Works in whatever `type` selects — days, months or years — and requires an array `modelValue` (use `[]` for empty, never `null`). Mutually exclusive with `rang… |
535
542
  | `range` | `boolean \| undefined` | `false` | | Enables range selection (`[start, end]`). |
@@ -552,11 +559,12 @@ the page is `BbDatePicker`.
552
559
  | `arrow` | The previous / next buttons — a broadcast. |
553
560
  | `month` | The month heading button; it opens the month panel. |
554
561
  | `year` | The year heading button; it opens the year panel. |
555
- | `columnHeader` | Each weekday letter above the grid — a broadcast. |
562
+ | `cellColumnHeader` | Each weekday letter above the grid — a broadcast. |
556
563
  | `day` | One whole day cell — a broadcast resolved per day. A background here paints the full cell square; restyle the round mark on `dayButton`. |
557
564
  | `dayButton` | The button inside a day cell — the mark that shows selection. A broadcast resolved per day. |
558
565
  | `monthItem` | One month button of the month panel (the home grid of `type="month"`) — a broadcast resolved per month. |
559
566
  | `yearItem` | One year button of the year list — a broadcast resolved per year. |
567
+ | `item` | One entry of the time rail's columns (hour, minute, second, AM / PM) with `type="datetime"` — a broadcast resolved per entry, as on `BbTimePicker`. With the rail, `header` also lands on its readout and `cellColumnHeader` on its column letters (`HH`, `MM`). |
560
568
 
561
569
  States are listed in precedence order: when two are on at once and their entries conflict, the later one wins.
562
570
 
@@ -565,20 +573,20 @@ States are listed in precedence order: when two are on at once and their entries
565
573
  | `outside` | Per node, on `day` / `dayButton`: a day of the previous or next month, shown to fill the grid. |
566
574
  | `today` | Per node, on `day` / `dayButton`: today. |
567
575
  | `inRange` | Per node, on the cells (`day`, `dayButton`, `monthItem`, `yearItem`): inside a committed range, between its ends. |
568
- | `selected` | Per node, on the cells: a chosen day, month or year. |
576
+ | `selected` | Per node, on the cells: a chosen day, month or year; on `item`, the picked time's entry in each column. |
569
577
  | `rangeStart` | Per node, on the cells: a committed range's first day, month or year. |
570
578
  | `rangeEnd` | Per node, on the cells: a committed range's last day, month or year. |
571
- | `disabled` | Component-wide while the calendar is `disabled`. Also per node: on the cells, one outside `min` / `max` or refused by `selectable`; on `arrow`, at a bound or while the month / year panel is open. |
579
+ | `disabled` | Component-wide while the calendar is `disabled`. Also per node: on the cells, one outside `min` / `max` or refused by `selectable`; on `arrow`, at a bound or while the month / year panel is open; on `item`, a time entry outside the bound's time on the day `min` / `max` falls on. |
572
580
  | `active` | Per node, on `month` / `year`: its panel is open. |
573
581
  | `highlighted` | Per node, on the cells: the keyboard cursor. |
574
582
 
575
583
  ## Events
576
584
 
577
- - `grid-pick` — `(event: "grid-pick", value: string \| string[] \| null): void`
578
- - `time-pick` — `(event: "time-pick", payload: { unit: TimeUnit; value: string; }): void`
579
- - `update:activeSegment` — `(event: "update:activeSegment", value: BbCalendarSegment): void`
580
- - `update:modelValue` — `(event: "update:modelValue", value: string \| string[] \| null): void`
581
- - `update:time` — `(event: "update:time", value: string \| string[] \| null): void`
585
+ - `grid-pick` — `(value: string \| string[] \| null): void` — Relay of the raw grid pick, before this component combines it with the time. An embedding host binds this to run its own value engine (the date picker closes on it once the selection is complete); clean consumers ignore it and use `update:m…
586
+ - `time-pick` — `(payload: { unit: TimeUnit; value: string; }): void` — Relay of the raw time-rail pick. An embedding host binds this to run its own value engine; clean consumers ignore it and use `update:time`.
587
+ - `update:activeSegment` — `(value: BbCalendarSegment): void` — The active range end changed (range + `type="datetime"` only).
588
+ - `update:modelValue` — `(value: string \| string[] \| null): void` — Emitted when the selected value changes (single / range / multiple / null).
589
+ - `update:time` — `(value: string \| string[] \| null): void` — Companion time model, alongside every change while `type="datetime"`.
582
590
 
583
591
  ## Slots
584
592
 
@@ -611,9 +619,9 @@ Set these on the element, or on a class you put on it, to retune this component
611
619
  - **CSS custom properties** listed on a node are declared on THAT node's root and read by elements inside it. Set one on that node's root or on the element inside it that reads it — the pt part that lands there is how you reach it (`pt:box="[--border-color:…]"` on a text input) — never on `BbCalendar`'s root, where the node's own declaration masks it (design-tokens guide, _Overriding one from a consumer app_, rule 0).
612
620
  - Listed nodes are the ones `BbCalendar`'s API reaches or that declare a documented CSS variable; the rest fold into "also mounts". The complete tree, repeats and undocumented locals included, is the `tree` field of this component in `components.json`.
613
621
 
614
- - `BbCalendar` _(this component)_ — its own template binds: `header` → `div.bb-calendar__controls`, `arrow` → `BbBaseButton`, `month` → `BbBaseButton`, `year` → `BbBaseButton`, `day` → `div.bb-calendar__date`, `dayButton` → `button.bb-calendar__date-button`
622
+ - `BbCalendar` _(this component)_ — its own template binds: `header` → `div.bb-calendar__header`, `arrow` → `BbBaseButton`, `month` → `BbBaseButton`, `year` → `BbBaseButton`, `day` → `div.bb-calendar__day`, `dayButton` → `button.bb-calendar__day-button`
615
623
  - `BbBaseButton` _(public — [contract](./BbBaseButton.md))_ — its own pt parts (`BbBaseButton`): `root` → `RouterComponent`, `root` → `a`, `root` → `component`; also mounts `RouterComponent`
616
- - `CommonTimeSelector` _(internal — not importable, reach it through `BbCalendar`)_ — documented CSS variables: `--time-mark`; also mounts `BbBaseButton`
624
+ - `CommonTimeSelector` _(internal — not importable, reach it through `BbCalendar`)_ — `BbCalendar`'s pt parts land here: `header` → `div.bb-time-selector__header`, `cellColumnHeader` → `div.bb-time-selector__cell-column-header`, `item` → `BbBaseButton`; documented CSS variables: `--time-mark`; also mounts `BbBaseButton`
617
625
  - Also mounts `ScaleFade`, `Slide`, `CalendarMonthPanel`, `CalendarYearPanel`
618
626
 
619
627
  ## See Also
@@ -18,9 +18,8 @@
18
18
  | `pt:root` | `div.bb-field` | `CommonField` _(internal)_ |
19
19
  | `pt:label` | `component` | `CommonField` _(internal)_ |
20
20
  | `pt:description` | `span.bb-field__description` | `CommonField` _(internal)_ |
21
- | `pt:hint` | `span.bb-field__hint-text` | `CommonField` _(internal)_ |
22
- | `pt:message` | `div.bb-field__errors` | `CommonField` _(internal)_ |
23
- | `pt:message` | `div.bb-field__warnings` | `CommonField` _(internal)_ |
21
+ | `pt:hint` | `span.bb-field__hint` | `CommonField` _(internal)_ |
22
+ | `pt:message` | `div.bb-field__message` | `CommonField` _(internal)_ |
24
23
 
25
24
  **CSS variables you can set through those parts** — declared deeper in the tree, so set one on the part that reads it (`pt:<part>="[--name:value]"`), never on `BbCheckbox`'s root:
26
25
 
@@ -684,7 +683,7 @@ map are in the [passthrough guide](./guides/passthrough.md).
684
683
  | `hasWarnings` | `boolean \| undefined` | `false` | | Define if the component should be in a warning state. Same chrome as errors with `--bb-warn`; errors take priority. |
685
684
  | `hideLabel` | `boolean \| undefined` | `false` | | Visually hides the label of the input while maintaining accessibility. |
686
685
  | `hint` | `string \| undefined` | | | Text box to be displayed near the input, usually to indicate instructions. |
687
- | `id` | `string \| undefined` | | | The identifier of the component. |
686
+ | `id` | `string \| undefined` | | | The `id` of the native control; the label's `for` and the description and message ids derive from it. Generated when omitted. |
688
687
  | `indeterminate` | `boolean \| undefined` | `false` | | Sets the input in an indeterminate state. |
689
688
  | `inputPosition` | `"left" \| "center" \| "right" \| undefined` | `"left"` | | Sets the alignment of the input. Since inputs are inline block they can be aligned just as text can. |
690
689
  | `label` | `string` | | yes | Text content of the label of the element. |
@@ -728,15 +727,15 @@ States are listed in precedence order: when two are on at once and their entries
728
727
 
729
728
  ## Events
730
729
 
731
- - `blur` — `(event: "blur", event: FocusEvent): void`
732
- - `change` — `(event: "change", event: Event): void`
733
- - `click` — `(event: "click", event: MouseEvent): void`
734
- - `focus` — `(event: "focus", event: FocusEvent): void`
735
- - `input` — `(event: "input", event: Event): void`
736
- - `keydown` — `(event: "keydown", event: KeyboardEvent): void`
737
- - `mousedown` — `(event: "mousedown", event: MouseEvent): void`
738
- - `mouseup` — `(event: "mouseup", event: MouseEvent): void`
739
- - `update:modelValue` — `(event: "update:modelValue", value: any): void`
730
+ - `blur` — `(event: FocusEvent): void` — Emitted when the native input loses focus. Forwards the original DOM `FocusEvent`.
731
+ - `change` — `(event: Event): void` — Emitted when the checkbox checked state changes. Forwards the original DOM `Event` from the input.
732
+ - `click` — `(event: MouseEvent): void` — Emitted when the input receives a click interaction. Forwards the original DOM `MouseEvent`.
733
+ - `focus` — `(event: FocusEvent): void` — Emitted when the native input gains focus. Forwards the original DOM `FocusEvent`.
734
+ - `input` — `(event: Event): void` — Emitted on native input events from the checkbox input. Forwards the original DOM `Event`.
735
+ - `keydown` — `(event: KeyboardEvent): void` — Emitted for keyboard interaction on the input. Forwards the original DOM `KeyboardEvent`.
736
+ - `mousedown` — `(event: MouseEvent): void` — Emitted when a pointing device button is pressed over the input. Forwards the original DOM `MouseEvent`.
737
+ - `mouseup` — `(event: MouseEvent): void` — Emitted when a pointing device button is released over the input. Forwards the original DOM `MouseEvent`.
738
+ - `update:modelValue` — `(value: any): void` — Emitted on checked-state changes with the effective model value: - `trueValue` when checked - `falseValue` when unchecked
740
739
 
741
740
  ## Slots
742
741
 
@@ -764,7 +763,7 @@ Importing this component from `bitboss-ui/validated` instead of `bitboss-ui` bin
764
763
  - Listed nodes are the ones `BbCheckbox`'s API reaches or that declare a documented CSS variable; the rest fold into "also mounts". The complete tree, repeats and undocumented locals included, is the `tree` field of this component in `components.json`.
765
764
 
766
765
  - `BbCheckbox` _(this component)_ — its own template binds: `icon` → `BbBaseCheckboxIcon`
767
- - `CommonField` _(internal — not importable, reach it through `BbCheckbox`)_ — `BbCheckbox`'s pt parts land here: `root` → `div.bb-field`, `label` → `component`, `description` → `span.bb-field__description`, `hint` → `span.bb-field__hint-text`, `message` → `div.bb-field__errors`, `message` → `div.bb-field__warnings`
766
+ - `CommonField` _(internal — not importable, reach it through `BbCheckbox`)_ — `BbCheckbox`'s pt parts land here: `root` → `div.bb-field`, `label` → `component`, `description` → `span.bb-field__description`, `hint` → `span.bb-field__hint`, `message` → `div.bb-field__message`
768
767
  - Also mounts `BbBaseCheckboxIcon`
769
768
 
770
769
  ## See Also