bitboss-ui 3.0.0-beta.47 → 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 (398) hide show
  1. package/README.md +24 -7
  2. package/bin/bitboss-ui-mcp.mjs +15 -3
  3. package/bin/bitboss-ui.mjs +167 -14
  4. package/dist/ai/BbAccordion.md +1 -1
  5. package/dist/ai/BbAvatar.md +1 -1
  6. package/dist/ai/BbBreadcrumbs.md +65 -65
  7. package/dist/ai/BbButton.md +28 -8
  8. package/dist/ai/BbCheckbox.md +0 -2
  9. package/dist/ai/BbCheckboxGroup.md +13 -20
  10. package/dist/ai/BbCollapsible.md +1 -1
  11. package/dist/ai/BbColorPalette.md +1 -1
  12. package/dist/ai/BbConfirm.md +8 -0
  13. package/dist/ai/BbConfirmPortal.md +1 -1
  14. package/dist/ai/BbDatePickerInput.md +4 -2
  15. package/dist/ai/BbDialog.md +1 -8
  16. package/dist/ai/BbDropdown.md +231 -220
  17. package/dist/ai/BbDropdownButton.md +65 -65
  18. package/dist/ai/BbDropdownGroup.md +2 -2
  19. package/dist/ai/BbDropzone.md +10 -10
  20. package/dist/ai/BbForm.md +43 -52
  21. package/dist/ai/BbHoverCard.md +19 -7
  22. package/dist/ai/BbHoverCardPortal.md +1 -1
  23. package/dist/ai/BbNumberInput.md +88 -21
  24. package/dist/ai/BbPopover.md +47 -40
  25. package/dist/ai/BbPopoverPortal.md +1 -1
  26. package/dist/ai/BbProgress.md +48 -22
  27. package/dist/ai/BbRadioGroup.md +13 -19
  28. package/dist/ai/BbSelect.md +16 -36
  29. package/dist/ai/BbSelectPopover.md +14 -30
  30. package/dist/ai/BbSmoothHeight.md +0 -2
  31. package/dist/ai/BbSwitchGroup.md +13 -20
  32. package/dist/ai/BbTable.md +11 -10
  33. package/dist/ai/BbTabs.md +107 -106
  34. package/dist/ai/BbTabsList.md +2 -2
  35. package/dist/ai/BbTabsPanels.md +1 -1
  36. package/dist/ai/BbTabsRoot.md +3 -3
  37. package/dist/ai/BbTooltip.md +29 -13
  38. package/dist/ai/BbTree.md +14 -11
  39. package/dist/ai/CommonPopover.md +1 -1
  40. package/dist/ai/changelog.json +297 -6
  41. package/dist/ai/components.json +50 -45
  42. package/dist/ai/composables/useBbDropdownContext.md +16 -16
  43. package/dist/ai/composables/useBbFormField.md +5 -1
  44. package/dist/ai/composables/useBbTabsContext.md +14 -14
  45. package/dist/ai/guides/agent-contract.md +27 -27
  46. package/dist/ai/guides/ai-router.md +1 -1
  47. package/dist/ai/guides/component-picker.md +3 -3
  48. package/dist/ai/guides/fetch-items-playbook.md +1 -1
  49. package/dist/ai/guides/icons-policy.md +10 -10
  50. package/dist/ai/guides/inertia-helpers.md +120 -67
  51. package/dist/ai/guides/installation-and-plugin-setup.md +45 -15
  52. package/dist/ai/guides/migration/components/bb-breadcrumbs.md +3 -2
  53. package/dist/ai/guides/migration/components/bb-checkbox-group.md +16 -16
  54. package/dist/ai/guides/migration/components/bb-dropdown-button.md +9 -8
  55. package/dist/ai/guides/migration/components/bb-dropdown.md +15 -14
  56. package/dist/ai/guides/migration/components/bb-radio-group.md +2 -1
  57. package/dist/ai/guides/migration/components/bb-select-popover.md +6 -1
  58. package/dist/ai/guides/migration/components/bb-select.md +10 -2
  59. package/dist/ai/guides/migration/components/bb-switch-group.md +2 -1
  60. package/dist/ai/guides/migration/components/bb-tabs.md +9 -8
  61. package/dist/ai/guides/migration/components/bb-tooltip.md +1 -1
  62. package/dist/ai/guides/migration/v2-to-v3.md +143 -28
  63. package/dist/ai/guides/migration/v3-beta-css-classes.md +29 -27
  64. package/dist/ai/guides/migration/v3-beta-tooling.md +11 -0
  65. package/dist/ai/guides/options-items-playbook.md +30 -24
  66. package/dist/ai/guides/passthrough.md +4 -4
  67. package/dist/ai/guides/preset-components.md +18 -3
  68. package/dist/ai/guides/typescript-generic-components.md +1 -1
  69. package/dist/ai/guides/validated-forms.md +11 -22
  70. package/dist/ai/guides/validation-providers.md +4 -3
  71. package/dist/ai/helpers/inertia/manifest.json +636 -0
  72. package/dist/ai/helpers/inertia/types.ts +15 -0
  73. package/dist/ai/helpers/inertia/useAsyncFn.ts +110 -0
  74. package/dist/ai/helpers/inertia/useConfirmOnRouteLeave.ts +102 -0
  75. package/dist/ai/helpers/inertia/useDeleteCmd.ts +30 -0
  76. package/dist/ai/helpers/inertia/useHasChanged.ts +36 -0
  77. package/dist/ai/helpers/inertia/useIndexById.ts +23 -0
  78. package/dist/ai/helpers/inertia/useLazyProp.ts +148 -0
  79. package/dist/ai/helpers/inertia/useLazyPropGetter.ts +50 -0
  80. package/dist/ai/helpers/inertia/useLoading.ts +20 -0
  81. package/dist/ai/helpers/inertia/usePaginatedResponseContext.ts +88 -0
  82. package/dist/ai/helpers/inertia/usePromiseForm.ts +62 -0
  83. package/dist/ai/helpers/inertia/useProp.ts +63 -0
  84. package/dist/ai/helpers/inertia/useQuery.ts +19 -0
  85. package/dist/ai/helpers/inertia/useQueryObject.ts +116 -0
  86. package/dist/ai/helpers/inertia/useResourceContext.ts +69 -0
  87. package/dist/ai/helpers/inertia/useRouteQuery.ts +54 -0
  88. package/dist/ai/helpers/inertia/useScreenSizes.ts +23 -0
  89. package/dist/ai/helpers/inertia/useTableContext.ts +34 -0
  90. package/dist/ai/helpers/inertia/useTableSelectionContext.ts +48 -0
  91. package/dist/ai/helpers/inertia/useUntil.ts +33 -0
  92. package/dist/ai/helpers/inertia/utils.ts +24 -0
  93. package/dist/ai/index.md +6 -6
  94. package/dist/ai/manifest/components/BbAccordion.json +1 -1
  95. package/dist/ai/manifest/components/BbBreadcrumbs.json +10 -6
  96. package/dist/ai/manifest/components/BbBreadcrumbs.tree.json +1 -1
  97. package/dist/ai/manifest/components/BbButton.json +2 -1
  98. package/dist/ai/manifest/components/BbButton.tree.json +1 -1
  99. package/dist/ai/manifest/components/BbCheckboxGroup.json +2 -2
  100. package/dist/ai/manifest/components/BbCollapsible.json +1 -1
  101. package/dist/ai/manifest/components/BbColorPalette.json +1 -1
  102. package/dist/ai/manifest/components/BbConfirmPortal.json +5 -2
  103. package/dist/ai/manifest/components/BbDropdown.json +23 -20
  104. package/dist/ai/manifest/components/BbDropdown.tree.json +2 -2
  105. package/dist/ai/manifest/components/BbDropdownButton.json +22 -19
  106. package/dist/ai/manifest/components/BbDropdownButton.tree.json +1 -1
  107. package/dist/ai/manifest/components/BbDropdownGroup.json +2 -2
  108. package/dist/ai/manifest/components/BbForm.json +1 -0
  109. package/dist/ai/manifest/components/BbHoverCard.json +1 -1
  110. package/dist/ai/manifest/components/BbHoverCardPortal.json +2 -2
  111. package/dist/ai/manifest/components/BbNumberInput.json +6 -1
  112. package/dist/ai/manifest/components/BbNumberInput.tree.json +2 -1
  113. package/dist/ai/manifest/components/BbPopover.json +2 -1
  114. package/dist/ai/manifest/components/BbPopoverPortal.json +2 -2
  115. package/dist/ai/manifest/components/BbProgress.json +6 -6
  116. package/dist/ai/manifest/components/BbProgress.tree.json +1 -0
  117. package/dist/ai/manifest/components/BbRadioGroup.json +2 -2
  118. package/dist/ai/manifest/components/BbSelect.json +2 -2
  119. package/dist/ai/manifest/components/BbSelect.tree.json +2 -2
  120. package/dist/ai/manifest/components/BbSelectPopover.json +2 -2
  121. package/dist/ai/manifest/components/BbSelectPopover.tree.json +1 -1
  122. package/dist/ai/manifest/components/BbSwitchGroup.json +2 -2
  123. package/dist/ai/manifest/components/BbTabs.json +8 -7
  124. package/dist/ai/manifest/components/BbTabsList.json +3 -3
  125. package/dist/ai/manifest/components/BbTabsPanels.json +1 -1
  126. package/dist/ai/manifest/components/BbTabsRoot.json +6 -5
  127. package/dist/ai/manifest/components/BbTag.tree.json +1 -1
  128. package/dist/ai/manifest/components/BbTooltip.json +2 -2
  129. package/dist/ai/manifest/components/ChipsBox.tree.json +1 -1
  130. package/dist/ai/manifest/components/CommonPopover.json +1 -1
  131. package/dist/ai/manifest/index.json +2 -2
  132. package/dist/ai/manifest/meta.json +5 -0
  133. package/dist/ai/manifest/types.advanced.json +10 -9
  134. package/dist/ai/manifest/types.api.json +8 -5
  135. package/dist/ai/manifest/types.wrapper.json +1 -0
  136. package/dist/ai/recipes/inertia/approvals-inbox.md +16 -18
  137. package/dist/ai/recipes/inertia/inline-edit-workspace.md +23 -33
  138. package/dist/ai/recipes/inertia/layout-scaffold.md +16 -16
  139. package/dist/ai/recipes/inertia/onboarding.md +6 -10
  140. package/dist/ai/recipes/inertia/ownership-atlas.md +15 -18
  141. package/dist/ai/recipes/inertia/record-form.md +11 -11
  142. package/dist/ai/recipes/inertia/records-workspace.md +38 -41
  143. package/dist/ai/recipes/inertia/settings-workspace.md +26 -38
  144. package/dist/ai/recipes/inertia/upload-center.md +31 -39
  145. package/dist/ai/recipes/inertia/wizard-form.md +10 -19
  146. package/dist/ai/recipes/nuxt/approvals-inbox.md +7 -8
  147. package/dist/ai/recipes/nuxt/inline-edit-workspace.md +14 -24
  148. package/dist/ai/recipes/nuxt/layout-scaffold.md +16 -16
  149. package/dist/ai/recipes/nuxt/onboarding.md +2 -6
  150. package/dist/ai/recipes/nuxt/ownership-atlas.md +7 -9
  151. package/dist/ai/recipes/nuxt/record-form.md +5 -5
  152. package/dist/ai/recipes/nuxt/records-workspace.md +29 -31
  153. package/dist/ai/recipes/nuxt/settings-workspace.md +22 -34
  154. package/dist/ai/recipes/nuxt/upload-center.md +22 -29
  155. package/dist/ai/recipes/nuxt/wizard-form.md +3 -11
  156. package/dist/ai/recipes/vue/approvals-inbox.md +7 -8
  157. package/dist/ai/recipes/vue/inline-edit-workspace.md +14 -24
  158. package/dist/ai/recipes/vue/layout-scaffold.md +16 -16
  159. package/dist/ai/recipes/vue/onboarding.md +2 -6
  160. package/dist/ai/recipes/vue/ownership-atlas.md +7 -9
  161. package/dist/ai/recipes/vue/record-form.md +5 -5
  162. package/dist/ai/recipes/vue/records-workspace.md +29 -31
  163. package/dist/ai/recipes/vue/settings-workspace.md +22 -34
  164. package/dist/ai/recipes/vue/upload-center.md +22 -29
  165. package/dist/ai/recipes/vue/wizard-form.md +3 -11
  166. package/dist/ai/source/BbAccordion.md +1 -1
  167. package/dist/ai/source/BbAlert.md +3 -3
  168. package/dist/ai/source/BbBadge.md +14 -10
  169. package/dist/ai/source/BbBadgeButton.md +17 -12
  170. package/dist/ai/source/BbBaseButton.md +1 -1
  171. package/dist/ai/source/BbBaseRadioIcon.md +1 -0
  172. package/dist/ai/source/BbBaseSwitchIcon.md +1 -0
  173. package/dist/ai/source/BbBreadcrumbs.md +63 -42
  174. package/dist/ai/source/BbButton.md +84 -38
  175. package/dist/ai/source/BbCalendar.md +17 -16
  176. package/dist/ai/source/BbCheckbox.md +3 -2
  177. package/dist/ai/source/BbCheckboxGroup.md +11 -4
  178. package/dist/ai/source/BbCollapsible.md +2 -1
  179. package/dist/ai/source/BbColorInput.md +10 -9
  180. package/dist/ai/source/BbColorPalette.md +2 -1
  181. package/dist/ai/source/BbConfirm.md +18 -1
  182. package/dist/ai/source/BbConfirmPortal.md +20 -6
  183. package/dist/ai/source/BbDatePicker.md +2 -2
  184. package/dist/ai/source/BbDatePickerInput.md +47 -20
  185. package/dist/ai/source/BbDialog.md +5 -5
  186. package/dist/ai/source/BbDropdown.md +231 -158
  187. package/dist/ai/source/BbDropdownButton.md +19 -12
  188. package/dist/ai/source/BbDropdownGroup.md +127 -93
  189. package/dist/ai/source/BbForm.md +25 -1
  190. package/dist/ai/source/BbHoverCard.md +30 -3
  191. package/dist/ai/source/BbHoverCardPortal.md +18 -3
  192. package/dist/ai/source/BbIndicator.md +4 -0
  193. package/dist/ai/source/BbNumberInput.md +855 -19
  194. package/dist/ai/source/BbOffCanvas.md +27 -11
  195. package/dist/ai/source/BbPagination.md +3 -3
  196. package/dist/ai/source/BbPopover.md +185 -12
  197. package/dist/ai/source/BbPopoverPortal.md +30 -3
  198. package/dist/ai/source/BbProgress.md +82 -18
  199. package/dist/ai/source/BbRadioGroup.md +12 -5
  200. package/dist/ai/source/BbRating.md +11 -9
  201. package/dist/ai/source/BbSelect.md +16 -10
  202. package/dist/ai/source/BbSelectPopover.md +29 -23
  203. package/dist/ai/source/BbSlider.md +12 -6
  204. package/dist/ai/source/BbSwitch.md +3 -2
  205. package/dist/ai/source/BbSwitchGroup.md +5 -2
  206. package/dist/ai/source/BbTable.md +102 -18
  207. package/dist/ai/source/BbTabs.md +30 -24
  208. package/dist/ai/source/BbTabsList.md +29 -23
  209. package/dist/ai/source/BbTabsPanels.md +29 -23
  210. package/dist/ai/source/BbTabsRoot.md +28 -22
  211. package/dist/ai/source/BbTag.md +10 -9
  212. package/dist/ai/source/BbTextInput.md +5 -4
  213. package/dist/ai/source/BbTextarea.md +6 -5
  214. package/dist/ai/source/BbTimePicker.md +1 -1
  215. package/dist/ai/source/BbTimePickerInput.md +46 -9
  216. package/dist/ai/source/BbToast.md +10 -7
  217. package/dist/ai/source/BbToastPortal.md +10 -7
  218. package/dist/ai/source/BbTooltip.md +88 -11
  219. package/dist/ai/source/BbTree.md +21 -3
  220. package/dist/ai/source/CommonField.md +6 -4
  221. package/dist/ai/source/CommonFieldInput.md +15 -10
  222. package/dist/ai/source/CommonPopover.md +8 -1
  223. package/dist/ai/source/CommonTimeSelector.md +5 -4
  224. package/dist/components/BbBadge/BbBadgeButton.vue_vue_type_script_setup_true_lang.js +10 -8
  225. package/dist/components/BbBaseButton/BbBaseButton.vue_vue_type_script_setup_true_lang.js +8 -8
  226. package/dist/components/BbBreadcrumbs/BbBreadcrumbs.vue_vue_type_script_setup_true_lang.js +45 -45
  227. package/dist/components/BbBreadcrumbs/types.d.ts +25 -17
  228. package/dist/components/BbButton/BbButton.vue_vue_type_script_setup_true_lang.js +88 -70
  229. package/dist/components/BbButton/toggleRoving.d.ts +6 -0
  230. package/dist/components/BbButton/toggleRoving.js +45 -0
  231. package/dist/components/BbButton/types.d.ts +12 -4
  232. package/dist/components/BbButton/types.js +5 -1
  233. package/dist/components/BbCalendar/BbCalendar.vue_vue_type_script_setup_true_lang.js +178 -178
  234. package/dist/components/BbCalendar/CalendarMonthPanel.vue_vue_type_script_setup_true_lang.js +15 -15
  235. package/dist/components/BbCalendar/CalendarYearPanel.vue_vue_type_script_setup_true_lang.js +28 -28
  236. package/dist/components/BbCalendar/useCalendarGrid.js +141 -139
  237. package/dist/components/BbCalendar/useDayjsLocale.d.ts +38 -15
  238. package/dist/components/BbCalendar/useDayjsLocale.js +31 -30
  239. package/dist/components/BbCheckbox/BbCheckbox.vue_vue_type_script_setup_true_lang.js +48 -48
  240. package/dist/components/BbCheckboxGroup/BbCheckboxGroup.vue_vue_type_script_setup_true_lang.js +81 -80
  241. package/dist/components/BbCheckboxGroup/types.d.ts +6 -2
  242. package/dist/components/BbCollapsible/types.d.ts +2 -1
  243. package/dist/components/BbColorInput/BbColorInput.vue_vue_type_script_setup_true_lang.js +69 -69
  244. package/dist/components/BbColorPalette/types.d.ts +2 -1
  245. package/dist/components/BbConfirm/BbConfirmPortal.vue.d.ts +2 -5
  246. package/dist/components/BbConfirm/types.d.ts +15 -0
  247. package/dist/components/BbDatePickerInput/BbDatePickerInput.vue_vue_type_script_setup_true_lang.js +363 -349
  248. package/dist/components/BbDropdown/AdaptiveDropdown.vue_vue_type_script_setup_true_lang.js +91 -86
  249. package/dist/components/BbDropdown/BbDropdown.vue_vue_type_script_setup_true_lang.js +298 -289
  250. package/dist/components/BbDropdown/BbDropdownList.vue_vue_type_script_setup_true_lang.js +322 -356
  251. package/dist/components/BbDropdown/DropdownPipelineResolver.vue_vue_type_script_setup_true_lang.js +17 -15
  252. package/dist/components/BbDropdown/DropdownRow.vue.d.ts +40 -0
  253. package/dist/components/BbDropdown/DropdownRow.vue.js +5 -0
  254. package/dist/components/BbDropdown/DropdownRow.vue_vue_type_script_setup_true_lang.js +60 -0
  255. package/dist/components/BbDropdown/normalizeGroups.d.ts +8 -2
  256. package/dist/components/BbDropdown/normalizeGroups.js +60 -46
  257. package/dist/components/BbDropdown/types.d.ts +120 -88
  258. package/dist/components/BbDropdownButton/BbDropdownButton.vue_vue_type_script_setup_true_lang.js +11 -2
  259. package/dist/components/BbDropdownButton/types.d.ts +2 -2
  260. package/dist/components/BbForm/BbForm.vue.d.ts +9 -0
  261. package/dist/components/BbForm/BbForm.vue_vue_type_script_setup_true_lang.js +114 -105
  262. package/dist/components/BbForm/BbFormCustomField.js +1 -1
  263. package/dist/components/BbForm/bindFormField.js +2 -1
  264. package/dist/components/BbForm/formFields.d.ts +5 -0
  265. package/dist/components/BbHoverCard/BbHoverCard.vue_vue_type_script_setup_true_lang.js +145 -142
  266. package/dist/components/BbHoverCard/BbHoverCardPortal.vue.d.ts +2 -2
  267. package/dist/components/BbHoverCard/types.d.ts +14 -1
  268. package/dist/components/BbNumberInput/BbNumberInput.vue.d.ts +0 -1
  269. package/dist/components/BbNumberInput/BbNumberInput.vue_vue_type_script_setup_true_lang.js +452 -125
  270. package/dist/components/BbNumberInput/numberDisplay.d.ts +256 -0
  271. package/dist/components/BbNumberInput/numberDisplay.js +499 -0
  272. package/dist/components/BbNumberInput/types.d.ts +54 -1
  273. package/dist/components/BbNumberInput/warroom/corpus.d.ts +58 -0
  274. package/dist/components/BbNumberInput/warroom/currency-verify.rows.d.ts +28 -0
  275. package/dist/components/BbNumberInput/warroom/currency.rows.d.ts +2 -0
  276. package/dist/components/BbNumberInput/warroom/harness.d.ts +217 -0
  277. package/dist/components/BbNumberInput/warroom/oracle.d.ts +150 -0
  278. package/dist/components/BbPagination/BbPagination.vue_vue_type_script_setup_true_lang.js +7 -7
  279. package/dist/components/BbPopover/BbPopover.vue.d.ts +1 -0
  280. package/dist/components/BbPopover/BbPopover.vue_vue_type_script_setup_true_lang.js +207 -162
  281. package/dist/components/BbPopover/BbPopoverPortal.vue.d.ts +2 -2
  282. package/dist/components/BbPopover/types.d.ts +26 -1
  283. package/dist/components/BbProgress/BbProgress.vue_vue_type_script_setup_true_lang.js +15 -7
  284. package/dist/components/BbProgress/types.d.ts +23 -7
  285. package/dist/components/BbProgress/types.js +1 -1
  286. package/dist/components/BbRadioGroup/BbRadioGroup.vue_vue_type_script_setup_true_lang.js +102 -101
  287. package/dist/components/BbRadioGroup/types.d.ts +6 -2
  288. package/dist/components/BbRating/BbRating.vue_vue_type_script_setup_true_lang.js +63 -63
  289. package/dist/components/BbSelect/BbSelect.vue_vue_type_script_setup_true_lang.js +156 -154
  290. package/dist/components/BbSelect/types.d.ts +6 -2
  291. package/dist/components/BbSelectPopover/BbSelectPopover.vue_vue_type_script_setup_true_lang.js +2 -1
  292. package/dist/components/BbSelectPopover/types.d.ts +6 -2
  293. package/dist/components/BbSlider/BbSlider.vue_vue_type_script_setup_true_lang.js +153 -153
  294. package/dist/components/BbSwitch/BbSwitch.vue_vue_type_script_setup_true_lang.js +62 -62
  295. package/dist/components/BbSwitchGroup/BbSwitchGroup.vue_vue_type_script_setup_true_lang.js +131 -130
  296. package/dist/components/BbTable/BbTable.vue_vue_type_script_setup_true_lang.js +711 -676
  297. package/dist/components/BbTabs/BbTabs.vue_vue_type_script_setup_true_lang.js +1 -1
  298. package/dist/components/BbTabs/BbTabsList.vue_vue_type_script_setup_true_lang.js +1 -1
  299. package/dist/components/BbTabs/types.d.ts +28 -22
  300. package/dist/components/BbTag/BbTag.vue_vue_type_script_setup_true_lang.js +76 -76
  301. package/dist/components/BbTextInput/BbTextInput.vue_vue_type_script_setup_true_lang.js +58 -58
  302. package/dist/components/BbTextarea/BbTextarea.vue_vue_type_script_setup_true_lang.js +82 -82
  303. package/dist/components/BbTimePickerInput/BbTimePickerInput.vue_vue_type_script_setup_true_lang.js +246 -236
  304. package/dist/components/BbTooltip/BbTooltip.vue_vue_type_script_setup_true_lang.js +99 -86
  305. package/dist/components/BbTooltip/tooltipWarmup.d.ts +23 -0
  306. package/dist/components/BbTooltip/tooltipWarmup.js +7 -0
  307. package/dist/components/BbTooltip/types.d.ts +10 -3
  308. package/dist/components/BbTree/BbTree.vue_vue_type_script_setup_true_lang.js +29 -21
  309. package/dist/components/BbTree/BbTreeLevel.vue_vue_type_script_setup_true_lang.js +10 -7
  310. package/dist/components/CommonFieldInput/CommonFieldInput.vue_vue_type_script_setup_true_lang.js +37 -36
  311. package/dist/components/CommonPopover/types.d.ts +2 -1
  312. package/dist/components/CommonTimeSelector/CommonTimeSelector.vue_vue_type_script_setup_true_lang.js +9 -9
  313. package/dist/composables/formSubmitLock.d.ts +6 -0
  314. package/dist/composables/formSubmitLock.js +4 -0
  315. package/dist/composables/useBaseOptions.d.ts +7 -1
  316. package/dist/composables/useBaseOptions.js +32 -32
  317. package/dist/composables/useBbDropdownContext.d.ts +8 -8
  318. package/dist/composables/useBbFormField.d.ts +9 -0
  319. package/dist/composables/useBbFormField.js +5 -3
  320. package/dist/composables/useBbTabsContext.d.ts +10 -10
  321. package/dist/composables/useBbTabsContext.js +18 -18
  322. package/dist/composables/useFormBinding.d.ts +11 -0
  323. package/dist/composables/useFormBinding.js +15 -13
  324. package/dist/composables/useItemText.d.ts +5 -1
  325. package/dist/composables/useItemText.js +8 -3
  326. package/dist/composables/useItemValue.d.ts +5 -1
  327. package/dist/composables/useItemValue.js +8 -3
  328. package/dist/composables/useLocale.js +10 -9
  329. package/dist/deprecation/ai-deprecations.json.d.ts +130 -0
  330. package/dist/deprecation/ai-deprecations.json.js +1 -1
  331. package/dist/deprecation/removedProps.js +1 -1
  332. package/dist/directives/bbDropdown.js +1 -1
  333. package/dist/directives/directivePortal.d.ts +13 -7
  334. package/dist/directives/directivePortal.js +1 -4
  335. package/dist/i18n/index.d.ts +7 -12
  336. package/dist/i18n/locales/cs.json +11 -14
  337. package/dist/i18n/locales/da.json +13 -16
  338. package/dist/i18n/locales/de-CH.json +137 -0
  339. package/dist/i18n/locales/de.json +14 -17
  340. package/dist/i18n/locales/el.json +10 -13
  341. package/dist/i18n/locales/en-GB.json +137 -0
  342. package/dist/i18n/locales/en.json +8 -11
  343. package/dist/i18n/locales/es-MX.json +137 -0
  344. package/dist/i18n/locales/es.json +16 -19
  345. package/dist/i18n/locales/fi.json +8 -11
  346. package/dist/i18n/locales/fr.json +23 -26
  347. package/dist/i18n/locales/hu.json +8 -11
  348. package/dist/i18n/locales/it.json +12 -15
  349. package/dist/i18n/locales/ja.json +13 -16
  350. package/dist/i18n/locales/ko.json +10 -13
  351. package/dist/i18n/locales/nb.json +13 -16
  352. package/dist/i18n/locales/nl.json +21 -24
  353. package/dist/i18n/locales/pl.json +10 -13
  354. package/dist/i18n/locales/{pt.json → pt-BR.json} +19 -22
  355. package/dist/i18n/locales/pt-PT.json +137 -0
  356. package/dist/i18n/locales/ro.json +22 -25
  357. package/dist/i18n/locales/ru.json +11 -14
  358. package/dist/i18n/locales/sv.json +16 -19
  359. package/dist/i18n/locales/tr.json +14 -17
  360. package/dist/i18n/locales/uk.json +11 -14
  361. package/dist/i18n/locales/{zh-cn.json → zh-CN.json} +10 -13
  362. package/dist/i18n/locales/zh-HK.json +137 -0
  363. package/dist/i18n/locales/zh-TW.json +137 -0
  364. package/dist/i18n/regionHints.d.ts +16 -0
  365. package/dist/i18n/regionHints.js +49 -0
  366. package/dist/i18n/regions.d.ts +286 -0
  367. package/dist/i18n/regions.js +265 -0
  368. package/dist/index.d.ts +4 -4
  369. package/dist/index.js +4 -4
  370. package/dist/llms-full.txt +1914 -1714
  371. package/dist/llms-medium.txt +76 -46
  372. package/dist/llms.txt +7 -7
  373. package/dist/locale-blueprint.json +16 -13
  374. package/dist/styles.css +2 -2
  375. package/dist/types/passthrough.d.ts +1 -1
  376. package/dist/types/ptComponentMap.d.ts +2 -2
  377. package/dist/utilities/functions/slotKey.d.ts +2 -2
  378. package/dist/utils/versionCheck.js +1 -1
  379. package/dist/vite-plugin.d.ts +22 -19
  380. package/dist/vite.js +309 -297
  381. package/llms.txt +7 -7
  382. package/package.json +5 -3
  383. package/scripts/lib/agent-manifest.mjs +2 -1
  384. package/scripts/lib/eslint-disable.mjs +17 -4
  385. package/scripts/lib/eslint-plugin.d.ts +9 -1
  386. package/scripts/lib/eslint-plugin.mjs +256 -6
  387. package/scripts/lib/helper-canon.mjs +176 -0
  388. package/scripts/lib/helpers-add.mjs +1303 -0
  389. package/scripts/lib/local-components.mjs +33 -4
  390. package/scripts/lib/locale-check.mjs +165 -0
  391. package/scripts/lib/portal-names.mjs +458 -0
  392. package/scripts/lib/redundant-item-accessor.mjs +398 -0
  393. package/scripts/lib/renamed-item-field.mjs +343 -0
  394. package/scripts/lib/slot-key.mjs +2 -2
  395. package/scripts/lib/slot-renames.mjs +1 -1
  396. package/scripts/lib/unimported-components.mjs +5 -2
  397. package/scripts/lib/validate-bb-markup.mjs +123 -56
  398. package/dist/i18n/index.js +0 -27
