bitboss-ui 3.0.0-beta.4 → 3.0.0-beta.41

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 (937) hide show
  1. package/README.md +317 -98
  2. package/bin/bitboss-ui-mcp.mjs +1566 -75
  3. package/bin/bitboss-ui.mjs +716 -72
  4. package/dist/ai/BbAccordion.md +178 -56
  5. package/dist/ai/BbAlert.md +140 -28
  6. package/dist/ai/BbAsterisk.md +61 -4
  7. package/dist/ai/BbAvatar.md +194 -53
  8. package/dist/ai/BbBadge.md +250 -50
  9. package/dist/ai/BbBadgeButton.md +74 -21
  10. package/dist/ai/BbBaseButton.md +132 -51
  11. package/dist/ai/BbBaseCheckboxIcon.md +118 -26
  12. package/dist/ai/BbBaseRadioIcon.md +115 -26
  13. package/dist/ai/BbBaseSwitchIcon.md +123 -28
  14. package/dist/ai/BbBreadcrumbs.md +221 -51
  15. package/dist/ai/BbButton.md +389 -107
  16. package/dist/ai/BbCalendar.md +667 -0
  17. package/dist/ai/BbCheckbox.md +242 -80
  18. package/dist/ai/BbCheckboxGroup.md +575 -66
  19. package/dist/ai/BbCollapsible.md +158 -39
  20. package/dist/ai/BbColorInput.md +322 -82
  21. package/dist/ai/BbColorPalette.md +261 -61
  22. package/dist/ai/BbConfirm.md +220 -51
  23. package/dist/ai/BbConfirmPortal.md +1 -1
  24. package/dist/ai/BbDatePicker.md +272 -37
  25. package/dist/ai/BbDatePickerInput.md +321 -92
  26. package/dist/ai/BbDialog.md +492 -87
  27. package/dist/ai/BbDropdown.md +1182 -104
  28. package/dist/ai/BbDropdownButton.md +239 -61
  29. package/dist/ai/BbDropdownGroup.md +5 -5
  30. package/dist/ai/BbDropzone.md +140 -36
  31. package/dist/ai/BbForm.md +1165 -40
  32. package/dist/ai/BbIcon.md +100 -33
  33. package/dist/ai/BbIndicator.md +79 -12
  34. package/dist/ai/BbNumberInput.md +257 -87
  35. package/dist/ai/BbOffCanvas.md +396 -91
  36. package/dist/ai/BbPagination.md +199 -32
  37. package/dist/ai/BbPopover.md +219 -54
  38. package/dist/ai/BbProgress.md +137 -71
  39. package/dist/ai/BbPtScope.md +136 -0
  40. package/dist/ai/BbRadio.md +234 -43
  41. package/dist/ai/BbRadioGroup.md +529 -91
  42. package/dist/ai/BbRating.md +243 -61
  43. package/dist/ai/BbSelect.md +690 -120
  44. package/dist/ai/BbSelectPopover.md +434 -122
  45. package/dist/ai/BbSlider.md +275 -79
  46. package/dist/ai/BbSmoothHeight.md +142 -34
  47. package/dist/ai/BbSpinner.md +179 -81
  48. package/dist/ai/BbSwitch.md +249 -63
  49. package/dist/ai/BbSwitchGroup.md +394 -65
  50. package/dist/ai/BbTable.md +1666 -222
  51. package/dist/ai/BbTabs.md +898 -178
  52. package/dist/ai/BbTabsList.md +81 -7
  53. package/dist/ai/BbTabsPanels.md +77 -0
  54. package/dist/ai/BbTabsRoot.md +16 -15
  55. package/dist/ai/BbTag.md +256 -76
  56. package/dist/ai/BbTextInput.md +480 -102
  57. package/dist/ai/BbTextarea.md +310 -96
  58. package/dist/ai/BbTimePicker.md +159 -24
  59. package/dist/ai/BbTimePickerInput.md +277 -46
  60. package/dist/ai/BbToast.md +286 -40
  61. package/dist/ai/BbToastPortal.md +3 -3
  62. package/dist/ai/BbTooltip.md +187 -34
  63. package/dist/ai/BbTree.md +260 -85
  64. package/dist/ai/ChipsBox.md +43 -2
  65. package/dist/ai/ClearableButton.md +12 -0
  66. package/dist/ai/CommaBox.md +2 -1
  67. package/dist/ai/CommonField.md +63 -0
  68. package/dist/ai/CommonFieldInput.md +90 -0
  69. package/dist/ai/CommonPopover.md +17 -12
  70. package/dist/ai/CommonTimeSelector.md +63 -0
  71. package/dist/ai/ErrorIcon.md +20 -0
  72. package/dist/ai/FlatListBox.md +41 -11
  73. package/dist/ai/GroupedListBox.md +42 -12
  74. package/dist/ai/ListBox.md +46 -11
  75. package/dist/ai/OptionsContainer.md +13 -10
  76. package/dist/ai/WarningIcon.md +20 -0
  77. package/dist/ai/changelog.json +4025 -141
  78. package/dist/ai/components.json +51872 -10136
  79. package/dist/ai/composables/useBbConfig.md +72 -11
  80. package/dist/ai/composables/useBbDropdownContext.md +168 -0
  81. package/dist/ai/composables/useBbFormContext.md +51 -24
  82. package/dist/ai/composables/useBbFormField.md +134 -0
  83. package/dist/ai/composables/useBbTableContext.md +41 -19
  84. package/dist/ai/composables/useConfirm.md +16 -8
  85. package/dist/ai/composables/useCountdown.md +1 -1
  86. package/dist/ai/composables/useId.md +10 -10
  87. package/dist/ai/composables/useMobile.md +17 -10
  88. package/dist/ai/composables/useToast.md +25 -19
  89. package/dist/ai/design-tokens.json +940 -0
  90. package/dist/ai/design-tokens.manifest.yaml +175 -0
  91. package/dist/ai/guides/agent-contract.md +168 -22
  92. package/dist/ai/guides/ai-router.md +79 -40
  93. package/dist/ai/guides/app-layout.md +8 -4
  94. package/dist/ai/guides/coherence-playbook.md +8 -8
  95. package/dist/ai/guides/component-picker.md +42 -34
  96. package/dist/ai/guides/design-language.md +274 -97
  97. package/dist/ai/guides/design-tokens.md +493 -105
  98. package/dist/ai/guides/fetch-items-playbook.md +22 -16
  99. package/dist/ai/guides/icons-policy.md +67 -35
  100. package/dist/ai/guides/inertia-helpers.md +4 -1
  101. package/dist/ai/guides/inline-edit-playbook.md +13 -6
  102. package/dist/ai/guides/installation-and-plugin-setup.md +817 -73
  103. package/dist/ai/guides/migration/components/bb-accordion.md +37 -0
  104. package/dist/ai/guides/migration/components/bb-alert.md +2 -2
  105. package/dist/ai/guides/migration/components/bb-avatar.md +13 -14
  106. package/dist/ai/guides/migration/components/bb-badge.md +5 -5
  107. package/dist/ai/guides/migration/components/bb-breadcrumbs.md +9 -8
  108. package/dist/ai/guides/migration/components/bb-button.md +80 -20
  109. package/dist/ai/guides/migration/components/bb-checkbox-group.md +116 -29
  110. package/dist/ai/guides/migration/components/bb-checkbox.md +53 -10
  111. package/dist/ai/guides/migration/components/bb-chip.md +6 -6
  112. package/dist/ai/guides/migration/components/bb-collapsible.md +5 -5
  113. package/dist/ai/guides/migration/components/bb-color-input.md +5 -5
  114. package/dist/ai/guides/migration/components/bb-color-palette.md +16 -9
  115. package/dist/ai/guides/migration/components/bb-date-picker-input.md +45 -35
  116. package/dist/ai/guides/migration/components/bb-dialog.md +69 -36
  117. package/dist/ai/guides/migration/components/bb-dropdown-button.md +7 -1
  118. package/dist/ai/guides/migration/components/bb-dropdown.md +31 -8
  119. package/dist/ai/guides/migration/components/bb-dropzone.md +8 -0
  120. package/dist/ai/guides/migration/components/bb-icon.md +7 -7
  121. package/dist/ai/guides/migration/components/bb-intersection.md +1 -1
  122. package/dist/ai/guides/migration/components/bb-offcanvas.md +29 -31
  123. package/dist/ai/guides/migration/components/bb-pagination.md +10 -0
  124. package/dist/ai/guides/migration/components/bb-popover.md +19 -11
  125. package/dist/ai/guides/migration/components/bb-radio-group.md +14 -0
  126. package/dist/ai/guides/migration/components/bb-rating.md +61 -24
  127. package/dist/ai/guides/migration/components/bb-select-popover.md +9 -1
  128. package/dist/ai/guides/migration/components/bb-select.md +21 -4
  129. package/dist/ai/guides/migration/components/bb-slider.md +14 -6
  130. package/dist/ai/guides/migration/components/bb-switch-group.md +14 -0
  131. package/dist/ai/guides/migration/components/bb-table.md +574 -33
  132. package/dist/ai/guides/migration/components/bb-tabs.md +91 -41
  133. package/dist/ai/guides/migration/components/bb-tag.md +9 -7
  134. package/dist/ai/guides/migration/components/bb-text-input.md +12 -12
  135. package/dist/ai/guides/migration/components/bb-toast.md +2 -2
  136. package/dist/ai/guides/migration/components/bb-tooltip.md +18 -0
  137. package/dist/ai/guides/migration/components/bb-tree.md +11 -9
  138. package/dist/ai/guides/migration/components/use-confirm.md +9 -1
  139. package/dist/ai/guides/migration/v2-to-v3.md +828 -240
  140. package/dist/ai/guides/migration/v3-beta-css-classes.md +751 -0
  141. package/dist/ai/guides/migration/v3-beta-tooling.md +119 -0
  142. package/dist/ai/guides/options-items-playbook.md +161 -12
  143. package/dist/ai/guides/page-shell.md +1 -1
  144. package/dist/ai/guides/passthrough.md +958 -0
  145. package/dist/ai/guides/preset-components.md +361 -0
  146. package/dist/ai/guides/ssr-prefill.md +127 -0
  147. package/dist/ai/guides/validated-forms.md +466 -55
  148. package/dist/ai/guides/validation-libraries.md +171 -0
  149. package/dist/ai/guides/validation-providers.md +113 -0
  150. package/dist/ai/index.md +45 -44
  151. package/dist/ai/recipes/inertia/approvals-inbox.md +26 -10
  152. package/dist/ai/recipes/inertia/command-palette.md +2 -2
  153. package/dist/ai/recipes/inertia/inline-edit-workspace.md +46 -30
  154. package/dist/ai/recipes/inertia/layout-scaffold.md +6 -2
  155. package/dist/ai/recipes/inertia/onboarding.md +30 -8
  156. package/dist/ai/recipes/inertia/ownership-atlas.md +72 -49
  157. package/dist/ai/recipes/inertia/record-form.md +53 -19
  158. package/dist/ai/recipes/inertia/records-workspace.md +201 -49
  159. package/dist/ai/recipes/inertia/settings-workspace.md +3809 -0
  160. package/dist/ai/recipes/inertia/upload-center.md +54 -43
  161. package/dist/ai/recipes/inertia/wizard-form.md +98 -14
  162. package/dist/ai/recipes/nuxt/approvals-inbox.md +26 -10
  163. package/dist/ai/recipes/nuxt/command-palette.md +2 -2
  164. package/dist/ai/recipes/nuxt/inline-edit-workspace.md +68 -52
  165. package/dist/ai/recipes/nuxt/layout-scaffold.md +6 -2
  166. package/dist/ai/recipes/nuxt/onboarding.md +30 -8
  167. package/dist/ai/recipes/nuxt/record-form.md +66 -22
  168. package/dist/ai/recipes/nuxt/records-workspace.md +199 -48
  169. package/dist/ai/recipes/nuxt/settings-workspace.md +3898 -0
  170. package/dist/ai/recipes/nuxt/upload-center.md +52 -41
  171. package/dist/ai/recipes/nuxt/wizard-form.md +98 -14
  172. package/dist/ai/recipes/vue/approvals-inbox.md +28 -12
  173. package/dist/ai/recipes/vue/command-palette.md +2 -2
  174. package/dist/ai/recipes/vue/inline-edit-workspace.md +69 -53
  175. package/dist/ai/recipes/vue/layout-scaffold.md +6 -2
  176. package/dist/ai/recipes/vue/onboarding.md +32 -8
  177. package/dist/ai/recipes/vue/record-form.md +81 -54
  178. package/dist/ai/recipes/vue/records-workspace.md +198 -49
  179. package/dist/ai/recipes/vue/settings-workspace.md +3836 -0
  180. package/dist/ai/recipes/vue/upload-center.md +53 -42
  181. package/dist/ai/recipes/vue/wizard-form.md +97 -14
  182. package/dist/ai/source/BbAccordion.md +90 -24
  183. package/dist/ai/source/BbAlert.md +209 -62
  184. package/dist/ai/source/BbAsterisk.md +54 -4
  185. package/dist/ai/source/BbAvatar.md +73 -16
  186. package/dist/ai/source/BbBadge.md +265 -97
  187. package/dist/ai/source/BbBadgeButton.md +218 -79
  188. package/dist/ai/source/BbBaseButton.md +108 -12
  189. package/dist/ai/source/BbBaseCheckboxIcon.md +151 -36
  190. package/dist/ai/source/BbBaseRadioIcon.md +121 -17
  191. package/dist/ai/source/BbBaseSwitchIcon.md +138 -28
  192. package/dist/ai/source/BbBreadcrumbs.md +363 -69
  193. package/dist/ai/source/BbButton.md +563 -174
  194. package/dist/ai/source/BbCalendar.md +1744 -0
  195. package/dist/ai/source/BbCheckbox.md +470 -68
  196. package/dist/ai/source/BbCheckboxGroup.md +976 -95
  197. package/dist/ai/source/BbCollapsible.md +96 -8
  198. package/dist/ai/source/BbColorInput.md +597 -67
  199. package/dist/ai/source/BbColorPalette.md +1284 -65
  200. package/dist/ai/source/BbConfirm.md +149 -7
  201. package/dist/ai/source/BbConfirmPortal.md +89 -3
  202. package/dist/ai/source/BbDatePicker.md +527 -381
  203. package/dist/ai/source/BbDatePickerInput.md +2015 -118
  204. package/dist/ai/source/BbDialog.md +531 -64
  205. package/dist/ai/source/BbDropdown.md +885 -175
  206. package/dist/ai/source/BbDropdownButton.md +377 -79
  207. package/dist/ai/source/BbDropdownGroup.md +687 -96
  208. package/dist/ai/source/BbDropzone.md +140 -31
  209. package/dist/ai/source/BbForm.md +875 -17
  210. package/dist/ai/source/BbIcon.md +130 -52
  211. package/dist/ai/source/BbIndicator.md +117 -60
  212. package/dist/ai/source/BbNumberInput.md +667 -84
  213. package/dist/ai/source/BbOffCanvas.md +1007 -261
  214. package/dist/ai/source/BbPagination.md +203 -31
  215. package/dist/ai/source/BbPopover.md +267 -90
  216. package/dist/ai/source/BbProgress.md +88 -26
  217. package/dist/ai/source/BbPtScope.md +54 -0
  218. package/dist/ai/source/BbRadio.md +388 -58
  219. package/dist/ai/source/BbRadioGroup.md +940 -109
  220. package/dist/ai/source/BbRating.md +736 -84
  221. package/dist/ai/source/BbSelect.md +1096 -96
  222. package/dist/ai/source/BbSelectPopover.md +807 -114
  223. package/dist/ai/source/BbSlider.md +1390 -98
  224. package/dist/ai/source/BbSmoothHeight.md +48 -2
  225. package/dist/ai/source/BbSpinner.md +62 -6
  226. package/dist/ai/source/BbSwitch.md +297 -60
  227. package/dist/ai/source/BbSwitchGroup.md +761 -83
  228. package/dist/ai/source/BbTable.md +6950 -1864
  229. package/dist/ai/source/BbTabs.md +368 -111
  230. package/dist/ai/source/BbTabsList.md +503 -146
  231. package/dist/ai/source/BbTabsPanels.md +625 -0
  232. package/dist/ai/source/BbTabsRoot.md +319 -100
  233. package/dist/ai/source/BbTag.md +796 -87
  234. package/dist/ai/source/BbTextInput.md +497 -68
  235. package/dist/ai/source/BbTextarea.md +550 -65
  236. package/dist/ai/source/BbTimePicker.md +395 -69
  237. package/dist/ai/source/BbTimePickerInput.md +1233 -106
  238. package/dist/ai/source/BbToast.md +250 -74
  239. package/dist/ai/source/BbToastPortal.md +210 -66
  240. package/dist/ai/source/BbTooltip.md +181 -30
  241. package/dist/ai/source/BbTree.md +76 -11
  242. package/dist/ai/source/ChipsBox.md +25 -5
  243. package/dist/ai/source/CommaBox.md +21 -6
  244. package/dist/ai/source/{BbBaseInputContainer.md → CommonField.md} +467 -250
  245. package/dist/ai/source/CommonFieldInput.md +848 -0
  246. package/dist/ai/source/CommonPopover.md +116 -30
  247. package/dist/ai/source/CommonTimeSelector.md +726 -0
  248. package/dist/ai/source/ErrorIcon.md +2 -2
  249. package/dist/ai/source/FlatListBox.md +188 -17
  250. package/dist/ai/source/GroupedListBox.md +236 -44
  251. package/dist/ai/source/GuidesComponent.md +14 -7
  252. package/dist/ai/source/ListBox.md +46 -8
  253. package/dist/ai/source/OptionsContainer.md +288 -60
  254. package/dist/ai/source/WarningIcon.md +2 -2
  255. package/dist/assets/css/reset.css_inline.js +1 -1
  256. package/dist/assets/svgs/star.svg_raw.js +4 -0
  257. package/dist/components/BbAccordion/BbAccordion.vue_vue_type_script_setup_true_lang.js +49 -32
  258. package/dist/components/BbAccordion/types.d.ts +35 -3
  259. package/dist/components/BbAccordion/types.js +11 -0
  260. package/dist/components/BbAlert/BbAlert.vue_vue_type_script_setup_true_lang.js +46 -30
  261. package/dist/components/BbAlert/types.d.ts +37 -3
  262. package/dist/components/BbAlert/types.js +13 -0
  263. package/dist/components/BbAsterisk/BbAsterisk.vue.d.ts +3 -1
  264. package/dist/components/BbAsterisk/BbAsterisk.vue_vue_type_script_setup_true_lang.js +23 -8
  265. package/dist/components/BbAsterisk/types.d.ts +18 -0
  266. package/dist/components/BbAsterisk/types.js +7 -0
  267. package/dist/components/BbAvatar/BbAvatar.vue.d.ts +1 -1
  268. package/dist/components/BbAvatar/BbAvatar.vue_vue_type_script_setup_true_lang.js +57 -44
  269. package/dist/components/BbAvatar/types.d.ts +23 -0
  270. package/dist/components/BbAvatar/types.js +7 -0
  271. package/dist/components/BbBadge/BadgeBodyContent.vue_vue_type_script_setup_true_lang.js +24 -18
  272. package/dist/components/BbBadge/BbBadge.vue_vue_type_script_setup_true_lang.js +96 -53
  273. package/dist/components/BbBadge/BbBadgeButton.vue_vue_type_script_setup_true_lang.js +27 -8
  274. package/dist/components/BbBadge/badgeButtonContext.d.ts +25 -8
  275. package/dist/components/BbBadge/types.d.ts +46 -3
  276. package/dist/components/BbBadge/types.js +13 -0
  277. package/dist/components/BbBaseButton/BbBaseButton.vue_vue_type_script_setup_true_lang.js +109 -96
  278. package/dist/components/BbBaseButton/RouterComponent.vue_vue_type_script_setup_true_lang.js +11 -11
  279. package/dist/components/BbBaseButton/types.d.ts +33 -3
  280. package/dist/components/BbBaseButton/types.js +9 -2
  281. package/dist/components/BbBaseCheckboxIcon/BbBaseCheckboxIcon.vue_vue_type_script_setup_true_lang.js +50 -18
  282. package/dist/components/BbBaseCheckboxIcon/types.d.ts +31 -2
  283. package/dist/components/BbBaseCheckboxIcon/types.js +8 -0
  284. package/dist/components/BbBaseRadioIcon/BbBaseRadioIcon.vue_vue_type_script_setup_true_lang.js +45 -15
  285. package/dist/components/BbBaseRadioIcon/types.d.ts +31 -2
  286. package/dist/components/BbBaseRadioIcon/types.js +8 -0
  287. package/dist/components/BbBaseSwitchIcon/BbBaseSwitchIcon.vue_vue_type_script_setup_true_lang.js +48 -16
  288. package/dist/components/BbBaseSwitchIcon/types.d.ts +31 -2
  289. package/dist/components/BbBaseSwitchIcon/types.js +8 -0
  290. package/dist/components/BbBreadcrumbs/BbBreadcrumbs.vue_vue_type_script_setup_true_lang.js +187 -132
  291. package/dist/components/BbBreadcrumbs/types.d.ts +45 -3
  292. package/dist/components/BbBreadcrumbs/types.js +12 -0
  293. package/dist/components/BbButton/BbButton.vue.d.ts +5 -0
  294. package/dist/components/BbButton/BbButton.vue_vue_type_script_setup_true_lang.js +107 -81
  295. package/dist/components/BbButton/types.d.ts +113 -2
  296. package/dist/components/BbButton/types.js +12 -0
  297. package/dist/components/BbCalendar/BbCalendar.vue.d.ts +34 -0
  298. package/dist/components/BbCalendar/BbCalendar.vue.js +6 -0
  299. package/dist/components/BbCalendar/BbCalendar.vue_vue_type_script_setup_true_lang.js +608 -0
  300. package/dist/components/BbCalendar/CalendarMonthPanel.vue.js +5 -0
  301. package/dist/components/BbCalendar/CalendarMonthPanel.vue_vue_type_script_setup_true_lang.js +124 -0
  302. package/dist/components/BbCalendar/CalendarYearPanel.vue.js +5 -0
  303. package/dist/components/BbCalendar/CalendarYearPanel.vue_vue_type_script_setup_true_lang.js +126 -0
  304. package/dist/components/BbCalendar/calendarHost.d.ts +29 -0
  305. package/dist/components/BbCalendar/calendarHost.js +10 -0
  306. package/dist/components/BbCalendar/types.d.ts +225 -0
  307. package/dist/components/BbCalendar/types.js +29 -0
  308. package/dist/components/{BbBaseDatePicker/useDatePickerContext.d.ts → BbCalendar/useCalendarContext.d.ts} +10 -7
  309. package/dist/components/BbCalendar/useCalendarContext.js +11 -0
  310. package/dist/components/BbCalendar/useCalendarGrid.d.ts +208 -0
  311. package/dist/components/BbCalendar/useCalendarGrid.js +274 -0
  312. package/dist/components/BbCalendar/useDayGrid.d.ts +79 -0
  313. package/dist/components/BbCalendar/useDayGrid.js +204 -0
  314. package/dist/components/BbCalendar/useToday.d.ts +23 -0
  315. package/dist/components/BbCalendar/useToday.js +21 -0
  316. package/dist/components/BbCheckbox/BbCheckbox.vue.d.ts +7 -7
  317. package/dist/components/BbCheckbox/BbCheckbox.vue_vue_type_script_setup_true_lang.js +214 -72
  318. package/dist/components/BbCheckbox/types.d.ts +180 -13
  319. package/dist/components/BbCheckbox/types.js +8 -0
  320. package/dist/components/BbCheckboxGroup/BbCheckboxGroup.vue.d.ts +15 -3
  321. package/dist/components/BbCheckboxGroup/BbCheckboxGroup.vue_vue_type_script_setup_true_lang.js +338 -90
  322. package/dist/components/BbCheckboxGroup/types.d.ts +195 -20
  323. package/dist/components/BbCheckboxGroup/types.js +10 -0
  324. package/dist/components/BbCollapsible/BbCollapsible.vue.d.ts +2 -1
  325. package/dist/components/BbCollapsible/BbCollapsible.vue_vue_type_script_setup_true_lang.js +41 -19
  326. package/dist/components/BbCollapsible/types.d.ts +44 -1
  327. package/dist/components/BbCollapsible/types.js +7 -0
  328. package/dist/components/BbColorInput/BbColorInput.vue.d.ts +17 -7
  329. package/dist/components/BbColorInput/BbColorInput.vue_vue_type_script_setup_true_lang.js +330 -86
  330. package/dist/components/BbColorInput/types.d.ts +230 -12
  331. package/dist/components/BbColorInput/types.js +24 -0
  332. package/dist/components/BbColorPalette/BbColorPalette.vue.d.ts +10 -2
  333. package/dist/components/BbColorPalette/BbColorPalette.vue_vue_type_script_setup_true_lang.js +515 -108
  334. package/dist/components/BbColorPalette/types.d.ts +76 -7
  335. package/dist/components/BbColorPalette/types.js +12 -0
  336. package/dist/components/BbConfirm/BbConfirm.vue.d.ts +2 -1
  337. package/dist/components/BbConfirm/BbConfirm.vue_vue_type_script_setup_true_lang.js +125 -76
  338. package/dist/components/BbConfirm/BbConfirmPortal.vue.d.ts +1 -0
  339. package/dist/components/BbConfirm/types.d.ts +49 -0
  340. package/dist/components/BbConfirm/types.js +17 -0
  341. package/dist/components/BbDatePicker/BbDatePicker.vue.d.ts +16 -10
  342. package/dist/components/BbDatePicker/BbDatePicker.vue_vue_type_script_setup_true_lang.js +320 -223
  343. package/dist/components/BbDatePicker/types.d.ts +111 -17
  344. package/dist/components/BbDatePicker/types.js +33 -0
  345. package/dist/components/BbDatePickerInput/BbDatePickerInput.vue.d.ts +16 -4
  346. package/dist/components/BbDatePickerInput/BbDatePickerInput.vue_vue_type_script_setup_true_lang.js +1172 -87
  347. package/dist/components/BbDatePickerInput/types.d.ts +224 -19
  348. package/dist/components/BbDatePickerInput/types.js +39 -0
  349. package/dist/components/BbDialog/BbDialog.vue.d.ts +3 -3
  350. package/dist/components/BbDialog/BbDialog.vue_vue_type_script_setup_true_lang.js +227 -136
  351. package/dist/components/BbDialog/types.d.ts +92 -3
  352. package/dist/components/BbDialog/types.js +16 -0
  353. package/dist/components/BbDialog/useDialogStack.d.ts +12 -0
  354. package/dist/components/BbDialog/useDialogStack.js +9 -2
  355. package/dist/components/BbDropdown/AdaptiveDropdown.vue.d.ts +2 -0
  356. package/dist/components/BbDropdown/AdaptiveDropdown.vue_vue_type_script_setup_true_lang.js +108 -96
  357. package/dist/components/BbDropdown/BbDropdown.vue.d.ts +10 -2
  358. package/dist/components/BbDropdown/BbDropdown.vue_vue_type_script_setup_true_lang.js +337 -268
  359. package/dist/components/BbDropdown/BbDropdownGroup.vue.d.ts +5 -1
  360. package/dist/components/BbDropdown/BbDropdownList.vue.d.ts +8 -2
  361. package/dist/components/BbDropdown/BbDropdownList.vue_vue_type_script_setup_true_lang.js +377 -293
  362. package/dist/components/BbDropdown/DropdownPipelineResolver.vue_vue_type_script_setup_true_lang.js +129 -118
  363. package/dist/components/BbDropdown/normalizeGroups.js +55 -31
  364. package/dist/components/BbDropdown/types.d.ts +288 -30
  365. package/dist/components/BbDropdown/types.js +21 -2
  366. package/dist/components/BbDropdown/useDropdownContext.d.ts +10 -4
  367. package/dist/components/BbDropdown/useDropdownGroupRegistry.d.ts +1 -0
  368. package/dist/components/BbDropdownButton/BbDropdownButton.vue.d.ts +18 -3
  369. package/dist/components/BbDropdownButton/BbDropdownButton.vue_vue_type_script_setup_true_lang.js +172 -40
  370. package/dist/components/BbDropdownButton/types.d.ts +137 -8
  371. package/dist/components/BbDropdownButton/types.js +35 -0
  372. package/dist/components/BbDropzone/BbDropzone.vue.d.ts +2 -2
  373. package/dist/components/BbDropzone/BbDropzone.vue_vue_type_script_setup_true_lang.js +186 -144
  374. package/dist/components/BbDropzone/types.d.ts +38 -4
  375. package/dist/components/BbDropzone/types.js +16 -0
  376. package/dist/components/BbForm/BbForm.vue.d.ts +94 -0
  377. package/dist/{validated → components/BbForm}/BbForm.vue.js +1 -1
  378. package/dist/components/BbForm/BbForm.vue_vue_type_script_setup_true_lang.js +317 -0
  379. package/dist/components/BbForm/BbFormCustomField.d.ts +14 -0
  380. package/dist/components/BbForm/BbFormCustomField.js +43 -0
  381. package/dist/components/BbForm/bindFormField.d.ts +16 -0
  382. package/dist/components/BbForm/bindFormField.js +85 -0
  383. package/dist/components/BbForm/formFields.d.ts +64 -0
  384. package/dist/components/BbForm/formFields.js +11 -0
  385. package/dist/components/BbForm/formSchema.d.ts +56 -0
  386. package/dist/components/BbForm/formSchema.js +196 -0
  387. package/dist/components/BbForm/standardSchema.d.ts +59 -0
  388. package/dist/components/BbIcon/BbIcon.vue_vue_type_script_setup_true_lang.js +58 -48
  389. package/dist/components/BbIcon/iconCache.d.ts +63 -0
  390. package/dist/components/BbIcon/iconCache.js +35 -0
  391. package/dist/components/BbIcon/types.d.ts +22 -2
  392. package/dist/components/BbIcon/types.js +7 -0
  393. package/dist/components/BbIndicator/BbIndicator.vue_vue_type_script_setup_true_lang.js +34 -21
  394. package/dist/components/BbIndicator/types.d.ts +24 -0
  395. package/dist/components/BbIndicator/types.js +7 -0
  396. package/dist/components/BbNumberInput/BbNumberInput.vue.d.ts +12 -8
  397. package/dist/components/BbNumberInput/BbNumberInput.vue_vue_type_script_setup_true_lang.js +308 -85
  398. package/dist/components/BbNumberInput/types.d.ts +201 -18
  399. package/dist/components/BbNumberInput/types.js +8 -0
  400. package/dist/components/BbOffCanvas/BbOffCanvas.vue.d.ts +3 -3
  401. package/dist/components/BbOffCanvas/BbOffCanvas.vue_vue_type_script_setup_true_lang.js +311 -210
  402. package/dist/components/BbOffCanvas/types.d.ts +79 -6
  403. package/dist/components/BbOffCanvas/types.js +15 -0
  404. package/dist/components/BbPagination/BbPagination.vue.d.ts +2 -2
  405. package/dist/components/BbPagination/BbPagination.vue_vue_type_script_setup_true_lang.js +125 -90
  406. package/dist/components/BbPagination/types.d.ts +38 -0
  407. package/dist/components/BbPagination/types.js +13 -0
  408. package/dist/components/BbPopover/BbPopover.vue.d.ts +4 -4
  409. package/dist/components/BbPopover/BbPopover.vue_vue_type_script_setup_true_lang.js +219 -179
  410. package/dist/components/BbPopover/types.d.ts +51 -5
  411. package/dist/components/BbPopover/types.js +14 -0
  412. package/dist/components/BbProgress/BbProgress.vue_vue_type_script_setup_true_lang.js +29 -16
  413. package/dist/components/BbProgress/types.d.ts +25 -0
  414. package/dist/components/BbProgress/types.js +7 -0
  415. package/dist/components/BbPtScope/BbPtScope.vue.d.ts +12 -0
  416. package/dist/components/BbPtScope/BbPtScope.vue.js +5 -0
  417. package/dist/components/BbPtScope/BbPtScope.vue_vue_type_script_setup_true_lang.js +13 -0
  418. package/dist/components/BbPtScope/types.d.ts +15 -0
  419. package/dist/components/BbRadio/BbRadio.vue.d.ts +7 -7
  420. package/dist/components/BbRadio/BbRadio.vue_vue_type_script_setup_true_lang.js +172 -59
  421. package/dist/components/BbRadio/types.d.ts +152 -13
  422. package/dist/components/BbRadio/types.js +8 -0
  423. package/dist/components/BbRadioGroup/BbRadioGroup.vue.d.ts +14 -2
  424. package/dist/components/BbRadioGroup/BbRadioGroup.vue_vue_type_script_setup_true_lang.js +319 -92
  425. package/dist/components/BbRadioGroup/types.d.ts +198 -22
  426. package/dist/components/BbRadioGroup/types.js +10 -0
  427. package/dist/components/BbRating/BbRating.vue.d.ts +10 -8
  428. package/dist/components/BbRating/BbRating.vue_vue_type_script_setup_true_lang.js +259 -78
  429. package/dist/components/BbRating/types.d.ts +174 -13
  430. package/dist/components/BbRating/types.js +21 -0
  431. package/dist/components/BbSelect/BbSelect.vue.d.ts +17 -3
  432. package/dist/components/BbSelect/BbSelect.vue_vue_type_script_setup_true_lang.js +553 -83
  433. package/dist/components/BbSelect/types.d.ts +235 -20
  434. package/dist/components/BbSelect/types.js +41 -0
  435. package/dist/components/BbSelectPopover/BbSelectPopover.vue.d.ts +15 -1
  436. package/dist/components/BbSelectPopover/BbSelectPopover.vue_vue_type_script_setup_true_lang.js +541 -391
  437. package/dist/components/BbSelectPopover/types.d.ts +124 -8
  438. package/dist/components/BbSelectPopover/types.js +24 -0
  439. package/dist/components/BbSlider/BbSlider.vue.d.ts +13 -8
  440. package/dist/components/BbSlider/BbSlider.vue_vue_type_script_setup_true_lang.js +472 -96
  441. package/dist/components/BbSlider/types.d.ts +202 -13
  442. package/dist/components/BbSlider/types.js +26 -0
  443. package/dist/components/BbSmoothHeight/BbSmoothHeight.vue.d.ts +1 -1
  444. package/dist/components/BbSmoothHeight/BbSmoothHeight.vue_vue_type_script_setup_true_lang.js +60 -48
  445. package/dist/components/BbSmoothHeight/types.d.ts +19 -0
  446. package/dist/components/BbSmoothHeight/types.js +7 -0
  447. package/dist/components/BbSpinner/BbSpinner.vue_vue_type_script_setup_true_lang.js +27 -14
  448. package/dist/components/BbSpinner/types.d.ts +22 -1
  449. package/dist/components/BbSpinner/types.js +7 -0
  450. package/dist/components/BbSwitch/BbSwitch.vue.d.ts +7 -7
  451. package/dist/components/BbSwitch/BbSwitch.vue_vue_type_script_setup_true_lang.js +220 -78
  452. package/dist/components/BbSwitch/types.d.ts +25 -10
  453. package/dist/components/BbSwitch/types.js +5 -0
  454. package/dist/components/BbSwitchGroup/BbSwitchGroup.vue.d.ts +14 -2
  455. package/dist/components/BbSwitchGroup/BbSwitchGroup.vue_vue_type_script_setup_true_lang.js +338 -90
  456. package/dist/components/BbSwitchGroup/types.d.ts +30 -7
  457. package/dist/components/BbSwitchGroup/types.js +5 -0
  458. package/dist/components/BbTable/BbTable.vue.d.ts +27 -6
  459. package/dist/components/BbTable/BbTable.vue_vue_type_script_setup_true_lang.js +2013 -685
  460. package/dist/components/BbTable/BbTableDataRow.d.ts +196 -0
  461. package/dist/components/BbTable/BbTableDataRow.js +151 -0
  462. package/dist/components/BbTable/BbTableExpandRow.d.ts +84 -0
  463. package/dist/components/BbTable/BbTableExpandRow.js +62 -0
  464. package/dist/components/BbTable/BbTableSelectToggle.d.ts +120 -0
  465. package/dist/components/BbTable/BbTableSelectToggle.js +122 -0
  466. package/dist/components/BbTable/gridWidgets.d.ts +30 -0
  467. package/dist/components/BbTable/gridWidgets.js +14 -0
  468. package/dist/components/BbTable/types.d.ts +473 -123
  469. package/dist/components/BbTable/types.js +31 -0
  470. package/dist/components/BbTable/utils.d.ts +145 -4
  471. package/dist/components/BbTable/utils.js +154 -37
  472. package/dist/components/BbTabs/BbTabs.vue.d.ts +3 -1
  473. package/dist/components/BbTabs/BbTabs.vue_vue_type_script_setup_true_lang.js +62 -26
  474. package/dist/components/BbTabs/BbTabsList.vue.d.ts +3 -10
  475. package/dist/components/BbTabs/BbTabsList.vue_vue_type_script_setup_true_lang.js +143 -81
  476. package/dist/components/BbTabs/BbTabsPanels.vue.d.ts +12 -0
  477. package/dist/components/{BbBaseSwitch/BbBaseSwitch.vue.js → BbTabs/BbTabsPanels.vue.js} +2 -2
  478. package/dist/components/BbTabs/BbTabsPanels.vue_vue_type_script_setup_true_lang.js +59 -0
  479. package/dist/components/BbTabs/BbTabsRoot.vue.d.ts +3 -1
  480. package/dist/components/BbTabs/BbTabsRoot.vue_vue_type_script_setup_true_lang.js +2 -1
  481. package/dist/components/BbTabs/types.d.ts +183 -23
  482. package/dist/components/BbTabs/types.js +34 -0
  483. package/dist/components/BbTag/BbTag.vue.d.ts +13 -10
  484. package/dist/components/BbTag/BbTag.vue_vue_type_script_setup_true_lang.js +383 -92
  485. package/dist/components/BbTag/types.d.ts +139 -14
  486. package/dist/components/BbTag/types.js +22 -0
  487. package/dist/components/BbTextInput/BbTextInput.vue.d.ts +10 -8
  488. package/dist/components/BbTextInput/BbTextInput.vue_vue_type_script_setup_true_lang.js +257 -84
  489. package/dist/components/BbTextInput/types.d.ts +168 -13
  490. package/dist/components/BbTextInput/types.js +8 -0
  491. package/dist/components/BbTextarea/BbTextarea.vue.d.ts +7 -7
  492. package/dist/components/BbTextarea/BbTextarea.vue_vue_type_script_setup_true_lang.js +291 -94
  493. package/dist/components/BbTextarea/types.d.ts +158 -14
  494. package/dist/components/BbTextarea/types.js +8 -0
  495. package/dist/components/BbTimePicker/BbTimePicker.vue.d.ts +12 -4
  496. package/dist/components/BbTimePicker/BbTimePicker.vue_vue_type_script_setup_true_lang.js +199 -122
  497. package/dist/components/BbTimePicker/types.d.ts +94 -7
  498. package/dist/components/BbTimePicker/types.js +18 -0
  499. package/dist/components/BbTimePickerInput/BbTimePickerInput.vue.d.ts +14 -4
  500. package/dist/components/BbTimePickerInput/BbTimePickerInput.vue_vue_type_script_setup_true_lang.js +749 -86
  501. package/dist/components/BbTimePickerInput/types.d.ts +171 -22
  502. package/dist/components/BbTimePickerInput/types.js +25 -0
  503. package/dist/components/BbToast/BbToast.vue_vue_type_script_setup_true_lang.js +63 -25
  504. package/dist/components/BbToast/BbToastMessage.vue.d.ts +4 -1
  505. package/dist/components/BbToast/BbToastMessage.vue_vue_type_script_setup_true_lang.js +79 -76
  506. package/dist/components/BbToast/BbToastPortal.vue.d.ts +1 -0
  507. package/dist/components/BbToast/BbToastRegion.vue.d.ts +4 -1
  508. package/dist/components/BbToast/BbToastRegion.vue_vue_type_script_setup_true_lang.js +72 -64
  509. package/dist/components/BbToast/types.d.ts +54 -1
  510. package/dist/components/BbToast/types.js +28 -0
  511. package/dist/components/BbTooltip/BbTooltip.vue_vue_type_script_setup_true_lang.js +104 -87
  512. package/dist/components/BbTooltip/types.d.ts +40 -2
  513. package/dist/components/BbTooltip/types.js +7 -0
  514. package/dist/components/BbTree/BbTree.vue.d.ts +15 -3
  515. package/dist/components/BbTree/BbTree.vue_vue_type_script_setup_true_lang.js +51 -29
  516. package/dist/components/BbTree/BbTreeLevel.vue.d.ts +1 -1
  517. package/dist/components/BbTree/BbTreeLevel.vue_vue_type_script_setup_true_lang.js +17 -16
  518. package/dist/components/BbTree/context.d.ts +9 -1
  519. package/dist/components/BbTree/types.d.ts +40 -5
  520. package/dist/components/BbTree/types.js +7 -0
  521. package/dist/components/ChipsBox/ChipsBox.vue_vue_type_script_setup_true_lang.js +46 -44
  522. package/dist/components/ChipsBox/types.d.ts +7 -0
  523. package/dist/components/ClearableButton/ClearableButton.vue_vue_type_script_setup_true_lang.js +5 -5
  524. package/dist/components/CommaBox/CommaBox.vue_vue_type_script_setup_true_lang.js +11 -7
  525. package/dist/components/CommaBox/types.d.ts +7 -0
  526. package/dist/components/{BbBaseInputContainer/BbBaseInputContainer.vue.d.ts → CommonField/CommonField.vue.d.ts} +5 -5
  527. package/dist/components/{BbBaseRadio/BbBaseRadio.vue.js → CommonField/CommonField.vue.js} +2 -2
  528. package/dist/components/CommonField/CommonField.vue_vue_type_script_setup_true_lang.js +189 -0
  529. package/dist/components/CommonField/messageHeightMatrix.d.ts +2 -0
  530. package/dist/components/{BbBaseInputContainer → CommonField}/types.d.ts +52 -16
  531. package/dist/components/{CommonInputWrapper/CommonInputWrapper.vue.d.ts → CommonFieldInput/CommonFieldInput.vue.d.ts} +5 -4
  532. package/dist/components/{BbBaseRadioGroup/BbBaseRadioGroup.vue.js → CommonFieldInput/CommonFieldInput.vue.js} +2 -2
  533. package/dist/components/CommonFieldInput/CommonFieldInput.vue_vue_type_script_setup_true_lang.js +120 -0
  534. package/dist/components/CommonFieldInput/boxBorderMatrix.d.ts +10 -0
  535. package/dist/components/{CommonInputWrapper → CommonFieldInput}/types.d.ts +27 -8
  536. package/dist/components/CommonPopover/CommonPopover.vue.d.ts +11 -2
  537. package/dist/components/CommonPopover/CommonPopover.vue_vue_type_script_setup_true_lang.js +76 -63
  538. package/dist/components/CommonPopover/types.d.ts +27 -8
  539. package/dist/components/{BbBaseDatePickerInput/BbBaseDatePickerTimeSelector.vue.d.ts → CommonTimeSelector/CommonTimeSelector.vue.d.ts} +21 -2
  540. package/dist/components/{BbBaseColorPalette/BbBaseColorPalette.vue.js → CommonTimeSelector/CommonTimeSelector.vue.js} +2 -2
  541. package/dist/components/CommonTimeSelector/CommonTimeSelector.vue_vue_type_script_setup_true_lang.js +232 -0
  542. package/dist/components/CommonTimeSelector/types.d.ts +6 -0
  543. package/dist/components/FlatListBox/FlatListBox.vue.d.ts +5 -1
  544. package/dist/components/FlatListBox/FlatListBox.vue_vue_type_script_setup_true_lang.js +165 -95
  545. package/dist/components/FlatListBox/types.d.ts +24 -2
  546. package/dist/components/GroupedListBox/GroupedListBox.vue.d.ts +5 -1
  547. package/dist/components/GroupedListBox/GroupedListBox.vue_vue_type_script_setup_true_lang.js +217 -134
  548. package/dist/components/GroupedListBox/types.d.ts +24 -2
  549. package/dist/components/ListBox/ListBox.vue.d.ts +5 -1
  550. package/dist/components/ListBox/ListBox.vue_vue_type_script_setup_true_lang.js +95 -69
  551. package/dist/components/ListBox/types.d.ts +24 -2
  552. package/dist/components/OptionsContainer/OptionsContainer.vue.d.ts +1 -1
  553. package/dist/components/OptionsContainer/OptionsContainer.vue_vue_type_script_setup_true_lang.js +109 -37
  554. package/dist/components/OptionsContainer/types.d.ts +53 -9
  555. package/dist/components/Transitions/ScaleFade.vue_vue_type_script_setup_true_lang.js +8 -8
  556. package/dist/components/Transitions/Slide.vue.js +1 -1
  557. package/dist/composables/useBaseOptions.d.ts +12 -1
  558. package/dist/composables/useBaseOptions.js +77 -37
  559. package/dist/composables/useBbConfig.d.ts +27 -6
  560. package/dist/composables/useBbConfig.js +8 -2
  561. package/dist/composables/useBbDropdownContext.d.ts +5 -0
  562. package/dist/composables/useBbFormContext.d.ts +131 -8
  563. package/dist/composables/useBbFormContext.js +49 -30
  564. package/dist/composables/useBbFormField.d.ts +40 -0
  565. package/dist/composables/useBbFormField.js +39 -0
  566. package/dist/composables/useBbTableContext.d.ts +45 -1
  567. package/dist/composables/useBbTableContext.js +93 -87
  568. package/dist/composables/useBbTabsContext.d.ts +15 -9
  569. package/dist/composables/useBbTabsContext.js +121 -90
  570. package/dist/composables/useClosingInert.d.ts +4 -4
  571. package/dist/composables/useCoarsePointer.js +7 -10
  572. package/dist/composables/useCoherence.js +1 -1
  573. package/dist/composables/useConfig.d.ts +59 -0
  574. package/dist/composables/useConfig.js +15 -0
  575. package/dist/composables/useConfirm.d.ts +39 -7
  576. package/dist/composables/useConfirm.js +50 -41
  577. package/dist/composables/useEscapeStackEntry.d.ts +13 -0
  578. package/dist/composables/useEscapeStackEntry.js +16 -0
  579. package/dist/composables/useFormBinding.d.ts +116 -0
  580. package/dist/composables/useFormBinding.js +34 -0
  581. package/dist/composables/useHydrated.d.ts +18 -0
  582. package/dist/composables/useHydrated.js +13 -7
  583. package/dist/composables/useId.d.ts +4 -3
  584. package/dist/composables/useId.js +1 -7
  585. package/dist/composables/useItemsGetter.d.ts +11 -0
  586. package/dist/composables/useItemsGetter.js +44 -18
  587. package/dist/composables/useKeyboardInset.d.ts +28 -0
  588. package/dist/composables/useKeyboardInset.js +32 -0
  589. package/dist/composables/useLocale.js +10 -7
  590. package/dist/composables/useMobile.js +7 -10
  591. package/dist/composables/usePassthrough.d.ts +228 -0
  592. package/dist/composables/usePassthrough.js +247 -0
  593. package/dist/composables/usePrefill.d.ts +22 -2
  594. package/dist/composables/usePrefill.js +35 -19
  595. package/dist/composables/useSafeAreaInternal.js +1 -1
  596. package/dist/composables/useSegmentedFields.d.ts +2 -2
  597. package/dist/composables/useSsrState.d.ts +20 -0
  598. package/dist/composables/useSsrState.js +13 -0
  599. package/dist/composables/useTableWidthContext.d.ts +24 -4
  600. package/dist/composables/useTableWidthContext.js +31 -28
  601. package/dist/composables/useToast.d.ts +18 -1
  602. package/dist/composables/useToast.js +31 -18
  603. package/dist/composables/useToggleInput.d.ts +44 -0
  604. package/dist/composables/useToggleInput.js +39 -0
  605. package/dist/composables/useViewportWidth.d.ts +5 -25
  606. package/dist/composables/useViewportWidth.js +14 -7
  607. package/dist/deprecation/ai-deprecations.json.d.ts +1977 -289
  608. package/dist/deprecation/ai-deprecations.json.js +1 -1
  609. package/dist/deprecation/removedProps.js +9 -4
  610. package/dist/directives/bbDropdown.d.ts +15 -4
  611. package/dist/directives/bbDropdown.js +31 -9
  612. package/dist/directives/bbTooltip.d.ts +6 -0
  613. package/dist/directives/createPopoverDirective.d.ts +62 -0
  614. package/dist/directives/createPopoverDirective.js +92 -37
  615. package/dist/i18n/index.d.ts +10 -16
  616. package/dist/i18n/locales/cs.json +9 -5
  617. package/dist/i18n/locales/da.json +9 -5
  618. package/dist/i18n/locales/de.json +9 -5
  619. package/dist/i18n/locales/el.json +9 -5
  620. package/dist/i18n/locales/en.json +9 -5
  621. package/dist/i18n/locales/es.json +9 -5
  622. package/dist/i18n/locales/fi.json +9 -5
  623. package/dist/i18n/locales/fr.json +9 -5
  624. package/dist/i18n/locales/hu.json +9 -5
  625. package/dist/i18n/locales/it.json +9 -5
  626. package/dist/i18n/locales/ja.json +9 -5
  627. package/dist/i18n/locales/ko.json +9 -5
  628. package/dist/i18n/locales/nb.json +9 -5
  629. package/dist/i18n/locales/nl.json +9 -5
  630. package/dist/i18n/locales/pl.json +9 -5
  631. package/dist/i18n/locales/pt.json +9 -5
  632. package/dist/i18n/locales/ro.json +9 -5
  633. package/dist/i18n/locales/ru.json +9 -5
  634. package/dist/i18n/locales/sv.json +9 -5
  635. package/dist/i18n/locales/tr.json +9 -5
  636. package/dist/i18n/locales/uk.json +9 -5
  637. package/dist/i18n/locales/zh-cn.json +9 -5
  638. package/dist/icon-scan.d.ts +276 -0
  639. package/dist/icon-scan.js +485 -0
  640. package/dist/icons-whitelist.d.ts +5 -4
  641. package/dist/index.d.ts +40 -21
  642. package/dist/index.js +78 -71
  643. package/dist/llms-full.txt +61164 -27972
  644. package/dist/llms-medium.txt +1482 -366
  645. package/dist/llms.txt +32 -15
  646. package/dist/locale-blueprint.json +9 -5
  647. package/dist/nuxt-auto-imports.d.ts +76 -0
  648. package/dist/nuxt-auto-imports.js +32 -0
  649. package/dist/nuxt-module.d.ts +30 -15
  650. package/dist/nuxt.js +35 -9
  651. package/dist/passthrough-deduper.js +5 -0
  652. package/dist/plugin.d.ts +10 -1
  653. package/dist/plugin.js +29 -19
  654. package/dist/project-dts.d.ts +84 -0
  655. package/dist/project-dts.js +170 -0
  656. package/dist/reset.css +1 -1
  657. package/dist/runtime/nuxt-plugin.js +34 -21
  658. package/dist/styles.css +3 -2
  659. package/dist/types/AlertVariant.d.ts +10 -1
  660. package/dist/types/BadgeVariant.d.ts +16 -5
  661. package/dist/types/ButtonVariant.d.ts +12 -1
  662. package/dist/types/ColumnName.d.ts +30 -3
  663. package/dist/types/CommonProps.d.ts +2 -2
  664. package/dist/types/Config.d.ts +94 -1
  665. package/dist/types/ConfirmVariant.d.ts +8 -1
  666. package/dist/types/DropdownItemVariant.d.ts +8 -1
  667. package/dist/types/FieldLayout.d.ts +32 -0
  668. package/dist/types/IndicatorVariant.d.ts +11 -1
  669. package/dist/types/InputVariant.d.ts +30 -0
  670. package/dist/types/ItemProps.d.ts +50 -0
  671. package/dist/types/Option.d.ts +6 -0
  672. package/dist/types/PtScope.d.ts +15 -0
  673. package/dist/types/RegistryKey.d.ts +10 -0
  674. package/dist/types/TabsVariant.d.ts +25 -0
  675. package/dist/types/ToastVariant.d.ts +12 -2
  676. package/dist/types/TooltipVariant.d.ts +8 -1
  677. package/dist/types/passthrough.d.ts +362 -0
  678. package/dist/types/passthrough.js +78 -0
  679. package/dist/types/ptComponentMap.d.ts +62 -0
  680. package/dist/utilities/functions/hasVnodeListener.d.ts +16 -0
  681. package/dist/utilities/functions/hasVnodeListener.js +12 -0
  682. package/dist/utilities/functions/isImeComposing.d.ts +7 -0
  683. package/dist/utilities/functions/isImeComposing.js +4 -0
  684. package/dist/utilities/functions/itemProps.d.ts +46 -0
  685. package/dist/utilities/functions/itemProps.js +47 -0
  686. package/dist/utilities/functions/slotKey.d.ts +13 -8
  687. package/dist/utilities/functions/slotKey.js +78 -2
  688. package/dist/utilities/functions/snapToStep.js +2 -1
  689. package/dist/utilities/functions/toggleInput.d.ts +98 -0
  690. package/dist/utilities/functions/toggleInput.js +56 -0
  691. package/dist/utilities/functions/warnRemovedAttrs.d.ts +27 -1
  692. package/dist/utilities/functions/warnRemovedAttrs.js +75 -14
  693. package/dist/utilities/misc/listboxMetrics.d.ts +9 -3
  694. package/dist/utilities/misc/listboxMetrics.js +5 -2
  695. package/dist/utilities/misc/ssrStateInjectionKey.d.ts +42 -0
  696. package/dist/utilities/misc/ssrStateInjectionKey.js +4 -0
  697. package/dist/utils/cssLayers.d.ts +91 -0
  698. package/dist/utils/cssLayers.js +43 -0
  699. package/dist/utils/injectLibraryStyles.d.ts +3 -1
  700. package/dist/utils/injectLibraryStyles.js +24 -23
  701. package/dist/utils/overlayEscapeStack.d.ts +10 -0
  702. package/dist/utils/overlayEscapeStack.js +5 -3
  703. package/dist/utils/passthrough.d.ts +67 -0
  704. package/dist/utils/passthrough.js +100 -0
  705. package/dist/utils/passthroughDeduper.d.ts +2 -0
  706. package/dist/utils/ptScope.d.ts +8 -0
  707. package/dist/utils/ptScope.js +4 -0
  708. package/dist/utils/versionCheck.d.ts +19 -0
  709. package/dist/utils/versionCheck.js +18 -0
  710. package/dist/vite-plugin.d.ts +301 -53
  711. package/dist/vite.js +547 -375
  712. package/llms.txt +33 -16
  713. package/package.json +49 -27
  714. package/scripts/lib/check-fix.mjs +129 -0
  715. package/scripts/lib/component-attr-targets.ts +123 -0
  716. package/scripts/lib/component-tree.ts +648 -0
  717. package/scripts/lib/css-class-check.mjs +326 -0
  718. package/scripts/lib/css-class-surface.mjs +292 -0
  719. package/scripts/lib/css-color-resolve.mjs +172 -0
  720. package/scripts/lib/css-local-check.mjs +267 -0
  721. package/scripts/lib/design-token-manifest.mjs +499 -0
  722. package/scripts/lib/doc-sections.mjs +248 -0
  723. package/scripts/lib/ensure-manifest.mjs +28 -5
  724. package/scripts/lib/eslint-disable.mjs +141 -0
  725. package/scripts/lib/eslint-plugin.d.ts +64 -1
  726. package/scripts/lib/eslint-plugin.mjs +1285 -30
  727. package/scripts/lib/hand-imported-styles.mjs +326 -0
  728. package/scripts/lib/hand-roll-hints.mjs +50 -6
  729. package/scripts/lib/html-attributes.mjs +353 -0
  730. package/scripts/lib/local-components.mjs +177 -0
  731. package/scripts/lib/mcp-config.mjs +87 -58
  732. package/scripts/lib/migrate-fix.mjs +62 -3
  733. package/scripts/lib/project-variant-dts.mjs +122 -0
  734. package/scripts/lib/public-type-exports.mjs +273 -0
  735. package/scripts/lib/slot-key.mjs +147 -0
  736. package/scripts/lib/slot-renames.mjs +46 -0
  737. package/scripts/lib/squashed-slot-words.mjs +133 -0
  738. package/scripts/lib/validate-bb-markup.mjs +2213 -76
  739. package/scripts/lib/wrapper-props.mjs +188 -0
  740. package/dist/ai/BbBaseCheckbox.md +0 -49
  741. package/dist/ai/BbBaseCheckboxGroup.md +0 -64
  742. package/dist/ai/BbBaseColorInput.md +0 -65
  743. package/dist/ai/BbBaseColorPalette.md +0 -39
  744. package/dist/ai/BbBaseDatePicker.md +0 -43
  745. package/dist/ai/BbBaseDatePickerInput.md +0 -73
  746. package/dist/ai/BbBaseInputContainer.md +0 -48
  747. package/dist/ai/BbBaseNumberInput.md +0 -71
  748. package/dist/ai/BbBaseRadio.md +0 -46
  749. package/dist/ai/BbBaseRadioGroup.md +0 -64
  750. package/dist/ai/BbBaseRating.md +0 -52
  751. package/dist/ai/BbBaseSelect.md +0 -88
  752. package/dist/ai/BbBaseSlider.md +0 -56
  753. package/dist/ai/BbBaseSwitch.md +0 -49
  754. package/dist/ai/BbBaseSwitchGroup.md +0 -64
  755. package/dist/ai/BbBaseTag.md +0 -68
  756. package/dist/ai/BbBaseTextInput.md +0 -75
  757. package/dist/ai/BbBaseTextarea.md +0 -62
  758. package/dist/ai/BbBaseTimePickerInput.md +0 -62
  759. package/dist/ai/BbTabsPanes.md +0 -27
  760. package/dist/ai/CommonInputWrapper.md +0 -42
  761. package/dist/ai/source/BbBaseCheckbox.md +0 -461
  762. package/dist/ai/source/BbBaseCheckboxGroup.md +0 -554
  763. package/dist/ai/source/BbBaseColorInput.md +0 -431
  764. package/dist/ai/source/BbBaseColorPalette.md +0 -942
  765. package/dist/ai/source/BbBaseDatePicker.md +0 -1448
  766. package/dist/ai/source/BbBaseDatePickerInput.md +0 -1940
  767. package/dist/ai/source/BbBaseNumberInput.md +0 -617
  768. package/dist/ai/source/BbBaseRadio.md +0 -381
  769. package/dist/ai/source/BbBaseRadioGroup.md +0 -539
  770. package/dist/ai/source/BbBaseRating.md +0 -607
  771. package/dist/ai/source/BbBaseSelect.md +0 -945
  772. package/dist/ai/source/BbBaseSlider.md +0 -1144
  773. package/dist/ai/source/BbBaseSwitch.md +0 -246
  774. package/dist/ai/source/BbBaseSwitchGroup.md +0 -302
  775. package/dist/ai/source/BbBaseTag.md +0 -694
  776. package/dist/ai/source/BbBaseTextInput.md +0 -511
  777. package/dist/ai/source/BbBaseTextarea.md +0 -504
  778. package/dist/ai/source/BbBaseTimePickerInput.md +0 -1037
  779. package/dist/ai/source/BbTabsPanes.md +0 -377
  780. package/dist/ai/source/CommonInputWrapper.md +0 -584
  781. package/dist/alert-variants.d.ts +0 -19
  782. package/dist/assets/svgs/sort.svg_raw.js +0 -4
  783. package/dist/badge-variants.d.ts +0 -19
  784. package/dist/button-variants.d.ts +0 -21
  785. package/dist/components/BbBadge/BadgeAppendIcon.vue.d.ts +0 -3
  786. package/dist/components/BbBadge/BadgeAppendIcon.vue.js +0 -5
  787. package/dist/components/BbBadge/BadgeAppendIcon.vue_vue_type_script_setup_true_lang.js +0 -22
  788. package/dist/components/BbBaseCheckbox/BbBaseCheckbox.vue.d.ts +0 -40
  789. package/dist/components/BbBaseCheckbox/BbBaseCheckbox.vue.js +0 -6
  790. package/dist/components/BbBaseCheckbox/BbBaseCheckbox.vue_vue_type_script_setup_true_lang.js +0 -145
  791. package/dist/components/BbBaseCheckbox/types.d.ts +0 -224
  792. package/dist/components/BbBaseCheckboxGroup/BbBaseCheckboxGroup.vue.d.ts +0 -19
  793. package/dist/components/BbBaseCheckboxGroup/BbBaseCheckboxGroup.vue.js +0 -6
  794. package/dist/components/BbBaseCheckboxGroup/BbBaseCheckboxGroup.vue_vue_type_script_setup_true_lang.js +0 -190
  795. package/dist/components/BbBaseCheckboxGroup/types.d.ts +0 -257
  796. package/dist/components/BbBaseColorInput/BbBaseColorInput.vue.d.ts +0 -43
  797. package/dist/components/BbBaseColorInput/BbBaseColorInput.vue.js +0 -6
  798. package/dist/components/BbBaseColorInput/BbBaseColorInput.vue_vue_type_script_setup_true_lang.js +0 -184
  799. package/dist/components/BbBaseColorInput/types.d.ts +0 -219
  800. package/dist/components/BbBaseColorPalette/BbBaseColorPalette.vue.d.ts +0 -13
  801. package/dist/components/BbBaseColorPalette/BbBaseColorPalette.vue_vue_type_script_setup_true_lang.js +0 -395
  802. package/dist/components/BbBaseColorPalette/types.d.ts +0 -40
  803. package/dist/components/BbBaseDatePicker/BbBaseDatePicker.vue.d.ts +0 -20
  804. package/dist/components/BbBaseDatePicker/BbBaseDatePicker.vue.js +0 -6
  805. package/dist/components/BbBaseDatePicker/BbBaseDatePicker.vue_vue_type_script_setup_true_lang.js +0 -407
  806. package/dist/components/BbBaseDatePicker/BbBaseDatePickerInputDaySelector.vue.d.ts +0 -47
  807. package/dist/components/BbBaseDatePicker/BbBaseDatePickerInputDaySelector.vue.js +0 -5
  808. package/dist/components/BbBaseDatePicker/BbBaseDatePickerInputDaySelector.vue_vue_type_script_setup_true_lang.js +0 -318
  809. package/dist/components/BbBaseDatePicker/BbBaseDatePickerMonthSelector.vue.js +0 -5
  810. package/dist/components/BbBaseDatePicker/BbBaseDatePickerMonthSelector.vue_vue_type_script_setup_true_lang.js +0 -115
  811. package/dist/components/BbBaseDatePicker/BbBaseDatePickerYearSelector.vue.js +0 -5
  812. package/dist/components/BbBaseDatePicker/BbBaseDatePickerYearSelector.vue_vue_type_script_setup_true_lang.js +0 -116
  813. package/dist/components/BbBaseDatePicker/types.d.ts +0 -108
  814. package/dist/components/BbBaseDatePicker/useDatePickerContext.js +0 -11
  815. package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerInput.vue.d.ts +0 -31
  816. package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerInput.vue.js +0 -6
  817. package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerInput.vue_vue_type_script_setup_true_lang.js +0 -737
  818. package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerTimeSelector.vue.js +0 -6
  819. package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerTimeSelector.vue_vue_type_script_setup_true_lang.js +0 -204
  820. package/dist/components/BbBaseDatePickerInput/types.d.ts +0 -325
  821. package/dist/components/BbBaseInputContainer/BbBaseInputContainer.vue.js +0 -6
  822. package/dist/components/BbBaseInputContainer/BbBaseInputContainer.vue_vue_type_script_setup_true_lang.js +0 -190
  823. package/dist/components/BbBaseNumberInput/BbBaseNumberInput.vue.d.ts +0 -52
  824. package/dist/components/BbBaseNumberInput/BbBaseNumberInput.vue.js +0 -6
  825. package/dist/components/BbBaseNumberInput/BbBaseNumberInput.vue_vue_type_script_setup_true_lang.js +0 -215
  826. package/dist/components/BbBaseNumberInput/types.d.ts +0 -211
  827. package/dist/components/BbBaseRadio/BbBaseRadio.vue.d.ts +0 -33
  828. package/dist/components/BbBaseRadio/BbBaseRadio.vue_vue_type_script_setup_true_lang.js +0 -113
  829. package/dist/components/BbBaseRadio/types.d.ts +0 -179
  830. package/dist/components/BbBaseRadioGroup/BbBaseRadioGroup.vue.d.ts +0 -19
  831. package/dist/components/BbBaseRadioGroup/BbBaseRadioGroup.vue_vue_type_script_setup_true_lang.js +0 -179
  832. package/dist/components/BbBaseRadioGroup/types.d.ts +0 -223
  833. package/dist/components/BbBaseRating/BbBaseRating.vue.d.ts +0 -38
  834. package/dist/components/BbBaseRating/BbBaseRating.vue.js +0 -6
  835. package/dist/components/BbBaseRating/BbBaseRating.vue_vue_type_script_setup_true_lang.js +0 -192
  836. package/dist/components/BbBaseRating/types.d.ts +0 -176
  837. package/dist/components/BbBaseSelect/BbBaseSelect.vue.d.ts +0 -19
  838. package/dist/components/BbBaseSelect/BbBaseSelect.vue.js +0 -6
  839. package/dist/components/BbBaseSelect/BbBaseSelect.vue_vue_type_script_setup_true_lang.js +0 -311
  840. package/dist/components/BbBaseSelect/types.d.ts +0 -297
  841. package/dist/components/BbBaseSlider/BbBaseSlider.vue.d.ts +0 -35
  842. package/dist/components/BbBaseSlider/BbBaseSlider.vue.js +0 -6
  843. package/dist/components/BbBaseSlider/BbBaseSlider.vue_vue_type_script_setup_true_lang.js +0 -340
  844. package/dist/components/BbBaseSlider/types.d.ts +0 -200
  845. package/dist/components/BbBaseSwitch/BbBaseSwitch.vue.d.ts +0 -35
  846. package/dist/components/BbBaseSwitch/BbBaseSwitch.vue_vue_type_script_setup_true_lang.js +0 -146
  847. package/dist/components/BbBaseSwitch/types.d.ts +0 -10
  848. package/dist/components/BbBaseSwitchGroup/BbBaseSwitchGroup.vue.d.ts +0 -19
  849. package/dist/components/BbBaseSwitchGroup/BbBaseSwitchGroup.vue.js +0 -6
  850. package/dist/components/BbBaseSwitchGroup/BbBaseSwitchGroup.vue_vue_type_script_setup_true_lang.js +0 -190
  851. package/dist/components/BbBaseSwitchGroup/types.d.ts +0 -8
  852. package/dist/components/BbBaseTag/BbBaseTag.vue.d.ts +0 -50
  853. package/dist/components/BbBaseTag/BbBaseTag.vue.js +0 -6
  854. package/dist/components/BbBaseTag/BbBaseTag.vue_vue_type_script_setup_true_lang.js +0 -266
  855. package/dist/components/BbBaseTag/types.d.ts +0 -160
  856. package/dist/components/BbBaseTextInput/BbBaseTextInput.vue.d.ts +0 -45
  857. package/dist/components/BbBaseTextInput/BbBaseTextInput.vue.js +0 -6
  858. package/dist/components/BbBaseTextInput/BbBaseTextInput.vue_vue_type_script_setup_true_lang.js +0 -200
  859. package/dist/components/BbBaseTextInput/types.d.ts +0 -209
  860. package/dist/components/BbBaseTextarea/BbBaseTextarea.vue.d.ts +0 -39
  861. package/dist/components/BbBaseTextarea/BbBaseTextarea.vue.js +0 -6
  862. package/dist/components/BbBaseTextarea/BbBaseTextarea.vue_vue_type_script_setup_true_lang.js +0 -187
  863. package/dist/components/BbBaseTextarea/types.d.ts +0 -170
  864. package/dist/components/BbBaseTimePickerInput/BbBaseTimePickerInput.vue.d.ts +0 -27
  865. package/dist/components/BbBaseTimePickerInput/BbBaseTimePickerInput.vue.js +0 -6
  866. package/dist/components/BbBaseTimePickerInput/BbBaseTimePickerInput.vue_vue_type_script_setup_true_lang.js +0 -519
  867. package/dist/components/BbBaseTimePickerInput/types.d.ts +0 -151
  868. package/dist/components/BbTabs/BbTabsPanes.vue.d.ts +0 -16
  869. package/dist/components/BbTabs/BbTabsPanes.vue.js +0 -6
  870. package/dist/components/BbTabs/BbTabsPanes.vue_vue_type_script_setup_true_lang.js +0 -35
  871. package/dist/components/CommonInputWrapper/CommonInputWrapper.vue.js +0 -6
  872. package/dist/components/CommonInputWrapper/CommonInputWrapper.vue_vue_type_script_setup_true_lang.js +0 -107
  873. package/dist/confirm-variants.d.ts +0 -17
  874. package/dist/dropdown-item-variants.d.ts +0 -17
  875. package/dist/indicator-variants.d.ts +0 -20
  876. package/dist/locale-registry.d.ts +0 -37
  877. package/dist/toast-variants.d.ts +0 -20
  878. package/dist/tooltip-variants.d.ts +0 -17
  879. package/dist/types/InputDirection.d.ts +0 -15
  880. package/dist/validated/BbCheckbox.vue.d.ts +0 -29
  881. package/dist/validated/BbCheckbox.vue.js +0 -5
  882. package/dist/validated/BbCheckbox.vue_vue_type_script_setup_true_lang.js +0 -75
  883. package/dist/validated/BbCheckboxGroup.vue.d.ts +0 -34
  884. package/dist/validated/BbCheckboxGroup.vue.js +0 -5
  885. package/dist/validated/BbCheckboxGroup.vue_vue_type_script_setup_true_lang.js +0 -82
  886. package/dist/validated/BbColorInput.vue.d.ts +0 -37
  887. package/dist/validated/BbColorInput.vue.js +0 -5
  888. package/dist/validated/BbColorInput.vue_vue_type_script_setup_true_lang.js +0 -75
  889. package/dist/validated/BbDatePickerInput.vue.d.ts +0 -41
  890. package/dist/validated/BbDatePickerInput.vue.js +0 -5
  891. package/dist/validated/BbDatePickerInput.vue_vue_type_script_setup_true_lang.js +0 -90
  892. package/dist/validated/BbDropzone.vue.d.ts +0 -24
  893. package/dist/validated/BbDropzone.vue.js +0 -5
  894. package/dist/validated/BbDropzone.vue_vue_type_script_setup_true_lang.js +0 -45
  895. package/dist/validated/BbForm.vue.d.ts +0 -28
  896. package/dist/validated/BbForm.vue_vue_type_script_setup_true_lang.js +0 -42
  897. package/dist/validated/BbNumberInput.vue.d.ts +0 -36
  898. package/dist/validated/BbNumberInput.vue.js +0 -5
  899. package/dist/validated/BbNumberInput.vue_vue_type_script_setup_true_lang.js +0 -72
  900. package/dist/validated/BbRadioGroup.vue.d.ts +0 -34
  901. package/dist/validated/BbRadioGroup.vue.js +0 -5
  902. package/dist/validated/BbRadioGroup.vue_vue_type_script_setup_true_lang.js +0 -78
  903. package/dist/validated/BbRating.vue.d.ts +0 -30
  904. package/dist/validated/BbRating.vue.js +0 -5
  905. package/dist/validated/BbRating.vue_vue_type_script_setup_true_lang.js +0 -63
  906. package/dist/validated/BbSelect.vue.d.ts +0 -46
  907. package/dist/validated/BbSelect.vue.js +0 -5
  908. package/dist/validated/BbSelect.vue_vue_type_script_setup_true_lang.js +0 -109
  909. package/dist/validated/BbSlider.vue.d.ts +0 -36
  910. package/dist/validated/BbSlider.vue.js +0 -5
  911. package/dist/validated/BbSlider.vue_vue_type_script_setup_true_lang.js +0 -69
  912. package/dist/validated/BbSwitch.vue.d.ts +0 -29
  913. package/dist/validated/BbSwitch.vue.js +0 -5
  914. package/dist/validated/BbSwitch.vue_vue_type_script_setup_true_lang.js +0 -75
  915. package/dist/validated/BbSwitchGroup.vue.d.ts +0 -34
  916. package/dist/validated/BbSwitchGroup.vue.js +0 -5
  917. package/dist/validated/BbSwitchGroup.vue_vue_type_script_setup_true_lang.js +0 -82
  918. package/dist/validated/BbTag.vue.d.ts +0 -36
  919. package/dist/validated/BbTag.vue.js +0 -5
  920. package/dist/validated/BbTag.vue_vue_type_script_setup_true_lang.js +0 -72
  921. package/dist/validated/BbTextInput.vue.d.ts +0 -36
  922. package/dist/validated/BbTextInput.vue.js +0 -5
  923. package/dist/validated/BbTextInput.vue_vue_type_script_setup_true_lang.js +0 -72
  924. package/dist/validated/BbTextarea.vue.d.ts +0 -36
  925. package/dist/validated/BbTextarea.vue.js +0 -5
  926. package/dist/validated/BbTextarea.vue_vue_type_script_setup_true_lang.js +0 -70
  927. package/dist/validated/BbTimePickerInput.vue.d.ts +0 -37
  928. package/dist/validated/BbTimePickerInput.vue.js +0 -5
  929. package/dist/validated/BbTimePickerInput.vue_vue_type_script_setup_true_lang.js +0 -81
  930. package/dist/validated/index.d.ts +0 -43
  931. package/dist/validated/useValidatedField.d.ts +0 -93
  932. package/dist/validated/useValidatedField.js +0 -51
  933. package/dist/validated.js +0 -21
  934. /package/dist/components/{BbBaseDatePicker/BbBaseDatePickerMonthSelector.vue.d.ts → BbCalendar/CalendarMonthPanel.vue.d.ts} +0 -0
  935. /package/dist/components/{BbBaseDatePicker/BbBaseDatePickerYearSelector.vue.d.ts → BbCalendar/CalendarYearPanel.vue.d.ts} +0 -0
  936. /package/dist/{components/BbBaseDatePicker/typeahead.d.ts → composables/useTypeahead.d.ts} +0 -0
  937. /package/dist/{components/BbBaseDatePicker/typeahead.js → composables/useTypeahead.js} +0 -0
