bitboss-ui 3.0.0-beta.48 → 3.0.0-beta.49

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 (356) hide show
  1. package/README.md +24 -7
  2. package/bin/bitboss-ui-mcp.mjs +15 -3
  3. package/bin/bitboss-ui.mjs +115 -13
  4. package/dist/ai/BbAvatar.md +1 -1
  5. package/dist/ai/BbBreadcrumbs.md +65 -65
  6. package/dist/ai/BbButton.md +16 -5
  7. package/dist/ai/BbCheckbox.md +0 -2
  8. package/dist/ai/BbCheckboxGroup.md +13 -20
  9. package/dist/ai/BbDatePickerInput.md +4 -2
  10. package/dist/ai/BbDialog.md +1 -8
  11. package/dist/ai/BbDropdown.md +231 -220
  12. package/dist/ai/BbDropdownButton.md +65 -65
  13. package/dist/ai/BbDropdownGroup.md +2 -2
  14. package/dist/ai/BbDropzone.md +10 -10
  15. package/dist/ai/BbForm.md +43 -52
  16. package/dist/ai/BbHoverCard.md +4 -2
  17. package/dist/ai/BbNumberInput.md +88 -21
  18. package/dist/ai/BbPopover.md +29 -23
  19. package/dist/ai/BbProgress.md +48 -22
  20. package/dist/ai/BbRadioGroup.md +13 -19
  21. package/dist/ai/BbSelect.md +16 -36
  22. package/dist/ai/BbSelectPopover.md +14 -30
  23. package/dist/ai/BbSmoothHeight.md +0 -2
  24. package/dist/ai/BbSwitchGroup.md +13 -20
  25. package/dist/ai/BbTable.md +11 -10
  26. package/dist/ai/BbTabs.md +106 -105
  27. package/dist/ai/BbTabsList.md +2 -2
  28. package/dist/ai/BbTabsPanels.md +1 -1
  29. package/dist/ai/BbTabsRoot.md +2 -2
  30. package/dist/ai/BbTooltip.md +24 -10
  31. package/dist/ai/BbTree.md +14 -11
  32. package/dist/ai/changelog.json +256 -5
  33. package/dist/ai/components.json +36 -34
  34. package/dist/ai/composables/useBbDropdownContext.md +16 -16
  35. package/dist/ai/composables/useBbFormField.md +5 -1
  36. package/dist/ai/composables/useBbTabsContext.md +14 -14
  37. package/dist/ai/guides/agent-contract.md +27 -27
  38. package/dist/ai/guides/ai-router.md +1 -1
  39. package/dist/ai/guides/component-picker.md +3 -3
  40. package/dist/ai/guides/fetch-items-playbook.md +1 -1
  41. package/dist/ai/guides/icons-policy.md +10 -10
  42. package/dist/ai/guides/inertia-helpers.md +120 -67
  43. package/dist/ai/guides/installation-and-plugin-setup.md +43 -15
  44. package/dist/ai/guides/migration/components/bb-breadcrumbs.md +3 -2
  45. package/dist/ai/guides/migration/components/bb-checkbox-group.md +16 -16
  46. package/dist/ai/guides/migration/components/bb-dropdown-button.md +9 -8
  47. package/dist/ai/guides/migration/components/bb-dropdown.md +15 -14
  48. package/dist/ai/guides/migration/components/bb-radio-group.md +2 -1
  49. package/dist/ai/guides/migration/components/bb-select-popover.md +6 -1
  50. package/dist/ai/guides/migration/components/bb-select.md +10 -2
  51. package/dist/ai/guides/migration/components/bb-switch-group.md +2 -1
  52. package/dist/ai/guides/migration/components/bb-tabs.md +9 -8
  53. package/dist/ai/guides/migration/components/bb-tooltip.md +1 -1
  54. package/dist/ai/guides/migration/v2-to-v3.md +114 -17
  55. package/dist/ai/guides/migration/v3-beta-tooling.md +11 -0
  56. package/dist/ai/guides/options-items-playbook.md +30 -24
  57. package/dist/ai/guides/passthrough.md +2 -2
  58. package/dist/ai/guides/preset-components.md +18 -3
  59. package/dist/ai/guides/typescript-generic-components.md +1 -1
  60. package/dist/ai/guides/validated-forms.md +11 -22
  61. package/dist/ai/guides/validation-providers.md +4 -3
  62. package/dist/ai/helpers/inertia/manifest.json +636 -0
  63. package/dist/ai/helpers/inertia/types.ts +15 -0
  64. package/dist/ai/helpers/inertia/useAsyncFn.ts +110 -0
  65. package/dist/ai/helpers/inertia/useConfirmOnRouteLeave.ts +102 -0
  66. package/dist/ai/helpers/inertia/useDeleteCmd.ts +30 -0
  67. package/dist/ai/helpers/inertia/useHasChanged.ts +36 -0
  68. package/dist/ai/helpers/inertia/useIndexById.ts +23 -0
  69. package/dist/ai/helpers/inertia/useLazyProp.ts +148 -0
  70. package/dist/ai/helpers/inertia/useLazyPropGetter.ts +50 -0
  71. package/dist/ai/helpers/inertia/useLoading.ts +20 -0
  72. package/dist/ai/helpers/inertia/usePaginatedResponseContext.ts +88 -0
  73. package/dist/ai/helpers/inertia/usePromiseForm.ts +62 -0
  74. package/dist/ai/helpers/inertia/useProp.ts +63 -0
  75. package/dist/ai/helpers/inertia/useQuery.ts +19 -0
  76. package/dist/ai/helpers/inertia/useQueryObject.ts +116 -0
  77. package/dist/ai/helpers/inertia/useResourceContext.ts +69 -0
  78. package/dist/ai/helpers/inertia/useRouteQuery.ts +54 -0
  79. package/dist/ai/helpers/inertia/useScreenSizes.ts +23 -0
  80. package/dist/ai/helpers/inertia/useTableContext.ts +34 -0
  81. package/dist/ai/helpers/inertia/useTableSelectionContext.ts +48 -0
  82. package/dist/ai/helpers/inertia/useUntil.ts +33 -0
  83. package/dist/ai/helpers/inertia/utils.ts +24 -0
  84. package/dist/ai/index.md +6 -6
  85. package/dist/ai/manifest/components/BbBreadcrumbs.json +10 -6
  86. package/dist/ai/manifest/components/BbBreadcrumbs.tree.json +1 -1
  87. package/dist/ai/manifest/components/BbButton.json +1 -1
  88. package/dist/ai/manifest/components/BbCheckboxGroup.json +2 -2
  89. package/dist/ai/manifest/components/BbDropdown.json +23 -20
  90. package/dist/ai/manifest/components/BbDropdown.tree.json +2 -2
  91. package/dist/ai/manifest/components/BbDropdownButton.json +22 -19
  92. package/dist/ai/manifest/components/BbDropdownButton.tree.json +1 -1
  93. package/dist/ai/manifest/components/BbDropdownGroup.json +2 -2
  94. package/dist/ai/manifest/components/BbForm.json +1 -0
  95. package/dist/ai/manifest/components/BbNumberInput.json +6 -1
  96. package/dist/ai/manifest/components/BbNumberInput.tree.json +2 -1
  97. package/dist/ai/manifest/components/BbPopover.json +1 -0
  98. package/dist/ai/manifest/components/BbProgress.json +6 -6
  99. package/dist/ai/manifest/components/BbProgress.tree.json +1 -0
  100. package/dist/ai/manifest/components/BbRadioGroup.json +2 -2
  101. package/dist/ai/manifest/components/BbSelect.json +2 -2
  102. package/dist/ai/manifest/components/BbSelectPopover.json +2 -2
  103. package/dist/ai/manifest/components/BbSwitchGroup.json +2 -2
  104. package/dist/ai/manifest/components/BbTabs.json +7 -6
  105. package/dist/ai/manifest/components/BbTabsList.json +3 -3
  106. package/dist/ai/manifest/components/BbTabsPanels.json +1 -1
  107. package/dist/ai/manifest/components/BbTabsRoot.json +5 -4
  108. package/dist/ai/manifest/components/BbTooltip.json +1 -1
  109. package/dist/ai/manifest/index.json +2 -2
  110. package/dist/ai/manifest/meta.json +2 -0
  111. package/dist/ai/manifest/types.advanced.json +10 -9
  112. package/dist/ai/manifest/types.api.json +5 -4
  113. package/dist/ai/recipes/inertia/approvals-inbox.md +16 -18
  114. package/dist/ai/recipes/inertia/inline-edit-workspace.md +23 -33
  115. package/dist/ai/recipes/inertia/layout-scaffold.md +16 -16
  116. package/dist/ai/recipes/inertia/onboarding.md +6 -10
  117. package/dist/ai/recipes/inertia/ownership-atlas.md +15 -18
  118. package/dist/ai/recipes/inertia/record-form.md +11 -11
  119. package/dist/ai/recipes/inertia/records-workspace.md +38 -41
  120. package/dist/ai/recipes/inertia/settings-workspace.md +26 -38
  121. package/dist/ai/recipes/inertia/upload-center.md +31 -39
  122. package/dist/ai/recipes/inertia/wizard-form.md +10 -19
  123. package/dist/ai/recipes/nuxt/approvals-inbox.md +7 -8
  124. package/dist/ai/recipes/nuxt/inline-edit-workspace.md +14 -24
  125. package/dist/ai/recipes/nuxt/layout-scaffold.md +16 -16
  126. package/dist/ai/recipes/nuxt/onboarding.md +2 -6
  127. package/dist/ai/recipes/nuxt/ownership-atlas.md +7 -9
  128. package/dist/ai/recipes/nuxt/record-form.md +5 -5
  129. package/dist/ai/recipes/nuxt/records-workspace.md +29 -31
  130. package/dist/ai/recipes/nuxt/settings-workspace.md +22 -34
  131. package/dist/ai/recipes/nuxt/upload-center.md +22 -29
  132. package/dist/ai/recipes/nuxt/wizard-form.md +3 -11
  133. package/dist/ai/recipes/vue/approvals-inbox.md +7 -8
  134. package/dist/ai/recipes/vue/inline-edit-workspace.md +14 -24
  135. package/dist/ai/recipes/vue/layout-scaffold.md +16 -16
  136. package/dist/ai/recipes/vue/onboarding.md +2 -6
  137. package/dist/ai/recipes/vue/ownership-atlas.md +7 -9
  138. package/dist/ai/recipes/vue/record-form.md +5 -5
  139. package/dist/ai/recipes/vue/records-workspace.md +29 -31
  140. package/dist/ai/recipes/vue/settings-workspace.md +22 -34
  141. package/dist/ai/recipes/vue/upload-center.md +22 -29
  142. package/dist/ai/recipes/vue/wizard-form.md +3 -11
  143. package/dist/ai/source/BbAccordion.md +1 -1
  144. package/dist/ai/source/BbAlert.md +3 -3
  145. package/dist/ai/source/BbBadge.md +2 -2
  146. package/dist/ai/source/BbBadgeButton.md +5 -4
  147. package/dist/ai/source/BbBaseButton.md +1 -1
  148. package/dist/ai/source/BbBaseRadioIcon.md +1 -0
  149. package/dist/ai/source/BbBaseSwitchIcon.md +1 -0
  150. package/dist/ai/source/BbBreadcrumbs.md +63 -42
  151. package/dist/ai/source/BbButton.md +71 -33
  152. package/dist/ai/source/BbCalendar.md +17 -16
  153. package/dist/ai/source/BbCheckbox.md +3 -2
  154. package/dist/ai/source/BbCheckboxGroup.md +11 -4
  155. package/dist/ai/source/BbColorInput.md +10 -9
  156. package/dist/ai/source/BbConfirm.md +1 -1
  157. package/dist/ai/source/BbConfirmPortal.md +1 -1
  158. package/dist/ai/source/BbDatePicker.md +2 -2
  159. package/dist/ai/source/BbDatePickerInput.md +47 -20
  160. package/dist/ai/source/BbDialog.md +5 -5
  161. package/dist/ai/source/BbDropdown.md +230 -158
  162. package/dist/ai/source/BbDropdownButton.md +19 -12
  163. package/dist/ai/source/BbDropdownGroup.md +126 -93
  164. package/dist/ai/source/BbForm.md +25 -1
  165. package/dist/ai/source/BbIndicator.md +4 -0
  166. package/dist/ai/source/BbNumberInput.md +855 -19
  167. package/dist/ai/source/BbOffCanvas.md +27 -11
  168. package/dist/ai/source/BbPagination.md +3 -3
  169. package/dist/ai/source/BbPopover.md +152 -8
  170. package/dist/ai/source/BbPopoverPortal.md +11 -0
  171. package/dist/ai/source/BbProgress.md +82 -18
  172. package/dist/ai/source/BbRadioGroup.md +12 -5
  173. package/dist/ai/source/BbRating.md +11 -9
  174. package/dist/ai/source/BbSelect.md +16 -10
  175. package/dist/ai/source/BbSelectPopover.md +29 -23
  176. package/dist/ai/source/BbSlider.md +12 -6
  177. package/dist/ai/source/BbSwitch.md +3 -2
  178. package/dist/ai/source/BbSwitchGroup.md +5 -2
  179. package/dist/ai/source/BbTable.md +102 -18
  180. package/dist/ai/source/BbTabs.md +27 -23
  181. package/dist/ai/source/BbTabsList.md +26 -22
  182. package/dist/ai/source/BbTabsPanels.md +26 -22
  183. package/dist/ai/source/BbTabsRoot.md +25 -21
  184. package/dist/ai/source/BbTag.md +10 -9
  185. package/dist/ai/source/BbTextInput.md +5 -4
  186. package/dist/ai/source/BbTextarea.md +6 -5
  187. package/dist/ai/source/BbTimePicker.md +1 -1
  188. package/dist/ai/source/BbTimePickerInput.md +46 -9
  189. package/dist/ai/source/BbToast.md +10 -7
  190. package/dist/ai/source/BbToastPortal.md +10 -7
  191. package/dist/ai/source/BbTooltip.md +54 -8
  192. package/dist/ai/source/BbTree.md +21 -3
  193. package/dist/ai/source/CommonField.md +6 -4
  194. package/dist/ai/source/CommonFieldInput.md +15 -10
  195. package/dist/ai/source/CommonPopover.md +6 -0
  196. package/dist/ai/source/CommonTimeSelector.md +5 -4
  197. package/dist/components/BbBadge/BbBadgeButton.vue_vue_type_script_setup_true_lang.js +10 -8
  198. package/dist/components/BbBaseButton/BbBaseButton.vue_vue_type_script_setup_true_lang.js +8 -8
  199. package/dist/components/BbBreadcrumbs/BbBreadcrumbs.vue_vue_type_script_setup_true_lang.js +45 -45
  200. package/dist/components/BbBreadcrumbs/types.d.ts +25 -17
  201. package/dist/components/BbButton/BbButton.vue_vue_type_script_setup_true_lang.js +84 -71
  202. package/dist/components/BbButton/toggleRoving.d.ts +6 -0
  203. package/dist/components/BbButton/toggleRoving.js +45 -0
  204. package/dist/components/BbButton/types.d.ts +4 -1
  205. package/dist/components/BbCalendar/BbCalendar.vue_vue_type_script_setup_true_lang.js +178 -178
  206. package/dist/components/BbCalendar/CalendarMonthPanel.vue_vue_type_script_setup_true_lang.js +15 -15
  207. package/dist/components/BbCalendar/CalendarYearPanel.vue_vue_type_script_setup_true_lang.js +28 -28
  208. package/dist/components/BbCalendar/useCalendarGrid.js +141 -139
  209. package/dist/components/BbCalendar/useDayjsLocale.d.ts +38 -15
  210. package/dist/components/BbCalendar/useDayjsLocale.js +31 -30
  211. package/dist/components/BbCheckbox/BbCheckbox.vue_vue_type_script_setup_true_lang.js +48 -48
  212. package/dist/components/BbCheckboxGroup/BbCheckboxGroup.vue_vue_type_script_setup_true_lang.js +81 -80
  213. package/dist/components/BbCheckboxGroup/types.d.ts +6 -2
  214. package/dist/components/BbColorInput/BbColorInput.vue_vue_type_script_setup_true_lang.js +69 -69
  215. package/dist/components/BbDatePickerInput/BbDatePickerInput.vue_vue_type_script_setup_true_lang.js +363 -349
  216. package/dist/components/BbDropdown/AdaptiveDropdown.vue_vue_type_script_setup_true_lang.js +91 -86
  217. package/dist/components/BbDropdown/BbDropdown.vue_vue_type_script_setup_true_lang.js +298 -289
  218. package/dist/components/BbDropdown/BbDropdownList.vue_vue_type_script_setup_true_lang.js +322 -356
  219. package/dist/components/BbDropdown/DropdownPipelineResolver.vue_vue_type_script_setup_true_lang.js +17 -15
  220. package/dist/components/BbDropdown/DropdownRow.vue.d.ts +40 -0
  221. package/dist/components/BbDropdown/DropdownRow.vue.js +5 -0
  222. package/dist/components/BbDropdown/DropdownRow.vue_vue_type_script_setup_true_lang.js +60 -0
  223. package/dist/components/BbDropdown/normalizeGroups.d.ts +8 -2
  224. package/dist/components/BbDropdown/normalizeGroups.js +60 -46
  225. package/dist/components/BbDropdown/types.d.ts +119 -88
  226. package/dist/components/BbDropdownButton/BbDropdownButton.vue_vue_type_script_setup_true_lang.js +11 -2
  227. package/dist/components/BbDropdownButton/types.d.ts +2 -2
  228. package/dist/components/BbForm/BbForm.vue.d.ts +9 -0
  229. package/dist/components/BbForm/BbForm.vue_vue_type_script_setup_true_lang.js +114 -105
  230. package/dist/components/BbForm/BbFormCustomField.js +1 -1
  231. package/dist/components/BbForm/bindFormField.js +2 -1
  232. package/dist/components/BbForm/formFields.d.ts +5 -0
  233. package/dist/components/BbNumberInput/BbNumberInput.vue.d.ts +0 -1
  234. package/dist/components/BbNumberInput/BbNumberInput.vue_vue_type_script_setup_true_lang.js +452 -125
  235. package/dist/components/BbNumberInput/numberDisplay.d.ts +256 -0
  236. package/dist/components/BbNumberInput/numberDisplay.js +499 -0
  237. package/dist/components/BbNumberInput/types.d.ts +54 -1
  238. package/dist/components/BbNumberInput/warroom/corpus.d.ts +58 -0
  239. package/dist/components/BbNumberInput/warroom/currency-verify.rows.d.ts +28 -0
  240. package/dist/components/BbNumberInput/warroom/currency.rows.d.ts +2 -0
  241. package/dist/components/BbNumberInput/warroom/harness.d.ts +217 -0
  242. package/dist/components/BbNumberInput/warroom/oracle.d.ts +150 -0
  243. package/dist/components/BbPagination/BbPagination.vue_vue_type_script_setup_true_lang.js +7 -7
  244. package/dist/components/BbPopover/BbPopover.vue.d.ts +1 -0
  245. package/dist/components/BbPopover/BbPopover.vue_vue_type_script_setup_true_lang.js +207 -164
  246. package/dist/components/BbPopover/types.d.ts +11 -0
  247. package/dist/components/BbProgress/BbProgress.vue_vue_type_script_setup_true_lang.js +15 -7
  248. package/dist/components/BbProgress/types.d.ts +23 -7
  249. package/dist/components/BbProgress/types.js +1 -1
  250. package/dist/components/BbRadioGroup/BbRadioGroup.vue_vue_type_script_setup_true_lang.js +102 -101
  251. package/dist/components/BbRadioGroup/types.d.ts +6 -2
  252. package/dist/components/BbRating/BbRating.vue_vue_type_script_setup_true_lang.js +63 -63
  253. package/dist/components/BbSelect/BbSelect.vue_vue_type_script_setup_true_lang.js +156 -154
  254. package/dist/components/BbSelect/types.d.ts +6 -2
  255. package/dist/components/BbSelectPopover/BbSelectPopover.vue_vue_type_script_setup_true_lang.js +2 -1
  256. package/dist/components/BbSelectPopover/types.d.ts +6 -2
  257. package/dist/components/BbSlider/BbSlider.vue_vue_type_script_setup_true_lang.js +153 -153
  258. package/dist/components/BbSwitch/BbSwitch.vue_vue_type_script_setup_true_lang.js +62 -62
  259. package/dist/components/BbSwitchGroup/BbSwitchGroup.vue_vue_type_script_setup_true_lang.js +131 -130
  260. package/dist/components/BbTable/BbTable.vue_vue_type_script_setup_true_lang.js +711 -676
  261. package/dist/components/BbTabs/BbTabs.vue_vue_type_script_setup_true_lang.js +1 -1
  262. package/dist/components/BbTabs/BbTabsList.vue_vue_type_script_setup_true_lang.js +1 -1
  263. package/dist/components/BbTabs/types.d.ts +25 -21
  264. package/dist/components/BbTag/BbTag.vue_vue_type_script_setup_true_lang.js +76 -76
  265. package/dist/components/BbTextInput/BbTextInput.vue_vue_type_script_setup_true_lang.js +58 -58
  266. package/dist/components/BbTextarea/BbTextarea.vue_vue_type_script_setup_true_lang.js +82 -82
  267. package/dist/components/BbTimePickerInput/BbTimePickerInput.vue_vue_type_script_setup_true_lang.js +246 -236
  268. package/dist/components/BbTooltip/BbTooltip.vue_vue_type_script_setup_true_lang.js +102 -97
  269. package/dist/components/BbTooltip/tooltipWarmup.d.ts +23 -0
  270. package/dist/components/BbTooltip/tooltipWarmup.js +7 -0
  271. package/dist/components/BbTooltip/types.d.ts +7 -2
  272. package/dist/components/BbTree/BbTree.vue_vue_type_script_setup_true_lang.js +29 -21
  273. package/dist/components/BbTree/BbTreeLevel.vue_vue_type_script_setup_true_lang.js +10 -7
  274. package/dist/components/CommonFieldInput/CommonFieldInput.vue_vue_type_script_setup_true_lang.js +37 -36
  275. package/dist/components/CommonTimeSelector/CommonTimeSelector.vue_vue_type_script_setup_true_lang.js +9 -9
  276. package/dist/composables/formSubmitLock.d.ts +6 -0
  277. package/dist/composables/formSubmitLock.js +4 -0
  278. package/dist/composables/useBaseOptions.d.ts +7 -1
  279. package/dist/composables/useBaseOptions.js +32 -32
  280. package/dist/composables/useBbDropdownContext.d.ts +8 -8
  281. package/dist/composables/useBbFormField.d.ts +9 -0
  282. package/dist/composables/useBbFormField.js +5 -3
  283. package/dist/composables/useBbTabsContext.d.ts +10 -10
  284. package/dist/composables/useBbTabsContext.js +18 -18
  285. package/dist/composables/useFormBinding.d.ts +11 -0
  286. package/dist/composables/useFormBinding.js +15 -13
  287. package/dist/composables/useItemText.d.ts +5 -1
  288. package/dist/composables/useItemText.js +8 -3
  289. package/dist/composables/useItemValue.d.ts +5 -1
  290. package/dist/composables/useItemValue.js +8 -3
  291. package/dist/composables/useLocale.js +10 -9
  292. package/dist/deprecation/ai-deprecations.json.d.ts +130 -0
  293. package/dist/deprecation/ai-deprecations.json.js +1 -1
  294. package/dist/deprecation/removedProps.js +1 -1
  295. package/dist/directives/bbDropdown.js +1 -1
  296. package/dist/i18n/index.d.ts +7 -12
  297. package/dist/i18n/locales/cs.json +11 -14
  298. package/dist/i18n/locales/da.json +13 -16
  299. package/dist/i18n/locales/de-CH.json +137 -0
  300. package/dist/i18n/locales/de.json +14 -17
  301. package/dist/i18n/locales/el.json +10 -13
  302. package/dist/i18n/locales/en-GB.json +137 -0
  303. package/dist/i18n/locales/en.json +8 -11
  304. package/dist/i18n/locales/es-MX.json +137 -0
  305. package/dist/i18n/locales/es.json +16 -19
  306. package/dist/i18n/locales/fi.json +8 -11
  307. package/dist/i18n/locales/fr.json +23 -26
  308. package/dist/i18n/locales/hu.json +8 -11
  309. package/dist/i18n/locales/it.json +12 -15
  310. package/dist/i18n/locales/ja.json +13 -16
  311. package/dist/i18n/locales/ko.json +10 -13
  312. package/dist/i18n/locales/nb.json +13 -16
  313. package/dist/i18n/locales/nl.json +21 -24
  314. package/dist/i18n/locales/pl.json +10 -13
  315. package/dist/i18n/locales/{pt.json → pt-BR.json} +19 -22
  316. package/dist/i18n/locales/pt-PT.json +137 -0
  317. package/dist/i18n/locales/ro.json +22 -25
  318. package/dist/i18n/locales/ru.json +11 -14
  319. package/dist/i18n/locales/sv.json +16 -19
  320. package/dist/i18n/locales/tr.json +14 -17
  321. package/dist/i18n/locales/uk.json +11 -14
  322. package/dist/i18n/locales/{zh-cn.json → zh-CN.json} +10 -13
  323. package/dist/i18n/locales/zh-HK.json +137 -0
  324. package/dist/i18n/locales/zh-TW.json +137 -0
  325. package/dist/i18n/regionHints.d.ts +16 -0
  326. package/dist/i18n/regionHints.js +49 -0
  327. package/dist/i18n/regions.d.ts +286 -0
  328. package/dist/i18n/regions.js +265 -0
  329. package/dist/index.d.ts +1 -1
  330. package/dist/index.js +4 -4
  331. package/dist/llms-full.txt +1785 -1637
  332. package/dist/llms-medium.txt +74 -46
  333. package/dist/llms.txt +7 -7
  334. package/dist/locale-blueprint.json +16 -13
  335. package/dist/styles.css +2 -2
  336. package/dist/types/ptComponentMap.d.ts +1 -1
  337. package/dist/utilities/functions/slotKey.d.ts +2 -2
  338. package/dist/utils/versionCheck.js +1 -1
  339. package/dist/vite-plugin.d.ts +22 -19
  340. package/dist/vite.js +309 -297
  341. package/llms.txt +7 -7
  342. package/package.json +5 -3
  343. package/scripts/lib/agent-manifest.mjs +2 -1
  344. package/scripts/lib/eslint-disable.mjs +12 -4
  345. package/scripts/lib/eslint-plugin.d.ts +5 -1
  346. package/scripts/lib/eslint-plugin.mjs +187 -6
  347. package/scripts/lib/helper-canon.mjs +176 -0
  348. package/scripts/lib/helpers-add.mjs +1303 -0
  349. package/scripts/lib/local-components.mjs +33 -4
  350. package/scripts/lib/locale-check.mjs +165 -0
  351. package/scripts/lib/redundant-item-accessor.mjs +398 -0
  352. package/scripts/lib/renamed-item-field.mjs +343 -0
  353. package/scripts/lib/slot-key.mjs +2 -2
  354. package/scripts/lib/slot-renames.mjs +1 -1
  355. package/scripts/lib/validate-bb-markup.mjs +123 -56
  356. package/dist/i18n/index.js +0 -27
