bitboss-ui 3.0.0-beta.5 → 3.0.0-beta.51

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 (1286) hide show
  1. package/README.md +467 -99
  2. package/bin/bitboss-ui-mcp.mjs +2685 -124
  3. package/bin/bitboss-ui.mjs +1054 -80
  4. package/dist/ai/BbAccordion.md +202 -58
  5. package/dist/ai/BbAlert.md +150 -32
  6. package/dist/ai/BbAsterisk.md +67 -4
  7. package/dist/ai/BbAvatar.md +202 -56
  8. package/dist/ai/BbBadge.md +256 -50
  9. package/dist/ai/BbBadgeButton.md +77 -21
  10. package/dist/ai/BbBaseButton.md +137 -51
  11. package/dist/ai/BbBaseCheckboxIcon.md +166 -39
  12. package/dist/ai/BbBaseRadioIcon.md +164 -40
  13. package/dist/ai/BbBaseSwitchIcon.md +171 -41
  14. package/dist/ai/BbBreadcrumbs.md +280 -104
  15. package/dist/ai/BbButton.md +448 -111
  16. package/dist/ai/BbCalendar.md +688 -0
  17. package/dist/ai/BbCheckbox.md +258 -82
  18. package/dist/ai/BbCheckboxGroup.md +597 -83
  19. package/dist/ai/BbCollapsible.md +161 -40
  20. package/dist/ai/BbColorInput.md +331 -83
  21. package/dist/ai/BbColorPalette.md +273 -67
  22. package/dist/ai/BbConfirm.md +228 -51
  23. package/dist/ai/BbConfirmPortal.md +2 -2
  24. package/dist/ai/BbDatePicker.md +275 -40
  25. package/dist/ai/BbDatePickerInput.md +364 -112
  26. package/dist/ai/BbDialog.md +512 -108
  27. package/dist/ai/BbDropdown.md +1339 -206
  28. package/dist/ai/BbDropdownButton.md +290 -107
  29. package/dist/ai/BbDropdownGroup.md +6 -6
  30. package/dist/ai/BbDropzone.md +380 -72
  31. package/dist/ai/BbForm.md +1496 -46
  32. package/dist/ai/BbHoverCard.md +527 -0
  33. package/dist/ai/BbHoverCardPortal.md +29 -0
  34. package/dist/ai/BbIcon.md +125 -40
  35. package/dist/ai/BbIndicator.md +79 -12
  36. package/dist/ai/BbNumberInput.md +352 -101
  37. package/dist/ai/BbOffCanvas.md +403 -96
  38. package/dist/ai/BbPagination.md +204 -34
  39. package/dist/ai/BbPopover.md +360 -64
  40. package/dist/ai/BbPopoverPortal.md +29 -0
  41. package/dist/ai/BbProgress.md +182 -90
  42. package/dist/ai/BbPtScope.md +136 -0
  43. package/dist/ai/BbRadio.md +242 -43
  44. package/dist/ai/BbRadioGroup.md +558 -111
  45. package/dist/ai/BbRating.md +256 -62
  46. package/dist/ai/BbSelect.md +1123 -290
  47. package/dist/ai/BbSelectPopover.md +677 -192
  48. package/dist/ai/BbSlider.md +285 -80
  49. package/dist/ai/BbSmoothHeight.md +144 -37
  50. package/dist/ai/BbSpinner.md +179 -81
  51. package/dist/ai/BbSwitch.md +276 -63
  52. package/dist/ai/BbSwitchGroup.md +421 -87
  53. package/dist/ai/BbTable.md +2207 -357
  54. package/dist/ai/BbTabs.md +992 -231
  55. package/dist/ai/BbTabsList.md +81 -7
  56. package/dist/ai/BbTabsPanels.md +77 -0
  57. package/dist/ai/BbTabsRoot.md +18 -16
  58. package/dist/ai/BbTag.md +272 -81
  59. package/dist/ai/BbTextInput.md +539 -107
  60. package/dist/ai/BbTextarea.md +415 -139
  61. package/dist/ai/BbTimePicker.md +170 -27
  62. package/dist/ai/BbTimePickerInput.md +292 -50
  63. package/dist/ai/BbToast.md +287 -40
  64. package/dist/ai/BbToastPortal.md +3 -3
  65. package/dist/ai/BbTooltip.md +231 -46
  66. package/dist/ai/BbTree.md +272 -94
  67. package/dist/ai/ChipsBox.md +46 -2
  68. package/dist/ai/ClearableButton.md +12 -0
  69. package/dist/ai/CommaBox.md +2 -1
  70. package/dist/ai/CommonField.md +75 -0
  71. package/dist/ai/CommonFieldInput.md +91 -0
  72. package/dist/ai/CommonPopover.md +17 -12
  73. package/dist/ai/CommonTimeSelector.md +63 -0
  74. package/dist/ai/ErrorIcon.md +20 -0
  75. package/dist/ai/FlatListBox.md +42 -11
  76. package/dist/ai/GroupedListBox.md +43 -12
  77. package/dist/ai/ListBox.md +47 -11
  78. package/dist/ai/OptionsContainer.md +17 -10
  79. package/dist/ai/WarningIcon.md +20 -0
  80. package/dist/ai/changelog.json +5763 -141
  81. package/dist/ai/components.json +477 -16271
  82. package/dist/ai/composables/useBbConfig.md +72 -11
  83. package/dist/ai/composables/useBbDropdownContext.md +168 -0
  84. package/dist/ai/composables/useBbFormContext.md +51 -24
  85. package/dist/ai/composables/useBbFormField.md +183 -0
  86. package/dist/ai/composables/useBbTableContext.md +41 -19
  87. package/dist/ai/composables/useBbTabsContext.md +14 -14
  88. package/dist/ai/composables/useConfirm.md +16 -8
  89. package/dist/ai/composables/useCountdown.md +1 -1
  90. package/dist/ai/composables/useId.md +10 -10
  91. package/dist/ai/composables/useMobile.md +17 -10
  92. package/dist/ai/composables/useToast.md +25 -19
  93. package/dist/ai/design-tokens.json +967 -0
  94. package/dist/ai/design-tokens.manifest.yaml +175 -0
  95. package/dist/ai/guides/agent-contract.md +185 -23
  96. package/dist/ai/guides/ai-router.md +87 -43
  97. package/dist/ai/guides/app-layout.md +8 -4
  98. package/dist/ai/guides/coherence-playbook.md +25 -21
  99. package/dist/ai/guides/component-picker.md +61 -46
  100. package/dist/ai/guides/design-language.md +282 -99
  101. package/dist/ai/guides/design-tokens.md +600 -117
  102. package/dist/ai/guides/fetch-items-playbook.md +127 -81
  103. package/dist/ai/guides/icons-policy.md +75 -45
  104. package/dist/ai/guides/inertia-helpers.md +201 -82
  105. package/dist/ai/guides/inline-edit-playbook.md +13 -6
  106. package/dist/ai/guides/installation-and-plugin-setup.md +941 -88
  107. package/dist/ai/guides/migration/components/bb-accordion.md +37 -0
  108. package/dist/ai/guides/migration/components/bb-alert.md +2 -2
  109. package/dist/ai/guides/migration/components/bb-avatar.md +13 -14
  110. package/dist/ai/guides/migration/components/bb-badge.md +5 -5
  111. package/dist/ai/guides/migration/components/bb-breadcrumbs.md +13 -10
  112. package/dist/ai/guides/migration/components/bb-button.md +80 -20
  113. package/dist/ai/guides/migration/components/bb-checkbox-group.md +116 -29
  114. package/dist/ai/guides/migration/components/bb-checkbox.md +53 -10
  115. package/dist/ai/guides/migration/components/bb-chip.md +6 -6
  116. package/dist/ai/guides/migration/components/bb-collapsible.md +5 -5
  117. package/dist/ai/guides/migration/components/bb-color-input.md +5 -5
  118. package/dist/ai/guides/migration/components/bb-color-palette.md +16 -9
  119. package/dist/ai/guides/migration/components/bb-date-picker-input.md +51 -38
  120. package/dist/ai/guides/migration/components/bb-dialog.md +69 -36
  121. package/dist/ai/guides/migration/components/bb-dropdown-button.md +15 -8
  122. package/dist/ai/guides/migration/components/bb-dropdown.md +33 -9
  123. package/dist/ai/guides/migration/components/bb-dropzone.md +8 -0
  124. package/dist/ai/guides/migration/components/bb-icon.md +7 -7
  125. package/dist/ai/guides/migration/components/bb-intersection.md +1 -1
  126. package/dist/ai/guides/migration/components/bb-offcanvas.md +29 -31
  127. package/dist/ai/guides/migration/components/bb-pagination.md +10 -0
  128. package/dist/ai/guides/migration/components/bb-popover.md +19 -11
  129. package/dist/ai/guides/migration/components/bb-radio-group.md +15 -0
  130. package/dist/ai/guides/migration/components/bb-rating.md +61 -24
  131. package/dist/ai/guides/migration/components/bb-select-popover.md +20 -2
  132. package/dist/ai/guides/migration/components/bb-select.md +39 -8
  133. package/dist/ai/guides/migration/components/bb-slider.md +19 -6
  134. package/dist/ai/guides/migration/components/bb-switch-group.md +15 -0
  135. package/dist/ai/guides/migration/components/bb-table.md +586 -33
  136. package/dist/ai/guides/migration/components/bb-tabs.md +94 -43
  137. package/dist/ai/guides/migration/components/bb-tag.md +9 -7
  138. package/dist/ai/guides/migration/components/bb-text-input.md +12 -12
  139. package/dist/ai/guides/migration/components/bb-toast.md +2 -2
  140. package/dist/ai/guides/migration/components/bb-tooltip.md +19 -1
  141. package/dist/ai/guides/migration/components/bb-tree.md +11 -9
  142. package/dist/ai/guides/migration/components/use-confirm.md +9 -1
  143. package/dist/ai/guides/migration/from-async-validator.md +1252 -0
  144. package/dist/ai/guides/migration/v2-to-v3.md +1217 -277
  145. package/dist/ai/guides/migration/v3-beta-css-classes.md +753 -0
  146. package/dist/ai/guides/migration/v3-beta-tooling.md +213 -0
  147. package/dist/ai/guides/options-items-playbook.md +177 -22
  148. package/dist/ai/guides/page-shell.md +13 -7
  149. package/dist/ai/guides/passthrough.md +968 -0
  150. package/dist/ai/guides/preset-components.md +387 -0
  151. package/dist/ai/guides/ssr-prefill.md +150 -0
  152. package/dist/ai/guides/typescript-generic-components.md +87 -0
  153. package/dist/ai/guides/validated-forms.md +531 -53
  154. package/dist/ai/guides/validation-libraries.md +179 -0
  155. package/dist/ai/guides/validation-providers.md +127 -0
  156. package/dist/ai/helpers/inertia/manifest.json +636 -0
  157. package/dist/ai/helpers/inertia/types.ts +15 -0
  158. package/dist/ai/helpers/inertia/useAsyncFn.ts +110 -0
  159. package/dist/ai/helpers/inertia/useConfirmOnRouteLeave.ts +102 -0
  160. package/dist/ai/helpers/inertia/useDeleteCmd.ts +30 -0
  161. package/dist/ai/helpers/inertia/useHasChanged.ts +36 -0
  162. package/dist/ai/helpers/inertia/useIndexById.ts +23 -0
  163. package/dist/ai/helpers/inertia/useLazyProp.ts +148 -0
  164. package/dist/ai/helpers/inertia/useLazyPropGetter.ts +50 -0
  165. package/dist/ai/helpers/inertia/useLoading.ts +20 -0
  166. package/dist/ai/helpers/inertia/usePaginatedResponseContext.ts +88 -0
  167. package/dist/ai/helpers/inertia/usePromiseForm.ts +62 -0
  168. package/dist/ai/helpers/inertia/useProp.ts +63 -0
  169. package/dist/ai/helpers/inertia/useQuery.ts +19 -0
  170. package/dist/ai/helpers/inertia/useQueryObject.ts +116 -0
  171. package/dist/ai/helpers/inertia/useResourceContext.ts +69 -0
  172. package/dist/ai/helpers/inertia/useRouteQuery.ts +54 -0
  173. package/dist/ai/helpers/inertia/useScreenSizes.ts +23 -0
  174. package/dist/ai/helpers/inertia/useTableContext.ts +34 -0
  175. package/dist/ai/helpers/inertia/useTableSelectionContext.ts +48 -0
  176. package/dist/ai/helpers/inertia/useUntil.ts +33 -0
  177. package/dist/ai/helpers/inertia/utils.ts +24 -0
  178. package/dist/ai/index.md +62 -57
  179. package/dist/ai/manifest/components/BbAccordion.json +42 -0
  180. package/dist/ai/manifest/components/BbAccordion.tree.json +26 -0
  181. package/dist/ai/manifest/components/BbAlert.json +52 -0
  182. package/dist/ai/manifest/components/BbAlert.removed.json +7 -0
  183. package/dist/ai/manifest/components/BbAlert.tree.json +80 -0
  184. package/dist/ai/manifest/components/BbAsterisk.json +26 -0
  185. package/dist/ai/manifest/components/BbAsterisk.tree.json +13 -0
  186. package/dist/ai/manifest/components/BbAvatar.json +35 -0
  187. package/dist/ai/manifest/components/BbAvatar.removed.json +6 -0
  188. package/dist/ai/manifest/components/BbAvatar.tree.json +39 -0
  189. package/dist/ai/manifest/components/BbBadge.json +47 -0
  190. package/dist/ai/manifest/components/BbBadge.removed.json +6 -0
  191. package/dist/ai/manifest/components/BbBadge.tree.json +86 -0
  192. package/dist/ai/manifest/components/BbBadgeButton.json +67 -0
  193. package/dist/ai/manifest/components/BbBadgeButton.tree.json +32 -0
  194. package/dist/ai/manifest/components/BbBaseButton.json +69 -0
  195. package/dist/ai/manifest/components/BbBaseButton.tree.json +25 -0
  196. package/dist/ai/manifest/components/BbBaseCheckboxIcon.json +43 -0
  197. package/dist/ai/manifest/components/BbBaseCheckboxIcon.removed.json +6 -0
  198. package/dist/ai/manifest/components/BbBaseCheckboxIcon.tree.json +41 -0
  199. package/dist/ai/manifest/components/BbBaseRadioIcon.json +41 -0
  200. package/dist/ai/manifest/components/BbBaseRadioIcon.removed.json +6 -0
  201. package/dist/ai/manifest/components/BbBaseRadioIcon.tree.json +36 -0
  202. package/dist/ai/manifest/components/BbBaseSwitchIcon.json +43 -0
  203. package/dist/ai/manifest/components/BbBaseSwitchIcon.removed.json +6 -0
  204. package/dist/ai/manifest/components/BbBaseSwitchIcon.tree.json +44 -0
  205. package/dist/ai/manifest/components/BbBreadcrumbs.json +52 -0
  206. package/dist/ai/manifest/components/BbBreadcrumbs.removed.json +7 -0
  207. package/dist/ai/manifest/components/BbBreadcrumbs.tree.json +45 -0
  208. package/dist/ai/manifest/components/BbButton.json +95 -0
  209. package/dist/ai/manifest/components/BbButton.removed.json +10 -0
  210. package/dist/ai/manifest/components/BbButton.tree.json +206 -0
  211. package/dist/ai/manifest/components/BbCalendar.json +81 -0
  212. package/dist/ai/manifest/components/BbCalendar.removed.json +8 -0
  213. package/dist/ai/manifest/components/BbCalendar.tree.json +99 -0
  214. package/dist/ai/manifest/components/BbCheckbox.json +92 -0
  215. package/dist/ai/manifest/components/BbCheckbox.removed.json +10 -0
  216. package/dist/ai/manifest/components/BbCheckbox.tree.json +22 -0
  217. package/dist/ai/manifest/components/BbCheckboxGroup.json +122 -0
  218. package/dist/ai/manifest/components/BbCheckboxGroup.removed.json +14 -0
  219. package/dist/ai/manifest/components/BbCheckboxGroup.tree.json +61 -0
  220. package/dist/ai/manifest/components/BbCollapsible.json +32 -0
  221. package/dist/ai/manifest/components/BbCollapsible.tree.json +17 -0
  222. package/dist/ai/manifest/components/BbColorInput.json +124 -0
  223. package/dist/ai/manifest/components/BbColorInput.removed.json +12 -0
  224. package/dist/ai/manifest/components/BbColorInput.tree.json +37 -0
  225. package/dist/ai/manifest/components/BbColorPalette.json +63 -0
  226. package/dist/ai/manifest/components/BbColorPalette.removed.json +13 -0
  227. package/dist/ai/manifest/components/BbColorPalette.tree.json +55 -0
  228. package/dist/ai/manifest/components/BbConfirm.json +34 -0
  229. package/dist/ai/manifest/components/BbConfirm.tree.json +30 -0
  230. package/dist/ai/manifest/components/BbConfirmPortal.json +21 -0
  231. package/dist/ai/manifest/components/BbDatePicker.json +102 -0
  232. package/dist/ai/manifest/components/BbDatePicker.removed.json +9 -0
  233. package/dist/ai/manifest/components/BbDatePicker.tree.json +54 -0
  234. package/dist/ai/manifest/components/BbDatePickerInput.json +152 -0
  235. package/dist/ai/manifest/components/BbDatePickerInput.removed.json +18 -0
  236. package/dist/ai/manifest/components/BbDatePickerInput.tree.json +50 -0
  237. package/dist/ai/manifest/components/BbDialog.json +69 -0
  238. package/dist/ai/manifest/components/BbDialog.removed.json +10 -0
  239. package/dist/ai/manifest/components/BbDialog.tree.json +74 -0
  240. package/dist/ai/manifest/components/BbDropdown.json +93 -0
  241. package/dist/ai/manifest/components/BbDropdown.removed.json +12 -0
  242. package/dist/ai/manifest/components/BbDropdown.tree.json +122 -0
  243. package/dist/ai/manifest/components/BbDropdownButton.json +97 -0
  244. package/dist/ai/manifest/components/BbDropdownButton.removed.json +13 -0
  245. package/dist/ai/manifest/components/BbDropdownButton.tree.json +28 -0
  246. package/dist/ai/manifest/components/BbDropdownGroup.json +25 -0
  247. package/dist/ai/manifest/components/BbDropzone.json +63 -0
  248. package/dist/ai/manifest/components/BbDropzone.removed.json +8 -0
  249. package/dist/ai/manifest/components/BbDropzone.tree.json +36 -0
  250. package/dist/ai/manifest/components/BbForm.json +39 -0
  251. package/dist/ai/manifest/components/BbForm.removed.json +6 -0
  252. package/dist/ai/manifest/components/BbHoverCard.json +63 -0
  253. package/dist/ai/manifest/components/BbHoverCard.tree.json +31 -0
  254. package/dist/ai/manifest/components/BbHoverCardPortal.json +21 -0
  255. package/dist/ai/manifest/components/BbIcon.json +29 -0
  256. package/dist/ai/manifest/components/BbIcon.removed.json +7 -0
  257. package/dist/ai/manifest/components/BbIcon.tree.json +19 -0
  258. package/dist/ai/manifest/components/BbIndicator.json +39 -0
  259. package/dist/ai/manifest/components/BbIndicator.tree.json +67 -0
  260. package/dist/ai/manifest/components/BbNumberInput.json +120 -0
  261. package/dist/ai/manifest/components/BbNumberInput.removed.json +11 -0
  262. package/dist/ai/manifest/components/BbNumberInput.tree.json +28 -0
  263. package/dist/ai/manifest/components/BbOffCanvas.json +67 -0
  264. package/dist/ai/manifest/components/BbOffCanvas.removed.json +8 -0
  265. package/dist/ai/manifest/components/BbOffCanvas.tree.json +115 -0
  266. package/dist/ai/manifest/components/BbPagination.json +55 -0
  267. package/dist/ai/manifest/components/BbPagination.removed.json +9 -0
  268. package/dist/ai/manifest/components/BbPagination.tree.json +69 -0
  269. package/dist/ai/manifest/components/BbPopover.json +69 -0
  270. package/dist/ai/manifest/components/BbPopover.removed.json +16 -0
  271. package/dist/ai/manifest/components/BbPopover.tree.json +36 -0
  272. package/dist/ai/manifest/components/BbPopoverPortal.json +21 -0
  273. package/dist/ai/manifest/components/BbProgress.json +31 -0
  274. package/dist/ai/manifest/components/BbProgress.tree.json +26 -0
  275. package/dist/ai/manifest/components/BbPtScope.json +21 -0
  276. package/dist/ai/manifest/components/BbRadio.json +83 -0
  277. package/dist/ai/manifest/components/BbRadio.removed.json +8 -0
  278. package/dist/ai/manifest/components/BbRadio.tree.json +22 -0
  279. package/dist/ai/manifest/components/BbRadioGroup.json +121 -0
  280. package/dist/ai/manifest/components/BbRadioGroup.removed.json +14 -0
  281. package/dist/ai/manifest/components/BbRadioGroup.tree.json +61 -0
  282. package/dist/ai/manifest/components/BbRating.json +93 -0
  283. package/dist/ai/manifest/components/BbRating.removed.json +10 -0
  284. package/dist/ai/manifest/components/BbRating.tree.json +55 -0
  285. package/dist/ai/manifest/components/BbSelect.json +161 -0
  286. package/dist/ai/manifest/components/BbSelect.removed.json +16 -0
  287. package/dist/ai/manifest/components/BbSelect.tree.json +53 -0
  288. package/dist/ai/manifest/components/BbSelectPopover.json +114 -0
  289. package/dist/ai/manifest/components/BbSelectPopover.removed.json +13 -0
  290. package/dist/ai/manifest/components/BbSelectPopover.tree.json +112 -0
  291. package/dist/ai/manifest/components/BbSlider.json +100 -0
  292. package/dist/ai/manifest/components/BbSlider.removed.json +12 -0
  293. package/dist/ai/manifest/components/BbSlider.tree.json +89 -0
  294. package/dist/ai/manifest/components/BbSmoothHeight.json +31 -0
  295. package/dist/ai/manifest/components/BbSmoothHeight.tree.json +16 -0
  296. package/dist/ai/manifest/components/BbSpinner.json +28 -0
  297. package/dist/ai/manifest/components/BbSpinner.removed.json +6 -0
  298. package/dist/ai/manifest/components/BbSpinner.tree.json +31 -0
  299. package/dist/ai/manifest/components/BbSwitch.json +92 -0
  300. package/dist/ai/manifest/components/BbSwitch.removed.json +10 -0
  301. package/dist/ai/manifest/components/BbSwitch.tree.json +22 -0
  302. package/dist/ai/manifest/components/BbSwitchGroup.json +122 -0
  303. package/dist/ai/manifest/components/BbSwitchGroup.removed.json +14 -0
  304. package/dist/ai/manifest/components/BbSwitchGroup.tree.json +61 -0
  305. package/dist/ai/manifest/components/BbTable.json +153 -0
  306. package/dist/ai/manifest/components/BbTable.removed.json +16 -0
  307. package/dist/ai/manifest/components/BbTable.tree.json +231 -0
  308. package/dist/ai/manifest/components/BbTabs.json +77 -0
  309. package/dist/ai/manifest/components/BbTabs.removed.json +12 -0
  310. package/dist/ai/manifest/components/BbTabs.tree.json +88 -0
  311. package/dist/ai/manifest/components/BbTabsList.json +43 -0
  312. package/dist/ai/manifest/components/BbTabsList.removed.json +8 -0
  313. package/dist/ai/manifest/components/BbTabsList.tree.json +94 -0
  314. package/dist/ai/manifest/components/BbTabsPanels.json +32 -0
  315. package/dist/ai/manifest/components/BbTabsPanels.tree.json +69 -0
  316. package/dist/ai/manifest/components/BbTabsRoot.json +53 -0
  317. package/dist/ai/manifest/components/BbTabsRoot.removed.json +13 -0
  318. package/dist/ai/manifest/components/BbTag.json +120 -0
  319. package/dist/ai/manifest/components/BbTag.removed.json +13 -0
  320. package/dist/ai/manifest/components/BbTag.tree.json +40 -0
  321. package/dist/ai/manifest/components/BbTextInput.json +118 -0
  322. package/dist/ai/manifest/components/BbTextInput.removed.json +14 -0
  323. package/dist/ai/manifest/components/BbTextInput.tree.json +27 -0
  324. package/dist/ai/manifest/components/BbTextarea.json +116 -0
  325. package/dist/ai/manifest/components/BbTextarea.removed.json +11 -0
  326. package/dist/ai/manifest/components/BbTextarea.tree.json +37 -0
  327. package/dist/ai/manifest/components/BbTimePicker.json +76 -0
  328. package/dist/ai/manifest/components/BbTimePicker.tree.json +37 -0
  329. package/dist/ai/manifest/components/BbTimePickerInput.json +125 -0
  330. package/dist/ai/manifest/components/BbTimePickerInput.removed.json +11 -0
  331. package/dist/ai/manifest/components/BbTimePickerInput.tree.json +44 -0
  332. package/dist/ai/manifest/components/BbToast.json +37 -0
  333. package/dist/ai/manifest/components/BbToast.removed.json +9 -0
  334. package/dist/ai/manifest/components/BbToast.tree.json +91 -0
  335. package/dist/ai/manifest/components/BbToastPortal.json +18 -0
  336. package/dist/ai/manifest/components/BbTooltip.json +54 -0
  337. package/dist/ai/manifest/components/BbTooltip.removed.json +9 -0
  338. package/dist/ai/manifest/components/BbTooltip.tree.json +41 -0
  339. package/dist/ai/manifest/components/BbTree.json +46 -0
  340. package/dist/ai/manifest/components/BbTree.removed.json +8 -0
  341. package/dist/ai/manifest/components/BbTree.tree.json +31 -0
  342. package/dist/ai/manifest/components/ChipsBox.json +32 -0
  343. package/dist/ai/manifest/components/ChipsBox.tree.json +11 -0
  344. package/dist/ai/manifest/components/ClearableButton.json +19 -0
  345. package/dist/ai/manifest/components/ClearableButton.tree.json +19 -0
  346. package/dist/ai/manifest/components/CommaBox.json +30 -0
  347. package/dist/ai/manifest/components/CommonField.json +56 -0
  348. package/dist/ai/manifest/components/CommonField.tree.json +110 -0
  349. package/dist/ai/manifest/components/CommonFieldInput.json +47 -0
  350. package/dist/ai/manifest/components/CommonFieldInput.tree.json +95 -0
  351. package/dist/ai/manifest/components/CommonPopover.json +44 -0
  352. package/dist/ai/manifest/components/CommonPopover.tree.json +26 -0
  353. package/dist/ai/manifest/components/CommonTimeSelector.json +31 -0
  354. package/dist/ai/manifest/components/CommonTimeSelector.tree.json +43 -0
  355. package/dist/ai/manifest/components/ErrorIcon.json +17 -0
  356. package/dist/ai/manifest/components/ErrorIcon.tree.json +22 -0
  357. package/dist/ai/manifest/components/FlatListBox.json +43 -0
  358. package/dist/ai/manifest/components/FlatListBox.tree.json +16 -0
  359. package/dist/ai/manifest/components/GroupedListBox.json +45 -0
  360. package/dist/ai/manifest/components/GroupedListBox.tree.json +16 -0
  361. package/dist/ai/manifest/components/GuidesComponent.json +17 -0
  362. package/dist/ai/manifest/components/ListBox.json +43 -0
  363. package/dist/ai/manifest/components/ListBox.tree.json +9 -0
  364. package/dist/ai/manifest/components/OptionsContainer.json +45 -0
  365. package/dist/ai/manifest/components/WarningIcon.json +17 -0
  366. package/dist/ai/manifest/components/WarningIcon.tree.json +22 -0
  367. package/dist/ai/manifest/index.json +122 -0
  368. package/dist/ai/manifest/meta.json +506 -0
  369. package/dist/ai/manifest/types.advanced.json +66 -0
  370. package/dist/ai/manifest/types.api.json +52 -0
  371. package/dist/ai/manifest/types.wrapper.json +119 -0
  372. package/dist/ai/recipes/inertia/approvals-inbox.md +206 -139
  373. package/dist/ai/recipes/inertia/inline-edit-workspace.md +218 -143
  374. package/dist/ai/recipes/inertia/layout-scaffold.md +93 -58
  375. package/dist/ai/recipes/inertia/onboarding.md +114 -87
  376. package/dist/ai/recipes/inertia/ownership-atlas.md +322 -322
  377. package/dist/ai/recipes/inertia/record-form.md +421 -224
  378. package/dist/ai/recipes/inertia/records-workspace.md +600 -219
  379. package/dist/ai/recipes/inertia/settings-workspace.md +3098 -0
  380. package/dist/ai/recipes/inertia/upload-center.md +189 -177
  381. package/dist/ai/recipes/inertia/wizard-form.md +233 -100
  382. package/dist/ai/recipes/nuxt/approvals-inbox.md +272 -158
  383. package/dist/ai/recipes/nuxt/inline-edit-workspace.md +298 -166
  384. package/dist/ai/recipes/nuxt/layout-scaffold.md +94 -59
  385. package/dist/ai/recipes/nuxt/onboarding.md +178 -117
  386. package/dist/ai/recipes/nuxt/ownership-atlas.md +1406 -0
  387. package/dist/ai/recipes/nuxt/record-form.md +507 -223
  388. package/dist/ai/recipes/nuxt/records-workspace.md +653 -206
  389. package/dist/ai/recipes/nuxt/settings-workspace.md +3189 -0
  390. package/dist/ai/recipes/nuxt/upload-center.md +282 -190
  391. package/dist/ai/recipes/nuxt/wizard-form.md +251 -102
  392. package/dist/ai/recipes/vue/approvals-inbox.md +248 -146
  393. package/dist/ai/recipes/vue/inline-edit-workspace.md +278 -157
  394. package/dist/ai/recipes/vue/layout-scaffold.md +93 -58
  395. package/dist/ai/recipes/vue/onboarding.md +112 -83
  396. package/dist/ai/recipes/vue/ownership-atlas.md +1360 -0
  397. package/dist/ai/recipes/vue/record-form.md +252 -130
  398. package/dist/ai/recipes/vue/records-workspace.md +609 -191
  399. package/dist/ai/recipes/vue/settings-workspace.md +3130 -0
  400. package/dist/ai/recipes/vue/upload-center.md +229 -176
  401. package/dist/ai/recipes/vue/wizard-form.md +190 -85
  402. package/dist/ai/source/BbAccordion.md +129 -32
  403. package/dist/ai/source/BbAlert.md +214 -70
  404. package/dist/ai/source/BbAsterisk.md +54 -4
  405. package/dist/ai/source/BbAvatar.md +73 -16
  406. package/dist/ai/source/BbBadge.md +303 -105
  407. package/dist/ai/source/BbBadgeButton.md +257 -87
  408. package/dist/ai/source/BbBaseButton.md +120 -38
  409. package/dist/ai/source/BbBaseCheckboxIcon.md +153 -36
  410. package/dist/ai/source/BbBaseRadioIcon.md +124 -18
  411. package/dist/ai/source/BbBaseSwitchIcon.md +146 -33
  412. package/dist/ai/source/BbBreadcrumbs.md +437 -95
  413. package/dist/ai/source/BbButton.md +696 -198
  414. package/dist/ai/source/BbCalendar.md +1869 -0
  415. package/dist/ai/source/BbCheckbox.md +516 -78
  416. package/dist/ai/source/BbCheckboxGroup.md +1120 -113
  417. package/dist/ai/source/BbCollapsible.md +95 -11
  418. package/dist/ai/source/BbColorInput.md +626 -79
  419. package/dist/ai/source/BbColorPalette.md +1323 -70
  420. package/dist/ai/source/BbConfirm.md +167 -8
  421. package/dist/ai/source/BbConfirmPortal.md +109 -9
  422. package/dist/ai/source/BbDatePicker.md +529 -408
  423. package/dist/ai/source/BbDatePickerInput.md +2163 -154
  424. package/dist/ai/source/BbDialog.md +553 -97
  425. package/dist/ai/source/BbDropdown.md +1371 -366
  426. package/dist/ai/source/BbDropdownButton.md +434 -93
  427. package/dist/ai/source/BbDropdownGroup.md +1026 -230
  428. package/dist/ai/source/BbDropzone.md +230 -54
  429. package/dist/ai/source/BbForm.md +982 -21
  430. package/dist/ai/source/BbHoverCard.md +973 -0
  431. package/dist/ai/source/BbHoverCardPortal.md +312 -0
  432. package/dist/ai/source/BbIcon.md +139 -53
  433. package/dist/ai/source/BbIndicator.md +121 -60
  434. package/dist/ai/source/BbNumberInput.md +1579 -102
  435. package/dist/ai/source/BbOffCanvas.md +1053 -280
  436. package/dist/ai/source/BbPagination.md +238 -50
  437. package/dist/ai/source/BbPopover.md +501 -126
  438. package/dist/ai/source/BbPopoverPortal.md +370 -0
  439. package/dist/ai/source/BbProgress.md +155 -30
  440. package/dist/ai/source/BbPtScope.md +54 -0
  441. package/dist/ai/source/BbRadio.md +417 -74
  442. package/dist/ai/source/BbRadioGroup.md +1101 -133
  443. package/dist/ai/source/BbRating.md +782 -96
  444. package/dist/ai/source/BbSelect.md +1149 -133
  445. package/dist/ai/source/BbSelectPopover.md +1173 -235
  446. package/dist/ai/source/BbSlider.md +1429 -113
  447. package/dist/ai/source/BbSmoothHeight.md +59 -4
  448. package/dist/ai/source/BbSpinner.md +62 -6
  449. package/dist/ai/source/BbSwitch.md +322 -60
  450. package/dist/ai/source/BbSwitchGroup.md +869 -84
  451. package/dist/ai/source/BbTable.md +8121 -1961
  452. package/dist/ai/source/BbTabs.md +391 -124
  453. package/dist/ai/source/BbTabsList.md +520 -159
  454. package/dist/ai/source/BbTabsPanels.md +629 -0
  455. package/dist/ai/source/BbTabsRoot.md +342 -113
  456. package/dist/ai/source/BbTag.md +869 -105
  457. package/dist/ai/source/BbTextInput.md +612 -85
  458. package/dist/ai/source/BbTextarea.md +628 -81
  459. package/dist/ai/source/BbTimePicker.md +382 -72
  460. package/dist/ai/source/BbTimePickerInput.md +1340 -120
  461. package/dist/ai/source/BbToast.md +259 -80
  462. package/dist/ai/source/BbToastPortal.md +219 -72
  463. package/dist/ai/source/BbTooltip.md +295 -42
  464. package/dist/ai/source/BbTree.md +109 -14
  465. package/dist/ai/source/ChipsBox.md +25 -5
  466. package/dist/ai/source/CommaBox.md +21 -6
  467. package/dist/ai/source/CommonField.md +1700 -0
  468. package/dist/ai/source/CommonFieldInput.md +879 -0
  469. package/dist/ai/source/CommonPopover.md +153 -56
  470. package/dist/ai/source/CommonTimeSelector.md +743 -0
  471. package/dist/ai/source/ErrorIcon.md +2 -2
  472. package/dist/ai/source/FlatListBox.md +218 -18
  473. package/dist/ai/source/GroupedListBox.md +266 -45
  474. package/dist/ai/source/GuidesComponent.md +14 -7
  475. package/dist/ai/source/ListBox.md +57 -8
  476. package/dist/ai/source/OptionsContainer.md +343 -61
  477. package/dist/ai/source/WarningIcon.md +2 -2
  478. package/dist/assets/css/reset.css_inline.js +1 -1
  479. package/dist/assets/svgs/star.svg_raw.js +4 -0
  480. package/dist/components/BbAccordion/BbAccordion.vue_vue_type_script_setup_true_lang.js +59 -38
  481. package/dist/components/BbAccordion/types.d.ts +42 -3
  482. package/dist/components/BbAccordion/types.js +11 -0
  483. package/dist/components/BbAlert/BbAlert.vue.d.ts +1 -3
  484. package/dist/components/BbAlert/BbAlert.vue_vue_type_script_setup_true_lang.js +46 -30
  485. package/dist/components/BbAlert/types.d.ts +40 -9
  486. package/dist/components/BbAlert/types.js +13 -0
  487. package/dist/components/BbAsterisk/BbAsterisk.vue.d.ts +3 -1
  488. package/dist/components/BbAsterisk/BbAsterisk.vue_vue_type_script_setup_true_lang.js +23 -8
  489. package/dist/components/BbAsterisk/types.d.ts +18 -0
  490. package/dist/components/BbAsterisk/types.js +7 -0
  491. package/dist/components/BbAvatar/BbAvatar.vue.d.ts +2 -4
  492. package/dist/components/BbAvatar/BbAvatar.vue_vue_type_script_setup_true_lang.js +57 -44
  493. package/dist/components/BbAvatar/types.d.ts +23 -0
  494. package/dist/components/BbAvatar/types.js +7 -0
  495. package/dist/components/BbBadge/BadgeBodyContent.vue_vue_type_script_setup_true_lang.js +24 -18
  496. package/dist/components/BbBadge/BbBadge.vue_vue_type_script_setup_true_lang.js +96 -53
  497. package/dist/components/BbBadge/BbBadgeButton.vue_vue_type_script_setup_true_lang.js +32 -11
  498. package/dist/components/BbBadge/badgeButtonContext.d.ts +25 -8
  499. package/dist/components/BbBadge/types.d.ts +44 -9
  500. package/dist/components/BbBadge/types.js +13 -0
  501. package/dist/components/BbBaseButton/BbBaseButton.vue_vue_type_script_setup_true_lang.js +109 -96
  502. package/dist/components/BbBaseButton/RouterComponent.vue_vue_type_script_setup_true_lang.js +11 -11
  503. package/dist/components/BbBaseButton/types.d.ts +44 -28
  504. package/dist/components/BbBaseButton/types.js +9 -2
  505. package/dist/components/BbBaseCheckboxIcon/BbBaseCheckboxIcon.vue_vue_type_script_setup_true_lang.js +50 -18
  506. package/dist/components/BbBaseCheckboxIcon/types.d.ts +31 -2
  507. package/dist/components/BbBaseCheckboxIcon/types.js +8 -0
  508. package/dist/components/BbBaseRadioIcon/BbBaseRadioIcon.vue_vue_type_script_setup_true_lang.js +45 -15
  509. package/dist/components/BbBaseRadioIcon/types.d.ts +31 -2
  510. package/dist/components/BbBaseRadioIcon/types.js +8 -0
  511. package/dist/components/BbBaseSwitchIcon/BbBaseSwitchIcon.vue_vue_type_script_setup_true_lang.js +48 -16
  512. package/dist/components/BbBaseSwitchIcon/types.d.ts +31 -2
  513. package/dist/components/BbBaseSwitchIcon/types.js +8 -0
  514. package/dist/components/BbBreadcrumbs/BbBreadcrumbs.vue_vue_type_script_setup_true_lang.js +197 -140
  515. package/dist/components/BbBreadcrumbs/types.d.ts +62 -12
  516. package/dist/components/BbBreadcrumbs/types.js +12 -0
  517. package/dist/components/BbButton/BbButton.vue.d.ts +5 -0
  518. package/dist/components/BbButton/BbButton.vue_vue_type_script_setup_true_lang.js +145 -101
  519. package/dist/components/BbButton/toggleRoving.d.ts +6 -0
  520. package/dist/components/BbButton/toggleRoving.js +45 -0
  521. package/dist/components/BbButton/types.d.ts +123 -13
  522. package/dist/components/BbButton/types.js +16 -0
  523. package/dist/components/BbCalendar/BbCalendar.vue.d.ts +33 -0
  524. package/dist/components/BbCalendar/BbCalendar.vue.js +6 -0
  525. package/dist/components/BbCalendar/BbCalendar.vue_vue_type_script_setup_true_lang.js +614 -0
  526. package/dist/components/BbCalendar/CalendarMonthPanel.vue.js +5 -0
  527. package/dist/components/BbCalendar/CalendarMonthPanel.vue_vue_type_script_setup_true_lang.js +126 -0
  528. package/dist/components/BbCalendar/CalendarYearPanel.vue.js +5 -0
  529. package/dist/components/BbCalendar/CalendarYearPanel.vue_vue_type_script_setup_true_lang.js +129 -0
  530. package/dist/components/BbCalendar/calendarHost.d.ts +29 -0
  531. package/dist/components/BbCalendar/calendarHost.js +10 -0
  532. package/dist/components/BbCalendar/types.d.ts +216 -0
  533. package/dist/components/BbCalendar/types.js +29 -0
  534. package/dist/components/{BbBaseDatePicker/useDatePickerContext.d.ts → BbCalendar/useCalendarContext.d.ts} +10 -7
  535. package/dist/components/BbCalendar/useCalendarContext.js +11 -0
  536. package/dist/components/BbCalendar/useCalendarGrid.d.ts +211 -0
  537. package/dist/components/BbCalendar/useCalendarGrid.js +282 -0
  538. package/dist/components/BbCalendar/useDayGrid.d.ts +82 -0
  539. package/dist/components/BbCalendar/useDayGrid.js +247 -0
  540. package/dist/components/BbCalendar/useDayjsLocale.d.ts +64 -0
  541. package/dist/components/BbCalendar/useDayjsLocale.js +35 -0
  542. package/dist/components/BbCalendar/useToday.d.ts +23 -0
  543. package/dist/components/BbCalendar/useToday.js +21 -0
  544. package/dist/components/BbCheckbox/BbCheckbox.vue.d.ts +7 -7
  545. package/dist/components/BbCheckbox/BbCheckbox.vue_vue_type_script_setup_true_lang.js +224 -72
  546. package/dist/components/BbCheckbox/types.d.ts +199 -23
  547. package/dist/components/BbCheckbox/types.js +8 -0
  548. package/dist/components/BbCheckboxGroup/BbCheckboxGroup.vue.d.ts +15 -3
  549. package/dist/components/BbCheckboxGroup/BbCheckboxGroup.vue_vue_type_script_setup_true_lang.js +350 -106
  550. package/dist/components/BbCheckboxGroup/types.d.ts +241 -38
  551. package/dist/components/BbCheckboxGroup/types.js +10 -0
  552. package/dist/components/BbCollapsible/BbCollapsible.vue.d.ts +2 -1
  553. package/dist/components/BbCollapsible/BbCollapsible.vue_vue_type_script_setup_true_lang.js +41 -19
  554. package/dist/components/BbCollapsible/types.d.ts +42 -3
  555. package/dist/components/BbCollapsible/types.js +7 -0
  556. package/dist/components/BbColorInput/BbColorInput.vue.d.ts +17 -7
  557. package/dist/components/BbColorInput/BbColorInput.vue_vue_type_script_setup_true_lang.js +339 -87
  558. package/dist/components/BbColorInput/types.d.ts +223 -23
  559. package/dist/components/BbColorInput/types.js +24 -0
  560. package/dist/components/BbColorPalette/BbColorPalette.vue.d.ts +10 -2
  561. package/dist/components/BbColorPalette/BbColorPalette.vue_vue_type_script_setup_true_lang.js +530 -108
  562. package/dist/components/BbColorPalette/types.d.ts +74 -11
  563. package/dist/components/BbColorPalette/types.js +12 -0
  564. package/dist/components/BbConfirm/BbConfirm.vue.d.ts +2 -1
  565. package/dist/components/BbConfirm/BbConfirm.vue_vue_type_script_setup_true_lang.js +125 -76
  566. package/dist/components/BbConfirm/BbConfirmPortal.vue.d.ts +3 -5
  567. package/dist/components/BbConfirm/types.d.ts +64 -0
  568. package/dist/components/BbConfirm/types.js +17 -0
  569. package/dist/components/BbDatePicker/BbDatePicker.vue.d.ts +15 -10
  570. package/dist/components/BbDatePicker/BbDatePicker.vue_vue_type_script_setup_true_lang.js +324 -224
  571. package/dist/components/BbDatePicker/types.d.ts +111 -43
  572. package/dist/components/BbDatePicker/types.js +33 -0
  573. package/dist/components/BbDatePickerInput/BbDatePickerInput.vue.d.ts +16 -4
  574. package/dist/components/BbDatePickerInput/BbDatePickerInput.vue_vue_type_script_setup_true_lang.js +1225 -88
  575. package/dist/components/BbDatePickerInput/dateFieldLayout.d.ts +23 -0
  576. package/dist/components/BbDatePickerInput/dateFieldLayout.js +38 -0
  577. package/dist/components/BbDatePickerInput/types.d.ts +238 -52
  578. package/dist/components/BbDatePickerInput/types.js +39 -0
  579. package/dist/components/BbDialog/BbDialog.vue.d.ts +3 -3
  580. package/dist/components/BbDialog/BbDialog.vue_vue_type_script_setup_true_lang.js +230 -133
  581. package/dist/components/BbDialog/types.d.ts +94 -31
  582. package/dist/components/BbDialog/types.js +16 -0
  583. package/dist/components/BbDialog/useDialogStack.d.ts +12 -0
  584. package/dist/components/BbDialog/useDialogStack.js +9 -2
  585. package/dist/components/BbDropdown/AdaptiveDropdown.vue.d.ts +2 -0
  586. package/dist/components/BbDropdown/AdaptiveDropdown.vue_vue_type_script_setup_true_lang.js +134 -106
  587. package/dist/components/BbDropdown/BbDropdown.vue.d.ts +10 -2
  588. package/dist/components/BbDropdown/BbDropdown.vue_vue_type_script_setup_true_lang.js +463 -337
  589. package/dist/components/BbDropdown/BbDropdownGroup.vue.d.ts +16 -5
  590. package/dist/components/BbDropdown/BbDropdownGroup.vue_vue_type_script_setup_true_lang.js +48 -19
  591. package/dist/components/BbDropdown/BbDropdownList.vue.d.ts +10 -4
  592. package/dist/components/BbDropdown/BbDropdownList.vue_vue_type_script_setup_true_lang.js +388 -335
  593. package/dist/components/BbDropdown/DropdownPipelineResolver.vue_vue_type_script_setup_true_lang.js +152 -122
  594. package/dist/components/BbDropdown/DropdownRow.vue.d.ts +40 -0
  595. package/dist/components/BbDropdown/DropdownRow.vue.js +5 -0
  596. package/dist/components/BbDropdown/DropdownRow.vue_vue_type_script_setup_true_lang.js +60 -0
  597. package/dist/components/BbDropdown/normalizeGroups.d.ts +8 -2
  598. package/dist/components/BbDropdown/normalizeGroups.js +70 -32
  599. package/dist/components/BbDropdown/types.d.ts +440 -129
  600. package/dist/components/BbDropdown/types.js +21 -2
  601. package/dist/components/BbDropdown/useDropdownContext.d.ts +14 -4
  602. package/dist/components/BbDropdown/useDropdownGroupRegistry.d.ts +62 -0
  603. package/dist/components/BbDropdownButton/BbDropdownButton.vue.d.ts +18 -3
  604. package/dist/components/BbDropdownButton/BbDropdownButton.vue_vue_type_script_setup_true_lang.js +193 -43
  605. package/dist/components/BbDropdownButton/types.d.ts +136 -11
  606. package/dist/components/BbDropdownButton/types.js +35 -0
  607. package/dist/components/BbDropzone/BbDropzone.vue.d.ts +2 -2
  608. package/dist/components/BbDropzone/BbDropzone.vue_vue_type_script_setup_true_lang.js +211 -143
  609. package/dist/components/BbDropzone/types.d.ts +65 -21
  610. package/dist/components/BbDropzone/types.js +17 -0
  611. package/dist/components/BbForm/BbForm.vue.d.ts +94 -0
  612. package/dist/{validated → components/BbForm}/BbForm.vue.js +1 -1
  613. package/dist/components/BbForm/BbForm.vue_vue_type_script_setup_true_lang.js +360 -0
  614. package/dist/components/BbForm/BbFormCustomField.d.ts +14 -0
  615. package/dist/components/BbForm/BbFormCustomField.js +55 -0
  616. package/dist/components/BbForm/bindFormField.d.ts +57 -0
  617. package/dist/components/BbForm/bindFormField.js +88 -0
  618. package/dist/components/BbForm/formFields.d.ts +77 -0
  619. package/dist/components/BbForm/formFields.js +11 -0
  620. package/dist/components/BbForm/formSchema.d.ts +56 -0
  621. package/dist/components/BbForm/formSchema.js +196 -0
  622. package/dist/components/BbForm/standardSchema.d.ts +59 -0
  623. package/dist/components/BbHoverCard/BbHoverCard.vue.d.ts +43 -0
  624. package/dist/components/{BbBaseRadio/BbBaseRadio.vue.js → BbHoverCard/BbHoverCard.vue.js} +2 -2
  625. package/dist/components/BbHoverCard/BbHoverCard.vue_vue_type_script_setup_true_lang.js +300 -0
  626. package/dist/components/BbHoverCard/BbHoverCardPortal.vue.d.ts +23 -0
  627. package/dist/components/BbHoverCard/BbHoverCardPortal.vue.js +5 -0
  628. package/dist/components/BbHoverCard/BbHoverCardPortal.vue_vue_type_script_setup_true_lang.js +13 -0
  629. package/dist/components/BbHoverCard/hoverCardFocus.d.ts +29 -0
  630. package/dist/components/BbHoverCard/hoverCardFocus.js +29 -0
  631. package/dist/components/BbHoverCard/types.d.ts +186 -0
  632. package/dist/components/BbHoverCard/types.js +13 -0
  633. package/dist/components/BbIcon/BbIcon.vue.d.ts +1 -3
  634. package/dist/components/BbIcon/BbIcon.vue_vue_type_script_setup_true_lang.js +59 -48
  635. package/dist/components/BbIcon/iconCache.d.ts +63 -0
  636. package/dist/components/BbIcon/iconCache.js +35 -0
  637. package/dist/components/BbIcon/types.d.ts +22 -2
  638. package/dist/components/BbIcon/types.js +7 -0
  639. package/dist/components/BbIndicator/BbIndicator.vue_vue_type_script_setup_true_lang.js +34 -21
  640. package/dist/components/BbIndicator/types.d.ts +24 -0
  641. package/dist/components/BbIndicator/types.js +7 -0
  642. package/dist/components/BbNumberInput/BbNumberInput.vue.d.ts +11 -8
  643. package/dist/components/BbNumberInput/BbNumberInput.vue_vue_type_script_setup_true_lang.js +670 -87
  644. package/dist/components/BbNumberInput/numberDisplay.d.ts +256 -0
  645. package/dist/components/BbNumberInput/numberDisplay.js +499 -0
  646. package/dist/components/BbNumberInput/platform.d.ts +7 -0
  647. package/dist/components/BbNumberInput/platform.js +7 -0
  648. package/dist/components/BbNumberInput/types.d.ts +262 -30
  649. package/dist/components/BbNumberInput/types.js +8 -0
  650. package/dist/components/BbNumberInput/warroom/corpus.d.ts +58 -0
  651. package/dist/components/BbNumberInput/warroom/currency-verify.rows.d.ts +28 -0
  652. package/dist/components/BbNumberInput/warroom/currency.rows.d.ts +2 -0
  653. package/dist/components/BbNumberInput/warroom/harness.d.ts +217 -0
  654. package/dist/components/BbNumberInput/warroom/oracle.d.ts +150 -0
  655. package/dist/components/BbOffCanvas/BbOffCanvas.vue.d.ts +4 -6
  656. package/dist/components/BbOffCanvas/BbOffCanvas.vue_vue_type_script_setup_true_lang.js +311 -204
  657. package/dist/components/BbOffCanvas/hostCloseLabel.d.ts +3 -0
  658. package/dist/components/BbOffCanvas/hostCloseLabel.js +8 -0
  659. package/dist/components/BbOffCanvas/types.d.ts +81 -13
  660. package/dist/components/BbOffCanvas/types.js +15 -0
  661. package/dist/components/BbPagination/BbPagination.vue.d.ts +2 -2
  662. package/dist/components/BbPagination/BbPagination.vue_vue_type_script_setup_true_lang.js +146 -110
  663. package/dist/components/BbPagination/types.d.ts +45 -15
  664. package/dist/components/BbPagination/types.js +13 -0
  665. package/dist/components/BbPopover/BbPopover.vue.d.ts +5 -4
  666. package/dist/components/BbPopover/BbPopover.vue_vue_type_script_setup_true_lang.js +288 -193
  667. package/dist/components/BbPopover/BbPopoverPortal.vue.d.ts +23 -0
  668. package/dist/components/BbPopover/BbPopoverPortal.vue.js +5 -0
  669. package/dist/components/BbPopover/BbPopoverPortal.vue_vue_type_script_setup_true_lang.js +13 -0
  670. package/dist/components/BbPopover/types.d.ts +71 -17
  671. package/dist/components/BbPopover/types.js +14 -0
  672. package/dist/components/BbProgress/BbProgress.vue_vue_type_script_setup_true_lang.js +38 -17
  673. package/dist/components/BbProgress/types.d.ts +40 -0
  674. package/dist/components/BbProgress/types.js +7 -0
  675. package/dist/components/BbPtScope/BbPtScope.vue.d.ts +12 -0
  676. package/dist/components/BbPtScope/BbPtScope.vue.js +5 -0
  677. package/dist/components/BbPtScope/BbPtScope.vue_vue_type_script_setup_true_lang.js +13 -0
  678. package/dist/components/BbPtScope/types.d.ts +15 -0
  679. package/dist/components/BbRadio/BbRadio.vue.d.ts +7 -7
  680. package/dist/components/BbRadio/BbRadio.vue_vue_type_script_setup_true_lang.js +178 -59
  681. package/dist/components/BbRadio/types.d.ts +174 -29
  682. package/dist/components/BbRadio/types.js +8 -0
  683. package/dist/components/BbRadioGroup/BbRadioGroup.vue.d.ts +14 -2
  684. package/dist/components/BbRadioGroup/BbRadioGroup.vue_vue_type_script_setup_true_lang.js +333 -108
  685. package/dist/components/BbRadioGroup/types.d.ts +246 -46
  686. package/dist/components/BbRadioGroup/types.js +10 -0
  687. package/dist/components/BbRating/BbRating.vue.d.ts +10 -8
  688. package/dist/components/BbRating/BbRating.vue_vue_type_script_setup_true_lang.js +269 -78
  689. package/dist/components/BbRating/types.d.ts +195 -23
  690. package/dist/components/BbRating/types.js +21 -0
  691. package/dist/components/BbSelect/BbSelect.vue.d.ts +17 -3
  692. package/dist/components/BbSelect/BbSelect.vue_vue_type_script_setup_true_lang.js +565 -108
  693. package/dist/components/BbSelect/types.d.ts +263 -51
  694. package/dist/components/BbSelect/types.js +41 -0
  695. package/dist/components/BbSelectPopover/BbSelectPopover.vue.d.ts +15 -1
  696. package/dist/components/BbSelectPopover/BbSelectPopover.vue_vue_type_script_setup_true_lang.js +587 -362
  697. package/dist/components/BbSelectPopover/sheetChipAttrs.d.ts +18 -0
  698. package/dist/components/BbSelectPopover/sheetChipAttrs.js +5 -0
  699. package/dist/components/BbSelectPopover/types.d.ts +141 -45
  700. package/dist/components/BbSelectPopover/types.js +24 -0
  701. package/dist/components/BbSlider/BbSlider.vue.d.ts +13 -8
  702. package/dist/components/BbSlider/BbSlider.vue_vue_type_script_setup_true_lang.js +477 -97
  703. package/dist/components/BbSlider/types.d.ts +221 -27
  704. package/dist/components/BbSlider/types.js +26 -0
  705. package/dist/components/BbSmoothHeight/BbSmoothHeight.vue.d.ts +1 -1
  706. package/dist/components/BbSmoothHeight/BbSmoothHeight.vue_vue_type_script_setup_true_lang.js +60 -48
  707. package/dist/components/BbSmoothHeight/types.d.ts +19 -0
  708. package/dist/components/BbSmoothHeight/types.js +7 -0
  709. package/dist/components/BbSpinner/BbSpinner.vue.d.ts +1 -3
  710. package/dist/components/BbSpinner/BbSpinner.vue_vue_type_script_setup_true_lang.js +27 -14
  711. package/dist/components/BbSpinner/types.d.ts +22 -1
  712. package/dist/components/BbSpinner/types.js +7 -0
  713. package/dist/components/BbSwitch/BbSwitch.vue.d.ts +7 -7
  714. package/dist/components/BbSwitch/BbSwitch.vue_vue_type_script_setup_true_lang.js +230 -78
  715. package/dist/components/BbSwitch/types.d.ts +25 -10
  716. package/dist/components/BbSwitch/types.js +5 -0
  717. package/dist/components/BbSwitchGroup/BbSwitchGroup.vue.d.ts +14 -2
  718. package/dist/components/BbSwitchGroup/BbSwitchGroup.vue_vue_type_script_setup_true_lang.js +350 -106
  719. package/dist/components/BbSwitchGroup/types.d.ts +36 -8
  720. package/dist/components/BbSwitchGroup/types.js +5 -0
  721. package/dist/components/BbTable/BbTable.vue.d.ts +36 -56
  722. package/dist/components/BbTable/BbTable.vue_vue_type_script_setup_true_lang.js +2331 -684
  723. package/dist/components/BbTable/BbTableDataRow.d.ts +204 -0
  724. package/dist/components/BbTable/BbTableDataRow.js +188 -0
  725. package/dist/components/BbTable/BbTableEdgeRow.d.ts +112 -0
  726. package/dist/components/BbTable/BbTableEdgeRow.js +65 -0
  727. package/dist/components/BbTable/BbTableExpandRow.d.ts +84 -0
  728. package/dist/components/BbTable/BbTableExpandRow.js +62 -0
  729. package/dist/components/BbTable/BbTableSelectToggle.d.ts +128 -0
  730. package/dist/components/BbTable/BbTableSelectToggle.js +131 -0
  731. package/dist/components/BbTable/gridWidgets.d.ts +30 -0
  732. package/dist/components/BbTable/gridWidgets.js +14 -0
  733. package/dist/components/BbTable/types.d.ts +520 -190
  734. package/dist/components/BbTable/types.js +34 -0
  735. package/dist/components/BbTable/useRowReorder.d.ts +54 -0
  736. package/dist/components/BbTable/useRowReorder.js +429 -0
  737. package/dist/components/BbTable/utils.d.ts +153 -4
  738. package/dist/components/BbTable/utils.js +165 -37
  739. package/dist/components/BbTable/warroom/harness.d.ts +253 -0
  740. package/dist/components/BbTabs/BbTabs.vue.d.ts +3 -1
  741. package/dist/components/BbTabs/BbTabs.vue_vue_type_script_setup_true_lang.js +66 -26
  742. package/dist/components/BbTabs/BbTabsList.vue.d.ts +3 -10
  743. package/dist/components/BbTabs/BbTabsList.vue_vue_type_script_setup_true_lang.js +143 -81
  744. package/dist/components/BbTabs/BbTabsPanels.vue.d.ts +12 -0
  745. package/dist/components/{BbBaseSwitch/BbBaseSwitch.vue.js → BbTabs/BbTabsPanels.vue.js} +2 -2
  746. package/dist/components/BbTabs/BbTabsPanels.vue_vue_type_script_setup_true_lang.js +59 -0
  747. package/dist/components/BbTabs/BbTabsRoot.vue.d.ts +3 -1
  748. package/dist/components/BbTabs/BbTabsRoot.vue_vue_type_script_setup_true_lang.js +6 -1
  749. package/dist/components/BbTabs/types.d.ts +210 -46
  750. package/dist/components/BbTabs/types.js +34 -0
  751. package/dist/components/BbTag/BbTag.vue.d.ts +13 -10
  752. package/dist/components/BbTag/BbTag.vue_vue_type_script_setup_true_lang.js +404 -93
  753. package/dist/components/BbTag/types.d.ts +156 -31
  754. package/dist/components/BbTag/types.js +22 -0
  755. package/dist/components/BbTextInput/BbTextInput.vue.d.ts +31 -37
  756. package/dist/components/BbTextInput/BbTextInput.vue_vue_type_script_setup_true_lang.js +312 -107
  757. package/dist/components/BbTextInput/types.d.ts +201 -26
  758. package/dist/components/BbTextInput/types.js +12 -0
  759. package/dist/components/BbTextarea/BbTextarea.vue.d.ts +31 -37
  760. package/dist/components/BbTextarea/BbTextarea.vue_vue_type_script_setup_true_lang.js +342 -114
  761. package/dist/components/BbTextarea/types.d.ts +191 -26
  762. package/dist/components/BbTextarea/types.js +12 -0
  763. package/dist/components/BbTimePicker/BbTimePicker.vue.d.ts +12 -4
  764. package/dist/components/BbTimePicker/BbTimePicker.vue_vue_type_script_setup_true_lang.js +199 -122
  765. package/dist/components/BbTimePicker/types.d.ts +80 -9
  766. package/dist/components/BbTimePicker/types.js +18 -0
  767. package/dist/components/BbTimePickerInput/BbTimePickerInput.vue.d.ts +14 -4
  768. package/dist/components/BbTimePickerInput/BbTimePickerInput.vue_vue_type_script_setup_true_lang.js +779 -86
  769. package/dist/components/BbTimePickerInput/types.d.ts +170 -35
  770. package/dist/components/BbTimePickerInput/types.js +25 -0
  771. package/dist/components/BbToast/BbToast.vue_vue_type_script_setup_true_lang.js +63 -25
  772. package/dist/components/BbToast/BbToastMessage.vue.d.ts +4 -1
  773. package/dist/components/BbToast/BbToastMessage.vue_vue_type_script_setup_true_lang.js +79 -76
  774. package/dist/components/BbToast/BbToastPortal.vue.d.ts +1 -0
  775. package/dist/components/BbToast/BbToastRegion.vue.d.ts +4 -1
  776. package/dist/components/BbToast/BbToastRegion.vue_vue_type_script_setup_true_lang.js +72 -64
  777. package/dist/components/BbToast/types.d.ts +54 -1
  778. package/dist/components/BbToast/types.js +28 -0
  779. package/dist/components/BbTooltip/BbTooltip.vue_vue_type_script_setup_true_lang.js +127 -92
  780. package/dist/components/BbTooltip/tooltipWarmup.d.ts +23 -0
  781. package/dist/components/BbTooltip/tooltipWarmup.js +7 -0
  782. package/dist/components/BbTooltip/types.d.ts +42 -5
  783. package/dist/components/BbTooltip/types.js +7 -0
  784. package/dist/components/BbTree/BbTree.vue.d.ts +15 -3
  785. package/dist/components/BbTree/BbTree.vue_vue_type_script_setup_true_lang.js +57 -29
  786. package/dist/components/BbTree/BbTreeLevel.vue.d.ts +1 -1
  787. package/dist/components/BbTree/BbTreeLevel.vue_vue_type_script_setup_true_lang.js +24 -20
  788. package/dist/components/BbTree/context.d.ts +9 -1
  789. package/dist/components/BbTree/types.d.ts +40 -5
  790. package/dist/components/BbTree/types.js +7 -0
  791. package/dist/components/ChipsBox/ChipsBox.vue_vue_type_script_setup_true_lang.js +46 -44
  792. package/dist/components/ChipsBox/types.d.ts +7 -0
  793. package/dist/components/ClearableButton/ClearableButton.vue_vue_type_script_setup_true_lang.js +5 -5
  794. package/dist/components/CommaBox/CommaBox.vue_vue_type_script_setup_true_lang.js +11 -7
  795. package/dist/components/CommaBox/types.d.ts +7 -0
  796. package/dist/components/{BbBaseInputContainer/BbBaseInputContainer.vue.d.ts → CommonField/CommonField.vue.d.ts} +5 -5
  797. package/dist/components/{BbTabs/BbTabsPanes.vue.js → CommonField/CommonField.vue.js} +2 -2
  798. package/dist/components/CommonField/CommonField.vue_vue_type_script_setup_true_lang.js +231 -0
  799. package/dist/components/CommonField/messageHeightMatrix.d.ts +2 -0
  800. package/dist/components/{BbBaseInputContainer → CommonField}/types.d.ts +87 -32
  801. package/dist/components/{CommonInputWrapper/CommonInputWrapper.vue.d.ts → CommonFieldInput/CommonFieldInput.vue.d.ts} +5 -4
  802. package/dist/components/{BbBaseRadioGroup/BbBaseRadioGroup.vue.js → CommonFieldInput/CommonFieldInput.vue.js} +2 -2
  803. package/dist/components/CommonFieldInput/CommonFieldInput.vue_vue_type_script_setup_true_lang.js +121 -0
  804. package/dist/components/CommonFieldInput/boxBorderMatrix.d.ts +10 -0
  805. package/dist/components/{CommonInputWrapper → CommonFieldInput}/types.d.ts +26 -8
  806. package/dist/components/CommonPopover/CommonPopover.vue.d.ts +11 -2
  807. package/dist/components/CommonPopover/CommonPopover.vue_vue_type_script_setup_true_lang.js +80 -65
  808. package/dist/components/CommonPopover/types.d.ts +41 -31
  809. package/dist/components/CommonTimeSelector/CommonTimeSelector.vue.d.ts +48 -0
  810. package/dist/components/{BbBaseColorPalette/BbBaseColorPalette.vue.js → CommonTimeSelector/CommonTimeSelector.vue.js} +2 -2
  811. package/dist/components/CommonTimeSelector/CommonTimeSelector.vue_vue_type_script_setup_true_lang.js +241 -0
  812. package/dist/components/CommonTimeSelector/types.d.ts +6 -0
  813. package/dist/components/CommonTimeSelector/useMeridiem.d.ts +19 -0
  814. package/dist/components/CommonTimeSelector/useMeridiem.js +41 -0
  815. package/dist/components/FlatListBox/FlatListBox.vue.d.ts +5 -1
  816. package/dist/components/FlatListBox/FlatListBox.vue_vue_type_script_setup_true_lang.js +176 -98
  817. package/dist/components/FlatListBox/types.d.ts +33 -2
  818. package/dist/components/GroupedListBox/GroupedListBox.vue.d.ts +5 -1
  819. package/dist/components/GroupedListBox/GroupedListBox.vue_vue_type_script_setup_true_lang.js +237 -146
  820. package/dist/components/GroupedListBox/types.d.ts +33 -2
  821. package/dist/components/ListBox/ListBox.vue.d.ts +5 -1
  822. package/dist/components/ListBox/ListBox.vue_vue_type_script_setup_true_lang.js +100 -69
  823. package/dist/components/ListBox/types.d.ts +33 -2
  824. package/dist/components/OptionsContainer/OptionsContainer.vue.d.ts +1 -1
  825. package/dist/components/OptionsContainer/OptionsContainer.vue_vue_type_script_setup_true_lang.js +117 -37
  826. package/dist/components/OptionsContainer/types.d.ts +76 -10
  827. package/dist/components/Transitions/ScaleFade.vue_vue_type_script_setup_true_lang.js +8 -8
  828. package/dist/components/Transitions/Slide.vue.js +1 -1
  829. package/dist/composables/formSubmitLock.d.ts +8 -0
  830. package/dist/composables/formSubmitLock.js +4 -0
  831. package/dist/composables/ssrMarker.d.ts +15 -0
  832. package/dist/composables/ssrMarker.js +19 -0
  833. package/dist/composables/useBaseOptions.d.ts +18 -1
  834. package/dist/composables/useBaseOptions.js +83 -37
  835. package/dist/composables/useBbConfig.d.ts +27 -6
  836. package/dist/composables/useBbConfig.js +8 -2
  837. package/dist/composables/useBbDropdownContext.d.ts +13 -8
  838. package/dist/composables/useBbFormContext.d.ts +142 -8
  839. package/dist/composables/useBbFormContext.js +62 -30
  840. package/dist/composables/useBbFormField.d.ts +69 -0
  841. package/dist/composables/useBbFormField.js +58 -0
  842. package/dist/composables/useBbTableContext.d.ts +45 -1
  843. package/dist/composables/useBbTableContext.js +93 -87
  844. package/dist/composables/useBbTabsContext.d.ts +24 -18
  845. package/dist/composables/useBbTabsContext.js +154 -112
  846. package/dist/composables/useCharacterCounter.d.ts +33 -0
  847. package/dist/composables/useCharacterCounter.js +29 -0
  848. package/dist/composables/useClosingInert.d.ts +4 -4
  849. package/dist/composables/useCoarsePointer.js +7 -10
  850. package/dist/composables/useCoherence.js +1 -1
  851. package/dist/composables/useConfig.d.ts +59 -0
  852. package/dist/composables/useConfig.js +15 -0
  853. package/dist/composables/useConfirm.d.ts +39 -7
  854. package/dist/composables/useConfirm.js +50 -41
  855. package/dist/composables/useEscapeStackEntry.d.ts +13 -0
  856. package/dist/composables/useEscapeStackEntry.js +16 -0
  857. package/dist/composables/useFormBinding.d.ts +132 -0
  858. package/dist/composables/useFormBinding.js +46 -0
  859. package/dist/composables/useHydrated.d.ts +30 -0
  860. package/dist/composables/useHydrated.js +31 -7
  861. package/dist/composables/useId.d.ts +4 -3
  862. package/dist/composables/useId.js +1 -7
  863. package/dist/composables/useItemText.d.ts +5 -1
  864. package/dist/composables/useItemText.js +8 -3
  865. package/dist/composables/useItemValue.d.ts +5 -1
  866. package/dist/composables/useItemValue.js +8 -3
  867. package/dist/composables/useItemsGetter.d.ts +73 -2
  868. package/dist/composables/useItemsGetter.js +81 -21
  869. package/dist/composables/useKeyboardInset.d.ts +28 -0
  870. package/dist/composables/useKeyboardInset.js +32 -0
  871. package/dist/composables/useLocale.js +13 -9
  872. package/dist/composables/useMobile.js +7 -10
  873. package/dist/composables/useOverlayYield.d.ts +23 -0
  874. package/dist/composables/useOverlayYield.js +20 -0
  875. package/dist/composables/usePassthrough.d.ts +228 -0
  876. package/dist/composables/usePassthrough.js +247 -0
  877. package/dist/composables/usePrefill.d.ts +26 -5
  878. package/dist/composables/usePrefill.js +36 -19
  879. package/dist/composables/useSafeAreaInternal.js +1 -1
  880. package/dist/composables/useSegmentedFields.d.ts +2 -2
  881. package/dist/composables/useSegmentedFields.js +4 -4
  882. package/dist/composables/useServerPrefetch.d.ts +28 -0
  883. package/dist/composables/useServerPrefetch.js +9 -0
  884. package/dist/composables/useSsrState.d.ts +28 -0
  885. package/dist/composables/useSsrState.js +13 -0
  886. package/dist/composables/useTableWidthContext.d.ts +24 -4
  887. package/dist/composables/useTableWidthContext.js +31 -28
  888. package/dist/composables/useToast.d.ts +18 -1
  889. package/dist/composables/useToast.js +31 -18
  890. package/dist/composables/useToggleInput.d.ts +44 -0
  891. package/dist/composables/useToggleInput.js +39 -0
  892. package/dist/composables/useViewportWidth.d.ts +5 -25
  893. package/dist/composables/useViewportWidth.js +14 -7
  894. package/dist/deprecation/ai-deprecations.json.d.ts +2259 -263
  895. package/dist/deprecation/ai-deprecations.json.js +1 -1
  896. package/dist/deprecation/removedProps.js +9 -4
  897. package/dist/directives/bbDropdown.d.ts +15 -4
  898. package/dist/directives/bbDropdown.js +42 -10
  899. package/dist/directives/bbHoverCard.d.ts +59 -0
  900. package/dist/directives/bbHoverCard.js +33 -0
  901. package/dist/directives/bbPopover.d.ts +60 -0
  902. package/dist/directives/bbPopover.js +40 -0
  903. package/dist/directives/bbTooltip.d.ts +8 -0
  904. package/dist/directives/createPopoverDirective.d.ts +86 -0
  905. package/dist/directives/createPopoverDirective.js +111 -33
  906. package/dist/directives/directivePortal.d.ts +75 -0
  907. package/dist/directives/directivePortal.js +37 -0
  908. package/dist/directives/renderingInstance.d.ts +2 -0
  909. package/dist/directives/renderingInstance.js +25 -0
  910. package/dist/i18n/index.d.ts +14 -25
  911. package/dist/i18n/locales/cs.json +36 -19
  912. package/dist/i18n/locales/da.json +39 -22
  913. package/dist/i18n/locales/de-CH.json +144 -0
  914. package/dist/i18n/locales/de.json +38 -21
  915. package/dist/i18n/locales/el.json +36 -19
  916. package/dist/i18n/locales/en-GB.json +144 -0
  917. package/dist/i18n/locales/en.json +33 -16
  918. package/dist/i18n/locales/es-MX.json +144 -0
  919. package/dist/i18n/locales/es.json +41 -24
  920. package/dist/i18n/locales/fi.json +34 -17
  921. package/dist/i18n/locales/fr.json +43 -26
  922. package/dist/i18n/locales/hu.json +34 -17
  923. package/dist/i18n/locales/it.json +37 -20
  924. package/dist/i18n/locales/ja.json +39 -22
  925. package/dist/i18n/locales/ko.json +36 -19
  926. package/dist/i18n/locales/nb.json +39 -22
  927. package/dist/i18n/locales/nl.json +47 -30
  928. package/dist/i18n/locales/pl.json +35 -18
  929. package/dist/i18n/locales/{pt.json → pt-BR.json} +43 -26
  930. package/dist/i18n/locales/pt-PT.json +144 -0
  931. package/dist/i18n/locales/ro.json +47 -30
  932. package/dist/i18n/locales/ru.json +35 -18
  933. package/dist/i18n/locales/sv.json +42 -25
  934. package/dist/i18n/locales/tr.json +40 -23
  935. package/dist/i18n/locales/uk.json +35 -18
  936. package/dist/i18n/locales/{zh-cn.json → zh-CN.json} +36 -19
  937. package/dist/i18n/locales/zh-HK.json +144 -0
  938. package/dist/i18n/locales/zh-TW.json +144 -0
  939. package/dist/i18n/regionHints.d.ts +16 -0
  940. package/dist/i18n/regionHints.js +49 -0
  941. package/dist/i18n/regions.d.ts +286 -0
  942. package/dist/i18n/regions.js +265 -0
  943. package/dist/icon-scan.d.ts +276 -0
  944. package/dist/icon-scan.js +485 -0
  945. package/dist/icons-whitelist.d.ts +5 -4
  946. package/dist/index.d.ts +61 -23
  947. package/dist/index.js +84 -72
  948. package/dist/llms-full.txt +100680 -60206
  949. package/dist/llms-medium.txt +1652 -390
  950. package/dist/llms.txt +41 -23
  951. package/dist/locale-blueprint.json +41 -18
  952. package/dist/nuxt-auto-imports.d.ts +76 -0
  953. package/dist/nuxt-auto-imports.js +32 -0
  954. package/dist/nuxt-module.d.ts +30 -15
  955. package/dist/nuxt.js +35 -9
  956. package/dist/passthrough-deduper.js +5 -0
  957. package/dist/plugin.d.ts +10 -1
  958. package/dist/plugin.js +33 -19
  959. package/dist/project-dts.d.ts +92 -0
  960. package/dist/project-dts.js +173 -0
  961. package/dist/reset.css +1 -1
  962. package/dist/runtime/nuxt-plugin.js +36 -21
  963. package/dist/styles.css +3 -2
  964. package/dist/types/AlertVariant.d.ts +10 -1
  965. package/dist/types/BadgeVariant.d.ts +16 -5
  966. package/dist/types/ButtonVariant.d.ts +12 -1
  967. package/dist/types/ColumnName.d.ts +30 -3
  968. package/dist/types/CommonProps.d.ts +15 -5
  969. package/dist/types/Config.d.ts +112 -1
  970. package/dist/types/ConfirmVariant.d.ts +8 -1
  971. package/dist/types/DropdownItemVariant.d.ts +8 -1
  972. package/dist/types/FieldLayout.d.ts +39 -0
  973. package/dist/types/FieldLayout.js +8 -0
  974. package/dist/types/IndicatorVariant.d.ts +11 -1
  975. package/dist/types/InputVariant.d.ts +30 -0
  976. package/dist/types/ItemProps.d.ts +50 -0
  977. package/dist/types/ItemsProvider.d.ts +94 -0
  978. package/dist/types/Option.d.ts +6 -0
  979. package/dist/types/PtScope.d.ts +15 -0
  980. package/dist/types/RegistryKey.d.ts +10 -0
  981. package/dist/types/TabsVariant.d.ts +25 -0
  982. package/dist/types/ToastVariant.d.ts +12 -2
  983. package/dist/types/TooltipVariant.d.ts +8 -1
  984. package/dist/types/passthrough.d.ts +378 -0
  985. package/dist/types/passthrough.js +78 -0
  986. package/dist/types/ptComponentMap.d.ts +63 -0
  987. package/dist/utilities/functions/animationsSettled.d.ts +7 -0
  988. package/dist/utilities/functions/animationsSettled.js +6 -0
  989. package/dist/utilities/functions/elementLabel.d.ts +8 -0
  990. package/dist/utilities/functions/elementLabel.js +6 -0
  991. package/dist/utilities/functions/hasVnodeListener.d.ts +16 -0
  992. package/dist/utilities/functions/hasVnodeListener.js +12 -0
  993. package/dist/utilities/functions/isImeComposing.d.ts +7 -0
  994. package/dist/utilities/functions/isImeComposing.js +4 -0
  995. package/dist/utilities/functions/itemProps.d.ts +46 -0
  996. package/dist/utilities/functions/itemProps.js +47 -0
  997. package/dist/utilities/functions/parseSize.d.ts +2 -1
  998. package/dist/utilities/functions/readableValue.d.ts +6 -0
  999. package/dist/utilities/functions/readableValue.js +4 -0
  1000. package/dist/utilities/functions/settlesVisible.d.ts +20 -0
  1001. package/dist/utilities/functions/settlesVisible.js +18 -0
  1002. package/dist/utilities/functions/slotKey.d.ts +13 -8
  1003. package/dist/utilities/functions/slotKey.js +78 -2
  1004. package/dist/utilities/functions/snapToStep.js +2 -1
  1005. package/dist/utilities/functions/throttle.d.ts +1 -4
  1006. package/dist/utilities/functions/throttle.js +1 -4
  1007. package/dist/utilities/functions/toggleInput.d.ts +114 -0
  1008. package/dist/utilities/functions/toggleInput.js +61 -0
  1009. package/dist/utilities/functions/warnRemovedAttrs.d.ts +39 -1
  1010. package/dist/utilities/functions/warnRemovedAttrs.js +85 -14
  1011. package/dist/utilities/misc/listboxMetrics.d.ts +9 -3
  1012. package/dist/utilities/misc/listboxMetrics.js +5 -2
  1013. package/dist/utilities/misc/ssrStateInjectionKey.d.ts +47 -0
  1014. package/dist/utilities/misc/ssrStateInjectionKey.js +4 -0
  1015. package/dist/utilities/misc/ssrValue.d.ts +20 -0
  1016. package/dist/utilities/misc/ssrValue.js +7 -0
  1017. package/dist/utils/cssLayers.d.ts +91 -0
  1018. package/dist/utils/cssLayers.js +43 -0
  1019. package/dist/utils/focusVisibility.d.ts +9 -0
  1020. package/dist/utils/focusVisibility.js +12 -0
  1021. package/dist/utils/injectLibraryStyles.d.ts +3 -1
  1022. package/dist/utils/injectLibraryStyles.js +24 -23
  1023. package/dist/utils/overlayEscapeStack.d.ts +39 -1
  1024. package/dist/utils/overlayEscapeStack.js +19 -8
  1025. package/dist/utils/passthrough.d.ts +67 -0
  1026. package/dist/utils/passthrough.js +100 -0
  1027. package/dist/utils/passthroughDeduper.d.ts +2 -0
  1028. package/dist/utils/ptScope.d.ts +8 -0
  1029. package/dist/utils/ptScope.js +4 -0
  1030. package/dist/utils/versionCheck.d.ts +19 -0
  1031. package/dist/utils/versionCheck.js +18 -0
  1032. package/dist/vite-plugin.d.ts +324 -71
  1033. package/dist/vite.js +577 -385
  1034. package/llms.txt +42 -24
  1035. package/package.json +75 -38
  1036. package/scripts/README.md +35 -33
  1037. package/scripts/lib/agent-manifest.mjs +543 -0
  1038. package/scripts/lib/check-fix.mjs +129 -0
  1039. package/scripts/lib/collapsible-trigger-aria.mjs +116 -0
  1040. package/scripts/lib/component-attr-targets.ts +123 -0
  1041. package/scripts/lib/component-tree.ts +648 -0
  1042. package/scripts/lib/css-class-check.mjs +329 -0
  1043. package/scripts/lib/css-class-surface.mjs +292 -0
  1044. package/scripts/lib/css-color-resolve.mjs +296 -0
  1045. package/scripts/lib/css-local-check.mjs +432 -0
  1046. package/scripts/lib/design-token-manifest.mjs +506 -0
  1047. package/scripts/lib/doc-sections.mjs +250 -0
  1048. package/scripts/lib/dropdown-default-slot.mjs +118 -0
  1049. package/scripts/lib/ensure-manifest.mjs +106 -10
  1050. package/scripts/lib/eslint-disable.mjs +173 -0
  1051. package/scripts/lib/eslint-plugin.d.ts +90 -1
  1052. package/scripts/lib/eslint-plugin.mjs +2499 -33
  1053. package/scripts/lib/example-checks.mjs +337 -0
  1054. package/scripts/lib/form-v-model.mjs +190 -0
  1055. package/scripts/lib/guide-claims.mjs +452 -0
  1056. package/scripts/lib/hand-imported-styles.mjs +362 -0
  1057. package/scripts/lib/hand-roll-hints.mjs +50 -6
  1058. package/scripts/lib/helper-canon.mjs +176 -0
  1059. package/scripts/lib/helpers-add.mjs +1303 -0
  1060. package/scripts/lib/html-attributes.mjs +353 -0
  1061. package/scripts/lib/items-provider-context.mjs +842 -0
  1062. package/scripts/lib/linked-target.mjs +30 -0
  1063. package/scripts/lib/local-components.mjs +206 -0
  1064. package/scripts/lib/locale-check.mjs +182 -0
  1065. package/scripts/lib/manifest-pointers.mjs +71 -0
  1066. package/scripts/lib/mcp-config.mjs +93 -58
  1067. package/scripts/lib/migrate-fix.mjs +62 -3
  1068. package/scripts/lib/portal-names.mjs +458 -0
  1069. package/scripts/lib/project-variant-dts.mjs +208 -0
  1070. package/scripts/lib/public-type-exports.mjs +273 -0
  1071. package/scripts/lib/reactive-v-model.mjs +221 -0
  1072. package/scripts/lib/recipe-excerpts.mjs +98 -0
  1073. package/scripts/lib/redundant-item-accessor.mjs +398 -0
  1074. package/scripts/lib/renamed-item-field.mjs +343 -0
  1075. package/scripts/lib/required-in-form.mjs +240 -0
  1076. package/scripts/lib/slot-key.mjs +147 -0
  1077. package/scripts/lib/slot-renames.mjs +45 -0
  1078. package/scripts/lib/squashed-slot-words.mjs +133 -0
  1079. package/scripts/lib/text-null-value.mjs +260 -0
  1080. package/scripts/lib/toolchain-check.mjs +217 -0
  1081. package/scripts/lib/unimported-components.mjs +263 -0
  1082. package/scripts/lib/validate-bb-markup.mjs +2945 -97
  1083. package/scripts/lib/wrapper-props.mjs +188 -0
  1084. package/dist/ai/BbBaseCheckbox.md +0 -49
  1085. package/dist/ai/BbBaseCheckboxGroup.md +0 -64
  1086. package/dist/ai/BbBaseColorInput.md +0 -65
  1087. package/dist/ai/BbBaseColorPalette.md +0 -39
  1088. package/dist/ai/BbBaseDatePicker.md +0 -43
  1089. package/dist/ai/BbBaseDatePickerInput.md +0 -73
  1090. package/dist/ai/BbBaseInputContainer.md +0 -48
  1091. package/dist/ai/BbBaseNumberInput.md +0 -71
  1092. package/dist/ai/BbBaseRadio.md +0 -46
  1093. package/dist/ai/BbBaseRadioGroup.md +0 -64
  1094. package/dist/ai/BbBaseRating.md +0 -52
  1095. package/dist/ai/BbBaseSelect.md +0 -88
  1096. package/dist/ai/BbBaseSlider.md +0 -56
  1097. package/dist/ai/BbBaseSwitch.md +0 -49
  1098. package/dist/ai/BbBaseSwitchGroup.md +0 -64
  1099. package/dist/ai/BbBaseTag.md +0 -68
  1100. package/dist/ai/BbBaseTextInput.md +0 -75
  1101. package/dist/ai/BbBaseTextarea.md +0 -62
  1102. package/dist/ai/BbBaseTimePickerInput.md +0 -62
  1103. package/dist/ai/BbTabsPanes.md +0 -27
  1104. package/dist/ai/CommonInputWrapper.md +0 -42
  1105. package/dist/ai/recipes/inertia/command-palette.md +0 -311
  1106. package/dist/ai/recipes/nuxt/command-palette.md +0 -300
  1107. package/dist/ai/recipes/vue/command-palette.md +0 -297
  1108. package/dist/ai/source/BbBaseCheckbox.md +0 -461
  1109. package/dist/ai/source/BbBaseCheckboxGroup.md +0 -554
  1110. package/dist/ai/source/BbBaseColorInput.md +0 -431
  1111. package/dist/ai/source/BbBaseColorPalette.md +0 -942
  1112. package/dist/ai/source/BbBaseDatePicker.md +0 -1448
  1113. package/dist/ai/source/BbBaseDatePickerInput.md +0 -1940
  1114. package/dist/ai/source/BbBaseInputContainer.md +0 -1211
  1115. package/dist/ai/source/BbBaseNumberInput.md +0 -617
  1116. package/dist/ai/source/BbBaseRadio.md +0 -381
  1117. package/dist/ai/source/BbBaseRadioGroup.md +0 -539
  1118. package/dist/ai/source/BbBaseRating.md +0 -607
  1119. package/dist/ai/source/BbBaseSelect.md +0 -945
  1120. package/dist/ai/source/BbBaseSlider.md +0 -1144
  1121. package/dist/ai/source/BbBaseSwitch.md +0 -246
  1122. package/dist/ai/source/BbBaseSwitchGroup.md +0 -302
  1123. package/dist/ai/source/BbBaseTag.md +0 -694
  1124. package/dist/ai/source/BbBaseTextInput.md +0 -511
  1125. package/dist/ai/source/BbBaseTextarea.md +0 -504
  1126. package/dist/ai/source/BbBaseTimePickerInput.md +0 -1037
  1127. package/dist/ai/source/BbTabsPanes.md +0 -377
  1128. package/dist/ai/source/CommonInputWrapper.md +0 -584
  1129. package/dist/alert-variants.d.ts +0 -19
  1130. package/dist/assets/svgs/sort.svg_raw.js +0 -4
  1131. package/dist/badge-variants.d.ts +0 -19
  1132. package/dist/button-variants.d.ts +0 -21
  1133. package/dist/components/BbBadge/BadgeAppendIcon.vue.d.ts +0 -3
  1134. package/dist/components/BbBadge/BadgeAppendIcon.vue.js +0 -5
  1135. package/dist/components/BbBadge/BadgeAppendIcon.vue_vue_type_script_setup_true_lang.js +0 -22
  1136. package/dist/components/BbBaseCheckbox/BbBaseCheckbox.vue.d.ts +0 -40
  1137. package/dist/components/BbBaseCheckbox/BbBaseCheckbox.vue.js +0 -6
  1138. package/dist/components/BbBaseCheckbox/BbBaseCheckbox.vue_vue_type_script_setup_true_lang.js +0 -145
  1139. package/dist/components/BbBaseCheckbox/types.d.ts +0 -224
  1140. package/dist/components/BbBaseCheckboxGroup/BbBaseCheckboxGroup.vue.d.ts +0 -19
  1141. package/dist/components/BbBaseCheckboxGroup/BbBaseCheckboxGroup.vue.js +0 -6
  1142. package/dist/components/BbBaseCheckboxGroup/BbBaseCheckboxGroup.vue_vue_type_script_setup_true_lang.js +0 -190
  1143. package/dist/components/BbBaseCheckboxGroup/types.d.ts +0 -257
  1144. package/dist/components/BbBaseColorInput/BbBaseColorInput.vue.d.ts +0 -43
  1145. package/dist/components/BbBaseColorInput/BbBaseColorInput.vue.js +0 -6
  1146. package/dist/components/BbBaseColorInput/BbBaseColorInput.vue_vue_type_script_setup_true_lang.js +0 -184
  1147. package/dist/components/BbBaseColorInput/types.d.ts +0 -219
  1148. package/dist/components/BbBaseColorPalette/BbBaseColorPalette.vue.d.ts +0 -13
  1149. package/dist/components/BbBaseColorPalette/BbBaseColorPalette.vue_vue_type_script_setup_true_lang.js +0 -395
  1150. package/dist/components/BbBaseColorPalette/types.d.ts +0 -40
  1151. package/dist/components/BbBaseDatePicker/BbBaseDatePicker.vue.d.ts +0 -20
  1152. package/dist/components/BbBaseDatePicker/BbBaseDatePicker.vue.js +0 -6
  1153. package/dist/components/BbBaseDatePicker/BbBaseDatePicker.vue_vue_type_script_setup_true_lang.js +0 -407
  1154. package/dist/components/BbBaseDatePicker/BbBaseDatePickerInputDaySelector.vue.d.ts +0 -47
  1155. package/dist/components/BbBaseDatePicker/BbBaseDatePickerInputDaySelector.vue.js +0 -5
  1156. package/dist/components/BbBaseDatePicker/BbBaseDatePickerInputDaySelector.vue_vue_type_script_setup_true_lang.js +0 -318
  1157. package/dist/components/BbBaseDatePicker/BbBaseDatePickerMonthSelector.vue.js +0 -5
  1158. package/dist/components/BbBaseDatePicker/BbBaseDatePickerMonthSelector.vue_vue_type_script_setup_true_lang.js +0 -115
  1159. package/dist/components/BbBaseDatePicker/BbBaseDatePickerYearSelector.vue.js +0 -5
  1160. package/dist/components/BbBaseDatePicker/BbBaseDatePickerYearSelector.vue_vue_type_script_setup_true_lang.js +0 -116
  1161. package/dist/components/BbBaseDatePicker/types.d.ts +0 -108
  1162. package/dist/components/BbBaseDatePicker/useDatePickerContext.js +0 -11
  1163. package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerInput.vue.d.ts +0 -31
  1164. package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerInput.vue.js +0 -6
  1165. package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerInput.vue_vue_type_script_setup_true_lang.js +0 -737
  1166. package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerTimeSelector.vue.d.ts +0 -30
  1167. package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerTimeSelector.vue.js +0 -6
  1168. package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerTimeSelector.vue_vue_type_script_setup_true_lang.js +0 -204
  1169. package/dist/components/BbBaseDatePickerInput/types.d.ts +0 -325
  1170. package/dist/components/BbBaseInputContainer/BbBaseInputContainer.vue.js +0 -6
  1171. package/dist/components/BbBaseInputContainer/BbBaseInputContainer.vue_vue_type_script_setup_true_lang.js +0 -190
  1172. package/dist/components/BbBaseNumberInput/BbBaseNumberInput.vue.d.ts +0 -52
  1173. package/dist/components/BbBaseNumberInput/BbBaseNumberInput.vue.js +0 -6
  1174. package/dist/components/BbBaseNumberInput/BbBaseNumberInput.vue_vue_type_script_setup_true_lang.js +0 -215
  1175. package/dist/components/BbBaseNumberInput/types.d.ts +0 -211
  1176. package/dist/components/BbBaseRadio/BbBaseRadio.vue.d.ts +0 -33
  1177. package/dist/components/BbBaseRadio/BbBaseRadio.vue_vue_type_script_setup_true_lang.js +0 -113
  1178. package/dist/components/BbBaseRadio/types.d.ts +0 -179
  1179. package/dist/components/BbBaseRadioGroup/BbBaseRadioGroup.vue.d.ts +0 -19
  1180. package/dist/components/BbBaseRadioGroup/BbBaseRadioGroup.vue_vue_type_script_setup_true_lang.js +0 -179
  1181. package/dist/components/BbBaseRadioGroup/types.d.ts +0 -223
  1182. package/dist/components/BbBaseRating/BbBaseRating.vue.d.ts +0 -38
  1183. package/dist/components/BbBaseRating/BbBaseRating.vue.js +0 -6
  1184. package/dist/components/BbBaseRating/BbBaseRating.vue_vue_type_script_setup_true_lang.js +0 -192
  1185. package/dist/components/BbBaseRating/types.d.ts +0 -176
  1186. package/dist/components/BbBaseSelect/BbBaseSelect.vue.d.ts +0 -19
  1187. package/dist/components/BbBaseSelect/BbBaseSelect.vue.js +0 -6
  1188. package/dist/components/BbBaseSelect/BbBaseSelect.vue_vue_type_script_setup_true_lang.js +0 -311
  1189. package/dist/components/BbBaseSelect/types.d.ts +0 -297
  1190. package/dist/components/BbBaseSlider/BbBaseSlider.vue.d.ts +0 -35
  1191. package/dist/components/BbBaseSlider/BbBaseSlider.vue.js +0 -6
  1192. package/dist/components/BbBaseSlider/BbBaseSlider.vue_vue_type_script_setup_true_lang.js +0 -340
  1193. package/dist/components/BbBaseSlider/types.d.ts +0 -200
  1194. package/dist/components/BbBaseSwitch/BbBaseSwitch.vue.d.ts +0 -35
  1195. package/dist/components/BbBaseSwitch/BbBaseSwitch.vue_vue_type_script_setup_true_lang.js +0 -146
  1196. package/dist/components/BbBaseSwitch/types.d.ts +0 -10
  1197. package/dist/components/BbBaseSwitchGroup/BbBaseSwitchGroup.vue.d.ts +0 -19
  1198. package/dist/components/BbBaseSwitchGroup/BbBaseSwitchGroup.vue.js +0 -6
  1199. package/dist/components/BbBaseSwitchGroup/BbBaseSwitchGroup.vue_vue_type_script_setup_true_lang.js +0 -190
  1200. package/dist/components/BbBaseSwitchGroup/types.d.ts +0 -8
  1201. package/dist/components/BbBaseTag/BbBaseTag.vue.d.ts +0 -50
  1202. package/dist/components/BbBaseTag/BbBaseTag.vue.js +0 -6
  1203. package/dist/components/BbBaseTag/BbBaseTag.vue_vue_type_script_setup_true_lang.js +0 -266
  1204. package/dist/components/BbBaseTag/types.d.ts +0 -160
  1205. package/dist/components/BbBaseTextInput/BbBaseTextInput.vue.d.ts +0 -45
  1206. package/dist/components/BbBaseTextInput/BbBaseTextInput.vue.js +0 -6
  1207. package/dist/components/BbBaseTextInput/BbBaseTextInput.vue_vue_type_script_setup_true_lang.js +0 -200
  1208. package/dist/components/BbBaseTextInput/types.d.ts +0 -209
  1209. package/dist/components/BbBaseTextarea/BbBaseTextarea.vue.d.ts +0 -39
  1210. package/dist/components/BbBaseTextarea/BbBaseTextarea.vue.js +0 -6
  1211. package/dist/components/BbBaseTextarea/BbBaseTextarea.vue_vue_type_script_setup_true_lang.js +0 -187
  1212. package/dist/components/BbBaseTextarea/types.d.ts +0 -170
  1213. package/dist/components/BbBaseTimePickerInput/BbBaseTimePickerInput.vue.d.ts +0 -27
  1214. package/dist/components/BbBaseTimePickerInput/BbBaseTimePickerInput.vue.js +0 -6
  1215. package/dist/components/BbBaseTimePickerInput/BbBaseTimePickerInput.vue_vue_type_script_setup_true_lang.js +0 -519
  1216. package/dist/components/BbBaseTimePickerInput/types.d.ts +0 -151
  1217. package/dist/components/BbTabs/BbTabsPanes.vue.d.ts +0 -16
  1218. package/dist/components/BbTabs/BbTabsPanes.vue_vue_type_script_setup_true_lang.js +0 -35
  1219. package/dist/components/CommonInputWrapper/CommonInputWrapper.vue.js +0 -6
  1220. package/dist/components/CommonInputWrapper/CommonInputWrapper.vue_vue_type_script_setup_true_lang.js +0 -107
  1221. package/dist/confirm-variants.d.ts +0 -17
  1222. package/dist/dropdown-item-variants.d.ts +0 -17
  1223. package/dist/i18n/index.js +0 -27
  1224. package/dist/indicator-variants.d.ts +0 -20
  1225. package/dist/locale-registry.d.ts +0 -37
  1226. package/dist/toast-variants.d.ts +0 -20
  1227. package/dist/tooltip-variants.d.ts +0 -17
  1228. package/dist/types/InputDirection.d.ts +0 -15
  1229. package/dist/validated/BbCheckbox.vue.d.ts +0 -29
  1230. package/dist/validated/BbCheckbox.vue.js +0 -5
  1231. package/dist/validated/BbCheckbox.vue_vue_type_script_setup_true_lang.js +0 -75
  1232. package/dist/validated/BbCheckboxGroup.vue.d.ts +0 -34
  1233. package/dist/validated/BbCheckboxGroup.vue.js +0 -5
  1234. package/dist/validated/BbCheckboxGroup.vue_vue_type_script_setup_true_lang.js +0 -82
  1235. package/dist/validated/BbColorInput.vue.d.ts +0 -37
  1236. package/dist/validated/BbColorInput.vue.js +0 -5
  1237. package/dist/validated/BbColorInput.vue_vue_type_script_setup_true_lang.js +0 -75
  1238. package/dist/validated/BbDatePickerInput.vue.d.ts +0 -41
  1239. package/dist/validated/BbDatePickerInput.vue.js +0 -5
  1240. package/dist/validated/BbDatePickerInput.vue_vue_type_script_setup_true_lang.js +0 -90
  1241. package/dist/validated/BbDropzone.vue.d.ts +0 -24
  1242. package/dist/validated/BbDropzone.vue.js +0 -5
  1243. package/dist/validated/BbDropzone.vue_vue_type_script_setup_true_lang.js +0 -45
  1244. package/dist/validated/BbForm.vue.d.ts +0 -28
  1245. package/dist/validated/BbForm.vue_vue_type_script_setup_true_lang.js +0 -42
  1246. package/dist/validated/BbNumberInput.vue.d.ts +0 -36
  1247. package/dist/validated/BbNumberInput.vue.js +0 -5
  1248. package/dist/validated/BbNumberInput.vue_vue_type_script_setup_true_lang.js +0 -72
  1249. package/dist/validated/BbRadioGroup.vue.d.ts +0 -34
  1250. package/dist/validated/BbRadioGroup.vue.js +0 -5
  1251. package/dist/validated/BbRadioGroup.vue_vue_type_script_setup_true_lang.js +0 -78
  1252. package/dist/validated/BbRating.vue.d.ts +0 -30
  1253. package/dist/validated/BbRating.vue.js +0 -5
  1254. package/dist/validated/BbRating.vue_vue_type_script_setup_true_lang.js +0 -63
  1255. package/dist/validated/BbSelect.vue.d.ts +0 -46
  1256. package/dist/validated/BbSelect.vue.js +0 -5
  1257. package/dist/validated/BbSelect.vue_vue_type_script_setup_true_lang.js +0 -109
  1258. package/dist/validated/BbSlider.vue.d.ts +0 -36
  1259. package/dist/validated/BbSlider.vue.js +0 -5
  1260. package/dist/validated/BbSlider.vue_vue_type_script_setup_true_lang.js +0 -69
  1261. package/dist/validated/BbSwitch.vue.d.ts +0 -29
  1262. package/dist/validated/BbSwitch.vue.js +0 -5
  1263. package/dist/validated/BbSwitch.vue_vue_type_script_setup_true_lang.js +0 -75
  1264. package/dist/validated/BbSwitchGroup.vue.d.ts +0 -34
  1265. package/dist/validated/BbSwitchGroup.vue.js +0 -5
  1266. package/dist/validated/BbSwitchGroup.vue_vue_type_script_setup_true_lang.js +0 -82
  1267. package/dist/validated/BbTag.vue.d.ts +0 -36
  1268. package/dist/validated/BbTag.vue.js +0 -5
  1269. package/dist/validated/BbTag.vue_vue_type_script_setup_true_lang.js +0 -72
  1270. package/dist/validated/BbTextInput.vue.d.ts +0 -36
  1271. package/dist/validated/BbTextInput.vue.js +0 -5
  1272. package/dist/validated/BbTextInput.vue_vue_type_script_setup_true_lang.js +0 -72
  1273. package/dist/validated/BbTextarea.vue.d.ts +0 -36
  1274. package/dist/validated/BbTextarea.vue.js +0 -5
  1275. package/dist/validated/BbTextarea.vue_vue_type_script_setup_true_lang.js +0 -70
  1276. package/dist/validated/BbTimePickerInput.vue.d.ts +0 -37
  1277. package/dist/validated/BbTimePickerInput.vue.js +0 -5
  1278. package/dist/validated/BbTimePickerInput.vue_vue_type_script_setup_true_lang.js +0 -81
  1279. package/dist/validated/index.d.ts +0 -43
  1280. package/dist/validated/useValidatedField.d.ts +0 -93
  1281. package/dist/validated/useValidatedField.js +0 -51
  1282. package/dist/validated.js +0 -21
  1283. /package/dist/components/{BbBaseDatePicker/BbBaseDatePickerMonthSelector.vue.d.ts → BbCalendar/CalendarMonthPanel.vue.d.ts} +0 -0
  1284. /package/dist/components/{BbBaseDatePicker/BbBaseDatePickerYearSelector.vue.d.ts → BbCalendar/CalendarYearPanel.vue.d.ts} +0 -0
  1285. /package/dist/{components/BbBaseDatePicker/typeahead.d.ts → composables/useTypeahead.d.ts} +0 -0
  1286. /package/dist/{components/BbBaseDatePicker/typeahead.js → composables/useTypeahead.js} +0 -0