@@ -11,8 +11,10 @@
11
11
  * - .github/copilot-instructions.md fragment (GitHub Copilot)
12
12
  * - .claude/skills/bitboss-ui/SKILL.md (Claude Code)
13
13
  * - .windsurf/rules/bitboss-ui.md (Windsurf)
14
- * Accepts an optional --mcp flag (combinable with --update) to also
15
- * register the `bitboss-ui mcp` server in .mcp.json.
14
+ * Also registers the `bitboss-ui mcp` server for Claude Code,
15
+ * Cursor and VS Code and installs its optional peers
16
+ * (`@modelcontextprotocol/sdk`, `zod`) with the project's package
17
+ * manager; pass --no-mcp to skip both.
16
18
  * check Validate Bb* markup in .vue/.md files against the installed
17
19
  * components.json manifest (unknown props, removed props, bad
18
20
  * v-models, unknown `<template #slot>` names, `href`/`to`/
@@ -22,38 +24,81 @@
22
24
  * `bitboss-ui.allowComponents`) exempts an app-owned component
23
25
  * whose name happens to start with `Bb`.
24
26
  *
27
+ * `--manifest <path>` judges against ANOTHER version's
28
+ * components.json instead of the installed one — answers "what
29
+ * breaks if I upgrade" BEFORE upgrading. A path, not a version:
30
+ * no network call inside a CI validator.
31
+ *
25
32
  * SCOPE: `check` knows the INSTALLED v3 API and nothing about v2.