@@ -100,18 +100,14 @@ Prefer a sibling when the shape is simpler:
100
100
 
101
101
  ### Map options with `item-text` and `item-value`
102
102
 
103
- **Object items need `item-text`.** Without it each label is
104
- `JSON.stringify(item)`, and without `item-value` the whole object is the value.
105
- `{ label, value }` items take both:
103
+ **`{ label, value }` and `{ text, value }` items work as they are; any other
104
+ shape needs `item-text` / `item-value`.** With neither prop an option reads its
105
+ own `label` (else its own `text`) and its own `value`, whatever it holds (`null`
106
+ included). An object with none of those fields falls back to
107
+ `JSON.stringify(item)` as text and the whole object as value.
106
108
 
107
109
  ```vue
108
- <BbSelect
109
- v-model="plan"
110
- label="Plan"
111
- :items="plans"
112
- item-text="label"
113
- item-value="value"
114
- />
110
+ <BbSelect v-model="plan" label="Plan" :items="plans" />
115
111
  ```
116
112
 
117
113
  Pass your domain objects to `items` **as they are** and tell the component which
@@ -172,8 +168,9 @@ Value-identity rules (shared with every items-driven component — see the
172
168
  Options and Items playbook):
173
169
 
174
170
  - For primitive `items` (`string[]` / `number[]`) omit both mapping props — the