@@ -0,0 +1,1303 @@
1
+ /**
2
+ * `bitboss-ui add <id…>` and `bitboss-ui helpers [list|diff|update]` (Q43.11):
3
+ * copy the Inertia helper folder into an app as files the app owns, and keep
4
+ * them current without ever destroying the app's own code.
5
+ *
6
+ * The rules (plans/reviews/q43-11-copy-in-2026-09-30/PLAN.md as amended by its
7
+ * owner rulings, and Q4-CANONICAL-HASH.md):
8
+ * - Only bytes bitboss-ui published may be replaced: a file is replaceable
9
+ * when its bytes, or its canonical code, match the package's published list.
10
+ * The lock never authorises a write.
11
+ * - A file the app edited is kept. It blocks only when bitboss-ui changed it
12
+ * too (`conflict`) or when it was never installed by us (`foreign`).
13
+ * - `add` only creates and adopts; a stale file sends the user to
14
+ * `helpers update`. Nothing is ever deleted, and there is no `--force`.
15
+ * - It never spawns a process, never loads the app's code or config, never
16
+ * writes outside the helper folder except `bitboss-ui.lock.json`, and
17
+ * refuses to run as a bitboss-ui other than the one the app installed.
18
+ *
19
+ * Exit codes: 0 done / nothing to do; 1 usage error, or `helpers diff` found
20
+ * a difference to act on; 2 refused (`add` wrote nothing; `update` wrote only
21
+ * the other groups); 3 a precondition failed, nothing written; 4 a write failed
22
+ * and was rolled back.
23
+ */
24
+ import { createHash, randomBytes } from 'node:crypto';
25
+ import {
26
+ chmodSync,
27
+ closeSync,
28
+ existsSync,
29
+ lstatSync,
30
+ mkdirSync,
31
+ openSync,
32
+ readdirSync,
33
+ readFileSync,
34
+ realpathSync,
35
+ renameSync,
36
+ rmdirSync,
37
+ unlinkSync,
38
+ writeSync,
39
+ } from 'node:fs';
40
+ import { dirname, join, sep } from 'node:path';
41
+ import {
42
+ canonDialect,
43
+ canonicalHash,
44
+ CANON_VERSION,
45
+ commentList,
46
+ lfHash,
47
+ } from './helper-canon.mjs';
48
+ import { detectPackageManager } from './mcp-config.mjs';
49
+
50
+ export const LOCK_FILE = 'bitboss-ui.lock.json';
51
+ const LOCK_VERSION = 1;
52
+ const LOCK_MAX_BYTES = 1024 * 1024;
53
+ const HELPERS_DIST = 'dist/ai/helpers/inertia';
54
+ const FILE_NAME = /^[A-Za-z][A-Za-z0-9]*\.ts$/;
55
+ const HELPER_ID = /^use[A-Za-z0-9]+$/;
56
+ const SEGMENT = /^[A-Za-z0-9][A-Za-z0-9._-]*$/;
57
+ const DEVICE = /^(con|prn|aux|nul|com[1-9]|lpt[1-9])(\..*)?$/i;
58
+ const CLI = 'npx bitboss-ui';
59
+
60
+ /** A refusal or failure with its exit code; `message` is complete for a human. */
61
+ export class HelperError extends Error {
62
+ constructor(code, message, next = null) {
63
+ super(message);
64
+ this.code = code;
65
+ this.next = next;
66
+ }
67
+ }
68
+
69
+ const fail = (code, message, next) => {
70
+ throw new HelperError(code, message, next);
71
+ };
72
+
73
+ const sha256 = (text) => createHash('sha256').update(text).digest('hex');
74
+
75
+ // ---- context -------------------------------------------------------------
76
+
77
+ /** Read the app's package.json, the installed manifest and the lock; refuse every precondition. */
78
+ export function loadContext({ cwd, packageRoot, command }) {
79
+ let root;
80
+ try {
81
+ root = realpathSync(cwd);
82
+ } catch {
83
+ fail(3, `cannot read the current directory ${cwd}`);
84
+ }
85
+ const pkgPath = join(root, 'package.json');
86
+ if (!existsSync(pkgPath))
87
+ fail(
88
+ 3,
89
+ 'no package.json here. Run it from the app root (the folder with package.json).'
90
+ );
91
+ let app;
92
+ try {
93
+ app = JSON.parse(readFileSync(pkgPath, 'utf-8'));
94
+ } catch (error) {
95
+ fail(3, `package.json does not parse: ${error.message}`);
96
+ }
97
+ const declared = new Set(
98
+ [
99
+ 'dependencies',
100
+ 'devDependencies',
101
+ 'peerDependencies',
102
+ 'optionalDependencies',
103
+ ].flatMap((key) => Object.keys(app?.[key] ?? {}))
104
+ );
105
+ const pm = detectPackageManager(root);
106
+ const localCommand = {
107
+ npm: 'npm exec -- bitboss-ui',
108
+ pnpm: 'pnpm exec bitboss-ui',
109
+ yarn: 'yarn bitboss-ui',
110
+ bun: 'bunx --no-install bitboss-ui',
111
+ }[pm];
112
+ if (!declared.has('bitboss-ui'))
113
+ fail(
114
+ 3,
115
+ "this package.json does not declare bitboss-ui. Run it in the app that depends on bitboss-ui (in a monorepo: that package's folder, not the root)."
116
+ );
117
+
118
+ // Version guard: this CLI must BE the app's installed bitboss-ui. A bare
119
+ // `npx` elsewhere runs whatever npm resolves (v2 is still `latest`).
120
+ const self = realpathSync(packageRoot);
121
+ const installed = findInstalled(root);
122
+ const ownVersion = readVersion(self);
123
+ if (!installed || realpathSync(installed) !== self)
124
+ fail(
125
+ 3,
126
+ installed
127
+ ? `this is bitboss-ui ${ownVersion} running from ${self}, but the app uses ${readVersion(realpathSync(installed))} at ${realpathSync(installed)}. Run the app's own copy: \`${localCommand} ${command}\`.`
128
+ : `the app has no node_modules/bitboss-ui (install its dependencies first), and this is bitboss-ui ${ownVersion} from ${self}. Then run \`${localCommand} ${command}\`.`
129
+ );
130
+ if (!declared.has('@inertiajs/vue3'))
131
+ fail(
132
+ 3,
133
+ 'this app does not declare @inertiajs/vue3. The helpers are for Inertia (Vue 3) apps.'
134
+ );
135
+ if (!existsSync(join(root, 'tsconfig.json')))
136
+ fail(
137
+ 3,
138
+ 'no tsconfig.json here. The helpers are TypeScript files; JavaScript apps are not supported.'
139
+ );
140
+
141
+ const manifest = loadManifest(self);
142
+ const lock = readLock(root);
143
+ return {
144
+ root,
145
+ self,
146
+ version: ownVersion,
147
+ manifest,
148
+ lock,
149
+ declared,
150
+ pm,
151
+ localCommand,
152
+ };
153
+ }
154
+
155
+ /** The first `node_modules/bitboss-ui` walking up from `root` (directory walk-up, like Node's resolution). */
156
+ function findInstalled(root) {
157
+ let dir = root;
158
+ for (;;) {
159
+ const candidate = join(dir, 'node_modules', 'bitboss-ui');
160
+ if (existsSync(candidate)) return candidate;
161
+ const parent = dirname(dir);
162
+ if (parent === dir) return null;
163
+ dir = parent;
164
+ }
165
+ }
166
+
167
+ function readVersion(dir) {
168
+ try {
169
+ return JSON.parse(readFileSync(join(dir, 'package.json'), 'utf-8')).version;
170
+ } catch {
171
+ return 'unknown';
172
+ }
173
+ }
174
+
175
+ /** The shipped manifest, with every file's bytes read and checked against its hash. */
176
+ export function loadManifest(self) {
177
+ const base = join(self, HELPERS_DIST);
178
+ let manifest;
179
+ try {
180
+ manifest = JSON.parse(readFileSync(join(base, 'manifest.json'), 'utf-8'));
181
+ } catch {
182
+ fail(
183
+ 3,
184
+ `this bitboss-ui ships no helper manifest (${HELPERS_DIST}/manifest.json). Upgrade bitboss-ui.`
185
+ );
186
+ }
187
+ const realBase = realpathSync(base);
188
+ const bytes = new Map();
189
+ for (const name of Object.keys(manifest.files ?? {})) {
190
+ if (!FILE_NAME.test(name))
191
+ fail(
192
+ 3,
193
+ `the package manifest names an invalid file "${name}" (packaging bug).`
194
+ );
195
+ const path = join(base, name);
196
+ let text;
197
+ try {
198
+ if (!realpathSync(path).startsWith(realBase + sep))
199
+ fail(
200
+ 3,
201
+ `${HELPERS_DIST}/${name} resolves outside the package (packaging bug).`
202
+ );
203
+ text = readFileSync(path, 'utf-8');
204
+ } catch (error) {
205
+ if (error instanceof HelperError) throw error;
206
+ fail(
207
+ 3,
208
+ `${HELPERS_DIST}/${name} is missing from the package (packaging bug or a partial install).`
209
+ );
210
+ }
211
+ if (sha256(text) !== manifest.files[name].sha256)
212
+ fail(
213
+ 3,
214
+ `${HELPERS_DIST}/${name} does not match its manifest hash (packaging bug or a partial install). Reinstall bitboss-ui.`
215
+ );
216
+ bytes.set(name, text);
217
+ }
218
+ return { ...manifest, bytes };
219
+ }
220
+
221
+ /** The parsed lock, or null when there is none. Never "treated as empty" when broken. */
222
+ export function readLock(root) {
223
+ const path = join(root, LOCK_FILE);
224
+ let stats;
225
+ try {
226
+ stats = lstatSync(path);
227
+ } catch {
228
+ return null;
229
+ }
230
+ if (!stats.isFile())
231
+ fail(3, `${LOCK_FILE} is not a regular file (a link or a folder).`);
232
+ if (stats.size > LOCK_MAX_BYTES) fail(3, `${LOCK_FILE} is over 1 MB.`);
233
+ const text = readFileSync(path, 'utf-8');
234
+ let data;
235
+ try {
236
+ data = JSON.parse(text);
237
+ } catch (error) {
238
+ fail(
239
+ 3,
240
+ `${LOCK_FILE} does not parse (${error.message}). Fix it, or delete the broken lines: files that still match a bitboss-ui version are re-adopted on the next run, edited ones are reported, nothing is lost.`
241
+ );
242
+ }
243
+ if (!data || typeof data !== 'object' || Array.isArray(data))
244
+ fail(3, `${LOCK_FILE} is not a JSON object.`);
245
+ if (typeof data.lockVersion === 'number' && data.lockVersion > LOCK_VERSION)
246
+ fail(
247
+ 3,
248
+ `${LOCK_FILE} is lockVersion ${data.lockVersion}, newer than this bitboss-ui reads. Upgrade bitboss-ui.`
249
+ );
250
+ const helpers = Object.hasOwn(data, 'helpers') ? data.helpers : null;
251
+ const files = {};
252
+ if (helpers?.files && typeof helpers.files === 'object')
253
+ for (const [name, entry] of Object.entries(helpers.files))
254
+ if (FILE_NAME.test(name) && typeof entry?.sha256 === 'string')
255
+ files[name] = {
256
+ sha256: entry.sha256,
257
+ version: String(entry.version ?? ''),
258
+ };
259
+ return {
260
+ text,
261
+ data,
262
+ dir: typeof helpers?.dir === 'string' ? helpers.dir : null,
263
+ ids: Array.isArray(helpers?.ids)
264
+ ? helpers.ids.filter((id) => typeof id === 'string' && HELPER_ID.test(id))
265
+ : [],
266
+ files,
267
+ };
268
+ }
269
+
270
+ // ---- the destination folder ----------------------------------------------
271
+
272
+ /** One validator for `--dir` and the lock's `dir`, every run. */
273
+ export function validateDir(value, { fromArgv }) {
274
+ if (typeof value !== 'string' || !value)
275
+ fail(3, 'the helper folder is empty.');
276
+ let dir = value;
277
+ if (fromArgv && process.platform === 'win32') dir = dir.replaceAll('\\', '/');
278
+ dir = dir.replace(/\/+$/, '');
279
+ const where = fromArgv ? '--dir' : `the "dir" in ${LOCK_FILE}`;
280
+ if (dir.startsWith('/') || /^[A-Za-z]:/.test(dir))
281
+ fail(3, `${where} "${value}" must be a path relative to the app root.`);
282
+ const segments = dir.split('/');
283
+ if (segments.length > 12) fail(3, `${where} "${value}" is too deep.`);
284
+ for (const segment of segments)
285
+ if (!SEGMENT.test(segment) || segment.endsWith('.') || DEVICE.test(segment))
286
+ fail(
287
+ 3,
288
+ `${where} "${value}": "${segment}" is not allowed (letters, digits, ".", "_" and "-", no "..", no leading dot).`
289
+ );
290
+ if (['node_modules', '.git', 'vendor'].includes(segments[0]))
291
+ fail(3, `${where} "${value}" is inside ${segments[0]}/.`);
292
+ return dir;
293
+ }
294
+
295
+ /** First run: the folder from `--dir`, or the app's layout. */
296
+ export function detectDir(root, declared) {
297
+ const isDir = (p) => {
298
+ try {
299
+ const s = lstatSync(join(root, p));
300
+ return s.isDirectory() && !s.isSymbolicLink();
301
+ } catch {
302
+ return false;
303
+ }
304
+ };
305
+ if (
306
+ isDir('resources/js') &&
307
+ (existsSync(join(root, 'artisan')) || declared.has('laravel-vite-plugin'))
308
+ )
309
+ return {
310
+ dir: 'resources/js/composables/inertia-helpers',
311
+ why: 'Laravel layout: resources/js',
312
+ };
313
+ if (isDir('src'))
314
+ return { dir: 'src/composables/inertia-helpers', why: 'src/ layout' };
315
+ fail(
316
+ 3,
317
+ 'cannot tell where the helpers go (no resources/js in a Laravel app, no src/). Pass --dir <path>, e.g. --dir resources/js/composables/inertia-helpers.'
318
+ );
319
+ }
320
+
321
+ /**
322
+ * Every existing segment of `dir` under `root` must be a real directory (no
323
+ * link, no junction) spelled with exactly this case. Returns the segments
324
+ * that do not exist yet.
325
+ */
326
+ export function checkDirPath(root, dir) {
327
+ const segments = dir.split('/');
328
+ let current = root;
329
+ for (let i = 0; i < segments.length; i++) {
330
+ const segment = segments[i];
331
+ let names;
332
+ try {
333
+ names = readdirSync(current);
334
+ } catch {
335
+ return segments.slice(i);
336
+ }
337
+ if (!names.includes(segment)) {
338
+ const other = names.find(
339
+ (n) => n.toLowerCase() === segment.toLowerCase()
340
+ );
341
+ if (other)
342
+ fail(
343
+ 3,
344
+ `${segments.slice(0, i).concat(other).join('/')} exists with a different case than ${segments.slice(0, i + 1).join('/')}. On a case-sensitive disk (Linux CI) that would be a second folder. Use the existing spelling.`
345
+ );
346
+ return segments.slice(i);
347
+ }
348
+ const next = join(current, segment);
349
+ const stats = lstatSync(next);
350
+ if (stats.isSymbolicLink() || !stats.isDirectory())
351
+ fail(
352
+ 3,
353
+ `${segments.slice(0, i + 1).join('/')} is ${stats.isSymbolicLink() ? 'a link' : 'not a folder'}; bitboss-ui only writes into real folders.`
354
+ );
355
+ current = next;
356
+ }
357
+ return [];
358
+ }
359
+
360
+ // ---- canonical comparison --------------------------------------------------
361
+
362
+ /** Vue's Babel and the hashes it can compare against, or why not. */
363
+ export async function loadCanon(manifest) {
364
+ let babelParse;
365
+ try {
366
+ ({ babelParse } = await import('vue/compiler-sfc'));
367
+ } catch {
368
+ return { available: false, reason: 'vue/compiler-sfc could not be loaded' };
369
+ }
370
+ if (typeof babelParse !== 'function')
371
+ return { available: false, reason: 'vue/compiler-sfc has no babelParse' };
372
+ const dialect = canonDialect(babelParse);
373
+ if (!dialect)
374
+ return {
375
+ available: false,
376
+ reason: "Vue's Babel builds an unknown AST shape",
377
+ };
378
+ if (manifest.canon !== CANON_VERSION)
379
+ return {
380
+ available: false,
381
+ reason: `the manifest is ${manifest.canon}, this CLI reads ${CANON_VERSION}`,
382
+ };
383
+ const anyFile = Object.values(manifest.files ?? {})[0];
384
+ if (!anyFile?.published?.[dialect])
385
+ return {
386
+ available: false,
387
+ reason: `the package publishes no ${dialect} hashes`,
388
+ };
389
+ return { available: true, dialect, babelParse };
390
+ }
391
+
392
+ // ---- classification -------------------------------------------------------
393
+
394
+ /**
395
+ * The state of one helper file in the app:
396
+ * new | deleted | current | adopt | record | stale | edited | conflict | foreign
397
+ * (`reformatted` / `commentsDiffer` refine identical and stale files).
398
+ */
399
+ export function classify({ root, dir, name, manifest, lock, canon }) {
400
+ const pkg = manifest.bytes.get(name);
401
+ const entry = lock?.files?.[name] ?? null;
402
+ const path = join(root, dir, name);
403
+ let stats;
404
+ try {
405
+ stats = lstatSync(path);
406
+ } catch {
407
+ return { name, state: entry ? 'deleted' : 'new', disk: null };
408
+ }
409
+ if (!stats.isFile())
410
+ fail(
411
+ 3,
412
+ `${dir}/${name} is ${stats.isSymbolicLink() ? 'a link' : 'not a regular file'}; bitboss-ui does not write through it.`
413
+ );
414
+ const disk = readFileSync(path, 'utf-8');
415
+ const pkgHash = lfHash(pkg);
416
+ const diskHash = lfHash(disk);
417
+ const result = { name, disk, mode: stats.mode };
418
+ const identical = (extra) => {
419
+ const state = !entry
420
+ ? 'adopt'
421
+ : entry.sha256 === pkgHash
422
+ ? 'current'
423
+ : 'record';
424
+ return { ...result, state, ...extra };
425
+ };
426
+ if (disk === pkg || diskHash === pkgHash) return identical({});
427
+ const hashOf = (text) =>
428
+ canon.available ? canonicalHash(text, canon.babelParse) : null;
429
+ const diskCanon = hashOf(disk);
430
+ const differ = () => {
431
+ const a = canon.available ? commentList(disk, canon.babelParse) : null;
432
+ const b = canon.available ? commentList(pkg, canon.babelParse) : null;
433
+ return Boolean(a && b && a.join('\n\0') !== b.join('\n\0'));
434
+ };
435
+ if (diskCanon && diskCanon === hashOf(pkg))
436
+ return identical({ reformatted: true, commentsDiffer: differ() });
437
+ const published = manifest.files[name]?.published ?? {};
438
+ if (
439
+ (published.bytes ?? []).includes(diskHash) ||
440
+ (diskCanon && (published[canon.dialect] ?? []).includes(diskCanon))
441
+ )
442
+ return { ...result, state: 'stale', commentsDiffer: differ() };
443
+ if (!entry) return { ...result, state: 'foreign' };
444
+ return { ...result, state: entry.sha256 === pkgHash ? 'edited' : 'conflict' };
445
+ }
446
+
447
+ // ---- scope ----------------------------------------------------------------
448
+
449
+ function closureOf(manifest, id) {
450
+ return manifest.helpers[id].closure;
451
+ }
452
+
453
+ function checkIds(manifest, ids) {
454
+ for (const id of ids) {
455
+ if (!HELPER_ID.test(id) || !Object.hasOwn(manifest.helpers, id)) {
456
+ const known = Object.keys(manifest.helpers).sort();
457
+ fail(
458
+ 3,
459
+ `"${id}" is not a helper. Known: ${known.join(', ')}.`,
460
+ `${CLI} helpers list`
461
+ );
462
+ }
463
+ }
464
+ }
465
+
466
+ /** Installed helpers grouped by shared files: an update never splits a group. */
467
+ export function connectedGroups(manifest, ids) {
468
+ const groups = [];
469
+ for (const id of ids) {
470
+ const files = new Set(closureOf(manifest, id));
471
+ const merged = { ids: new Set([id]), files };
472
+ for (const group of [...groups]) {
473
+ if ([...group.files].some((f) => files.has(f))) {
474
+ group.ids.forEach((g) => merged.ids.add(g));
475
+ group.files.forEach((f) => merged.files.add(f));
476
+ groups.splice(groups.indexOf(group), 1);
477
+ }
478
+ }
479
+ groups.push(merged);
480
+ }
481
+ return groups.map((g) => ({
482
+ ids: [...g.ids].sort(),
483
+ files: [...g.files].sort(),
484
+ }));
485
+ }
486
+
487
+ /** Dependencies first, so a crash never leaves a new file next to an old dependency. */
488
+ function writeOrder(manifest, names) {
489
+ const order = [];
490
+ const seen = new Set();
491
+ const visit = (name) => {
492
+ if (seen.has(name)) return;
493
+ seen.add(name);
494
+ for (const dep of manifest.files[name]?.local ?? [])
495
+ if (names.has(dep)) visit(dep);
496
+ order.push(name);
497
+ };
498
+ [...names].sort().forEach(visit);
499
+ return order;
500
+ }
501
+
502
+ // ---- the write protocol ---------------------------------------------------
503
+
504
+ const RETRY = new Set(['EPERM', 'EBUSY', 'EACCES']);
505
+
506
+ function renameWithRetry(from, to) {
507
+ const deadline = Date.now() + (process.platform === 'win32' ? 3000 : 0);
508
+ for (;;) {
509
+ try {
510
+ renameSync(from, to);
511
+ return;
512
+ } catch (error) {
513
+ if (!RETRY.has(error?.code) || Date.now() >= deadline) throw error;
514
+ const until = Date.now() + 50;
515
+ while (Date.now() < until) {
516
+ // busy-wait: a rename blocked by an antivirus scan clears in milliseconds
517
+ }
518
+ }
519
+ }
520
+ }
521
+
522
+ function writeTemp(dirPath, name, text, mode) {
523
+ const temp = join(
524
+ dirPath,
525
+ `.${name}.${process.pid}.${randomBytes(4).toString('hex')}.tmp`
526
+ );
527
+ const fd = openSync(temp, 'wx', 0o644);
528
+ try {
529
+ writeSync(fd, text);
530
+ } finally {
531
+ closeSync(fd);
532
+ }
533
+ if (mode !== undefined) chmodSync(temp, mode & 0o7777);
534
+ return temp;
535
+ }
536
+
537
+ function serialiseLock(lock) {
538
+ const files = Object.fromEntries(
539
+ Object.entries(lock.helpers.files).sort(([a], [b]) => a.localeCompare(b))
540
+ );
541
+ return `${JSON.stringify(
542
+ {
543
+ lockVersion: LOCK_VERSION,
544
+ helpers: {
545
+ dir: lock.helpers.dir,
546
+ ids: [...lock.helpers.ids].sort(),
547
+ files,
548
+ },
549
+ },
550
+ null,
551
+ 2
552
+ )}\n`;
553
+ }
554
+
555
+ /**
556
+ * Apply `writes` (`[{ name, text, kind: 'create'|'replace', observed, mode }]`)
557
+ * and then the lock, all or nothing: temp files first, every target re-checked
558
+ * right before its rename, renames in dependency order, rollback on any failure.
559
+ */
560
+ export function applyWrites({
561
+ root,
562
+ dir,
563
+ writes,
564
+ lockText,
565
+ previousLockText,
566
+ manifest,
567
+ testHooks = {},
568
+ }) {
569
+ const dirPath = join(root, dir);
570
+ const createdDirs = [];
571
+ const temps = [];
572
+ const done = [];
573
+ try {
574
+ // Create the missing folders (checked segment by segment already).
575
+ let current = root;
576
+ for (const segment of dir.split('/')) {
577
+ current = join(current, segment);
578
+ if (!existsSync(current)) {
579
+ mkdirSync(current);
580
+ createdDirs.push(current);
581
+ }
582
+ }
583
+ const byName = new Map(writes.map((w) => [w.name, w]));
584
+ for (const name of writeOrder(manifest, new Set(byName.keys()))) {
585
+ const w = byName.get(name);
586
+ temps.push({ w, temp: writeTemp(dirPath, name, w.text, w.mode) });
587
+ }
588
+ for (const { w, temp } of temps) {
589
+ checkDirPath(root, dir);
590
+ const target = join(dirPath, w.name);
591
+ let now = null;
592
+ try {
593
+ const stats = lstatSync(target);
594
+ if (!stats.isFile())
595
+ throw new HelperError(
596
+ 4,
597
+ `${dir}/${w.name} changed into a link or folder during the run`
598
+ );
599
+ now = readFileSync(target, 'utf-8');
600
+ } catch (error) {
601
+ if (error instanceof HelperError) throw error;
602
+ }
603
+ if (
604
+ (w.kind === 'create' && now !== null) ||
605
+ (w.kind === 'replace' && now !== w.observed)
606
+ )
607
+ throw new HelperError(
608
+ 4,
609
+ `${dir}/${w.name} changed while bitboss-ui was running (an editor or a formatter?). Nothing was kept; run the command again.`
610
+ );
611
+ testHooks.beforeRename?.(w.name);
612
+ renameWithRetry(temp, target);
613
+ temps.splice(
614
+ temps.findIndex((t) => t.temp === temp),
615
+ 1,
616
+ { w, temp: null }
617
+ );
618
+ done.push(w);
619
+ }
620
+ if (lockText !== null) {
621
+ const lockPath = join(root, LOCK_FILE);
622
+ testHooks.beforeLock?.();
623
+ let onDisk = null;
624
+ try {
625
+ onDisk = readFileSync(lockPath, 'utf-8');
626
+ } catch {
627
+ // absent
628
+ }
629
+ if (onDisk !== previousLockText)
630
+ throw new HelperError(
631
+ 4,
632
+ `${LOCK_FILE} changed while bitboss-ui was running (another run at the same time?). Nothing was kept; run the command again.`
633
+ );
634
+ const temp = writeTemp(root, LOCK_FILE, lockText);
635
+ temps.push({ w: null, temp });
636
+ renameWithRetry(temp, lockPath);
637
+ }
638
+ } catch (error) {
639
+ for (const { temp } of temps)
640
+ if (temp)
641
+ try {
642
+ unlinkSync(temp);
643
+ } catch {
644
+ // already gone
645
+ }
646
+ for (const w of done.reverse()) {
647
+ const target = join(dirPath, w.name);
648
+ try {
649
+ if (w.kind === 'create') unlinkSync(target);
650
+ else
651
+ renameWithRetry(
652
+ writeTemp(dirPath, w.name, w.observed, w.mode),
653
+ target
654
+ );
655
+ } catch {
656
+ // best effort: an untouched original is re-adopted by the next run
657
+ }
658
+ }
659
+ for (const created of createdDirs.reverse())
660
+ try {
661
+ rmdirSync(created);
662
+ } catch {
663
+ // not empty: something else lives there now
664
+ }
665
+ if (error instanceof HelperError) throw error;
666
+ throw new HelperError(
667
+ 4,
668
+ `a write failed (${error.code ?? error.message}); everything was rolled back.`
669
+ );
670
+ }
671
+ }
672
+
673
+ // ---- diff -----------------------------------------------------------------
674
+
675
+ /** A unified diff of two texts (small files: an LCS table is fine). */
676
+ export function unifiedDiff(a, b, labelA, labelB, context = 3) {
677
+ const x = a.replace(/\r\n/g, '\n').split('\n');
678
+ const y = b.replace(/\r\n/g, '\n').split('\n');
679
+ if (x.length * y.length > 4_000_000)
680
+ return `--- ${labelA}\n+++ ${labelB}\n(files too large to diff)\n`;
681
+ const lcs = Array.from(
682
+ { length: x.length + 1 },
683
+ () => new Uint32Array(y.length + 1)
684
+ );
685
+ for (let i = x.length - 1; i >= 0; i--)
686
+ for (let j = y.length - 1; j >= 0; j--)
687
+ lcs[i][j] =
688
+ x[i] === y[j]
689
+ ? lcs[i + 1][j + 1] + 1
690
+ : Math.max(lcs[i + 1][j], lcs[i][j + 1]);
691
+ const ops = [];
692
+ let i = 0;
693
+ let j = 0;
694
+ while (i < x.length || j < y.length) {
695
+ if (i < x.length && j < y.length && x[i] === y[j])
696
+ ops.push([' ', x[i++], j++]);
697
+ else if (j < y.length && (i >= x.length || lcs[i][j + 1] >= lcs[i + 1][j]))
698
+ ops.push(['+', y[j++]]);
699
+ else ops.push(['-', x[i++]]);
700
+ }
701
+ const out = [`--- ${labelA}`, `+++ ${labelB}`];
702
+ let k = 0;
703
+ while (k < ops.length) {
704
+ if (ops[k][0] === ' ') {
705
+ k++;
706
+ continue;
707
+ }
708
+ const start = Math.max(0, k - context);
709
+ let end = k;
710
+ while (end < ops.length) {
711
+ if (ops[end][0] !== ' ') {
712
+ end++;
713
+ continue;
714
+ }
715
+ let run = end;
716
+ while (run < ops.length && ops[run][0] === ' ') run++;
717
+ if (run - end > context * 2 || run === ops.length) {
718
+ end = Math.min(run, end + context);
719
+ break;
720
+ }
721
+ end = run;
722
+ }
723
+ out.push('@@');
724
+ for (const [op, line] of ops.slice(start, end)) out.push(`${op}${line}`);
725
+ k = end;
726
+ }
727
+ return `${out.join('\n')}\n`;
728
+ }
729
+
730
+ /** Terminal-safe: control characters and bidi overrides become visible escapes. */
731
+ export function escapeForTerminal(text) {
732
+ return text.replace(
733
+ // eslint-disable-next-line no-control-regex -- matching control characters is the point
734
+ /[\u0000-\u0008\u000b-\u001f\u007f-\u009f\u200e\u200f\u202a-\u202e\u2066-\u2069]/g,
735
+ (c) => `\\u{${c.codePointAt(0).toString(16)}}`
736
+ );
737
+ }
738
+
739
+ // ---- the commands -----------------------------------------------------------
740
+
741
+ function missingPackages(ctx, names) {
742
+ const runtime = new Set();
743
+ const types = new Set();
744
+ for (const name of names) {
745
+ (ctx.manifest.files[name]?.packages ?? []).forEach((p) => runtime.add(p));
746
+ (ctx.manifest.files[name]?.typePackages ?? []).forEach((p) => types.add(p));
747
+ }
748
+ runtime.forEach((p) => types.delete(p));
749
+ const missing = (set) => [...set].filter((p) => !ctx.declared.has(p)).sort();
750
+ const run = missing(runtime);
751
+ const dev = missing(types);
752
+ const verb = { npm: 'i', pnpm: 'add', yarn: 'add', bun: 'add' }[ctx.pm];
753
+ const install = [
754
+ ...(run.length ? [`${ctx.pm} ${verb} ${run.join(' ')}`] : []),
755
+ ...(dev.length ? [`${ctx.pm} ${verb} -D ${dev.join(' ')}`] : []),
756
+ ];
757
+ return { missing: [...run, ...dev], install };
758
+ }
759
+
760
+ const STATE_WORD = {
761
+ new: 'create',
762
+ deleted: 'create',
763
+ current: 'identical',
764
+ adopt: 'adopt',
765
+ record: 'record',
766
+ stale: 'stale',
767
+ edited: 'keep',
768
+ conflict: 'conflict',
769
+ foreign: 'foreign',
770
+ };
771
+
772
+ function note(file) {
773
+ const parts = [];
774
+ if (file.state === 'edited') parts.push('your edit is kept');
775
+ if (file.state === 'conflict')
776
+ parts.push('you edited it, and bitboss-ui changed it since your copy');
777
+ if (file.state === 'foreign')
778
+ parts.push('a file bitboss-ui did not install, with other content');
779
+ if (file.state === 'stale') parts.push('an older bitboss-ui version');
780
+ if (file.reformatted) parts.push('reformatted');
781
+ if (file.commentsDiffer)
782
+ parts.push(
783
+ file.state === 'stale'
784
+ ? 'your comments differ and would be replaced'
785
+ : 'your comments differ'
786
+ );
787
+ return parts.length ? ` (${parts.join('; ')})` : '';
788
+ }
789
+
790
+ /** Run one command. Returns `{ code, report, lines }`; never prints, never exits. */
791
+ export async function runHelpers({
792
+ command,
793
+ ids = [],
794
+ options = {},
795
+ cwd,
796
+ packageRoot,
797
+ testHooks,
798
+ }) {
799
+ const label = command === 'add' ? 'add' : `helpers ${command}`;
800
+ try {
801
+ const ctx = loadContext({ cwd, packageRoot, command: label });
802
+ const canon = await loadCanon(ctx.manifest);
803
+ if (command === 'list') return list(ctx, canon);
804
+ if (command === 'add') return add(ctx, canon, ids, options, testHooks);
805
+ if (command === 'diff') return diff(ctx, canon, ids);
806
+ if (command === 'update')
807
+ return update(ctx, canon, ids, options, testHooks);
808
+ fail(1, `unknown helpers command "${command}" (list, diff, update).`);
809
+ } catch (error) {
810
+ if (!(error instanceof HelperError)) throw error;
811
+ return {
812
+ code: error.code,
813
+ report: {
814
+ ok: false,
815
+ command: label,
816
+ error: error.message,
817
+ next: error.next,
818
+ },
819
+ lines: [
820
+ `[bitboss-ui] ${label}: ${error.message}`,
821
+ ...(error.next ? [` next: ${error.next}`] : []),
822
+ ],
823
+ stderr: true,
824
+ };
825
+ }
826
+ }
827
+
828
+ function resolveDir(ctx, options, { required }) {
829
+ const fromLock = ctx.lock?.dir
830
+ ? validateDir(ctx.lock.dir, { fromArgv: false })
831
+ : null;
832
+ if (options.dir !== undefined) {
833
+ const asked = validateDir(options.dir, { fromArgv: true });
834
+ if (fromLock && asked !== fromLock)
835
+ fail(
836
+ 3,
837
+ `--dir ${asked} differs from the folder in ${LOCK_FILE} (${fromLock}). To move the helpers, move the folder and edit "dir" in the lock.`
838
+ );
839
+ return { dir: asked, why: fromLock ? 'from the lock' : 'from --dir' };
840
+ }
841
+ if (fromLock) return { dir: fromLock, why: 'from the lock' };
842
+ if (!required) return null;
843
+ return detectDir(ctx.root, ctx.declared);
844
+ }
845
+
846
+ function header(ctx, label, dir, dryRun, canon) {
847
+ return [
848
+ `[bitboss-ui] ${label} · bitboss-ui ${ctx.version}${dryRun ? ' · DRY RUN, nothing written' : ''}`,
849
+ ...(dir ? [` dir ${dir.dir} (${dir.why})`] : []),
850
+ ...(canon.available
851
+ ? []
852
+ : [
853
+ ` note formatter-proof check unavailable: ${canon.reason}; reformatted helpers read as edited`,
854
+ ]),
855
+ ];
856
+ }
857
+
858
+ function fileLine(file) {
859
+ return ` ${STATE_WORD[file.state].padEnd(10)} ${file.name}${note(file)}`;
860
+ }
861
+
862
+ function newLock(ctx, dir, ids, files) {
863
+ const lock = {
864
+ helpers: {
865
+ dir,
866
+ ids: new Set(ctx.lock?.ids ?? []),
867
+ files: { ...(ctx.lock?.files ?? {}) },
868
+ },
869
+ };
870
+ ids.forEach((id) => lock.helpers.ids.add(id));
871
+ for (const file of files)
872
+ if (['new', 'deleted', 'adopt', 'record', 'stale'].includes(file.state))
873
+ lock.helpers.files[file.name] = {
874
+ sha256: lfHash(ctx.manifest.bytes.get(file.name)),
875
+ version: ctx.version,
876
+ };
877
+ const text = serialiseLock(lock);
878
+ const before = ctx.lock
879
+ ? serialiseLock({
880
+ helpers: {
881
+ dir: ctx.lock.dir,
882
+ ids: new Set(ctx.lock.ids),
883
+ files: ctx.lock.files,
884
+ },
885
+ })
886
+ : null;
887
+ return text === before ? null : text;
888
+ }
889
+
890
+ function writesFor(ctx, files) {
891
+ return files
892
+ .filter((f) => ['new', 'deleted', 'stale'].includes(f.state))
893
+ .map((f) => ({
894
+ name: f.name,
895
+ text: ctx.manifest.bytes.get(f.name),
896
+ kind: f.disk === null ? 'create' : 'replace',
897
+ observed: f.disk,
898
+ mode: f.mode,
899
+ }));
900
+ }
901
+
902
+ function packagesLines(pkgs) {
903
+ if (!pkgs.missing.length) return [];
904
+ return [
905
+ ` packages not in package.json: ${pkgs.missing.join(', ')}`,
906
+ ...pkgs.install.map((line) => ` ${line}`),
907
+ ];
908
+ }
909
+
910
+ function add(ctx, canon, named, options, testHooks) {
911
+ if (options.all && named.length)
912
+ fail(1, 'pass helper ids or --all, not both.');
913
+ const ids = options.all ? Object.keys(ctx.manifest.helpers).sort() : named;
914
+ if (!ids.length)
915
+ fail(
916
+ 1,
917
+ 'name at least one helper, e.g. `add useQuery`, or pass --all.',
918
+ `${CLI} helpers list`
919
+ );
920
+ checkIds(ctx.manifest, ids);
921
+ const dir = resolveDir(ctx, options, { required: true });
922
+ checkDirPath(ctx.root, dir.dir);
923
+ const names = [
924
+ ...new Set(ids.flatMap((id) => closureOf(ctx.manifest, id))),
925
+ ].sort();
926
+ const files = names.map((name) =>
927
+ classify({
928
+ root: ctx.root,
929
+ dir: dir.dir,
930
+ name,
931
+ manifest: ctx.manifest,
932
+ lock: ctx.lock,
933
+ canon,
934
+ })
935
+ );
936
+ const refused = files.filter((f) =>
937
+ ['stale', 'conflict', 'foreign'].includes(f.state)
938
+ );
939
+ const pkgs = missingPackages(ctx, names);
940
+ const lines = [
941
+ ...header(ctx, `add ${ids.join(' ')}`, dir, options.dryRun, canon),
942
+ ...files.map(fileLine),
943
+ ];
944
+ const report = {
945
+ ok: refused.length === 0,
946
+ command: 'add',
947
+ dryRun: Boolean(options.dryRun),
948
+ version: ctx.version,
949
+ dir: dir.dir,
950
+ files: files.map(({ name, state, reformatted, commentsDiffer }) => ({
951
+ file: name,
952
+ state,
953
+ ...(reformatted ? { reformatted } : {}),
954
+ ...(commentsDiffer ? { commentsDiffer } : {}),
955
+ })),
956
+ packages: pkgs,
957
+ canon: canon.available
958
+ ? { available: true }
959
+ : { available: false, reason: canon.reason },
960
+ };
961
+ if (refused.length) {
962
+ const stale = refused.every((f) => f.state === 'stale');
963
+ const next = stale
964
+ ? `${CLI} helpers update --dry-run`
965
+ : `${CLI} helpers diff ${refused.map((f) => f.name.replace(/\.ts$/, '')).join(' ')}`;
966
+ lines.push(
967
+ stale
968
+ ? '[bitboss-ui] add REFUSED, nothing written: an older bitboss-ui version of these files is installed. Update them first, then add:'
969
+ : "[bitboss-ui] add REFUSED, nothing written. Show the user the difference between their copy and bitboss-ui's:",
970
+ ` ${next}`
971
+ );
972
+ return {
973
+ code: 2,
974
+ report: { ...report, refused: refused.map((f) => f.name), next },
975
+ lines,
976
+ };
977
+ }
978
+ const writes = writesFor(ctx, files);
979
+ const lockText = newLock(ctx, dir.dir, ids, files);
980
+ lines.push(...packagesLines(pkgs));
981
+ if (!writes.length && lockText === null) {
982
+ lines.push('[bitboss-ui] nothing to do.');
983
+ return { code: 0, report: { ...report, next: null }, lines };
984
+ }
985
+ if (!options.dryRun)
986
+ applyWrites({
987
+ root: ctx.root,
988
+ dir: dir.dir,
989
+ writes,
990
+ lockText,
991
+ previousLockText: ctx.lock?.text ?? null,
992
+ manifest: ctx.manifest,
993
+ testHooks,
994
+ });
995
+ lines.push(
996
+ `[bitboss-ui] ${options.dryRun ? 'would write' : 'wrote'} ${writes.length} file(s)${lockText !== null ? ` and ${LOCK_FILE}` : ''}.`,
997
+ ...ids.map(
998
+ (id) =>
999
+ ` import { ${id} } from '@/${dir.dir.replace(/^(resources\/js|src)\//, '')}/${id}';`
1000
+ )
1001
+ );
1002
+ return {
1003
+ code: 0,
1004
+ report: {
1005
+ ...report,
1006
+ wrote: options.dryRun ? 0 : writes.length,
1007
+ next: null,
1008
+ },
1009
+ lines,
1010
+ };
1011
+ }
1012
+
1013
+ function installedIds(ctx) {
1014
+ return (ctx.lock?.ids ?? []).filter((id) =>
1015
+ Object.hasOwn(ctx.manifest.helpers, id)
1016
+ );
1017
+ }
1018
+
1019
+ function update(ctx, canon, ids, options, testHooks) {
1020
+ if (!ctx.lock?.dir) {
1021
+ return {
1022
+ code: 0,
1023
+ report: {
1024
+ ok: true,
1025
+ command: 'helpers update',
1026
+ installed: [],
1027
+ next: `${CLI} add <id>`,
1028
+ },
1029
+ lines: [
1030
+ `[bitboss-ui] helpers update: no helpers installed here (no ${LOCK_FILE}). Install one: ${CLI} add <id>`,
1031
+ ],
1032
+ };
1033
+ }
1034
+ checkIds(ctx.manifest, ids);
1035
+ const installed = installedIds(ctx);
1036
+ const notInstalled = ids.filter((id) => !installed.includes(id));
1037
+ if (notInstalled.length)
1038
+ fail(
1039
+ 3,
1040
+ `${notInstalled.join(', ')} ${notInstalled.length > 1 ? 'are' : 'is'} not installed here.`,
1041
+ `${CLI} add ${notInstalled.join(' ')}`
1042
+ );
1043
+ const dir = resolveDir(ctx, {}, { required: true });
1044
+ checkDirPath(ctx.root, dir.dir);
1045
+ const groups = connectedGroups(ctx.manifest, installed).filter(
1046
+ (g) => !ids.length || g.ids.some((id) => ids.includes(id))
1047
+ );
1048
+ const lines = [
1049
+ ...header(
1050
+ ctx,
1051
+ `helpers update${ids.length ? ` ${ids.join(' ')}` : ''}`,
1052
+ dir,
1053
+ options.dryRun,
1054
+ canon
1055
+ ),
1056
+ ];
1057
+ const applied = [];
1058
+ const refusedGroups = [];
1059
+ const allFiles = [];
1060
+ for (const group of groups) {
1061
+ const files = group.files.map((name) =>
1062
+ classify({
1063
+ root: ctx.root,
1064
+ dir: dir.dir,
1065
+ name,
1066
+ manifest: ctx.manifest,
1067
+ lock: ctx.lock,
1068
+ canon,
1069
+ })
1070
+ );
1071
+ allFiles.push(...files);
1072
+ lines.push(` group ${group.ids.join(', ')}`);
1073
+ lines.push(...files.map((f) => ` ${fileLine(f)}`));
1074
+ const blocked = files.filter((f) =>
1075
+ ['conflict', 'foreign'].includes(f.state)
1076
+ );
1077
+ if (blocked.length) refusedGroups.push({ group, blocked });
1078
+ else applied.push(...files);
1079
+ }
1080
+ const removed = Object.keys(ctx.lock.files).filter(
1081
+ (name) => !Object.hasOwn(ctx.manifest.files, name)
1082
+ );
1083
+ lines.push(
1084
+ ...removed.map(
1085
+ (name) =>
1086
+ ` ${'removed'.padEnd(10)} ${name} (no longer shipped; kept, never deleted)`
1087
+ )
1088
+ );
1089
+ const writes = writesFor(ctx, applied);
1090
+ const lockText = newLock(ctx, dir.dir, [], applied);
1091
+ const pkgs = missingPackages(ctx, [...new Set(applied.map((f) => f.name))]);
1092
+ lines.push(...packagesLines(pkgs));
1093
+ if ((writes.length || lockText !== null) && !options.dryRun)
1094
+ applyWrites({
1095
+ root: ctx.root,
1096
+ dir: dir.dir,
1097
+ writes,
1098
+ lockText,
1099
+ previousLockText: ctx.lock.text,
1100
+ manifest: ctx.manifest,
1101
+ testHooks,
1102
+ });
1103
+ const next = refusedGroups.length
1104
+ ? `${CLI} helpers diff ${refusedGroups.flatMap((r) => r.blocked.map((f) => f.name.replace(/\.ts$/, ''))).join(' ')}`
1105
+ : null;
1106
+ if (!writes.length && lockText === null && !refusedGroups.length)
1107
+ lines.push('[bitboss-ui] nothing to do.');
1108
+ else
1109
+ lines.push(
1110
+ `[bitboss-ui] ${options.dryRun ? 'would write' : 'wrote'} ${writes.length} file(s)${lockText !== null ? ` and ${LOCK_FILE}` : ''}.`
1111
+ );
1112
+ if (refusedGroups.length)
1113
+ lines.push(
1114
+ `[bitboss-ui] REFUSED ${refusedGroups.length} group(s), left untouched: ${refusedGroups.map((r) => r.group.ids.join(', ')).join(' | ')}. Show the user the difference:`,
1115
+ ` ${next}`
1116
+ );
1117
+ return {
1118
+ code: refusedGroups.length ? 2 : 0,
1119
+ report: {
1120
+ ok: !refusedGroups.length,
1121
+ command: 'helpers update',
1122
+ dryRun: Boolean(options.dryRun),
1123
+ version: ctx.version,
1124
+ dir: dir.dir,
1125
+ files: allFiles.map(({ name, state, reformatted, commentsDiffer }) => ({
1126
+ file: name,
1127
+ state,
1128
+ ...(reformatted ? { reformatted } : {}),
1129
+ ...(commentsDiffer ? { commentsDiffer } : {}),
1130
+ })),
1131
+ refused: refusedGroups.map((r) => ({
1132
+ ids: r.group.ids,
1133
+ files: r.blocked.map((f) => f.name),
1134
+ })),
1135
+ removed,
1136
+ packages: pkgs,
1137
+ wrote: options.dryRun ? 0 : writes.length,
1138
+ canon: canon.available
1139
+ ? { available: true }
1140
+ : { available: false, reason: canon.reason },
1141
+ next,
1142
+ },
1143
+ lines,
1144
+ };
1145
+ }
1146
+
1147
+ function diff(ctx, canon, ids) {
1148
+ checkIds(ctx.manifest, ids);
1149
+ if (!ctx.lock?.dir && !ids.length)
1150
+ return {
1151
+ code: 0,
1152
+ report: { ok: true, command: 'helpers diff', files: [], next: null },
1153
+ lines: [
1154
+ `[bitboss-ui] helpers diff: no helpers installed here (no ${LOCK_FILE}).`,
1155
+ ],
1156
+ };
1157
+ const dir = resolveDir(ctx, {}, { required: true });
1158
+ checkDirPath(ctx.root, dir.dir);
1159
+ const names = ids.length
1160
+ ? [...new Set(ids.flatMap((id) => closureOf(ctx.manifest, id)))].sort()
1161
+ : Object.keys(ctx.lock.files)
1162
+ .filter((n) => Object.hasOwn(ctx.manifest.files, n))
1163
+ .sort();
1164
+ const files = names.map((name) =>
1165
+ classify({
1166
+ root: ctx.root,
1167
+ dir: dir.dir,
1168
+ name,
1169
+ manifest: ctx.manifest,
1170
+ lock: ctx.lock,
1171
+ canon,
1172
+ })
1173
+ );
1174
+ const lines = [
1175
+ ...header(
1176
+ ctx,
1177
+ `helpers diff${ids.length ? ` ${ids.join(' ')}` : ''}`,
1178
+ dir,
1179
+ false,
1180
+ canon
1181
+ ),
1182
+ ];
1183
+ const report = [];
1184
+ for (const file of files) {
1185
+ lines.push(fileLine(file));
1186
+ const entry = { file: file.name, state: file.state };
1187
+ if (file.reformatted) entry.reformatted = true;
1188
+ if (file.commentsDiffer) entry.commentsDiffer = true;
1189
+ const show =
1190
+ ids.length &&
1191
+ file.disk !== null &&
1192
+ file.disk !== ctx.manifest.bytes.get(file.name);
1193
+ if (show) {
1194
+ const text = unifiedDiff(
1195
+ file.disk,
1196
+ ctx.manifest.bytes.get(file.name),
1197
+ `${dir.dir}/${file.name} (yours)`,
1198
+ `${file.name} (bitboss-ui ${ctx.version})`
1199
+ );
1200
+ entry.diff = text;
1201
+ if (file.reformatted)
1202
+ lines.push(
1203
+ ` ${file.commentsDiffer ? 'formatting and comments only' : 'formatting only'}`
1204
+ );
1205
+ lines.push(
1206
+ ...escapeForTerminal(text)
1207
+ .trimEnd()
1208
+ .split('\n')
1209
+ .map((l) => ` ${l}`)
1210
+ );
1211
+ }
1212
+ report.push(entry);
1213
+ }
1214
+ if (files.some((f) => f.state === 'stale' && f.commentsDiffer))
1215
+ lines.push(
1216
+ '[bitboss-ui] comments do not count as edits: `helpers update` replaces a stale file whole, so the comments shown above would be lost. Copy any you want to keep first.'
1217
+ );
1218
+ const act = files.filter((f) =>
1219
+ [
1220
+ 'stale',
1221
+ 'conflict',
1222
+ 'foreign',
1223
+ 'deleted',
1224
+ 'new',
1225
+ 'adopt',
1226
+ 'record',
1227
+ ].includes(f.state)
1228
+ );
1229
+ return {
1230
+ code: act.length ? 1 : 0,
1231
+ report: {
1232
+ ok: true,
1233
+ kind: act.length ? 'difference' : 'none',
1234
+ command: 'helpers diff',
1235
+ version: ctx.version,
1236
+ dir: dir.dir,
1237
+ files: report,
1238
+ canon: canon.available
1239
+ ? { available: true }
1240
+ : { available: false, reason: canon.reason },
1241
+ next: act.some((f) => f.state === 'stale')
1242
+ ? `${CLI} helpers update --dry-run`
1243
+ : null,
1244
+ },
1245
+ lines,
1246
+ };
1247
+ }
1248
+
1249
+ function list(ctx, canon) {
1250
+ const dir = ctx.lock?.dir ? resolveDir(ctx, {}, { required: false }) : null;
1251
+ if (dir) checkDirPath(ctx.root, dir.dir);
1252
+ const installed = new Set(installedIds(ctx));
1253
+ const lines = [...header(ctx, 'helpers list', dir, false, canon)];
1254
+ const helpers = [];
1255
+ for (const [id, helper] of Object.entries(ctx.manifest.helpers).sort(
1256
+ ([a], [b]) => a.localeCompare(b)
1257
+ )) {
1258
+ let state = null;
1259
+ if (dir && installed.has(id)) {
1260
+ const states = helper.closure.map(
1261
+ (name) =>
1262
+ classify({
1263
+ root: ctx.root,
1264
+ dir: dir.dir,
1265
+ name,
1266
+ manifest: ctx.manifest,
1267
+ lock: ctx.lock,
1268
+ canon,
1269
+ }).state
1270
+ );
1271
+ state =
1272
+ ['conflict', 'foreign', 'stale', 'deleted', 'edited'].find((s) =>
1273
+ states.includes(s)
1274
+ ) ?? 'current';
1275
+ }
1276
+ helpers.push({
1277
+ id,
1278
+ summary: helper.summary,
1279
+ files: helper.closure,
1280
+ packages: [...helper.packages, ...helper.typePackages],
1281
+ state,
1282
+ });
1283
+ lines.push(
1284
+ ` ${id.padEnd(30)} ${state ? `[${state}] ` : ''}${helper.summary}`
1285
+ );
1286
+ }
1287
+ lines.push(`[bitboss-ui] install one: ${CLI} add <id>`);
1288
+ return {
1289
+ code: 0,
1290
+ report: {
1291
+ ok: true,
1292
+ command: 'helpers list',
1293
+ version: ctx.version,
1294
+ dir: dir?.dir ?? null,
1295
+ testedWith: ctx.manifest.tested,
1296
+ helpers,
1297
+ },
1298
+ lines,
1299
+ };
1300
+ }
1301
+
1302
+ /** Exposed for tests. */
1303
+ export const _internal = { writeOrder, serialiseLock };