26
33
  * "was removed from X" is a recorded v2→v3 break; "is not in X's
27
34
  * API" only says the prop is not a v3 prop of that component —
28
35
  * it may never have been one anywhere. `printFindingLegend` says
29
36
  * so in the output, because two migrating fleets each spent real
30
37
  * time discovering it the hard way.
38
+ * changelog Breaking changes between two releases — `--since <version>`
39
+ * answers "what breaks if I bump", without MCP. Reads the
40
+ * installed `dist/ai/changelog.json`.
31
41
  * mcp Start a stdio MCP server exposing the dist/ai knowledge base
32
- * (search_components, get_component, list_recipes, get_recipe,
33
- * validate) to MCP-capable agent harnesses.
42
+ * (search_docs, search_components, get_component, get_composable,
43
+ * list_tokens, list_guides, get_guide, list_changes, list_recipes,
44
+ * get_recipe, validate) to MCP-capable agent harnesses.
34
45
  *
35
46
  * Plain ESM JavaScript on purpose: shipped as-is in the package, no build.
36
47
  */
37
48
 
49
+ import { spawnSync } from 'node:child_process';
50
+ // `globSync` is read off the namespace, not imported by name: it only exists
51
+ // from Node 22, and a named import of a missing builtin export is a
52
+ // SyntaxError at load time, which killed every command on Node 20 (Sail
53
+ // images still ship it). Only quoted glob arguments need it (Q46.4).
54
+ import * as fs from 'node:fs';
38
55
  import {
39
56
  existsSync,
40
- globSync,
41
57
  mkdirSync,
42
58
  readdirSync,
43
59
  readFileSync,
44
60
  statSync,
45
61
  writeFileSync,
46
62
  } from 'node:fs';