175
- value is the primitive itself. For object items always set both: the defaults
176
- are the whole item as value and `JSON.stringify(item)` as text.
171
+ value is the primitive itself. `{ label, value }` / `{ text, value }` objects
172
+ need none either; any other object shape needs both (its fallbacks are
173
+ `JSON.stringify(item)` as text and the whole item as value).
177
174
  - Matching compares **value hashes** (deep structural equality, not reference
178
175
  identity), so object values survive refetches — but prefer primitive ids:
179
176
  stable, unique, cheap to submit.
@@ -187,7 +184,8 @@ Options and Items playbook):
187
184
 
188
185
  #### Additional row fields: `item-props`
189
186
 
190
- `item-text` and `item-value` are the option's label and identity. Anything
187
+ The option's text and value (from `item-text` / `item-value`, or the item's own
188
+ `label` and `value`) are its label and identity. Anything
191
189
  **additional** about a row comes from `item-props`. Select options accept three
192
190
  fields:
193
191
 
@@ -461,8 +459,6 @@ model to `[]` (or `null` in single mode).
461
459
  clearable
462
460
  compact
463
461
  hint="Pick up to 3 cities"
464
- item-text="label"
465
- item-value="value"
466
462
  :items="options"
467
463
  label="Cities"
468
464
  :max="3"