@@ -115,7 +115,7 @@ inline-edit playbook) instead of inventing a new shape.
115
115
  | ⌘K / Ctrl+K global command palette | [BbSelectPopover](https://llms-bitboss-ui.bitboss.it/dist/ai/BbSelectPopover.md#a-k-command-palette) § A ⌘K command palette |
116
116
  | Tied selects / stale model cleanup | [coherence-playbook](https://llms-bitboss-ui.bitboss.it/dist/ai/guides/coherence-playbook.md) |
117
117
  | Async `items` providers / prefill | [fetch-items-playbook](https://llms-bitboss-ui.bitboss.it/dist/ai/guides/fetch-items-playbook.md) |
118
- | `item-text` / `item-value` / disabled | [options-items-playbook](https://llms-bitboss-ui.bitboss.it/dist/ai/guides/options-items-playbook.md) |
118
+ | `item-text` / `item-value` / the default `label` / `value` keys / disabled | [options-items-playbook](https://llms-bitboss-ui.bitboss.it/dist/ai/guides/options-items-playbook.md) |
119
119
  | Table cell edit ownership | [inline-edit-playbook](https://llms-bitboss-ui.bitboss.it/dist/ai/guides/inline-edit-playbook.md) |
120
120
  | Table row → detail (identity cells) | [agent-contract](https://llms-bitboss-ui.bitboss.it/dist/ai/guides/agent-contract.md) § Inline Links |
121
121
  | Peek that drills into related records | [agent-contract](https://llms-bitboss-ui.bitboss.it/dist/ai/guides/agent-contract.md) § Consult-Stack |
@@ -188,32 +188,32 @@ Use this contract before generating any UI code with `bitboss-ui`.
188
188
  The names agents guess most often, and the real ones. There are no aliases:
189
189
  a guessed name is an error (`npx bitboss-ui check` or `vue-tsc` says so).
190
190
 
191
- | You'd guess | bitboss-ui |
192
- | -------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
193
- | `toast.success('Saved')`, `{ message }`, `{ description }`, `type` | `const { toast } = useToast(); toast({ title, text, variant: 'success' })`; variants `default` `success` `info` `warning` `destructive` |
194
- | `<BbToastStack>`, a toaster per page | one `<BbToast />` (and one `<BbConfirm />` for `useConfirm`) at the app root |
195
- | BbDialog `v-model:open`, `:open` | `v-model` (a boolean) |
196
- | BbDialog `@close`, `@confirm`, `@cancel`, `#actions` | `@hide` (closing starts) / `@hidden` (closed); your own buttons in `#footer="{ close }"` |
197
- | BbTable `sortable`, `v-model:sorted`, `sort-order`, `@sort` | `sortable: true` per column + `v-model:sort` (a `BbTableSortEntry[]`, `[key, 'asc' \| 'desc']`); the table never sorts: you do |
198
- | `@row-click`, `@row:click` | `@click:row="(event, item) => …"` |
199
- | `row-key` | `item-value` |
200
- | column `title`, `header` | column `label` |
201
- | `#cell:createdAt`, `#createdAt`, `{ row }` | `#<key>` in kebab-case (`createdAt` → `#created-at`), scope `{ item, value }` |
202
- | a column keyed `actions` | reserved: the `#actions="{ item }"` slot creates the actions column |
203
- | BbPagination `current-page`, `v-model:page`, `page-size` | `v-model` (the 1-based page) + `per-page` + `total-items` (or `total-pages`) |
204
- | `BbDateInput` | `BbDatePickerInput` |
205
- | `<BbDropdownItem>`, `<BbTableColumn>` | types, not components: rows are `items` objects (`{ key, text, onClick }`), columns are `columns` objects |
206
- | BbDropdown `#trigger`, `#button` | `#activator="{ props }"`, spread `v-bind="props"` on your button |
207
- | a menu row's click via `@select` / `@item:selected` | the item's `onClick` (or `href` / `to`); `@item:selected` fires only for `selectable` groups |
208
- | `icon` on BbTextInput / BbDropdownButton, `#icon` on BbButton | `prepend:icon` / `append:icon`; BbButton's `icon` is the icon-only button |
209
- | badge `success` / `warning` / `info` / `danger` | built-ins `primary` `secondary` `destructive` `outline`; register more (§ Variants Rule) |
210
- | BbBadge `text` / `label` prop | the default slot: `<BbBadge>Paid</BbBadge>` |
211
- | `label` on BbCheckboxGroup / BbRadioGroup / BbSwitchGroup / BbRating, a `selectable` BbTable | `legend` (they render a `<fieldset>`; the legend is its name) |
212
- | `{ label, value }` items as they are | `item-text="label" item-value="value"` (BbSelect, BbSelectPopover, the groups); without them each option reads as JSON |
213
- | BbSelect `searchable` | search is on by default; `disable-writing` hides it; `multiple` for a multi-select |
214
- | a native `<input>` in a filter bar (to skip the label) | `<BbTextInput label="Search" hide-label />`: the label stays for screen readers |
215
- | `--bb-text-secondary` | `--bb-text-muted` |
216
- | a 422 through each field's `errors` prop | inside `BbForm`: `setErrors(errors)` ([validated-forms § 4](https://llms-bitboss-ui.bitboss.it/dist/ai/guides/validated-forms.md#4-server-errors-seterrors-fields-unmatchederrors)) |
191
+ | You'd guess | bitboss-ui |
192
+ | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- |
193
+ | `toast.success('Saved')`, `{ message }`, `{ description }`, `type` | `const { toast } = useToast(); toast({ title, text, variant: 'success' })`; variants `default` `success` `info` `warning` `destructive` |
194
+ | `<BbToastStack>`, a toaster per page | one `<BbToast />` (and one `<BbConfirm />` for `useConfirm`) at the app root |
195
+ | BbDialog `v-model:open`, `:open` | `v-model` (a boolean) |
196
+ | BbDialog `@close`, `@confirm`, `@cancel`, `#actions` | `@hide` (closing starts) / `@hidden` (closed); your own buttons in `#footer="{ close }"` |
197
+ | BbTable `sortable`, `v-model:sorted`, `sort-order`, `@sort` | `sortable: true` per column + `v-model:sort` (a `BbTableSortEntry[]`, `[key, 'asc' \| 'desc']`); the table never sorts: you do |
198
+ | `@row-click`, `@row:click` | `@click:row="(event, item) => …"` |
199
+ | `row-key` | `item-value` |
200
+ | column `title`, `header` | column `label` |
201
+ | `#cell:createdAt`, `#createdAt`, `{ row }` | `#<key>` in kebab-case (`createdAt` → `#created-at`), scope `{ item, value }` |
202
+ | a column keyed `actions` | reserved: the `#actions="{ item }"` slot creates the actions column |
203
+ | BbPagination `current-page`, `v-model:page`, `page-size` | `v-model` (the 1-based page) + `per-page` + `total-items` (or `total-pages`) |
204
+ | `BbDateInput` | `BbDatePickerInput` |
205
+ | `<BbDropdownItem>`, `<BbTableColumn>` | types, not components: rows are `items` objects (`{ value, label, onClick }`), columns are `columns` objects |
206
+ | BbDropdown `#trigger`, `#button` | `#activator="{ props }"`, spread `v-bind="props"` on your button |
207
+ | a menu row's click via `@select` / `@item:selected` | the item's `onClick` (or `href` / `to`); `@item:selected` fires only for `selectable` groups |
208
+ | `icon` on BbTextInput / BbDropdownButton, `#icon` on BbButton | `prepend:icon` / `append:icon`; BbButton's `icon` is the icon-only button |
209
+ | badge `success` / `warning` / `info` / `danger` | built-ins `primary` `secondary` `destructive` `outline`; register more (§ Variants Rule) |
210
+ | BbBadge `text` / `label` prop | the default slot: `<BbBadge>Paid</BbBadge>` |
211
+ | `label` on BbCheckboxGroup / BbRadioGroup / BbSwitchGroup / BbRating, a `selectable` BbTable | `legend` (they render a `<fieldset>`; the legend is its name) |
212
+ | `{ label, value }` items as they are | they work as they are, and so do `{ text, value }`: any other shape needs `item-text` / `item-value` (BbSelect, BbSelectPopover, the groups) |
213
+ | BbSelect `searchable` | search is on by default; `disable-writing` hides it; `multiple` for a multi-select |
214
+ | a native `<input>` in a filter bar (to skip the label) | `<BbTextInput label="Search" hide-label />`: the label stays for screen readers |
215
+ | `--bb-text-secondary` | `--bb-text-muted` |
216
+ | a 422 through each field's `errors` prop | inside `BbForm`: `setErrors(errors)` ([validated-forms § 4](https://llms-bitboss-ui.bitboss.it/dist/ai/guides/validated-forms.md#4-server-errors-seterrors-fields-unmatchederrors)) |
217
217
 
218
218
  ## Default API Boundary
219
219
 
@@ -389,7 +389,7 @@ recipe's conformance checklist.
389
389
 
390
390
  For components accepting `items`:
391
391
 
392
- - prefer declarative mapping with `item-text` and `item-value`;
392
+ - prefer declarative mapping with `item-text` and `item-value` (none when the items already carry `label` and `value`: never restate the default);
393
393
  - use `dependencies` and `deps-debounce-time` for tied fields;
394
394
  - use `enforce-coherence` instead of custom watchers for stale model cleanup;
395
395
  - to style a row BY ITS DATA (a destructive entry, a tile by tier, a row by
@@ -1548,9 +1548,10 @@ payload the same way.
1548
1548
  English since 3.0.0-beta.41 (it was `'it'`): an Italian app sets `locale: 'it'`.
1549
1549
 
1550
1550
  Global locale for the library's built-in strings (empty states, close/clear
1551
- labels, screen-reader announcements, confirm buttons, …). The library ships
1552
- **22 built-in dictionaries** — it, en, es, fr, de, pt (Brazilian-leaning), nl,
1553
- pl, tr, ru, uk, cs, ro, hu, el, sv, da, nb, fi, ja, ko, zh-cn — but shipping ≠
1551
+ labels, screen-reader announcements, confirm buttons, …) and for the formats
1552
+ around them (dates, numbers, week start). The list is fixed and typed (see
1553
+ [Locales](#locales) below): a language (`it`, `de`, …), a region (`en-GB`,
1554
+ `de-CH`, `fr-CA`, …), or `pt-BR` / `pt-PT` / `zh-CN` / `zh-TW`. Shipping ≠
1554
1555
  bundling: only the **enabled** locales enter your build (next option). Runtime
1555
1556
  switching: `useBbConfig().setConfig({ locale })` — to a locale you enabled.
1556
1557
 
@@ -1582,8 +1583,8 @@ a locale can.
1582
1583
 
1583
1584
  ### `enabledLocales?: BuiltinLocaleKey[]` (default: your `locale` + `'en'`)
1584
1585
 
1585
- Which built-in dictionaries (and their dayjs calendar packs) actually ship in
1586
- the bundle. The unset default is the minimal set — the `locale` you configured
1586
+ Which built-in locales (their dictionaries and dayjs calendar packs) actually
1587
+ ship in the bundle; regions of one language share its dictionary. The unset default is the minimal set — the `locale` you configured
1587
1588
  plus `en` (the per-key fallback anchor) — roughly 4KB of strings, so a
1588
1589
  single-language app pays for exactly what it uses without configuring
1589
1590
  anything. Apps that switch locales at runtime list what they offer:
@@ -1609,18 +1610,43 @@ fallback: your project's `bitboss-ui.d.ts` (see
1609
1610
  Start the dev server or run a build once after changing the list, and commit
1610
1611
  the file. Before that file exists, every built-in locale type-checks.
1611
1612
 
1612
- ### Custom locales are not a supported surface
1613
-
1614
- The library ships **22 dictionaries** and that is the whole set:
1615
-
1616
- ```
1617
- cs da de el en es fi fr hu it ja ko nb nl pl pt ro ru sv tr uk zh-cn
1618
- ```
1613
+ ### Locales
1614
+
1615
+ One fixed list (owner ruling, 2026-10-07). A bare language is its default
1616
+ region (CLDR likely subtags): `it` is `it-IT`, `de` `de-DE`, `en` `en-US`, `pt`
1617
+ `pt-BR`, `zh` `zh-CN` (Simplified).
1618
+
1619
+ | Language | Default | Regions (same words, own formats) | Own dictionary |
1620
+ | --------------- | ---------------------------------------------------------------- | ------------------------------------------------------------- | --------------------------------------------------------------- |
1621
+ | English | `en` (US) | `en-GB`, `en-AU`, `en-CA`, `en-IE` (British spelling: colour) | |
1622
+ | German | `de` | `de-AT` | `de-CH` (ss for ß) |
1623
+ | French | `fr` | `fr-BE`, `fr-CA`, `fr-CH` | |
1624
+ | Italian | `it` | `it-CH` | |
1625
+ | Dutch | `nl` | `nl-BE` | |
1626
+ | Swedish | `sv` | `sv-FI` | |
1627
+ | Spanish | `es` (Spain) | | `es-MX` (Mexico) |
1628
+ | Portuguese | `pt-BR` | | `pt-PT` (European; week from Sunday, CLDR) |
1629
+ | Chinese | `zh-CN` (Simplified) | | `zh-TW` (Traditional, Taiwan), `zh-HK` (Traditional, Hong Kong) |
1630
+ | One region each | `cs` `da` `el` `fi` `hu` `ja` `ko` `nb` `pl` `ro` `ru` `tr` `uk` | | |
1631
+
1632
+ A region reads its language's dictionary and follows its own formats: the
1633
+ long date and the number grouping (`Intl`, through the region's tag:
1634
+ `de-CH` groups `1’234.5`), the week start (its dayjs pack: `en-GB` Monday,
1635
+ `en-CA` Sunday), and the date-input field order and AM / PM words (`fr-CA`
1636
+ types `AAAA-MM-JJ`, `en-GB` `DD/MM/YYYY`). A region is on the list only where
1637
+ its language's words are right there; where they are not (`es-MX`, `zh-HK`),
1638
+ the region has its own dictionary.
1639
+
1640
+ Codes are case-insensitive (`zh-cn`, the spelling before 3.0.0-beta.49, still
1641
+ works), and the full code of a default region is the same locale (`it-IT` is
1642
+ `it`). A code that is not on the list is a type error, and
1643
+ `npx bitboss-ui check` names the nearest one (`unknown-locale`: `en-UK` →
1644
+ `en-GB`).
1619
1645
 
1620
1646
  There is no `additionalLocales` option and no `npx bitboss-ui locale` blueprint
1621
1647
  generator — both were removed deliberately (owner ruling, 2026-08-08). If your
1622
- language is not on that list, the supported answer is to ask for it to be
1623
- added upstream rather than to author a dictionary in your app.
1648
+ language or region is not on the list, the supported answer is to ask for it
1649
+ to be added upstream rather than to author a dictionary in your app.
1624
1650
 
1625
1651
  Locale selection is **build-time**: `enabledLocales` decides what ships, and
1626
1652
  only the active `locale` switches at runtime, among what the build enabled.
@@ -1834,7 +1860,7 @@ For a human-in-the-loop (and agent) safety net, add the `bitboss-ui/eslint-plugi
1834
1860
 
1835
1861
  Two rules in `recommended` are `warn` rather than `error`, because each describes markup that may be deliberate. `bitboss-ui/no-unknown-event` flags an `@event` the component does not emit (it falls through to the root element, so it may be a considered native listener). `bitboss-ui/no-unknown-token` flags a bare `var(--bb-…)` naming a token the installed package does not declare, in a `<style>` block or a static `style="…"` attribute — an undefined custom property is invalid-at-computed-value-time, so CSS discards the **entire declaration** and the rule silently does nothing at runtime. Supplying a fallback (`var(--bb-canvas, #f8fafc)`) is defined behaviour and is never reported; `allowTokens` exempts names you define yourself. The token list is read from the `dist/styles.css` you installed, so it cannot claim a token is invented when your version declares it, and with no stylesheet present the rule stays silent. Before reaching for a `--bb-*` name at all, re-read the two tiers above: a name the library does not declare usually means the knob you want is a **component** token, not a gap in the global set. `bitboss-ui check` carries two further advisory hints that are deliberately not ESLint rules — the hand-rolled avatar and spinner detectors — because both are guesses, and a lint rule that fires on correct code teaches people to ignore all of them.
1836
1862
 
1837
- `bitboss-ui check` also has one finding with no ESLint twin: `object-items-without-text`. It flags object `items` on an item-driven control (`BbSelect`, `BbSelectPopover`, `BbRadioGroup`, `BbCheckboxGroup`, `BbSwitchGroup`, and each `BbDropdown` group with `group: true`) when `item-text` (a group's `itemText`) is not set. Without it every label is `JSON.stringify(item)`, and without `item-value` the whole object is the value. Setting `item-text` without `item-value` is a deliberate whole-object value and is not flagged, and string items never are. **Its reach is the same file only:** an inline `:items="[…]"`, or a top-level `const x = […]` (or `ref([…])` / `reactive([…])`) in the file's `<script setup>` bound as `:items="x"`. An imported array, a computed or a fetched list is not read, and `check` never guesses at one. Silence one site with `<!-- eslint-disable-next-line bitboss-ui/require-partner-prop -->`.
1863
+ `bitboss-ui check` also has one finding with no ESLint twin: `object-items-without-text`. With no `item-text` an option reads its own `label`, else its own `text`, and with no `item-value` its own `value`, so `{ label, value }` and `{ text, value }` items need no accessor. The finding flags object `items` on an item-driven control (`BbSelect`, `BbSelectPopover`, `BbRadioGroup`, `BbCheckboxGroup`, `BbSwitchGroup`) when `item-text` is not set and an item has neither `label` nor `text`: that option's label is `JSON.stringify(item)`. On `BbDropdown` it flags a hand-written group (`group: true`, no mapper) whose rows have neither `label` nor `text`, since hand-written rows are labelled by `label`: give each row one, or make it a mapped group (an `items` getter, or `itemText` / `itemValue`), which reads `label` / `text` and `value` by default. Setting `item-text` without `item-value` is a deliberate whole-object value and is not flagged, and string items never are. **Its reach is the same file only:** an inline `:items="[…]"`, or a top-level `const x = […]` (or `ref([…])` / `reactive([…])`) in the file's `<script setup>` bound as `:items="x"`. An imported array, a computed or a fetched list is not read, and `check` never guesses at one. Silence one site with `<!-- eslint-disable-next-line bitboss-ui/require-partner-prop -->`.
1838
1864
 
1839
1865
  **The manifest ships with the package** — `dist/ai/components.json` is inside
1840
1866
  the tarball, and the rules resolve it relative to their own file, so a normal
@@ -1892,10 +1918,14 @@ for it to quieten a `Bb*` name the library itself exports.
1892
1918
 
1893
1919
  `recommended` also enables **`bitboss-ui/no-unimported-component`**: a `.vue` file that uses a real library tag (`<BbTabs>`, or `<bb-tabs>`) that nothing resolves renders it as an empty custom element. A name counts as resolved when the file imports it (from `bitboss-ui`, a subpath, a barrel or a local file, under any alias) or binds it in a script (`const BbTabs = defineAsyncComponent(…)`), when a namespace import from `bitboss-ui` covers it, or when the project registers it globally: Nuxt's `.nuxt/components.d.ts`, any `.d.ts` adding to `GlobalComponents` (unplugin's `components.d.ts`), or `app.component('BbTabs', …)`. When it can't tell, it stays quiet: a Nuxt app with no generated `.nuxt/components.d.ts` yet, unplugin with `dts: false`, a registration loop over the library's exports. A name not in the manifest is `no-unknown-attributes`' (with a did-you-mean). `bitboss-ui check` reports the same finding as `unimported-component`.
1894
1920
 
1921
+ `recommended` also enables **`bitboss-ui/portal-names`** (error) and **`bitboss-ui/unused-portal`** (warning). A named portal is a string at the call site (`v-bb-hover-card="'person'"`, `v-bb-popover="{ portal: 'rename' }"`, `confirm({ portal: 'remove-member' })`) and a `<BbHoverCardPortal | BbPopoverPortal | BbConfirmPortal name>` in a template, so a typo opens nothing, silently. Both rules read the whole project once (tests skipped): `portal-names` reports a name no file declares, with a did-you-mean, and a name that belongs to the other family (a hover-card portal opened by `v-bb-popover`); `unused-portal` reports a declared portal no call site opens and no string in the project names. Only literals are judged: a `:name` binding, a name in a variable, a template literal or `confirm(options)` is never reported. `bitboss-ui check` reports the same findings as `unknown-portal`, `portal-family-mismatch` and `unused-portal` (a warning), in `.vue` and script files.
1922
+
1895
1923
  `recommended` also enables **`bitboss-ui/text-null-value`**: a `v-model` on `BbTextInput` / `BbTextarea` bound to a `<script setup>` ref typed `string` (`ref('')`, `ref<string>('…')`, `shallowRef('')`) on a field whose null-value policy is `'null'`: its own `null-value="null"`, or no `null-value` and the app's `formControls` policy, read from the project's `bitboss-ui.d.ts`. Emptying the field writes `null` into a ref whose type says it can't hold one, and vue-tsc doesn't check a `v-model`'s write-back, so a later `name.value.trim()` passes the type check and throws once the user clears the field. The fix widens the declaration to `ref<string | null>(…)`, so vue-tsc then flags every read that assumed a string. The other way out is `null-value="string"` on the field (it emits `''`), which changes what the field emits, so it is left to you. A bound `:null-value`, a member expression (`v-model="form.name"`) and a ref imported from elsewhere are not reported. `bitboss-ui check` reports the same finding as `text-null-value`.
1896
1924
 
1897
1925
  `recommended` also enables **`bitboss-ui/form-model`**: `<BbForm>` takes the object it fills one way, `:model="draft"` — any reactive object (`reactive()`, `ref`, Pinia state, Inertia `useForm()`), written in place, never replaced. The rule fixes `v-model="…"` and `:model-value="…"` on `<BbForm>` to `:model="…"`, and reports without a fix an `@update:model-value` listener (the form emits none: `watch(draft, …, { deep: true })` or `useBbFormContext(id).values`) and a writable `computed` bound as the model (the form writes into what the getter returns and never calls the setter). `bitboss-ui check` reports the same finding as `form-v-model`.
1898
1926
 
1927
+ `recommended` also enables **`bitboss-ui/no-redundant-item-accessor`** (warn), with an autofix that deletes the attribute: an accessor that restates the option default. That covers `item-text="label"`, `item-text="text"` and `item-value="value"` (static or `:item-text="'label'"`, kebab or camel) on `BbSelect`, `BbSelectPopover`, `BbRadioGroup`, `BbCheckboxGroup` and `BbSwitchGroup`, and `itemText: 'label'` / `'text'` / `itemValue: 'value'` in a `BbDropdown` / `BbDropdownButton` group. It only reports what removing cannot change. `item-text="text"` is kept when any item also has `label` (the default would read `label`), and on items the file cannot see only `item-text="label"` and `item-value="value"` are reported. A visible item that is a primitive or lacks the field keeps its accessor. A dropdown group whose only mapper is the redundant one keeps it, since without it the group turns hand-written. `bitboss-ui check` reports the same finding as `redundant-item-accessor` (a warning).
1928
+
1899
1929
  `recommended` also enables **`bitboss-ui/items-provider-context`** (error) and **`bitboss-ui/items-provider-reason`** (warn). Every `items` provider receives one context object, `({ query, reason, modelValue, signal })` (`query` only on `BbSelect`, `BbSelectPopover` and a `searchable` `BbDropdown` group). `items-provider-context` reports a positional provider bound to `:items` (an inline function, or a function / const in the same file; on `BbDropdown` / `BbDropdownButton` and in a `v-bb-dropdown` directive's value, each group's `items:`): two or more parameters, or one parameter typed `string` / `boolean` or named like a query or a prefill flag. Untyped, an old `(query) => …` reads the whole object as its query (`q=[object Object]`). Annotate it with its component's context type (`BbSelectItemsContext`, `BbTableItemsContext`, `BbCheckboxGroupItemsContext`, … `BbDropdownGroupItemsContext`); the message names the one to use. The fix, for untyped parameters, destructures by position: `(query, prefill, m)` → `({ query, reason, modelValue: m })`, each use of `prefill` rewritten as `reason !== 'search'`; a typed provider (vue-tsc already fails it), a group whose `searchable` is not a literal, and a body that already uses `reason` are reported without a fix. `items-provider-reason` warns when a provider compares `reason` with one cause other than `'search'` (`reason === 'initial'`; the causes are `'search'`, `'initial'`, `'dependencies'`, `'model'`, `'reopen'` and, on `BbTable`, `'pagination'`) or switches on it without a `default`: an id lookup that runs on one cause loses the selected labels on the others, so check `reason !== 'search'`. Imported providers are left to TypeScript. `bitboss-ui check` reports the same findings as `positional-provider` and `single-reason` (a warning).
1900
1930
 
1901
1931
  It also enables `bitboss-ui/require-partner-prop`: an opt-in prop set without its documented required partner — BbTable `keyboard-navigation` / `v-model:highlighted` without `row-class` (the shipped tint says "current row"; `row-class` says why, and is how you override it), `loading-text` without `:loading` bound, or `method` on BbButton / BbBadgeButton / BbBaseButton without `href` (only an `href` becomes an Inertia visit; `to` is a RouterLink) — compiles and mounts clean and just does nothing; the rule names the missing partner and quotes why.
@@ -2173,7 +2203,7 @@ compose it or write it yourself.
2173
2203
  | `useLiveFeed` / any polling or cross-tab feed helper | Does not exist, and neither does a cross-tab helper — `useBroadcastChannelInstance` was removed (cross-tab messaging is not a UI concern). Use `useBroadcastChannel` from `@vueuse/core`; the polling and the merge are yours. |
2174
2204
  | `BbStepper` / `BbWizard` | Does not exist as a component; the wizard-form recipe under `recipes/<platform>/wizard-form.md` ([Vue](https://llms-bitboss-ui.bitboss.it/dist/ai/recipes/vue/wizard-form.md) · [Nuxt](https://llms-bitboss-ui.bitboss.it/dist/ai/recipes/nuxt/wizard-form.md) · [Inertia](https://llms-bitboss-ui.bitboss.it/dist/ai/recipes/inertia/wizard-form.md)) composes one. |
2175
2205
  | `BbSkeleton` (standalone) | Only `BbTable` ships skeletons, via the column `skeleton` field. |
2176
- | `BbWorkspaceSwitcher` / `BbTeamSwitcher` / `BbAccountSwitcher` / org, tenant or project switcher | Does not exist as a component — it is a [BbDropdown](https://llms-bitboss-ui.bitboss.it/dist/ai/BbDropdown.md) pattern: a row for the current record whose submenu is a `selectable` (single), `searchable`, fetched group bound to the current id with `<BbDropdownGroup v-model>`. Carry each record to the slots with `meta` (`itemProps: (w) => ({ meta: w })`) and draw it with `#<groupKey>:item:prepend`, so the other rows keep their icons. See BbDropdown.md § Rows that stand for records. |
2206
+ | `BbWorkspaceSwitcher` / `BbTeamSwitcher` / `BbAccountSwitcher` / org, tenant or project switcher | Does not exist as a component — it is a [BbDropdown](https://llms-bitboss-ui.bitboss.it/dist/ai/BbDropdown.md) pattern: a row for the current record whose submenu is a `selectable` (single), `searchable`, fetched group bound to the current id with `<BbDropdownGroup v-model>`. Carry each record to the slots with `meta` (`itemProps: (w) => ({ meta: w })`) and draw it with `#<groupId>:item:prepend`, so the other rows keep their icons. See BbDropdown.md § Rows that stand for records. |
2177
2207
  | `BbCommand` / command palette | Does not exist. Compose `BbDialog` + `BbSelectPopover` — do not hand-roll the search: [BbSelectPopover § A ⌘K command palette](https://llms-bitboss-ui.bitboss.it/dist/ai/BbSelectPopover.md#a-k-command-palette) is the worked example (⌘K / Ctrl+K, grouped server results, debouncing and race protection from the popover, navigation per platform). |
2178
2208
  | `BbSeatMap` / `BbSeatPicker` / `BbSeatGrid` / a seat map, desk or parking-bay picker | Does not exist, on purpose (a niche need), and there is no recipe for it. Build it in your app as a WAI-ARIA grid with one tab stop (roving `tabindex`, arrow keys move between positions) styled with the library tokens; do not give every seat its own tab stop. |
2179
2209
  | `BbCalendar` as a scheduling / events view | [BbCalendar](https://llms-bitboss-ui.bitboss.it/dist/ai/BbCalendar.md) is the picker's calendar rendered in place — a value control (day, range, set, month, year, datetime), not an events grid. Put per-day content in its `#day` / `#day:append` slots; an agenda or booking board is your own layout around it. |
@@ -2192,13 +2222,13 @@ recipe under `recipes/<platform>/layout-scaffold.md` ([Vue](https://llms-bitboss
2192
2222
 
2193
2223
  ## Item-Driven Components
2194
2224
 
2195
- The following components accept an `items` prop (array or async provider function) with `item-text`/`item-value` mapping. Consult the items playbooks before wiring them:
2225
+ The following components accept an `items` prop (array or async provider function): object items are read through their own `label` (else `text`) and `value`, or through `item-text`/`item-value` when your fields are named otherwise. Consult the items playbooks before wiring them:
2196
2226
 
2197
2227
  - [BbSelect](https://llms-bitboss-ui.bitboss.it/dist/ai/BbSelect.md), [BbSelectPopover](https://llms-bitboss-ui.bitboss.it/dist/ai/BbSelectPopover.md)
2198
2228
  - [BbCheckboxGroup](https://llms-bitboss-ui.bitboss.it/dist/ai/BbCheckboxGroup.md), [BbRadioGroup](https://llms-bitboss-ui.bitboss.it/dist/ai/BbRadioGroup.md), [BbSwitchGroup](https://llms-bitboss-ui.bitboss.it/dist/ai/BbSwitchGroup.md)
2199
2229
  - [BbTable](https://llms-bitboss-ui.bitboss.it/dist/ai/BbTable.md)
2200
2230
 
2201
- `BbDropdown`, `BbBreadcrumbs`, `BbTabs`, and `BbTree` are also declared through `items`, but with typed item objects (label/key/href/…) rather than arbitrary domain objects. `BbDropdown` bridges the two: a fetched group maps domain objects through `itemText` / `itemValue` / `itemProps`, and any row carries its domain object to the slots in `meta`.
2231
+ `BbDropdown`, `BbBreadcrumbs`, `BbTabs`, and `BbTree` are also declared through `items`, but with typed item objects (`value`/`label`/`href`/…) rather than arbitrary domain objects. `BbDropdown` bridges the two: a fetched group reads `label` / `value` like the pickers, or maps domain objects through `itemText` / `itemValue` / `itemProps`, and any row carries its domain object to the slots in `meta`.
2202
2232
 
2203
2233
  See:
2204
2234
 
package/dist/llms.txt CHANGED
@@ -5,7 +5,7 @@
5
5
  ## AI Knowledge Base
6
6
 
7
7
  - [Core knowledge base](https://llms-bitboss-ui.bitboss.it/dist/llms-medium.txt): **Fetch this if you can only fetch one file** — hard rules, setup, component picker, design language, and the full component catalogue in ~250 KB.
8
- - [Complete knowledge base](https://llms-bitboss-ui.bitboss.it/dist/llms-full.txt): Everything concatenated (~5.8 MB). Bulk ingestion only — too large to prompt with.
8
+ - [Complete knowledge base](https://llms-bitboss-ui.bitboss.it/dist/llms-full.txt): Everything concatenated (~5.9 MB). Bulk ingestion only — too large to prompt with.
9
9
  - [AI Router](ai/guides/ai-router.md): **Start here** — tiny hop map for any coding agent (which file to open next).
10
10
  - [Component index](ai/index.md): Full component catalogue with agent rules, grouped by category. Each entry links a typed contract (props/events/slots/v-model).
11
11
  - [Component API files](ai/manifest/index.json): Machine-readable API, one JSON file per component (`manifest/components/<Name>.json`: every prop, event, slot, v-model and pt part, one per line, plus the public types it uses) — open the index, then the one component. The same data in one ~1.2 MB file for tools is [components.json](ai/components.json); its `types` array lists the public TYPE exports with a `usage` tier (`api` = the ones you reach for) and, on the `api` ones, a `usedBy` array naming the component and prop or event each is the type OF — `BbTableColumn` is `usedBy` `BbTable.columns`, a value you pass, not a tag you write. This file is props and events, not paint.
@@ -33,18 +33,18 @@
33
33
  - [Migration v2→v3: BbAlert](ai/guides/migration/components/bb-alert.md): showClose inverted to hideClose, theme replaced by typed variant.
34
34
  - [Migration v2→v3: BbAvatar](ai/guides/migration/components/bb-avatar.md): The color prop is removed — retheme the fallback through the --bg / --fg locals.
35
35
  - [Migration v2→v3: BbBadge (and where your v2 badges went)](ai/guides/migration/components/bb-badge.md): The v2 BbBadge (floating count/dot) is now BbIndicator; the v3 BbBadge is a new inline pill that also replaces BbChip.
36
- - [Migration v2→v3: BbBreadcrumbs](ai/guides/migration/components/bb-breadcrumbs.md): Item keys must be strings, the text divider prop is gone, per-item slot names are normalized.
36
+ - [Migration v2→v3: BbBreadcrumbs](ai/guides/migration/components/bb-breadcrumbs.md): Items are { label, value } (were { key, text }), the text divider prop is gone, per-item slot names are normalized.
37
37
  - [Migration v2→v3: BbButton](ai/guides/migration/components/bb-button.md): Async click handlers now auto-track loading (behavior flip), built-in tooltip props removed, variant locked to the registry. Leftover v2 --border-color on .bb-button* still paints.
38
38
  - [Migration v2→v3: BbCheckbox / BbRadio / BbSwitch](ai/guides/migration/components/bb-checkbox.md): reverse polarity inverted (explicit values flip, default layout unchanged), checked narrowed to boolean, color removed, BbRadio's name no longer required.
39
- - [Migration v2→v3: BbCheckboxGroup / BbRadioGroup / BbSwitchGroup](ai/guides/migration/components/bb-checkbox-group.md): labelPosition renamed legendPosition, per-item disabled is now inert (use selectable), color and the option affix slots removed, BbRadioGroup's name no longer required, the shared bb-cr-container CSS block split into one per group, and the --bb-checkbox-* / --bb-radio-* / --bb-switch-* globals replaced by glyph locals.
39
+ - [Migration v2→v3: BbCheckboxGroup / BbRadioGroup / BbSwitchGroup](ai/guides/migration/components/bb-checkbox-group.md): labelPosition renamed legendPosition, per-item disabled is now inert (use selectable), color and the option affix slots removed, BbRadioGroup's name no longer required, the shared bb-cr-container CSS block split into one per group, and the --bb-checkbox-* / --bb-radio-* / --bb-switch-* globals replaced by glyph locals, and object items now read their own label / value by default.
40
40
  - [Migration v2→v3: BbChip (removed)](ai/guides/migration/components/bb-chip.md): BbChip is gone — BbBadge with clearable is the replacement; non-clearable chips were badges all along.
41
41
  - [Migration v2→v3: BbCollapsible](ai/guides/migration/components/bb-collapsible.md): `tag` narrows to `'span' | 'div'` and defaults to `span`; the inner element mirrors it.
42
42
  - [Migration v2→v3: BbColorInput](ai/guides/migration/components/bb-color-input.md): picker renamed to eyeDropper.
43
43
  - [Migration v2→v3: BbColorPalette](ai/guides/migration/components/bb-color-palette.md): flip inverted to disableFlip, showArrow removed, picker renamed eyeDropper, update:open dropped, model updates never emit null.
44
44
  - [Migration v2→v3: BbDatePickerInput](ai/guides/migration/components/bb-date-picker-input.md): allowWriting inverted to disableWriting and hidePopover renamed to disableCalendar, both with a changed token set; the width prop is removed; adaptive mobile sheet by default; non-floating output carries the local offset instead of UTC `Z` (new `utc` prop restores v2 output).
45
45
  - [Migration v2→v3: BbDialog](ai/guides/migration/components/bb-dialog.md): showClose inverted to hideClose, #close removed (description restored in beta.19), default widths changed, adaptive bottom sheet on mobile by default, --bb-dialog-* tokens replaced by --bb-panel-p plus locals.
46
- - [Migration v2→v3: BbDropdown](ai/guides/migration/components/bb-dropdown.md): Items now expect text as the label and can carry variants/submenus; arrowPadding removed; adaptive mobile sheet on by default.
47
- - [Migration v2→v3: BbDropdownButton](ai/guides/migration/components/bb-dropdown-button.md): autoLoading renamed to disableAutoLoading, disabledWhileLoading and theme removed.
46
+ - [Migration v2→v3: BbDropdown](ai/guides/migration/components/bb-dropdown.md): Rows are { label, value } (v2 and v3 up to beta.48 { key, text }), groups are named by id; rows can carry variants/submenus; arrowPadding removed; adaptive mobile sheet on by default.
47
+ - [Migration v2→v3: BbDropdownButton](ai/guides/migration/components/bb-dropdown-button.md): autoLoading renamed to disableAutoLoading, disabledWhileLoading and theme removed; items are { label, value } rows like BbDropdown's.
48
48
  - [Migration v2→v3: BbDropzone](ai/guides/migration/components/bb-dropzone.md): modelValue is typed, accept no longer throws and takes bare tokens, and the hidden native-submit input only renders when name is set.
49
49
  - [Migration v2→v3: BbIcon](ai/guides/migration/components/bb-icon.md): The required prop is renamed type→icon, color is removed, and the xxl size key becomes 2xl.
50
50
  - [Migration v2→v3: BbIntersection](ai/guides/migration/components/bb-intersection.md): Removed with no replacement — it wrapped IntersectionObserver and carried no styling; use @vueuse/core's useIntersectionObserver.
@@ -53,14 +53,14 @@
53
53
  - [Migration v2→v3: BbPopover](ai/guides/migration/components/bb-popover.md): Built-in close button, restoreFocus, theme, and the arrow are gone; close affordances move into your content.
54
54
  - [Migration v2→v3: BbRadioGroup](ai/guides/migration/components/bb-radio-group.md): Shares its migration with BbCheckboxGroup — see bb-checkbox-group.md.
55
55
  - [Migration v2→v3: BbRating](ai/guides/migration/components/bb-rating.md): color removed; name no longer required; the star classes moved from .bb-base-rating to the .bb-rating block (--highlighted became --filled/--empty); --bb-rating-size demoted to a local --size on .bb-rating__stars; input-position finally works.
56
- - [Migration v2→v3: BbSelect](ai/guides/migration/components/bb-select.md): allowWriting inverted to disableWriting, filterBy narrowed to string[], prefill value renamed, chevron/options slots removed, and two behavior changes (second click, mount-time coherence).
56
+ - [Migration v2→v3: BbSelect](ai/guides/migration/components/bb-select.md): allowWriting inverted to disableWriting, filterBy narrowed to string[], prefill value renamed, chevron/options slots removed, and three behavior changes (second click, mount-time coherence, object items read their own label / value).
57
57
  - [Migration v2→v3: BbSelectPopover](ai/guides/migration/components/bb-select-popover.md): flip and allowWriting inverted, arrow props removed, filterBy narrowed, options slots replaced by header/footer; shares BbSelect's behavior changes.
58
58
  - [Migration v2→v3: BbSlider](ai/guides/migration/components/bb-slider.md): thumbTranslate inverted to disableThumbTranslate; string model values and color removed.
59
59
  - [Migration v2→v3: BbSmoothHeight](ai/guides/migration/components/bb-smooth-height.md): The `tag` prop is narrowed to `div | span`, and the inner measuring element now mirrors it instead of always being a `<div>`.
60
60
  - [Migration v2→v3: BbSpinner](ai/guides/migration/components/bb-spinner.md): The color prop is removed; spinners follow currentColor.
61
61
  - [Migration v2→v3: BbSwitchGroup](ai/guides/migration/components/bb-switch-group.md): Shares its migration with BbCheckboxGroup — see bb-checkbox-group.md.
62
62
  - [Migration v2→v3: BbTable](ai/guides/migration/components/bb-table.md): The table renders as a CSS grid of divs with ARIA roles, not a <table> — every element selector (table/thead/tbody/tr/th/td) under .bb-table matches nothing, #thead/#tbody/#tfoot take role-complete div rows, --fill/--natural-width are gone, column widths drift within documented bounds, copy-to-spreadsheet and print header repetition degrade; allowSelectAll inverted to disableSelectAll; loading no longer blanks populated tables and now inerts rows; #loading is first-load-only; #empty fills a full-width cell instead of replacing the row; row events drop the selected argument; columns gained sortable + rowClass, which collide with same-named consumer fields.
63
- - [Migration v2→v3: BbTabs (was BbTab)](ai/guides/migration/components/bb-tabs.md): Component renamed; querykey→queryKey; animations default on; label slots renamed, header:* slots → wrapper:*, and all dynamic names/URL slugs normalized; the entire .bb-tab BEM tree renamed to .bb-tabs / .bb-tabs-list / .bb-tabs-panels.
63
+ - [Migration v2→v3: BbTabs (was BbTab)](ai/guides/migration/components/bb-tabs.md): Component renamed; item key→value (v-model carries it); querykey→queryKey; animations default on; label slots renamed, header:* slots → wrapper:*, and all dynamic names/URL slugs normalized; the entire .bb-tab BEM tree renamed to .bb-tabs / .bb-tabs-list / .bb-tabs-panels.
64
64
  - [Migration v2→v3: BbTag](ai/guides/migration/components/bb-tag.md): modelValue is strictly string[] now, multiple is removed, and duplicates are rejected case-insensitively by default.
65
65
  - [Migration v2→v3: BbTextInput](ai/guides/migration/components/bb-text-input.md): The type prop narrows to the text-like input types — number/date values must move to their dedicated components; a bare `floating` attribute was never a prop, the spelling is label-mode="floating".
66
66
  - [Migration v2→v3: BbToast and toast()](ai/guides/migration/components/bb-toast.md): Host placement becomes position with a corner-based value set; toast() options rewritten (variant, duration, actions, portal).
@@ -2,9 +2,12 @@
2
2
  "builtins": [
3
3
  "cs",
4
4
  "da",
5
+ "de-CH",
5
6
  "de",
6
7
  "el",
8
+ "en-GB",
7
9
  "en",
10
+ "es-MX",
8
11
  "es",
9
12
  "fi",
10
13
  "fr",
@@ -15,13 +18,16 @@
15
18
  "nb",
16
19
  "nl",
17
20
  "pl",
18
- "pt",
21
+ "pt-BR",
22
+ "pt-PT",
19
23
  "ro",
20
24
  "ru",
21
25
  "sv",
22
26
  "tr",
23
27
  "uk",
24
- "zh-cn"
28
+ "zh-CN",
29
+ "zh-HK",
30
+ "zh-TW"
25
31
  ],
26
32
  "template": {
27
33
  "common": {
@@ -29,18 +35,16 @@
29
35
  "loadingText": "Loading...",
30
36
  "emptyText": "No data to display",
31
37
  "failedText": "Couldn't load items",
32
- "clearLabel": "Reset selected value",
38
+ "clearLabel": "Clear value",
33
39
  "fieldLabel": "This field"
34
40
  },
35
41
  "colorInput": {
36
42
  "dialogLabel": "Color picker",
37
43
  "openPicker": "Open color picker",
38
44
  "openPickerSelected": "Open color picker, current color: {0}",
39
- "paletteLabel": "Select a color from the palette",
40
45
  "mainCanvasDesc": "Use the arrows to select a color",
41
46
  "mainCanvasSelectedColor": "Selected color: {0}",
42
47
  "hueCanvasDesc": "Use the arrows to select a hue",
43
- "hueCanvasSelectedHue": "Selected hue: {0}",
44
48
  "alphaSliderDesc": "Use the arrows to adjust opacity",
45
49
  "eyeDropper": "Pick color from screen"
46
50
  },
@@ -66,11 +70,11 @@
66
70
  "datePickerInput": {
67
71
  "dateFormat": "Date format",
68
72
  "dateFormatSingle": "MM/DD/YYYY",
69
- "dateFormatRange": "MM/DD/YYYY - MM/DD/YYYY",
73
+ "dateFormatRange": "MM/DD/YYYY – MM/DD/YYYY",
70
74
  "monthFormatSingle": "MM/YYYY",
71
- "monthFormatRange": "MM/YYYY - MM/YYYY",
75
+ "monthFormatRange": "MM/YYYY – MM/YYYY",
72
76
  "yearFormatSingle": "YYYY",
73
- "yearFormatRange": "YYYY - YYYY",
77
+ "yearFormatRange": "YYYY – YYYY",
74
78
  "emptyRange": "Select a range",
75
79
  "changeSelectionRange": "Change selection, from {0} to {1}",
76
80
  "changeSelection": "Change selection, {0}",
@@ -96,8 +100,7 @@
96
100
  "back": "Back"
97
101
  },
98
102
  "dropdownButton": {
99
- "open": "Open menu",
100
- "close": "Close menu"
103
+ "open": "Open menu"
101
104
  },
102
105
  "dropzone": {
103
106
  "selectFiles": "Select files",
@@ -123,7 +126,7 @@
123
126
  },
124
127
  "breadcrumbs": {
125
128
  "label": "Breadcrumbs",
126
- "openHiddenLabelCount": "Show {0} hidden breadcrumbs"
129
+ "openHiddenLabelCount": "Show hidden breadcrumbs ({0})"
127
130
  },
128
131
  "pagination": {
129
132
  "label": "Pagination",
@@ -141,11 +144,11 @@
141
144
  "actionsText": "Actions",
142
145
  "selectAllLabel": "Select all items on this page",
143
146
  "selectText": "Select an item",
144
- "select": "Select",
147
+ "select": "Select {0}",
145
148
  "selectableLegend": "Select items",
146
149
  "reorderInstructions": "Use the left and right arrow keys to move between columns; hold Shift to move the column, with Home and End for the ends. Enter sorts a sortable column.",
147
150
  "columnMoved": "{0} moved to position {1} of {2}",
148
- "resizeInstructions": "Alt + left or right arrow resizes the column; double-click its edge to restore the declared width."
151
+ "resizeInstructions": "Alt + left or right arrow resizes the column; double-click its edge to restore the default width."
149
152
  },
150
153
  "timePickerInput": {
151
154
  "emptySelection": "Select a time",