47
- import { findHandRollHints } from '../scripts/lib/hand-roll-hints.mjs';
48
- import { dirname, isAbsolute, join, relative } from 'node:path';
49
- import { fileURLToPath } from 'node:url';
63
+ import {
64
+ findHandRollHints,
65
+ loadKnownTokens,
66
+ } from '../scripts/lib/hand-roll-hints.mjs';
67
+ import {
68
+ disabledChecker,
69
+ ruleForFinding,
70
+ } from '../scripts/lib/eslint-disable.mjs';
71
+ import {
72
+ localBbImports,
73
+ localBbWarning,
74
+ projectLocalBbComponents,
75
+ } from '../scripts/lib/local-components.mjs';
76
+ import { applyBitbossFixes } from '../scripts/lib/check-fix.mjs';
77
+ import { cssClassFindings } from '../scripts/lib/css-class-check.mjs';
78
+ import {
79
+ cssLocalFindings,
80
+ libraryTokens,
81
+ localReads,
82
+ } from '../scripts/lib/css-local-check.mjs';
83
+ import {
84
+ HAND_IMPORTED_STYLES_EXTENSIONS,
85
+ handImportedStylesFindings,
86
+ } from '../scripts/lib/hand-imported-styles.mjs';
87
+ import { syncProjectVariantDts } from '../scripts/lib/project-variant-dts.mjs';
88
+ import { dirname, isAbsolute, join, relative, resolve } from 'node:path';
89
+ import { fileURLToPath, pathToFileURL } from 'node:url';
50
90
  import { parseArgs } from 'node:util';