@@ -552,8 +548,6 @@ v-model is yours:
552
548
  <BbSelect
553
549
  v-model="channels"
554
550
  compact
555
- item-text="label"
556
- item-value="value"
557
551
  :items="options"
558
552
  label="Notify via"
559
553
  :max-selected-labels="2"
@@ -723,7 +717,6 @@ on your setup:
723
717
  v-model="city"
724
718
  compact
725
719
  :filter-by="['label', 'country']"
726
- item-text="label"
727
720
  item-value="id"
728
721
  :items="cities"
729
722
  label="City"
@@ -1074,8 +1067,6 @@ options to look, so you have to say so:
1074
1067
  <BbSelect
1075
1068
  v-model="location"
1076
1069
  compact
1077
- item-text="label"
1078
- item-value="value"
1079
1070
  :items="loadLocations"
1080
1071
  label="Location"
1081
1072
  placeholder="Select location…"
@@ -1135,8 +1126,6 @@ locations" renders from the first paint:
1135
1126
  ```vue
1136
1127
  <BbSelect
1137
1128
  v-model="state.location"
1138
- item-text="label"
1139
- item-value="value"
1140
1129
  :items="[
1141
1130
  { label: 'All locations', value: null },
1142
1131
  { label: 'Milan', value: 'milan' },
@@ -1203,8 +1192,6 @@ disabled field still submits its value.
1203
1192
  v-model="province"
1204
1193
  clearable
1205
1194
  compact
1206
- item-text="label"
1207
- item-value="value"
1208
1195
  :items="provinces"
1209
1196
  label="Province"
1210
1197
  placeholder="Pick a province"
@@ -1217,8 +1204,6 @@ disabled field still submits its value.
1217
1204
  :disabled="!province"
1218
1205
  empty-text="Choose a province first"
1219
1206
  enforce-coherence
1220
- item-text="label"
1221
- item-value="value"
1222
1207
  :items="loadCities"
1223
1208
  label="City"
1224
1209
  :placeholder="province ? 'Pick a city' : 'Select a province first'"
@@ -1556,8 +1541,6 @@ lists window per row) or pre-chunk the data into smaller groups.
1556
1541
  clearable
1557
1542
  compact
1558
1543
  group-by="department"
1559
- item-text="label"
1560
- item-value="value"
1561
1544
  :items="roles"
1562
1545
  label="Role"
1563
1546
  placeholder="Pick a role"
@@ -1620,8 +1603,6 @@ compact control, so it keeps the compact rows on every device — turning
1620
1603
  <BbSelect
1621
1604
  v-model="assignee"
1622
1605
  compact
1623
- item-text="label"
1624
- item-value="value"
1625
1606
  :items="teammates"
1626
1607
  label="Assignee"
1627
1608
  placeholder="Choose a teammate"
@@ -1699,8 +1680,6 @@ once the chips outgrow the field — keep chips compact, or raise
1699
1680
  <BbSelect
1700
1681
  v-model="tags"
1701
1682
  clearable
1702
- item-text="label"
1703
- item-value="value"
1704
1683
  :items="tagItems"
1705
1684
  label="Labels"
1706
1685
  multiple
@@ -2080,8 +2059,9 @@ it: [passthrough guide § Typing `pt` in `<script>`](./guides/passthrough.md#typ
2080
2059
 
2081
2060
  ### Anti-patterns
2082
2061
 
2083
- - Pre-mapping items to `{ label, value }`, or storing whole objects in the
2084
- model when an id is enough.
2062
+ - Pre-mapping domain rows into `{ label, value }` copies (name their fields with
2063
+ `item-text` / `item-value` instead), or storing whole objects in the model
2064
+ when an id is enough.
2085
2065
  - `watch(filter, refetch)` when `dependencies` exists; blind `model = null`
2086
2066
  resets when `enforce-coherence` would preserve still-valid values.
2087
2067
  - Hand-rolled debounce or loading refs around the provider.
@@ -2149,8 +2129,8 @@ it: [passthrough guide § Typing `pt` in `<script>`](./guides/passthrough.md#typ
2149
2129
  | `itemHeight` | `number \| undefined` | `28` | | Height of the options in the listbox (px). Defaults to 28px (24px compact; 44px / 36px on mobile viewports). An explicit value wins on every viewport. |
2150
2130
  | `itemProps` | `BbSelectItemProps<T> \| undefined` | | | ADDITIONAL row fields resolved from each item — never its text or value (those stay on `itemText` / `itemValue`). Accepted fields: - `description` — a muted line under the option label. Setting it gives every row a fixed two-line height (the list is virtualized); the description stays on one line and ellipsizes. Announced as the option's description, never part of its name; matched by the search with the text when `filterBy` is empty. - `prepend:icon` — an icon before the label. - `append:icon` — an icon after the label; on the selected row the check takes its place. Either an object with a path or getter per field (`{ description: 'email', 'prepend:icon': 'icon' }`) or a function returning the fields (`(item) => ({ description: item.email })`). Without it no field renders — nothing is read off the item implicitly — and an empty value renders nothing for that item. Never shown in the trigger or the chips. To disable individual options use `selectable`. |
2151
2131
  | `items` | `T[] \| ((context: BbSelectItemsContext) => T[] \| Promise<T[]>)` | | yes | The options: an array, or a provider function called with ONE context object and returning the rows, sync or async. The context carries: - `query` — what the user typed, `''` until they type; - `reason` — why this call happened: `'search'` (the user typed, and nothing else), `'initial'` (the first load, on mount or on the first open), `'dependencies'` (a `dependencies` entry or the `items` function changed; a retry arrives this way), `'model'` (the model changed from outside and the options cannot resolve it), `'reopen'` (the panel reopened over a searched list). To resolve the selection by id, branch on `reason !== 'search'`; - `modelValue` — the `v-model` as-is; - `signal` — an `AbortSignal`, aborted when a newer call starts or the component is disposed; pass it to every request. A provider signals a failure by THROWING, never by returning `[]`: the rows are cleared, nothing is pruned, and `#empty` receives the `error` (`failed-text` is shown). A newer call aborts the one in flight, and the aborted call's rejection or resolution is dropped silently. Zero-argument providers keep working. Annotate the parameter `BbSelectItemsContext`. |
2152
- | `itemText` | `ItemAccessor<T, string> \| undefined` | `JSON.stringify(item)` | | Defines a path that returns a property of the object to use as text or a function that returns a string. |
2153
- | `itemValue` | `ItemAccessor<T> \| undefined` | `the whole item` | | Defines a path that returns a property of the object to use as value or a function that returns any value. |
2132
+ | `itemText` | `ItemAccessor<T, string> \| undefined` | `own `label`, else `text`, else `JSON.stringify(item)`` | | Defines a path that returns a property of the object to use as text or a function that returns a string. Unset: own `label`, else `text` (`{ label, value }` needs no accessor). |
2133
+ | `itemValue` | `ItemAccessor<T> \| undefined` | `own `value`, else the whole item` | | Defines a path that returns a property of the object to use as value or a function that returns any value. Unset: own `value`, even `null`. |
2154
2134
  | `label` | `string` | | yes | Text content of the label of the element. |
2155
2135
  | `labelAlign` | `'top'` \| `'center'` \| `'bottom'` | | | Vertical position of the label block in a side-by-side row; not `labelPosition`, the horizontal one. Omitted, the label's first line meets the control's. |
2156
2136
  | `labelMode` | `"outside" \| "floating" \| "inside" \| undefined` | | | Label rendering mode. |