51
91
  import {
92
+ detectPackageManager,
93
+ devInstallCommand,
52
94
  ensureMcpConfigs,
53
95
  missingMcpPeers,
96
+ MCP_BIN_PATH,
97
+ MCP_PEERS,
54
98
  } from '../scripts/lib/mcp-config.mjs';
55
99
  import {
56
100
  loadManifest,
101
+ registeredRuleNames,
57
102
  validateMarkdown,
58
103
  validateVueSnippet,
59
104
  } from '../scripts/lib/validate-bb-markup.mjs';
@@ -83,23 +128,33 @@ function coreRules(version) {
83
128
 
84
129
  1. **Start at the AI Router**: \`${ROUTER}\` — which file to open next (do not dump the full catalogue into context).
85
130
  2. **Obey the agent contract**: \`${CONTRACT}\`.
86
- 3. **Prefer \`Bb*\` consumer components**; never use entries marked "Reference Only - Internal" unless the user explicitly asks for internals. (\`BbBaseButton\` is consumer API; most other \`BbBase*\` form primitives are not.)
131
+ 3. **Prefer \`Bb*\` consumer components**; never use entries marked "Reference Only - Internal" unless the user explicitly asks for internals. (\`BbBaseButton\` and the \`BbBase*Icon\` glyphs are consumer API; the \`Common*\` building blocks are not.)
87
132
  4. **Never invent prop/event/slot names** — open \`${KNOWLEDGE_BASE}/<ComponentName>.md\` (Usage & Guidelines first) or validate against \`${KNOWLEDGE_BASE}/components.json\`.
88
133
  5. **Icons**: discover names first; never invent them (\`${KNOWLEDGE_BASE}/guides/icons-policy.md\`).
89
134
  6. **Item-driven components**: declarative \`items\` / \`item-text\` / \`item-value\`, \`dependencies\`, \`enforce-coherence\` — no manual watchers for coherence.
90
135
  7. **Whole pages**: one recipe under \`${KNOWLEDGE_BASE}/recipes/{vue|nuxt|inertia}/\` (see the router table).
91
- 8. **CSS near components**: \`${KNOWLEDGE_BASE}/guides/design-language.md\` — \`--bb-*\` tokens only; one primary action per view region.
92
- 9. **Variants are yours to add**: the shipped \`variant\` names are a floor, not a ceiling. When the design needs a colour the library doesn't ship (soft status badges, a brand button tone), **register the name** in the build plugin's \`badgeVariants\`/\`buttonVariants\`/\`alertVariants\`/… and **style \`.bb-badge--<name>\`** (etc.) in a project stylesheet loaded after \`bitboss-ui/styles.css\`. Do both halves — a registered name with no CSS ships an unstyled pill, and CSS with no registration fails \`vue-tsc\`. Never write an unregistered name, and never downgrade the design to a neutral shipped variant to avoid registering. Canonical palette + snippet: \`${KNOWLEDGE_BASE}/guides/design-language.md\` § Getting soft semantic badges.
93
- 10. **After writing bitboss-ui markup**, run \`npx bitboss-ui check\` — validates \`Bb*\` usage against the installed \`components.json\` and catches invented/removed props before review.
136
+ 8. **CSS near components**: \`${KNOWLEDGE_BASE}/guides/design-language.md\`. Paint as data is \`${KNOWLEDGE_BASE}/design-tokens.json\` and \`design-tokens.manifest.yaml\` (DESIGN.md-shaped). Grep \`--bb-*\`, not \`--color-*\` or \`--radius-*\`. A repo-root DESIGN.md is not this library. Two token tiers, and reaching for the wrong one is why apps end up re-skinning by class: \`--bb-*\` is the small GLOBAL theme tier (brand knobs, no numeric ramp — there is no \`--bb-primary-800\`), while each component declares its own **unprefixed** \`--*\` tokens for its look (\`.bb-table { --cell-h: 32px }\`). A missing \`--bb-*\` name is not a gap in the library — it means the knob you want is a component token. Set it on the element that DECLARES it (grep \`${KNOWLEDGE_BASE}/source/<ComponentName>.md\`); a value set further out is masked, not inherited. Prefer tokens, variants and \`pt\`; CSS on \`.bb-*__*\` internals is allowed for fine-tuning but unsupported: it can break on upgrade. \`.bb-common-*\` / \`.bb-field*\` internals: expect it to break. (\`.bb-base-button\` and the three \`.bb-base-*-icon\` glyph classes are consumer API — a supported hook, not an internal.) An override on an internal is a signal to check for a \`pt\` part or request one. A Tailwind utility on a \`Bb*\` component that does nothing is rule 9, not a library bug. One primary action per view region.
137
+ 9. **Tailwind v4 app: turn on cascade layers when you set bitboss-ui up**, not later when a class "doesn't work". In the build plugin: \`import { bitbossUi, TAILWIND_V4_LAYERS } from 'bitboss-ui/vite'\` and \`bitbossUi({ cssLayers: TAILWIND_V4_LAYERS })\` (Nuxt: \`bitboss: { cssLayers: TAILWIND_V4_LAYERS }\`, same import). Tailwind v4 emits layered CSS; without this the library's CSS is unlayered and beats every utility you put on a \`Bb*\` component or a \`pt:*\` part, whatever the specificity. With it, your utilities win. You still need the runtime plugin (\`app.use(bitbossUiPlugin)\`; Nuxt does it for you): it is what injects the sheet, into that layer. **Do not also \`@import 'bitboss-ui/styles.css'\`**: a hand import adds a second, unlayered copy and undoes the setting. Tailwind v3 or plain CSS: leave it unset. Details: \`${KNOWLEDGE_BASE}/guides/installation-and-plugin-setup.md\` § Cascade layers.
138
+ 10. **Set a \`font-family\` on \`body\`** (components inherit it; there is no font token), e.g. \`body { font-family: system-ui, sans-serif; }\`. Without one the whole app renders in the browser's default serif.
139
+ 11. **Variants are yours to add**: the shipped \`variant\` names are a floor, not a ceiling. When the design needs a colour the library doesn't ship (soft status badges, a brand button tone), **register the name** in the build plugin's \`badgeVariants\`/\`buttonVariants\`/\`alertVariants\`/… and **style \`.bb-badge--<name>\`** (etc.) in a project stylesheet loaded after \`bitboss-ui/styles.css\`. Do both halves — a registered name with no CSS ships an unstyled pill, and CSS with no registration fails \`vue-tsc\`. After registering, run \`npx bitboss-ui check\`: it writes the project's \`bitboss-ui.d.ts\` so the new name type-checks before Vite has run. Never write an unregistered name, and never downgrade the design to a neutral shipped variant to avoid registering. Canonical palette + snippet: \`${KNOWLEDGE_BASE}/guides/design-language.md\` § Getting soft semantic badges.
140
+ 12. **Never name your own components \`Bb…\`** — that prefix is bitboss-ui's. Use your app's prefix (\`App…\`, \`Acme…\`). \`check\` leaves an app's own \`Bb*\` component alone but warns: a future bitboss-ui component could take the name.
141
+ 13. **Set \`locale\` explicitly** in the build plugin (\`bitbossUi({ locale: 'it' })\` / nuxt \`bitboss: { locale: 'it' }\`) for any app that is not English: the built-in strings default to English (\`'en'\`, since 3.0.0-beta.41; it was \`'it'\`).
142
+ 14. **After writing bitboss-ui markup**, run \`npx bitboss-ui check\` — validates \`Bb*\` usage against the installed \`components.json\` and catches invented/removed props before review.
94
143
 
95
144
  After upgrading bitboss-ui, re-run: \`npx bitboss-ui ai-init\``;
96
145
  }