@@ -60,17 +60,14 @@ driving a trigger you render yourself.
60
60
 
61
61
  ### Map options with `item-text` / `item-value`
62
62
 
63
- **Object items need `item-text`.** Without it each label is
64
- `JSON.stringify(item)`, and without `item-value` the whole object is the value.
65
- `{ label, value }` items take both:
63
+ **`{ label, value }` and `{ text, value }` items work as they are; any other
64
+ shape needs `item-text` / `item-value`.** With neither prop an option reads its
65
+ own `label` (else its own `text`) and its own `value`, whatever it holds (`null`
66
+ included). An object with none of those fields falls back to
67
+ `JSON.stringify(item)` as text and the whole object as value.
66
68
 
67
69
  ```vue
68
- <BbSelectPopover
69
- v-model="plan"
70
- :items="plans"
71
- item-text="label"
72
- item-value="value"
73
- />
70
+ <BbSelectPopover v-model="plan" :items="plans" />
74
71
  ```
75
72
 
76
73
  Pass your domain objects to `items` as they are and name the display/value
@@ -78,8 +75,9 @@ fields with `item-text` / `item-value` (dot-paths or extractor functions). The
78
75
  `v-model` holds the resolved **value**, not the whole object. The value-identity
79
76
  rules are the shared ones (see the Options and Items playbook), in brief:
80
77
 
81
- - Primitive `items` (`string[]` / `number[]`) need no mapping props; for object
82
- items always set both.
78
+ - Primitive `items` (`string[]` / `number[]`) and `{ label, value }` /
79
+ `{ text, value }` objects need no mapping props; any other object shape needs
80
+ both.
83
81
  - Matching compares **value hashes** (deep structural equality), so object
84
82
  values survive refetches — but prefer stable primitive ids.
85
83
  - Options resolving to a **duplicate value are silently dropped** (first wins).
@@ -91,7 +89,8 @@ rules are the shared ones (see the Options and Items playbook), in brief:
91
89
 
92
90
  #### Additional row fields: `item-props`
93
91
 
94
- `item-text` and `item-value` are the option's label and identity. Anything
92
+ The option's text and value (from `item-text` / `item-value`, or the item's own
93
+ `label` and `value`) are its label and identity. Anything
95
94
  **additional** about a row comes from `item-props`. Select options accept three
96
95
  fields:
97
96
 
@@ -373,8 +372,6 @@ height wins everywhere.
373
372
  v-model="owner"
374
373
  compact
375
374
  :item-height="48"
376
- item-text="label"
377
- item-value="value"
378
375
  :items="people"
379
376
  width="240px"
380
377
  >
@@ -460,8 +457,6 @@ and edit forms, `signal`, failure — is in the BbSelect guide.
460
457
  v-model="destination"
461
458
  compact
462
459
  empty-text="No city found"
463
- item-text="label"
464
- item-value="value"
465
460
  :items="searchCities"
466
461
  loading-text="Searching…"
467
462
  :query-debounce-time="250"
@@ -800,8 +795,6 @@ row, including the hundreds nobody ever opens.
800
795
  <BbSelectPopover
801
796
  compact
802
797
  disable-writing
803
- item-text="label"
804
- item-value="value"
805
798
  :items="statuses"
806
799
  :model-value="valueOf(item, 'status')"
807
800
  width="180px"
@@ -1055,8 +1048,6 @@ option. Identical to `BbSelect`, anchored to your trigger.
1055
1048
  v-model="role"
1056
1049
  compact
1057
1050
  group-by="department"
1058
- item-text="label"
1059
- item-value="value"
1060
1051
  :items="roles"
1061
1052
  width="240px"
1062
1053
  >
@@ -1286,14 +1277,7 @@ their string equivalents `loading-text` / `empty-text`.
1286
1277
  <span class="pr-1 text-xs font-medium text-(--bb-text-muted)"
1287
1278
  >Destination</span
1288
1279
  >
1289
- <BbSelectPopover
1290
- v-model="city"
1291
- compact
1292
- item-text="label"
1293
- item-value="value"
1294
- :items="cities"
1295
- width="240px"
1296
- >
1280
+ <BbSelectPopover v-model="city" compact :items="cities" width="240px">
1297
1281
  <template #activator="{ props }">
1298
1282
  <BbBadge
1299
1283
  append:icon="lucide:chevron-down"
@@ -1793,8 +1777,8 @@ A `pt` value written in `<script>` (a constant, a preset, a wrapper's
1793
1777
  | `itemHeight` | `number \| undefined` | `28` | | Height of the options in the listbox (px). Defaults to 28px (24px compact; 44px / 36px on mobile viewports). An explicit value wins on every viewport. |
1794
1778
  | `itemProps` | `BbSelectItemProps<Item> \| undefined` | | | ADDITIONAL row fields resolved from each item — never its text or value (those stay on `itemText` / `itemValue`). Accepted fields: - `description` — a muted line under the option label. Setting it gives every row a fixed two-line height (the list is virtualized); the description stays on one line and ellipsizes. Announced as the option's description, never part of its name; matched by the search with the text when `filterBy` is empty. - `prepend:icon` — an icon before the label. - `append:icon` — an icon after the label; on the selected row the check takes its place. Either an object with a path or getter per field (`{ description: 'email', 'prepend:icon': 'icon' }`) or a function returning the fields (`(item) => ({ description: item.email })`). Without it no field renders — nothing is read off the item implicitly — and an empty value renders nothing for that item. Never shown in the trigger or the chips. To disable individual options use `selectable`. |
1795
1779
  | `items` | `Item[] \| ((context: BbSelectPopoverItemsContext) => Item[] \| Promise<Item[]>)` | `[]` | yes | The options: an array, or a provider function called with ONE context object and returning the rows, sync or async. The context carries: - `query` — what the user typed, `''` until they type; - `reason` — why this call happened: `'search'` (the user typed, and nothing else), `'initial'` (the first load, on mount or on the first open), `'dependencies'` (a `dependencies` entry or the `items` function changed; a retry arrives this way), `'model'` (the model changed from outside and the options cannot resolve it), `'reopen'` (the panel reopened over a searched list). To resolve the selection by id, branch on `reason !== 'search'`; - `modelValue` — the raw v-model: an array in `multiple` mode, the raw model value (possibly `null`) in single mode; - `signal` — an `AbortSignal`, aborted when a newer call starts or the component is disposed; pass it to every request. A provider signals a failure by THROWING, never by returning `[]`: the rows are cleared, nothing is pruned, and `#empty` receives the `error` (`failed-text` is shown). A newer call aborts the one in flight, and the aborted call's rejection or resolution is dropped silently. Zero-argument providers keep working. Annotate the parameter `BbSelectPopoverItemsContext`. |
1796
- | `itemText` | `ItemAccessor<Item, string> \| undefined` | `JSON.stringify(item)` | | Path to item property for display text or function to extract it. |
1797
- | `itemValue` | `ItemAccessor<Item> \| undefined` | `the whole item` | | Path to item property for value or function to extract it. |
1780
+ | `itemText` | `ItemAccessor<Item, string> \| undefined` | `own `label`, else `text`, else `JSON.stringify(item)`` | | Path to item property for display text or function to extract it. Unset: own `label`, else `text` (`{ label, value }` needs no accessor). |
1781
+ | `itemValue` | `ItemAccessor<Item> \| undefined` | `own `value`, else the whole item` | | Path to item property for value or function to extract it. Unset: own `value`, even `null`. |
1798
1782
  | `loading` | `boolean \| undefined` | `false` | | Display the loading state styles. |
1799
1783
  | `loadingText` | `string \| undefined` | | | Message shown while items are being loaded. |
1800
1784
  | `max` | `number \| undefined` | `Infinity` | | Maximum number of selectable items (limits selection when `multiple` is true). |
@@ -125,7 +125,6 @@ controls above and the actions below stay put while the middle animates.
125
125
  <BbRadioGroup
126
126
  v-model="method"
127
127
  compact
128
- item-text="label"
129
128
  item-value="id"
130
129
  :items="methods"
131
130
  legend="Payment method"
@@ -485,7 +484,6 @@ the box.
485
484
  <BbRadioGroup
486
485
  v-model="method"
487
486
  compact
488
- item-text="label"
489
487
  item-value="id"
490
488
  :items="methods"
491
489
  legend="Payment method"
@@ -67,18 +67,14 @@ Choose on what the flip _means_, not on whether a Save button exists.
67
67
 
68
68
  ### Items are your domain objects
69
69
 
70
- **Object items need `item-text`.** Without it each label is
71
- `JSON.stringify(item)`, and without `item-value` the whole object is the value.
72
- `{ label, value }` items take both:
70
+ **`{ label, value }` and `{ text, value }` items work as they are; any other
71
+ shape needs `item-text` / `item-value`.** With neither prop an option reads its
72
+ own `label` (else its own `text`) and its own `value`, whatever it holds (`null`
73
+ included). An object with none of those fields falls back to
74
+ `JSON.stringify(item)` as text and the whole object as value.
73
75
 
74
76
  ```vue
75
- <BbSwitchGroup
76
- v-model="enabled"
77
- legend="Features"
78
- :items="options"
79
- item-text="label"
80
- item-value="value"
81
- />
77
+ <BbSwitchGroup v-model="enabled" legend="Features" :items="options" />
82
78
  ```
83
79
 
84
80
  `BbSwitchGroup` is items-driven and shares the checkbox group's mapping API.
@@ -97,7 +93,6 @@ stored value with `item-text` / `item-value` — never pre-map into
97
93
  v-model="channels"
98
94
  compact
99
95
  description="Each channel applies the moment you flip it."
100
- item-text="label"
101
96
  item-value="id"
102
97
  :items="options"
103
98
  legend="Where should we reach you?"
@@ -138,7 +133,8 @@ keep values unique — prefer stable primitive ids.
138
133
 
139
134
  #### Additional row fields: `item-props`
140
135
 
141
- `item-text` and `item-value` are the option's label and identity. Anything
136
+ The option's text and value (from `item-text` / `item-value`, or the item's own
137
+ `label` and `value`) are its label and identity. Anything
142
138
  **additional** about a row comes from `item-props` — for option groups that is
143
139
  one field, `description`: a muted line **under** the switch's label, beside the
144
140
  control.
@@ -406,7 +402,6 @@ explains why:
406
402
  <div class="grid max-w-sm gap-2 rounded-(--bb-radius) border p-3">
407
403
  <BbSwitchGroup
408
404
  compact
409
- item-text="label"
410
405
  item-value="id"
411
406
  :items="flags"
412
407
  legend="Feature flags"
@@ -503,7 +498,6 @@ involved. See the [fetch-items](../../ai/guides/fetch-items-playbook.md) and
503
498
  <BbRadioGroup
504
499
  v-model="plan"
505
500
  compact
506
- item-text="label"
507
501
  item-value="id"
508
502
  :items="plans"
509
503
  legend="Workspace plan"
@@ -517,7 +511,6 @@ involved. See the [fetch-items](../../ai/guides/fetch-items-playbook.md) and
517
511
  :deps-debounce-time="150"
518
512
  enforce-coherence
519
513
  hint="Channels outside the current plan turn off automatically."
520
- item-text="label"
521
514
  item-value="id"
522
515
  :items="loadChannels"
523
516
  legend="Alert channels"
@@ -639,7 +632,6 @@ broadcast over every row, `pt:item:checked` resolves per row.
639
632
  v-model="channels"
640
633
  class="w-full"
641
634
  description="Each channel applies the moment you flip it."
642
- item-text="label"
643
635
  item-value="id"
644
636
  :items="options"
645
637
  legend="Notifications"
@@ -713,8 +705,9 @@ for a preset that fits any row type (never `<any>`), not an imported
713
705
  - A `disabled` field on an item object does nothing — it is inert data. Gate
714
706
  options with the `selectable` predicate, or disable the whole group with
715
707
  `disabled`.
716
- - Don't pre-map `items` into `{ label, value }` — pass raw rows and resolve with
717
- `item-text` / `item-value`.
708
+ - Don't pre-map domain rows into `{ label, value }` copies — pass raw rows and
709
+ resolve with `item-text` / `item-value` (a list that already is
710
+ `{ label, value }` needs neither).
718
711
  - A native (non-JS) form post needs `name`: the group generates none, unlike
719
712
  `BbRadioGroup`, where the name is what ties the options together. Independent
720
713
  switches need no tie, so with `v-model` alone leave it off.
@@ -771,8 +764,8 @@ for a preset that fits any row type (never `<any>`), not an imported
771
764
  | `itemProps` | `BbOptionGroupItemProps<T> \| undefined` | | | ADDITIONAL row fields resolved from each item — never its text or value (those stay on `itemText` / `itemValue`). Option groups accept one field: - `description` — a muted line under the option label, beside the control; it may wrap. Either an object with a path or getter per field (`{ description: 'email' }`) or a function returning the fields (`(item) => ({ description: item.email })`). Without it no field renders — an item's own `description` is never read implicitly — and an empty value renders nothing for that item. The description is announced as the option's description, never part of its name. To disable individual options use `selectable`. |
772
765
  | `itemReverse` | `boolean \| undefined` | `false` | | Swaps each row's input and label from their natural order (input first), in every `item-layout`. `reverse` swaps the legend and the options instead. |
773
766
  | `items` | `T[] \| ((context: BbCheckboxGroupItemsContext) => T[] \| Promise<T[]>)` | | yes | The options: an array, or a provider function called with ONE context object and returning the rows, sync or async. The context carries: - `reason` — why this call happened: `'initial'` (the first load, on mount), `'dependencies'` (a `dependencies` entry or the `items` function changed; a retry arrives this way) or `'model'` (the model changed from outside and the options cannot resolve it). The group has no search field, so it never passes `query`; - `modelValue` — the `v-model` as-is; - `signal` — an `AbortSignal`, aborted when a newer call starts or the group is disposed; pass it to every request. A provider signals a failure by THROWING, never by returning `[]`: the rows are cleared, nothing is pruned, and `#empty` receives the `error` (`failed-text` is shown). Zero-argument providers keep working. Annotate the parameter `BbCheckboxGroupItemsContext` (`BbSwitchGroupItemsContext` on a switch group, the same shape). |