97
146
 
147
+ // A blank line after the start marker and before the end marker: an HTML
148
+ // comment butting against a heading or a paragraph is not Prettier-stable
149
+ // markdown, and a consumer running `prettier --check` on their AGENTS.md
150
+ // (as our own fixture does in CI) would fail on text we wrote.
98
151
  function agentsFragment(version) {
99
152
  return `${START_MARKER}
153
+
100
154
  ## bitboss-ui (v${version})
101
155
 
102
156
  ${coreRules(version)}
157
+
103
158
  ${END_MARKER}`;
104
159
  }
105
160
 
@@ -190,7 +245,7 @@ function tryWrite(label, fn) {
190
245
  }
191
246
  }
192
247
 
193
- function aiInit({ mcp = false } = {}) {
248
+ function aiInit({ mcp = true } = {}) {
194
249
  const projectRoot = process.cwd();
195
250
  const version = packageVersion();
196
251
 
@@ -239,11 +294,7 @@ function aiInit({ mcp = false } = {}) {
239
294
  ];
240
295
 
241
296
  if (mcp) {
242
- // Explicit command → register every harness, including Windsurf's global
243
- // (home-dir) config.
244
- for (const result of ensureMcpConfigs(projectRoot, {
245
- includeWindsurf: true,
246
- })) {
297
+ for (const result of ensureMcpConfigs(projectRoot)) {
247
298
  const suffix = result.reason ? ` (${result.reason})` : '';
248
299
  results.push({
249
300
  path: `${result.path} [${result.label}]${suffix}`,
@@ -252,18 +303,34 @@ function aiInit({ mcp = false } = {}) {
252
303
  }
253
304
 
254
305
  // The harness launches the server on demand, long after this command
255
- // ran — so a missing peer would surface inside an agent as a server
256
- // that never starts. Say it here, where the person is still watching.
306
+ // ran — a missing peer would surface inside an agent as a server that
307
+ // never starts. They are optional peers (~12 MB only the server loads),
308
+ // so installing the library never adds them; registering the server is
309
+ // the moment the project opts in, so install them here.
257
310
  const missing = missingMcpPeers(projectRoot);
258
311
  if (missing.length > 0) {
259
- console.warn(
260
- `[bitboss-ui] the MCP server needs ${missing.join(' and ')}, which ${
261
- missing.length > 1 ? 'are' : 'is'
262
- } not installed:\n` +
263
- `\n npm i -D ${missing.join(' ')}\n\n` +
264
- ' Optional peers, not dependencies — ~12 MB that only the MCP\n' +
265
- ' server uses. The harness entries above are written either way.'
312
+ const [cmd, ...args] = devInstallCommand(
313
+ detectPackageManager(projectRoot),
314
+ missing
266
315
  );
316
+ const printed = [cmd, ...args].join(' ');
317
+ console.log(`[bitboss-ui] installing the MCP server's peers: ${printed}`);
318
+ const installed = spawnSync(cmd, args, {
319
+ cwd: projectRoot,
320
+ stdio: 'inherit',
321
+ // npm/pnpm/yarn are .cmd shims on Windows, which only a shell runs.
322
+ shell: process.platform === 'win32',
323
+ });
324
+ if (installed.status === 0) {
325
+ results.push({ path: missing.join(', '), action: 'installed' });
326
+ } else {
327
+ console.warn(
328
+ `[bitboss-ui] could not install ${missing.join(' and ')} — run it yourself:\n` +
329
+ `\n ${printed}\n\n` +
330
+ ' The harness entries are written either way; the server starts\n' +
331
+ ' once the peers are installed.'
332
+ );
333
+ }
267
334
  }
268
335
  }
269
336
 
@@ -276,11 +343,11 @@ function aiInit({ mcp = false } = {}) {
276
343
  );
277
344
  if (mcp) {
278
345
  console.log(
279
- 'MCP: registered the bitboss-ui server for Claude Code (.mcp.json), Cursor (.cursor/mcp.json), VS Code/Copilot (.vscode/mcp.json), and Windsurf (~/.codeium global) — restart your harness to pick it up.'
346
+ 'MCP: registered the bitboss-ui server for Claude Code (.mcp.json), Cursor (.cursor/mcp.json) and VS Code/Copilot (.vscode/mcp.json) — restart your harness to pick it up. `--no-mcp` skips this.'
280
347
  );
281
348
  } else {
282
349
  console.log(
283
- 'Tip: `npx bitboss-ui ai-init --mcp` also registers the MCP server across Claude Code / Cursor / VS Code / Windsurf so agents can query the knowledge base instead of reading files.'
350
+ 'MCP: skipped (--no-mcp). Re-run without it to let agents query the knowledge base through the bitboss-ui MCP server instead of reading files.'
284
351
  );
285
352
  }
286
353
  console.log('Re-run after upgrading bitboss-ui to refresh the pointers.');
@@ -348,7 +415,7 @@ function inSkippedDir(relPath) {
348
415
  * `recursive: true` readdir) is what keeps a multi-thousand-file `vendor/`
349
416
  * tree from being walked at all.
350
417
  */
351
- function collectCheckFiles(dir, relBase = dir) {
418
+ function collectCheckFiles(dir, relBase = dir, extensions = CHECK_EXTENSIONS) {
352
419
  let entries;
353
420
  try {
354
421
  entries = readdirSync(dir, { withFileTypes: true });
@@ -361,11 +428,11 @@ function collectCheckFiles(dir, relBase = dir) {
361
428
  if (entry.isDirectory()) {
362
429
  if (isSkippedSegment(entry.name)) continue;
363
430
  if (isSkippedSubpath(relative(relBase, full))) continue;
364
- out.push(...collectCheckFiles(full, relBase));
431
+ out.push(...collectCheckFiles(full, relBase, extensions));
365
432
  continue;
366
433
  }
367
434
  if (!entry.isFile()) continue;
368
- if (!CHECK_EXTENSIONS.some((ext) => entry.name.endsWith(ext))) continue;
435
+ if (!extensions.some((ext) => entry.name.endsWith(ext))) continue;
369
436
  out.push(full);
370
437
  }
371
438
  return out;
@@ -401,7 +468,13 @@ function resolveCheckFiles(cwd, patterns) {
401
468
  continue;
402
469
  }
403
470
  }
404
- const dirents = globSync(pattern, {
471
+ if (typeof fs.globSync !== 'function') {
472
+ console.error(
473
+ `[bitboss-ui] quoted glob patterns need Node >= 22 (this is ${process.version}): "${pattern}". Pass the directory, or leave the pattern unquoted so the shell expands it.`
474
+ );
475
+ process.exit(1);
476
+ }
477
+ const dirents = fs.globSync(pattern, {
405
478
  cwd,
406
479
  withFileTypes: true,
407
480
  // Pruning is a traversal shortcut; the inSkippedDir filter below is
@@ -507,7 +580,12 @@ function printFindingLegend(findings) {
507
580
  const rows = [];
508
581
  if (kinds.has('removed-prop'))
509
582
  rows.push(
510
- ' "was removed from X" a v2→v3 break. X really had this prop; fix the call site.'
583
+ ' "was removed from X" a recorded break (v2→v3, or a v3 beta rename). X really\n' +
584
+ ' / "was renamed on X" had this prop or pt key; `check --fix` rewrites the renames.'
585
+ );
586
+ if (kinds.has('renamed-slot'))
587
+ rows.push(
588
+ ' "slot … was renamed" a recorded slot rename; `check --fix` rewrites it.'
511
589
  );
512
590
  if (kinds.has('unknown-prop'))
513
591
  rows.push(
@@ -519,6 +597,29 @@ function printFindingLegend(findings) {
519
597
  ' "restoring" anything: the second case needs deleting,\n' +
520
598
  ' not porting.'
521
599
  );
600
+ // A type written as a tag is its own category: the name IS ours, so neither
601
+ // "check the spelling" nor the allowlist applies, and a reader who skims the
602
+ // message alone would reach for one of them.
603
+ if (
604
+ findings.some((f) => / is a type export, not a component$/.test(f.message))
605
+ )
606
+ rows.push(
607
+ ' "is a type export" a real export, but a TYPE — it types a prop, it does not\n' +
608
+ ' render. Import it (`import type { … }`) and pass the\n' +
609
+ ' value; never allowlist it, which would only silence\n' +
610
+ ' every other check on that tag.'
611
+ );
612
+ if (findings.some((f) => f.fallthrough))
613
+ rows.push(
614
+ ' ⚠ (vs ✗) markup that is not a typo and may work today: an\n' +
615
+ ' undeclared listener Vue binds to the root ELEMENT,\n' +
616
+ ' so whether it fires depends on what that root is —\n' +
617
+ " an internal detail, on the component's schedule or\n" +
618
+ " the element's. `<BbDialog @close>` runs (that root is\n" +
619
+ ' a native <dialog>); `<BbAlert @close>` does not.\n' +
620
+ ' Still reported, because neither is the contract. In\n' +
621
+ ' ESLint this is `no-unknown-event`, a warning.'
622
+ );
522
623
  if (rows.length === 0) return;
523
624
  console.error('\nReading these findings:');
524
625
  for (const row of rows) console.error(row);
@@ -532,18 +633,203 @@ function printFindingLegend(findings) {
532
633
  * v-models, and `<template #slot>` names) in `.vue` and `.md` files against
533
634
  * the installed components.json manifest.
534
635
  */
535
- function checkCommand(globs, { json: jsonMode, allowEmpty, allowComponents }) {
636
+ /**
637
+ * The version a components.json describes. `loadManifest` returns the indexed
638
+ * component map, not the envelope, so read the field straight off the file.
639
+ */
640
+ /**
641
+ * `changelog [--since <v>] [--until <v>] [--json]` — what breaks between two
642
+ * releases, for anyone not driving the MCP server (a human at a terminal, CI,
643
+ * or an agent whose harness has no MCP). Same data and same range rules as the
644
+ * `list_changes` tool; this is the transport-free path to it.
645
+ */
646
+ function changelogCommand({ since, until, json: jsonMode }) {
647
+ const path = join(PACKAGE_ROOT, 'dist', 'ai', 'changelog.json');
648
+ if (!existsSync(path)) {
649
+ console.error(
650
+ `[bitboss-ui] changelog: not found at ${path} — reinstall bitboss-ui (or run \`npm run build\` when working in the library repo).`
651
+ );
652
+ process.exit(1);
653
+ }
654
+ const doc = JSON.parse(readFileSync(path, 'utf-8'));
655
+ const releases = doc.releases ?? [];
656
+
657
+ for (const [label, value] of [
658
+ ['--since', since],
659
+ ['--until', until],
660
+ ]) {
661
+ if (value != null && !releases.includes(value)) {
662
+ // A tagged-but-never-published version (beta.34): say where its
663
+ // changes went instead of "unknown", which reads like a typo.
664
+ const unpublished = (doc.unpublished ?? []).includes(value);
665
+ const next = releases.find((r) => compareReleaseVersions(r, value) > 0);
666
+ console.error(
667
+ (unpublished
668
+ ? `[bitboss-ui] changelog: ${label} ${value} was never published to npm; its changes shipped in ${next ?? 'the next release'}.\n`
669
+ : `[bitboss-ui] changelog: unknown ${label} version '${value}'.\n`) +
670
+ `Known releases: ${releases.join(', ')}`
671
+ );
672
+ process.exit(1);
673
+ }
674
+ }
675
+
676
+ const ranged = since != null || until != null;
677
+ const rows = (doc.breaking ?? []).filter((entry) => {
678
+ if (!ranged) return true;
679
+ const at = entry.firstReleasedIn;
680
+ if (at == null) return until == null;
681
+ if (since != null && compareReleaseVersions(at, since) <= 0) return false;
682
+ if (until != null && compareReleaseVersions(at, until) > 0) return false;
683
+ return true;
684
+ });
685
+
686
+ if (jsonMode) {
687
+ console.log(
688
+ JSON.stringify(
689
+ {
690
+ version: doc.version,
691
+ since: since ?? null,
692
+ until: until ?? doc.version,
693
+ count: rows.length,
694
+ breaking: rows,
695
+ guide: doc.guide,
696
+ },
697
+ null,
698
+ 2
699
+ )
700
+ );
701
+ return;
702
+ }
703
+
704
+ const range = ranged
705
+ ? `${since ?? 'the start of v3'} → ${until ?? doc.version}`
706
+ : `the whole v2 → v3 upgrade`;
707
+ if (rows.length === 0) {
708
+ // "Nothing breaks" and "I could not tell you" must not look alike.
709
+ console.log(
710
+ `[bitboss-ui] changelog: no BREAKING changes in ${range}.\n` +
711
+ ' Features and fixes are deliberately not tracked here, so this\n' +
712
+ ' means nothing breaks — not that nothing changed.'
713
+ );
714
+ return;
715
+ }
716
+ console.log(
717
+ `[bitboss-ui] changelog: ${rows.length} breaking change(s), ${range}\n`
718
+ );
719
+ for (const entry of rows) {
720
+ const at = entry.firstReleasedIn ?? 'unreleased';
721
+ if (entry.kind === 'rename') {
722
+ // `surface` says what kind of name it is (Q51.19); a slot reads `#…`.
723
+ const spell = (name) => (entry.surface === 'slot' ? `#${name}` : name);
724
+ const surface =
725
+ entry.surface && entry.surface !== 'prop' ? `${entry.surface} ` : '';
726
+ console.log(
727
+ ` [${at}] ${entry.components.join(', ')}: ${surface}\`${spell(entry.from)}\` → ` +
728
+ (entry.to == null ? 'removed' : `\`${spell(entry.to)}\``) +
729
+ (entry.note ? ` (${entry.note})` : '')
730
+ );
731
+ } else {
732
+ console.log(` [${at}] ${entry.description}`);
733
+ }
734
+ if (entry.guide) console.log(` ${entry.guide}`);
735
+ }
736
+ console.log(`\nFull migration guide: ${doc.guide}`);
737
+ }
738
+
739
+ /** Numeric, prerelease-aware ordering; the twin of the MCP server's copy. */
740
+ function compareReleaseVersions(a, b) {
741
+ const parse = (v) => {
742
+ const [core, pre = ''] = String(v).split('-');
743
+ const nums = core.split('.').map((n) => Number.parseInt(n, 10) || 0);
744
+ const [tag = '', n = ''] = pre.split('.');
745
+ return { nums, tag, n: Number.parseInt(n, 10) || 0 };
746
+ };
747
+ const x = parse(a);
748
+ const y = parse(b);
749
+ for (let i = 0; i < 3; i += 1) {
750
+ if ((x.nums[i] ?? 0) !== (y.nums[i] ?? 0))
751
+ return (x.nums[i] ?? 0) - (y.nums[i] ?? 0);
752
+ }
753
+ if (!x.tag && y.tag) return 1;
754
+ if (x.tag && !y.tag) return -1;
755
+ if (x.tag !== y.tag) return x.tag < y.tag ? -1 : 1;
756
+ return x.n - y.n;
757
+ }
758
+
759
+ function manifestVersionOf(manifestPath) {
760
+ try {
761
+ return JSON.parse(readFileSync(manifestPath, 'utf-8')).version ?? 'unknown';
762
+ } catch {
763
+ return 'unknown';
764
+ }
765
+ }
766
+
767
+ async function checkCommand(
768
+ globs,
769
+ {
770
+ json: jsonMode,
771
+ allowEmpty,
772
+ allowComponents,
773
+ manifest: manifestOverride,
774
+ fix,
775
+ }
776
+ ) {
536
777
  const projectRoot = process.cwd();
537
778
 
538
- const manifestPath = join(PACKAGE_ROOT, 'dist', 'ai', 'components.json');
779
+ /*
780
+ * `--manifest` answers the question `check` could not: "which of my files
781
+ * break in the version I am about to move to?" (reported 2026-09-09). By
782
+ * default the manifest is the INSTALLED one, so the only way to see an
783
+ * upgrade's damage was to perform the upgrade first — exactly backwards for
784
+ * the one moment the answer is worth having.
785
+ *
786
+ * Deliberately a PATH, not a version: fetching a version would put a network
787
+ * call inside a validator that consumers run in CI, with a registry outage
788
+ * as a new failure mode. Getting the file is one documented command
789
+ * (`npm pack bitboss-ui@<version>`, or the public CDN copy), and pointing at
790
+ * it keeps this offline and reproducible.
791
+ */
792
+ const installedManifest = join(PACKAGE_ROOT, 'dist', 'ai', 'components.json');
793
+ const manifestPath = manifestOverride
794
+ ? resolve(projectRoot, manifestOverride)
795
+ : installedManifest;
539
796
  if (!existsSync(manifestPath)) {
540
797
  console.error(
541
- `[bitboss-ui] Manifest not found at ${manifestPath} — reinstall bitboss-ui (or run \`npm run build\` when working in the library repo).`
798
+ manifestOverride
799
+ ? `[bitboss-ui] --manifest: no file at ${manifestPath}.\n` +
800
+ 'Point it at a components.json from the version you are moving to:\n' +
801
+ ' npm pack bitboss-ui@<version> && tar -xzf bitboss-ui-<version>.tgz\n' +
802
+ ' npx bitboss-ui check --manifest package/dist/ai/components.json'
803
+ : `[bitboss-ui] Manifest not found at ${manifestPath} — reinstall bitboss-ui (or run \`npm run build\` when working in the library repo).`
542
804
  );
543
805
  process.exit(1);
544
806
  }
545
807
  const manifest = loadManifest(manifestPath);
546
808
 
809
+ /*
810
+ * Q53.23: write the project's `bitboss-ui.d.ts` from the build config, the
811
+ * file the Vite plugin writes when Vite starts. Agents run `vue-tsc` before
812
+ * any dev start, so a name registered in `badgeVariants` was a type error
813
+ * (and an `as any`) until then. Same generator as the plugin; a config it
814
+ * cannot read is left alone. Not under `--manifest` (an upgrade preview
815
+ * must not touch the project).
816
+ */
817
+ if (!manifestOverride) {
818
+ try {
819
+ const projectDts = await import(
820
+ pathToFileURL(join(PACKAGE_ROOT, 'dist', 'project-dts.js')).href
821
+ );
822
+ const synced = syncProjectVariantDts(projectRoot, projectDts);
823
+ if (synced.status === 'written' && !jsonMode)
824
+ console.log(
825
+ `[bitboss-ui] Wrote ${synced.path} from your build config: registered variant names now type-check. Commit it.`
826
+ );
827
+ } catch {
828
+ // No built `dist/project-dts.js` (the library repo before a build):
829
+ // nothing to write with, and nothing for `check` to fail over.
830
+ }
831
+ }
832
+
547
833
  /*
548
834
  * Every `--bb-*` the INSTALLED package declares, read from the stylesheet
549
835
  * the consumer actually ships. Read from disk rather than hardcoded so this
@@ -551,34 +837,123 @@ function checkCommand(globs, { json: jsonMode, allowEmpty, allowComponents }) {
551
837
  * Absent stylesheet → an empty set → the unknown-token hint stays silent,
552
838
  * which is the right failure: no data, no accusation.
553
839
  */
554
- const stylesPath = join(PACKAGE_ROOT, 'dist', 'styles.css');
555
- const knownTokens = existsSync(stylesPath)
556
- ? new Set(
557
- [
558
- ...readFileSync(stylesPath, 'utf-8').matchAll(
559
- /(--bb-[a-z0-9-]+)\s*:/gi
560
- ),
561
- ].map((m) => m[1].toLowerCase())
562
- )
563
- : new Set();
840
+ // Under `--manifest`, take the sheet from beside THAT manifest
841
+ // (`<pkg>/dist/ai/components.json` → `<pkg>/dist/styles.css`). Reading the
842
+ // installed sheet while judging props against another version would mix two
843
+ // releases in one verdict — the exact confusion this flag exists to end.
844
+ const stylesPath = manifestOverride
845
+ ? join(dirname(dirname(manifestPath)), 'styles.css')
846
+ : join(PACKAGE_ROOT, 'dist', 'styles.css');
847
+ const knownTokens = loadKnownTokens(stylesPath);
564
848
  const files = resolveCheckFiles(projectRoot, globs);
565
849
 
566
850
  // CHK-ALLOWCOMPONENTS: `Bb` is a naming convention, not proof of ownership.
567
851
  // An app component called `BbRichEditor` is not invalid library markup, and
568
852
  // before this the only way to silence it was to rename the component.
569
- const allowedComponents = [
853
+ const explicitlyAllowed = new Set([
570
854
  ...configuredAllowComponents(projectRoot),
571
855
  ...allowComponents,
572
- ];
573
- const validateOptions = { allowComponents: allowedComponents };
856
+ ]);
857
+ // Q53.18: the app's own `Bb*` components (`.vue` files in its `components`
858
+ // dirs, Nuxt path-prefix names included) are skipped with zero config;
859
+ // imports from the app's own paths are handled per file by the validator.
860
+ const projectLocal = projectLocalBbComponents(projectRoot);
861
+ const allowedComponents = [...explicitlyAllowed, ...projectLocal.keys()];
862
+
863
+ // Q46.8: `--fix` applies the ESLint plugin's fixes (the registered v2→v3
864
+ // migrations) with ONLY the bitboss rules, then the check below reports
865
+ // what is left, so one command migrates and verifies.
866
+ if (fix) {
867
+ const outcome = await applyBitbossFixes({
868
+ projectRoot,
869
+ files,
870
+ manifestPath: manifestOverride ? manifestPath : undefined,
871
+ allowComponents: allowedComponents,
872
+ });
873
+ if ('error' in outcome) {
874
+ console.error(`[bitboss-ui] ${outcome.error}`);
875
+ process.exit(1);
876
+ }
877
+ const log = jsonMode ? console.error : console.log;
878
+ log(
879
+ outcome.fixed.length
880
+ ? `[bitboss-ui] check --fix: fixed ${outcome.fixed.length} file(s):\n${outcome.fixed
881
+ .map((file) => ` ${relative(projectRoot, file)}`)
882
+ .join('\n')}`
883
+ : '[bitboss-ui] check --fix: nothing to fix.'
884
+ );
885
+ if (outcome.skipped?.length)
886
+ log(
887
+ `[bitboss-ui] check --fix: ESLint ignored ${outcome.skipped.length} file(s), not fixed:\n${outcome.skipped
888
+ .map((file) => ` ${relative(projectRoot, file)}`)
889
+ .join('\n')}`
890
+ );
891
+ }
892
+ // Q46.6: every `var(--x)` the project reads, from a whole-project sweep
893
+ // (explicit paths included): a local or token the app reads itself is its
894
+ // own, never "set and unread".
895
+ const projectReads = new Set();
896
+ for (const path of collectCheckFiles(
897
+ projectRoot,
898
+ projectRoot,
899
+ HAND_IMPORTED_STYLES_EXTENSIONS
900
+ ))
901
+ try {
902
+ for (const name of localReads(readFileSync(path, 'utf-8')))
903
+ projectReads.add(name);
904
+ } catch {
905
+ /* unreadable: its reads are unknown, which only means fewer passes */
906
+ }
907
+ // The tokens of the sheet `check` judges against (the installed one, or
908
+ // the one beside `--manifest`) — read AND declared names both count.
909
+ if (manifest.localSurface && existsSync(stylesPath))
910
+ manifest.localSurface.knownTokens = libraryTokens([
911
+ readFileSync(stylesPath, 'utf-8'),
912
+ ...[join(dirname(stylesPath), 'reset.css')]
913
+ .filter((path) => existsSync(path))
914
+ .map((path) => readFileSync(path, 'utf-8')),
915
+ ]);
916
+ // Q54.2: the rules the project registers with `defineRule`, from the same
917
+ // whole-project sweep, so a string rule nobody registered is caught.
918
+ const registeredRules = { names: new Set(), dynamic: false };
919
+ for (const path of collectCheckFiles(projectRoot, projectRoot, [
920
+ '.ts',
921
+ '.js',
922
+ '.mjs',
923
+ '.cjs',
924
+ '.vue',
925
+ ]))
926
+ try {
927
+ const found = registeredRuleNames(readFileSync(path, 'utf-8'));
928
+ for (const name of found.names) registeredRules.names.add(name);
929
+ if (found.dynamic) registeredRules.dynamic = true;
930
+ } catch {
931
+ /* unreadable: fewer names, which only means more caution below */
932
+ registeredRules.dynamic = true;
933
+ }
934
+ const validateOptions = {
935
+ allowComponents: allowedComponents,
936
+ projectReads,
937
+ registeredRules,
938
+ };
574
939
 
575
940
  const findings = [];
941
+ let suppressed = 0;
942
+ /** One warning per local `Bb*` component, unless allowlisted (Q53.18). */
943
+ const warnedLocal = new Set();
944
+ const warnLocal = (name, file, line) => {
945
+ if (explicitlyAllowed.has(name) || warnedLocal.has(name)) return;
946
+ warnedLocal.add(name);
947
+ warnings.push(localBbWarning(name, file, line));
948
+ };
576
949
  /*
577
950
  * Advisory only — see scripts/lib/hand-roll-hints.mjs. Hints never touch the
578
951
  * exit code, so a guess can never fail a consumer's build. `--no-hints`
579
952
  * silences them for anyone who finds them noisy.
580
953
  */
581
954
  const hints = [];
955
+ /** Findings graded `severity: 'warning'` — printed, never fatal. */
956
+ const warnings = [];
582
957
  const wantHints = !process.argv.includes('--no-hints');
583
958
  for (const file of files) {
584
959
  const relPath = relative(projectRoot, file);
@@ -586,8 +961,26 @@ function checkCommand(globs, { json: jsonMode, allowEmpty, allowComponents }) {
586
961
  const { findings: fileFindings } = file.endsWith('.md')
587
962
  ? validateMarkdown(content, manifest, validateOptions)
588
963
  : validateVueSnippet(content, manifest, validateOptions);
964
+ // Q46.9: a finding the author silenced for ESLint (`eslint-disable*`,
965
+ // usually with a reason) is silenced here too, or `check` cannot gate
966
+ // CI next to a lint step that passes. `.md` lines are fence-relative,
967
+ // and docs carry no directives, so only `.vue` files are filtered.
968
+ const isDisabled = file.endsWith('.vue')
969
+ ? disabledChecker(content)
970
+ : () => false;
971
+ if (file.endsWith('.vue'))
972
+ for (const [name, line] of localBbImports(content))
973
+ warnLocal(name, relPath, line);
589
974
  for (const finding of fileFindings) {
590
- findings.push({ file: relPath, ...finding });
975
+ if (isDisabled(finding.line, ruleForFinding(finding))) {
976
+ suppressed++;
977
+ continue;
978
+ }
979
+ // A `severity: 'warning'` finding (Q53.15 C9b: a slot spelled the
980
+ // pre-reset way) is shown and suppressible, but never fails the run.
981
+ if (finding.severity === 'warning')
982
+ warnings.push({ file: relPath, ...finding });
983
+ else findings.push({ file: relPath, ...finding });
591
984
  }
592
985
  // .md files are documentation ABOUT components; a round <img> in a doc
593
986
  // example is illustrative, not a hand-roll.
@@ -598,6 +991,61 @@ function checkCommand(globs, { json: jsonMode, allowEmpty, allowComponents }) {
598
991
  }
599
992
  }
600
993
 
994
+ for (const [name, file] of projectLocal) warnLocal(name, file);
995
+
996
+ // Q25: a hand import of `bitboss-ui/styles.css` while the runtime plugin
997
+ // injects it. Project-level — the answer needs the build config — so it
998
+ // reads the style and script files too; with explicit paths, only those.
999
+ const styleScan = globs.length
1000
+ ? files
1001
+ : collectCheckFiles(
1002
+ projectRoot,
1003
+ projectRoot,
1004
+ HAND_IMPORTED_STYLES_EXTENSIONS
1005
+ );
1006
+ findings.push(
1007
+ ...handImportedStylesFindings(
1008
+ projectRoot,
1009
+ styleScan.map((path) => ({ path, relPath: relative(projectRoot, path) }))
1010
+ )
1011
+ );
1012
+ // Q46.5: `.bb-*` selectors in the app's stylesheets (the `.vue` `<style>`
1013
+ // blocks are read by the validator above).
1014
+ for (const path of styleScan) {
1015
+ if (!/\.(?:css|scss|sass|less|pcss|postcss|styl)$/.test(path)) continue;
1016
+ const relPath = relative(projectRoot, path);
1017
+ const content = readFileSync(path, 'utf-8');
1018
+ for (const finding of [
1019
+ ...cssClassFindings(content, manifest.cssSurface, { stylesheet: true }),
1020
+ // Q46.6: custom properties set where nothing reads them.
1021
+ ...cssLocalFindings(content, manifest.cssSurface, manifest.localSurface, {
1022
+ stylesheet: true,
1023
+ projectReads,
1024
+ }),
1025
+ ])
1026
+ findings.push({ file: relPath, ...finding });
1027
+ }
1028
+
1029
+ /** One line, so a silenced finding is never invisible. */
1030
+ const printSuppressed = () => {
1031
+ if (suppressed === 0) return;
1032
+ console.log(
1033
+ `[bitboss-ui] ${suppressed} finding(s) silenced by eslint-disable comments.`
1034
+ );
1035
+ };
1036
+
1037
+ /** Warning block, printed on success and on failure alike. Never fatal. */
1038
+ const printWarnings = () => {
1039
+ if (warnings.length === 0) return;
1040
+ console.log(
1041
+ `\n[bitboss-ui] ${warnings.length} warning(s) — not fatal, but likely wrong:`
1042
+ );
1043
+ for (const warning of warnings) {
1044
+ const at = warning.line != null ? `:${warning.line}` : '';
1045
+ console.log(` ⚠ ${warning.file}${at} ${warning.message}`);
1046
+ }
1047
+ };
1048
+
601
1049
  /** Advisory block, printed on success and on failure alike. Never fatal. */
602
1050
  const printHints = () => {
603
1051
  if (hints.length === 0) return;
@@ -613,9 +1061,39 @@ function checkCommand(globs, { json: jsonMode, allowEmpty, allowComponents }) {
613
1061
  );
614
1062
  };
615
1063
 
1064
+ /*
1065
+ * Which API the verdict is against. Silent when it is the installed one —
1066
+ * that is the assumption, and a banner on every run trains people to skip
1067
+ * it. Loud under `--manifest`, because "12 findings" means something
1068
+ * completely different when it describes a version you have not installed
1069
+ * yet, and a scrollback with no marker is indistinguishable from a normal
1070
+ * run.
1071
+ */
1072
+ const judgedAgainst = manifestOverride
1073
+ ? manifestVersionOf(manifestPath)
1074
+ : packageVersion();
1075
+ if (manifestOverride && !jsonMode) {
1076
+ console.log(
1077
+ `[bitboss-ui] check: judging against bitboss-ui ${judgedAgainst} (--manifest), NOT the installed ${packageVersion()}.\n` +
1078
+ ' Findings describe the version you are moving TO.'
1079
+ );
1080
+ }
1081
+
616
1082
  if (jsonMode) {
617
1083
  console.log(
618
- JSON.stringify({ findings, hints, files: files.length }, null, 2)
1084
+ JSON.stringify(
1085
+ {
1086
+ findings,
1087
+ warnings,
1088
+ hints,
1089
+ suppressed,
1090
+ files: files.length,
1091
+ manifestVersion: judgedAgainst,
1092
+ installedVersion: packageVersion(),
1093
+ },
1094
+ null,
1095
+ 2
1096
+ )
619
1097
  );
620
1098
  if (findings.length > 0) process.exit(1);
621
1099
  if (files.length === 0 && globs.length > 0 && !allowEmpty) process.exit(1);
@@ -646,10 +1124,14 @@ function checkCommand(globs, { json: jsonMode, allowEmpty, allowComponents }) {
646
1124
  console.log(
647
1125
  `[bitboss-ui] check OK — ${summarizeFileCounts(files)} file(s), zero unknown Bb* props/v-models/slots/nav-attrs.`
648
1126
  );
1127
+ printSuppressed();
1128
+ printWarnings();
649
1129
  printHints();
650
1130
  return;
651
1131
  }
652
1132
 
1133
+ printSuppressed();
1134
+ printWarnings();
653
1135
  const fileCount = new Set(findings.map((f) => f.file)).size;
654
1136
  console.error(
655
1137
  `[bitboss-ui] check FAILED — ${findings.length} finding(s) across ${fileCount} file(s):`
@@ -668,8 +1150,13 @@ function checkCommand(globs, { json: jsonMode, allowEmpty, allowComponents }) {
668
1150
  // were indistinguishable, so every automated fix had to re-parse the
669
1151
  // file to place them. The line comes straight off the template AST.
670
1152
  const at = finding.line != null ? `line ${finding.line}: ` : '';
1153
+ // A `fallthrough` finding is not a typo and may be doing something
1154
+ // today — a native listener reaching the root element. It still counts,
1155
+ // but marking it `✗` alongside a genuinely broken prop is what let one
1156
+ // migration report read a live `<BbDialog @close>` as dead code.
1157
+ const mark = finding.fallthrough ? '⚠' : '✗';
671
1158
  console.error(
672
- ` ✗ ${at}${where ? `[${where.trim()}] ` : ''}${finding.message}`
1159
+ ` ${mark} ${at}${where ? `[${where.trim()}] ` : ''}${finding.message}`
673
1160
  );
674
1161
  if (finding.hint) console.error(` hint: ${finding.hint}`);
675
1162
  }
@@ -688,16 +1175,18 @@ Usage:
688
1175
  npx bitboss-ui <command>
689
1176
 
690
1177
  Commands:
691
- ai-init [--update] [--mcp]
1178
+ ai-init [--update] [--no-mcp]
692
1179
  Inject AI-agent knowledge-base pointers into the current
693
1180
  project (AGENTS.md, Cursor rules, Copilot instructions,
694
- Claude skill, Windsurf rules). Idempotent — safe to re-run
695
- after upgrades. \`--mcp\` also registers the bitboss-ui MCP
696
- server for Claude Code (.mcp.json), Cursor (.cursor/mcp.json),
697
- VS Code/Copilot (.vscode/mcp.json), and Windsurf (~/.codeium
698
- global) — merges, never overwrites other servers.
1181
+ Claude skill, Windsurf rules), register the bitboss-ui MCP
1182
+ server for Claude Code (.mcp.json), Cursor
1183
+ (.cursor/mcp.json) and VS Code/Copilot (.vscode/mcp.json) —
1184
+ merges, never overwrites other servers — and install its
1185
+ optional peers with the project's package manager.
1186
+ \`--no-mcp\` skips the server and the install. Idempotent —
1187
+ safe to re-run after upgrades.
699
1188
  check [glob…] [--json] [--allow-empty] [--allow-component <Name>]
700
- [--no-hints]
1189
+ [--no-hints] [--manifest <path>] [--fix]
701
1190
  Validate \`Bb*\` markup in .vue/.md files against the
702
1191
  installed components.json manifest (unknown/removed props,
703
1192
  bad v-models, unknown \`<template #slot>\` names,
@@ -710,6 +1199,36 @@ Commands:
710
1199
  nothing (a typo'd CI path validates zero files silently) —
711
1200
  pass \`--allow-empty\` when an empty match is expected.
712
1201
 
1202
+ It also writes your project's \`bitboss-ui.d.ts\` (the
1203
+ file the Vite plugin writes on start) from the variant
1204
+ options in vite.config / nuxt.config, so a newly
1205
+ registered variant name type-checks before Vite runs.
1206
+ Left alone when the options are not inline literals, and
1207
+ under \`--manifest\`.
1208
+
1209
+ \`--fix\` first applies the ESLint plugin's fixes (the
1210
+ registered v2→v3 renames, polarity flips and value
1211
+ remaps) to the matched .vue files with ONLY the
1212
+ bitboss-ui rules — your own ESLint config is not used —
1213
+ then reports what is left. Needs \`eslint\` and
1214
+ \`vue-eslint-parser\` in the project.
1215
+
1216
+ Honours ESLint disable comments in .vue files: a finding
1217
+ silenced for the matching \`bitboss-ui/*\` rule (or by a
1218
+ bare \`eslint-disable\`) is not reported, only counted:
1219
+ <!-- eslint-disable-next-line bitboss-ui/require-table-slot-prop -- why -->
1220
+
1221
+ \`--manifest <path>\` judges against another version's
1222
+ components.json instead of the installed one — the answer
1223
+ to "which of my files break if I upgrade", BEFORE you
1224
+ upgrade. The banner names both versions so a findings list
1225
+ is never mistaken for one about your current install.
1226
+ npm pack bitboss-ui@3.0.0-beta.21
1227
+ tar -xzf bitboss-ui-3.0.0-beta.21.tgz
1228
+ npx bitboss-ui check --manifest package/dist/ai/components.json
1229
+ A path, not a version, on purpose: fetching one would put
1230
+ a registry call inside a validator people run in CI.
1231
+
713
1232
  \`--allow-component <Name>\` (repeatable) exempts a
714
1233
  component your APP owns whose name starts with \`Bb\` —
715
1234
  the prefix is a convention, not proof of provenance.
@@ -719,20 +1238,101 @@ Commands:
719
1238
  Same option name as the ESLint rules' \`allowComponents\`,
720
1239
  so both gates configure alike.
721
1240
 
722
- \`--json\` prints \`{ findings: [...], hints: [...], files }\`.
1241
+ \`--json\` prints \`{ findings: [...], warnings: [...], hints: [...],
1242
+ suppressed, files, manifestVersion, installedVersion }\`.
723
1243
  Each finding: \`{ file, line, component, attr, kind,
724
1244
  message, hint?, to? }\` (plus \`fenceIndex\`/\`fenceInfo\`
725
1245
  inside a markdown fence; \`line\` is absolute in the file).
726
- \`kind\` is one of: \`removed-prop\` (a v2→v3 break — fix
727
- it), \`unknown-prop\` (not a v3 prop of that component;
1246
+ \`kind\` is one of: \`removed-prop\` (a recorded break on a
1247
+ prop or a \`pt\` key, v2→v3 or a v3 beta; \`to\` is the new
1248
+ name when there is one and \`--fix\` writes it, else the
1249
+ message says what to do), \`unknown-prop\` (not a v3 prop of that component;
728
1250
  may never have been one — see the legend the text output
729
- prints), \`unknown-model\`, \`unknown-slot\`,
1251
+ prints), \`unknown-component\` (a \`Bb*\` tag the
1252
+ manifest doesn't have; \`attr\` is the tag),
1253
+ \`unknown-model\`, \`unknown-event\`, \`unknown-slot\`,
1254
+ \`unknown-pt-key\` (a key of the \`pt\` object form that
1255
+ matches no part / state; \`to\` when the part was renamed),
730
1256
  \`no-default-slot\`, \`inert-nav-attr\`,
731
- \`missing-partner-prop\`, \`partner-prop\`,
732
- \`validated-only-prop\`.
1257
+ \`nameless-control\` (an icon-only BbButton or BbBadge,
1258
+ or a BbProgress, with no accessible name),
1259
+ \`removed-css-local\` (a component CSS local the
1260
+ library removed, e.g. \`--day-slot-allowance\`),
1261
+ \`private-import\` (an import from inside the package's
1262
+ \`dist/\`), \`not-exported-type\` (a \`Pt*\` pt type
1263
+ imported from bitboss-ui: type pt through
1264
+ \`<Component>Props['pt']\` instead),
1265
+ \`missing-key\` / \`duplicate-row-text\` (a
1266
+ BbDropdown row or group that needs a \`key\`: selectable,
1267
+ or identical keyless text in one group),
1268
+ \`unknown-variant\` (a variant name from another
1269
+ library, e.g. \`danger\` on BbAlert / BbBadge; the
1270
+ message names ours),
1271
+ \`duplicate-field-identity\` (two validated fields in
1272
+ one \`BbForm\` on the same path: the same \`name\`,
1273
+ or the same label with no \`name\`),
1274
+ \`rules-ignored-by-schema\` (a validated field's
1275
+ \`rules\` inside a \`BbForm\` that has a \`schema\`:
1276
+ vee-validate reads only the schema),
1277
+ \`row-without-name\` (a form control in a \`v-for\`
1278
+ inside a \`BbForm\` with a bound label and no \`name\`),
1279
+ \`retired-entrypoint\` (an import from
1280
+ \`bitboss-ui/validated\`, retired: everything is in
1281
+ \`bitboss-ui\`; \`--fix\` rewrites it in .vue files),
1282
+ \`unregistered-rule\` (a string rule no
1283
+ \`defineRule\` in the project registers; silent when
1284
+ the project registers rules in a loop),
1285
+ \`wrapper-drops-props\` (a wrapper whose
1286
+ \`defineProps\` declares a \`Bb*Props\` type, bare,
1287
+ \`Omit\` or \`Pick\`, and never binds or reads some
1288
+ of those props: a caller's value is dropped),
1289
+ \`renamed-slot\` (a slot the library renamed;
1290
+ \`--fix\` rewrites it), \`missing-partner-prop\`,
1291
+ \`partner-prop\`,
1292
+ \`validated-only-prop\`, \`object-items-without-text\`
1293
+ (object \`items\` with no \`item-text\`; reads only
1294
+ an inline array, or a \`const\` array, \`ref([…])\` or
1295
+ \`reactive([…])\` in the same file's
1296
+ \`<script setup>\`), \`reserved-key\` (a key
1297
+ whose slot name is one of the component's own slots,
1298
+ e.g. a BbTable column keyed \`actions\`; read from the
1299
+ manifest, same-file keys only), \`hand-imported-styles\`
1300
+ (\`bitboss-ui/styles.css\` imported in CSS, a script or
1301
+ Nuxt's \`css\` while \`injectStyles\` is on: delete it;
1302
+ read only when vite.config / nuxt.config says so),
1303
+ \`unknown-class\` (a selector on a \`.bb-*\` class the
1304
+ library does not render, in a stylesheet or a
1305
+ \`<style>\` block; \`suggestion\` is the nearest real
1306
+ one), \`renamed-class\` (a class the library renamed;
1307
+ \`to\` is its successor). Your own classes are never
1308
+ read, nor a \`bb-*\` class the same file adds itself
1309
+ (\`class\`, \`:class\`, \`pt:*\`), \`inert-token\` (a
1310
+ \`--bb-*\` SET that the library neither declares nor
1311
+ reads; \`suggestion\` = the nearest token),
1312
+ \`inert-local\` (a local set on a \`.bb-*\` block whose
1313
+ component, and what it mounts, never reads it; \`to\`
1314
+ when it was renamed). A local on your own ancestor
1315
+ element, or one your CSS reads, is never judged.
1316
+ \`warnings[]\` (never fail the run) use the same shape with
1317
+ \`severity: "warning"\`: \`likely-squashed-slot\` (a slot
1318
+ name that looks like a camelCase key squashed, e.g.
1319
+ \`#createdat\`), \`local-bb-component\` (your own
1320
+ component uses the \`Bb\` prefix; rename it).
1321
+ changelog [--since <version>] [--until <version>] [--json]
1322
+ Breaking changes between two releases — "what breaks if I
1323
+ bump". \`--since\` is the version you are ON, and is
1324
+ exclusive. With no range, every break in the v2 → v3
1325
+ upgrade. Only BREAKING changes are tracked, so an empty
1326
+ result means nothing breaks, not that nothing changed.
1327
+ npx bitboss-ui changelog --since 3.0.0-beta.20
1328
+ Pair it with \`check --manifest\` to turn the list into the
1329
+ files in YOUR app that break.
1330
+
733
1331
  mcp Start a stdio MCP server exposing the dist/ai knowledge
734
- base (search_components, get_component, list_recipes,
735
- get_recipe, validate) to MCP-capable agent harnesses.
1332
+ base (search_docs, search_components, get_component,
1333
+ get_composable, list_tokens, list_guides, get_guide,
1334
+ list_changes, list_recipes, get_recipe, validate) to
1335
+ MCP-capable agent harnesses.
736
1336
  help Show this help.
737
1337
  `);
738
1338
  }
@@ -763,9 +1363,11 @@ switch (command) {
763
1363
  case 'ai-init': {
764
1364
  const { values } = parseCommandArgs(command, commandArgs, {
765
1365
  update: { type: 'boolean' },
766
- mcp: { type: 'boolean' },
1366
+ // The MCP server is registered by default: people ran ai-init, got
1367
+ // the pointers, and never learned the server existed.
1368
+ 'no-mcp': { type: 'boolean' },
767
1369
  });
768
- aiInit({ mcp: values.mcp ?? false });
1370
+ aiInit({ mcp: !values['no-mcp'] });
769
1371
  break;
770
1372
  }
771
1373
  case 'check': {
@@ -776,16 +1378,33 @@ switch (command) {
776
1378
  json: { type: 'boolean' },
777
1379
  'allow-empty': { type: 'boolean' },
778
1380
  'allow-component': { type: 'string', multiple: true },
1381
+ fix: { type: 'boolean' },
1382
+ manifest: { type: 'string' },
779
1383
  // Accepted and ignored here — read straight off argv inside
780
1384
  // checkCommand, but parseArgs is strict, so it must be declared.
781
1385
  'no-hints': { type: 'boolean' },
782
1386
  },
783
1387
  { allowPositionals: true }
784
1388
  );
785
- checkCommand(positionals, {
1389
+ await checkCommand(positionals, {
1390
+ fix: values.fix ?? false,
786
1391
  json: values.json ?? false,
787
1392
  allowEmpty: values['allow-empty'] ?? false,
788
1393
  allowComponents: values['allow-component'] ?? [],
1394
+ manifest: values.manifest,
1395
+ });
1396
+ break;
1397
+ }
1398
+ case 'changelog': {
1399
+ const { values } = parseCommandArgs(command, commandArgs, {
1400
+ since: { type: 'string' },
1401
+ until: { type: 'string' },
1402
+ json: { type: 'boolean' },
1403
+ });
1404
+ changelogCommand({
1405
+ since: values.since,
1406
+ until: values.until,
1407
+ json: values.json ?? false,
789
1408
  });
790
1409
  break;
791
1410
  }
@@ -802,9 +1421,34 @@ switch (command) {
802
1421
  ({ main } = await import('./bitboss-ui-mcp.mjs'));
803
1422
  } catch (error) {
804
1423
  if (error?.code !== 'ERR_MODULE_NOT_FOUND') throw error;
1424
+ // Running from an npx cache is a DIFFERENT failure wearing the same
1425
+ // error: the peers resolve relative to the package we were launched
1426
+ // from, so a cached copy can never see the project's node_modules no
1427
+ // matter what is installed there. Telling that user to install peers
1428
+ // they already have is what sent a consumer down a dead end
1429
+ // (2026-09-09). `ai-init` now writes the local binary instead
1430
+ // of `npx`, so the fix is to rewrite the config.
1431
+ const fromNpxCache = /[/\\]_npx[/\\]/.test(
1432
+ fileURLToPath(import.meta.url)
1433
+ );
1434
+ const projectHasPeers = missingMcpPeers(process.cwd()).length === 0;
1435
+ if (fromNpxCache && projectHasPeers) {
1436
+ console.error(
1437
+ 'bitboss-ui mcp was launched through `npx`, which runs it from the npx cache —\n' +
1438
+ 'its optional peers resolve there, not in your project, so the server cannot start\n' +
1439
+ `even though this project has them installed (${MCP_PEERS.join(', ')}).\n\n` +
1440
+ 'Fix the harness config to invoke the installed binary:\n\n' +
1441
+ ' npx bitboss-ui ai-init\n\n' +
1442
+ `which writes \`node ${MCP_BIN_PATH} mcp\`. To run it right now:\n\n` +
1443
+ ` node ${MCP_BIN_PATH} mcp\n\n` +
1444
+ `Resolution failed with: ${error.message}`
1445
+ );
1446
+ process.exitCode = 1;
1447
+ break;
1448
+ }
805
1449
  console.error(
806
1450
  'bitboss-ui mcp needs two optional peer dependencies that are not installed:\n' +
807
- '\n npm i -D @modelcontextprotocol/sdk zod\n\n' +
1451
+ `\n npm i -D ${MCP_PEERS.join(' ')}\n\n` +
808
1452
  'They are optional because they are ~12 MB and only this subcommand uses them.\n' +
809
1453
  `Resolution failed with: ${error.message}`
810
1454
  );