774
- | `itemText` | `ItemAccessor<T, string> \| undefined` | `JSON.stringify(item)` | | Defines a path that returns a property of the object to use as text or a function that returns a string. |
775
- | `itemValue` | `ItemAccessor<T> \| undefined` | `the whole item` | | Defines a path that returns a property of the object to use as value or a function that returns any value. |
767
+ | `itemText` | `ItemAccessor<T, string> \| undefined` | `own `label`, else `text`, else `JSON.stringify(item)`` | | Defines a path that returns a property of the object to use as text or a function that returns a string. Unset: own `label`, else `text` (`{ label, value }` needs no accessor). |
768
+ | `itemValue` | `ItemAccessor<T> \| undefined` | `own `value`, else the whole item` | | Defines a path that returns a property of the object to use as value or a function that returns any value. Unset: own `value`, even `null`. |
776
769
  | `labelAlign` | `'top'` \| `'center'` \| `'bottom'` | | | Vertical position of the label block in a side-by-side row; not `labelPosition`, the horizontal one. Omitted, the label's first line meets the control's. |
777
770
  | `layout` | `FieldLayout \| undefined` | | | How the label and the input sit together: `'vertical'`, `'horizontal'` (50/50), `'auto'`, `'label-fill'` (the label takes the free space, the input keeps its size), `'input-fill'` (the other way round), or a two-word ratio pattern like `'xx xxxxx'`. |
778
771
  | `legend` | `string` | | yes | Text content of the legend. |
@@ -376,7 +376,7 @@ plus `columnKey` (the raw column key) so a table-wide template can branch per
376
376
  column. When both a per-column and the table-wide slot are provided for the
377
377
  same side, the per-column one wins for that column — they never stack. Affixes
378
378
  render even beside a full `#<key>:header` replacement (the same rule as
379
- BbDropdown's `#<key>:prepend/append`). The key always comes first, so a
379
+ BbDropdown's `#<value>:prepend/append`). The key always comes first, so a
380
380
  column keyed `prepend` still owns `#prepend:header`, and `#header:prepend`
381
381
  stays the table-wide slot.
382
382
 
@@ -648,7 +648,9 @@ const euro = (value: number) =>
648
648
  ```
649
649
 
650
650
  `#tfoot` stays for footers that are not column-shaped (a note spanning the
651
- table, a legend).
651
+ table, a legend). Its `role="row"` elements are rows of the table too: the
652
+ table gives each the next `aria-rowindex` after the body and counts them in
653
+ `aria-rowcount` (an `aria-rowindex` you write yourself is kept).
652
654
 
653
655
  ### Loading and empty states
654
656
 
@@ -2694,8 +2696,6 @@ rollback on failure, and overlay retirement inside the items function.
2694
2696
  <BbSelectPopover
2695
2697
  compact
2696
2698
  disable-writing
2697
- item-text="label"
2698
- item-value="value"
2699
2699
  :items="statuses"
2700
2700
  :model-value="valueOf(item, 'status')"
2701
2701
  width="170px"
@@ -3295,10 +3295,11 @@ reader.
3295
3295
 
3296
3296
  ### Config and platform
3297
3297
 
3298
- - **Locale.** The plugin's `locale` (`it`/`en`) drives the built-in strings:
3298
+ - **Locale.** The plugin's `locale` (`en`, `it`, `de` or any other shipped locale) drives the built-in strings:
3299
3299
  the empty text, the select-all label, the single-select header text, and
3300
- the "Select" prefix of each row's accessible selection label. Override any
3301
- of them per table via `empty-text` / `select-all-label` / `select-text`.
3300
+ each row's accessible selection label ("Select …" in `en`, "… auswählen" in
3301
+ `de`). Override the first three per table via `empty-text` /
3302
+ `select-all-label` / `select-text`, the row label via `accessible-label`.
3302
3303
  - **`actions-text` is localized** like the other built-in strings (`it` →
3303
3304
  `Azioni`, `en` → `Actions`). Seeing `Actions` in an Italian app means the
3304
3305
  plugin is still on the default locale, which is `en` — set the plugin's
@@ -3649,8 +3650,8 @@ for a preset that fits any row type (never `<any>`), not an imported
3649
3650
  - `loading-text` is `sr-only` — it is announced, never painted. The visible
3650
3651
  loading signal is the skeleton (or your `#loading` slot). It defaults to the
3651
3652
  localized `common.loadingText`, so an unset value still announces.
3652
- - Row selection labels default to the localized "select" word plus every
3653
- cell's content. `accessible-label` overrides that per row — it is called
3653
+ - Row selection labels default to every cell's content inside the locale's
3654
+ "select" template (`Select {0}`, `{0} auswählen`). `accessible-label` overrides that per row — it is called
3654
3655
  `(columns, item)` with the mapped cells (in **render** order — look them up
3655
3656
  by `key`, never by position) and the raw record, and whatever it returns
3656
3657
  becomes the checkbox's label.
@@ -3892,7 +3893,7 @@ States are listed in precedence order: when two are on at once and their entries
3892
3893
  - `tbody` — scope: `object` — Replaces the content of the body row group (`.bb-table__body`). Use when you need full control over the body markup. Provide role-complete rows — `<div role="row">` holding one `<div role="cell">` per column — never a `<tr>`/`<td>`. A full-width cell spans with `grid-column: 1 / -1`.
3893
3894
  - `tfoot` — scope: `{ columnCount: number; }` — Fills the footer row group (`.bb-table__foot`). Use when you need a footer. Provide role-complete rows — `<div role="row">` holding `<div role="cell">` elements — never a `<tr>`/`<td>`.
3894
3895
  - `thead` — scope: `object` — Replaces the content of the header row group (`.bb-table__head`). Use when you need full control over the header markup. The table is a CSS grid, not a `<table>`: provide role-complete rows — `<div role="row">` holding one `<div role="columnheader">` per column — and never a `<tr>`/`<th>`. Rows are subgrid rows, so each cell lands on the matching column track.
3895
- - `#<key>` (named from data) — scope: `object` — One column's body cell in every row, by the column `key` through `slotKey`. Scope: `{ item, value, content, selected, expanded, highlighted, classes, sortOrder, toggleSelected, toggleExpanded, toggleHighlighted, expandProps }`. Reserved keys (their slot is one of this component's own, so a key spelled like them is an error): `actions`, `empty`, `expand`, `loading`, `select`, `tbody`, `tfoot`, `thead`.
3896
+ - `#<key>` (named from data) — scope: `object` — One column's body cell in every row, by the column `key` through `slotKey`. Scope: `{ item, value, content, selected, expanded, highlighted, classes, sortOrder, toggleSelected, toggleExpanded, toggleHighlighted, expandProps }`. Reserved names (their slot is one of this component's own, so an item value or column key spelled like them is an error): `actions`, `empty`, `expand`, `loading`, `select`, `tbody`, `tfoot`, `thead`.
3896
3897
  - `#<key>:header` (named from data) — scope: `object` — One column's header content, replacing its label and the built-in sort button. Scope: `{ label, items, sortable, sortOrder, toggleSort, hideColumn, classes }`.
3897
3898
  - `#<key>:header:prepend` (named from data) — scope: `BbTableHeaderAffixSlotProps<Item>` — Content before one column's header, keeping the sort button; beats `header:prepend` (they never stack).
3898
3899
  - `#<key>:header:append` (named from data) — scope: `BbTableHeaderAffixSlotProps<Item>` — Content after one column's header, keeping the sort button; beats `header:append` (they never stack).