bitboss-ui 3.0.0-beta.2 → 3.0.0-beta.21

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 (350) hide show
  1. package/README.md +72 -33
  2. package/dist/ai/BbAccordion.md +3 -3
  3. package/dist/ai/BbAlert.md +9 -5
  4. package/dist/ai/BbAsterisk.md +17 -0
  5. package/dist/ai/BbAvatar.md +12 -3
  6. package/dist/ai/BbBadge.md +15 -10
  7. package/dist/ai/BbBadgeButton.md +16 -16
  8. package/dist/ai/BbBaseButton.md +16 -16
  9. package/dist/ai/BbBaseCheckbox.md +8 -8
  10. package/dist/ai/BbBaseCheckboxGroup.md +13 -13
  11. package/dist/ai/BbBaseCheckboxIcon.md +26 -9
  12. package/dist/ai/BbBaseColorInput.md +11 -11
  13. package/dist/ai/BbBaseDatePicker.md +6 -6
  14. package/dist/ai/BbBaseDatePickerInput.md +15 -15
  15. package/dist/ai/BbBaseInputContainer.md +12 -12
  16. package/dist/ai/BbBaseNumberInput.md +8 -8
  17. package/dist/ai/BbBaseRadio.md +5 -5
  18. package/dist/ai/BbBaseRadioGroup.md +7 -7
  19. package/dist/ai/BbBaseRadioIcon.md +25 -9
  20. package/dist/ai/BbBaseRating.md +5 -5
  21. package/dist/ai/BbBaseSelect.md +22 -21
  22. package/dist/ai/BbBaseSlider.md +9 -9
  23. package/dist/ai/BbBaseSwitch.md +8 -8
  24. package/dist/ai/BbBaseSwitchGroup.md +13 -13
  25. package/dist/ai/BbBaseSwitchIcon.md +28 -10
  26. package/dist/ai/BbBaseTag.md +10 -10
  27. package/dist/ai/BbBaseTextInput.md +9 -9
  28. package/dist/ai/BbBaseTextarea.md +9 -9
  29. package/dist/ai/BbBaseTimePickerInput.md +13 -13
  30. package/dist/ai/BbBreadcrumbs.md +2 -2
  31. package/dist/ai/BbButton.md +15 -15
  32. package/dist/ai/BbCheckbox.md +18 -17
  33. package/dist/ai/BbCheckboxGroup.md +15 -14
  34. package/dist/ai/BbCollapsible.md +11 -9
  35. package/dist/ai/BbColorInput.md +15 -15
  36. package/dist/ai/BbColorPalette.md +12 -6
  37. package/dist/ai/BbConfirm.md +12 -5
  38. package/dist/ai/BbDatePicker.md +13 -13
  39. package/dist/ai/BbDatePickerInput.md +20 -20
  40. package/dist/ai/BbDialog.md +78 -12
  41. package/dist/ai/BbDropdown.md +132 -22
  42. package/dist/ai/BbDropdownButton.md +12 -12
  43. package/dist/ai/BbDropdownGroup.md +1 -1
  44. package/dist/ai/BbDropzone.md +4 -4
  45. package/dist/ai/BbForm.md +49 -14
  46. package/dist/ai/BbIcon.md +6 -0
  47. package/dist/ai/BbIndicator.md +5 -5
  48. package/dist/ai/BbNumberInput.md +11 -11
  49. package/dist/ai/BbOffCanvas.md +90 -20
  50. package/dist/ai/BbPagination.md +3 -3
  51. package/dist/ai/BbPopover.md +32 -17
  52. package/dist/ai/BbProgress.md +7 -4
  53. package/dist/ai/BbRadio.md +16 -15
  54. package/dist/ai/BbRadioGroup.md +20 -17
  55. package/dist/ai/BbRating.md +11 -11
  56. package/dist/ai/BbSelect.md +138 -37
  57. package/dist/ai/BbSelectPopover.md +40 -41
  58. package/dist/ai/BbSlider.md +37 -22
  59. package/dist/ai/BbSmoothHeight.md +1 -1
  60. package/dist/ai/BbSwitch.md +25 -10
  61. package/dist/ai/BbSwitchGroup.md +17 -14
  62. package/dist/ai/BbTable.md +920 -109
  63. package/dist/ai/BbTabs.md +28 -14
  64. package/dist/ai/BbTabsList.md +1 -1
  65. package/dist/ai/BbTabsPanes.md +1 -1
  66. package/dist/ai/BbTabsRoot.md +10 -10
  67. package/dist/ai/BbTag.md +14 -14
  68. package/dist/ai/BbTextInput.md +16 -15
  69. package/dist/ai/BbTextarea.md +13 -13
  70. package/dist/ai/BbTimePicker.md +10 -10
  71. package/dist/ai/BbTimePickerInput.md +17 -17
  72. package/dist/ai/BbToast.md +1 -1
  73. package/dist/ai/BbToastPortal.md +1 -1
  74. package/dist/ai/BbTooltip.md +12 -10
  75. package/dist/ai/BbTree.md +1 -1
  76. package/dist/ai/ChipsBox.md +1 -1
  77. package/dist/ai/CommonInputWrapper.md +10 -10
  78. package/dist/ai/CommonPopover.md +6 -6
  79. package/dist/ai/FlatListBox.md +5 -5
  80. package/dist/ai/GroupedListBox.md +5 -5
  81. package/dist/ai/ListBox.md +4 -4
  82. package/dist/ai/OptionsContainer.md +4 -4
  83. package/dist/ai/changelog.json +128 -2
  84. package/dist/ai/components.json +917 -100
  85. package/dist/ai/composables/useBbConfig.md +72 -11
  86. package/dist/ai/composables/useConfirm.md +5 -3
  87. package/dist/ai/guides/ai-router.md +9 -4
  88. package/dist/ai/guides/component-picker.md +18 -18
  89. package/dist/ai/guides/design-language.md +14 -14
  90. package/dist/ai/guides/design-tokens.md +25 -18
  91. package/dist/ai/guides/fetch-items-playbook.md +1 -1
  92. package/dist/ai/guides/icons-policy.md +11 -5
  93. package/dist/ai/guides/installation-and-plugin-setup.md +85 -23
  94. package/dist/ai/guides/migration/components/bb-checkbox-group.md +30 -0
  95. package/dist/ai/guides/migration/components/bb-checkbox.md +37 -3
  96. package/dist/ai/guides/migration/components/bb-collapsible.md +5 -5
  97. package/dist/ai/guides/migration/components/bb-dialog.md +62 -34
  98. package/dist/ai/guides/migration/components/bb-offcanvas.md +29 -13
  99. package/dist/ai/guides/migration/components/bb-rating.md +8 -2
  100. package/dist/ai/guides/migration/components/bb-select.md +5 -2
  101. package/dist/ai/guides/migration/components/bb-table.md +560 -28
  102. package/dist/ai/guides/migration/components/bb-text-input.md +6 -6
  103. package/dist/ai/guides/migration/v2-to-v3.md +260 -89
  104. package/dist/ai/guides/ssr-prefill.md +120 -0
  105. package/dist/ai/index.md +10 -9
  106. package/dist/ai/recipes/inertia/approvals-inbox.md +0 -1
  107. package/dist/ai/recipes/inertia/inline-edit-workspace.md +0 -1
  108. package/dist/ai/recipes/inertia/layout-scaffold.md +5 -1
  109. package/dist/ai/recipes/inertia/ownership-atlas.md +49 -29
  110. package/dist/ai/recipes/inertia/record-form.md +0 -1
  111. package/dist/ai/recipes/inertia/records-workspace.md +26 -8
  112. package/dist/ai/recipes/inertia/upload-center.md +0 -1
  113. package/dist/ai/recipes/nuxt/approvals-inbox.md +0 -1
  114. package/dist/ai/recipes/nuxt/inline-edit-workspace.md +0 -1
  115. package/dist/ai/recipes/nuxt/layout-scaffold.md +5 -1
  116. package/dist/ai/recipes/nuxt/record-form.md +0 -1
  117. package/dist/ai/recipes/nuxt/records-workspace.md +26 -8
  118. package/dist/ai/recipes/nuxt/upload-center.md +0 -1
  119. package/dist/ai/recipes/vue/approvals-inbox.md +0 -1
  120. package/dist/ai/recipes/vue/inline-edit-workspace.md +0 -1
  121. package/dist/ai/recipes/vue/layout-scaffold.md +5 -1
  122. package/dist/ai/recipes/vue/records-workspace.md +26 -8
  123. package/dist/ai/recipes/vue/upload-center.md +0 -1
  124. package/dist/ai/source/BbAlert.md +60 -2
  125. package/dist/ai/source/BbAvatar.md +3 -3
  126. package/dist/ai/source/BbBadge.md +60 -15
  127. package/dist/ai/source/BbBadgeButton.md +8 -2
  128. package/dist/ai/source/BbBaseButton.md +3 -1
  129. package/dist/ai/source/BbBaseCheckboxGroup.md +6 -2
  130. package/dist/ai/source/BbBaseDatePicker.md +3 -1
  131. package/dist/ai/source/BbBaseDatePickerInput.md +5 -1
  132. package/dist/ai/source/BbBaseInputContainer.md +52 -1
  133. package/dist/ai/source/BbBaseRadioGroup.md +4 -0
  134. package/dist/ai/source/BbBaseRating.md +3 -1
  135. package/dist/ai/source/BbBaseSelect.md +71 -16
  136. package/dist/ai/source/BbBaseSwitchGroup.md +4 -0
  137. package/dist/ai/source/BbBaseTimePickerInput.md +5 -1
  138. package/dist/ai/source/BbBreadcrumbs.md +31 -0
  139. package/dist/ai/source/BbButton.md +51 -24
  140. package/dist/ai/source/BbCheckbox.md +15 -1
  141. package/dist/ai/source/BbCheckboxGroup.md +2 -1
  142. package/dist/ai/source/BbCollapsible.md +7 -1
  143. package/dist/ai/source/BbColorInput.md +3 -4
  144. package/dist/ai/source/BbColorPalette.md +3 -4
  145. package/dist/ai/source/BbDatePicker.md +5 -1
  146. package/dist/ai/source/BbDatePickerInput.md +5 -1
  147. package/dist/ai/source/BbDialog.md +175 -19
  148. package/dist/ai/source/BbDropdown.md +376 -69
  149. package/dist/ai/source/BbDropdownGroup.md +330 -59
  150. package/dist/ai/source/BbForm.md +93 -5
  151. package/dist/ai/source/BbIcon.md +46 -36
  152. package/dist/ai/source/BbNumberInput.md +3 -4
  153. package/dist/ai/source/BbOffCanvas.md +474 -194
  154. package/dist/ai/source/BbPopover.md +24 -17
  155. package/dist/ai/source/BbProgress.md +2 -2
  156. package/dist/ai/source/BbRadio.md +15 -1
  157. package/dist/ai/source/BbRadioGroup.md +3 -1
  158. package/dist/ai/source/BbSelect.md +50 -2
  159. package/dist/ai/source/BbSelectPopover.md +171 -23
  160. package/dist/ai/source/BbSlider.md +3 -4
  161. package/dist/ai/source/BbSwitch.md +15 -1
  162. package/dist/ai/source/BbSwitchGroup.md +8 -5
  163. package/dist/ai/source/BbTable.md +5092 -1446
  164. package/dist/ai/source/BbTabs.md +6 -7
  165. package/dist/ai/source/BbTabsList.md +6 -7
  166. package/dist/ai/source/BbTabsPanes.md +6 -7
  167. package/dist/ai/source/BbTabsRoot.md +6 -7
  168. package/dist/ai/source/BbTag.md +3 -4
  169. package/dist/ai/source/BbTextInput.md +3 -4
  170. package/dist/ai/source/BbTextarea.md +3 -4
  171. package/dist/ai/source/BbTimePicker.md +4 -1
  172. package/dist/ai/source/BbTimePickerInput.md +5 -1
  173. package/dist/ai/source/BbToast.md +3 -1
  174. package/dist/ai/source/BbTooltip.md +5 -1
  175. package/dist/ai/source/CommonInputWrapper.md +4 -0
  176. package/dist/ai/source/CommonPopover.md +6 -0
  177. package/dist/ai/source/FlatListBox.md +11 -5
  178. package/dist/ai/source/GroupedListBox.md +7 -5
  179. package/dist/components/BbAlert/BbAlert.vue_vue_type_script_setup_true_lang.js +4 -4
  180. package/dist/components/BbAlert/types.d.ts +10 -1
  181. package/dist/components/BbAvatar/BbAvatar.vue.d.ts +1 -1
  182. package/dist/components/BbAvatar/BbAvatar.vue_vue_type_script_setup_true_lang.js +33 -33
  183. package/dist/components/BbBadge/BadgeBodyContent.vue_vue_type_script_setup_true_lang.js +22 -16
  184. package/dist/components/BbBadge/BbBadge.vue_vue_type_script_setup_true_lang.js +36 -15
  185. package/dist/components/BbBadge/badgeButtonContext.d.ts +21 -8
  186. package/dist/components/BbBadge/types.d.ts +8 -2
  187. package/dist/components/BbBaseButton/BbBaseButton.vue_vue_type_script_setup_true_lang.js +47 -47
  188. package/dist/components/BbBaseButton/RouterComponent.vue_vue_type_script_setup_true_lang.js +14 -14
  189. package/dist/components/BbBaseCheckboxGroup/BbBaseCheckboxGroup.vue_vue_type_script_setup_true_lang.js +30 -28
  190. package/dist/components/BbBaseCheckboxGroup/types.d.ts +2 -2
  191. package/dist/components/BbBaseDatePicker/BbBaseDatePicker.vue_vue_type_script_setup_true_lang.js +167 -167
  192. package/dist/components/BbBaseDatePicker/BbBaseDatePickerInputDaySelector.vue.d.ts +9 -9
  193. package/dist/components/BbBaseDatePicker/BbBaseDatePickerInputDaySelector.vue_vue_type_script_setup_true_lang.js +78 -78
  194. package/dist/components/BbBaseDatePicker/BbBaseDatePickerMonthSelector.vue_vue_type_script_setup_true_lang.js +64 -64
  195. package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerInput.vue.d.ts +1 -1
  196. package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerInput.vue_vue_type_script_setup_true_lang.js +138 -138
  197. package/dist/components/BbBaseInputContainer/BbBaseInputContainer.vue_vue_type_script_setup_true_lang.js +2 -2
  198. package/dist/components/BbBaseRadioGroup/BbBaseRadioGroup.vue_vue_type_script_setup_true_lang.js +24 -22
  199. package/dist/components/BbBaseRating/BbBaseRating.vue_vue_type_script_setup_true_lang.js +40 -40
  200. package/dist/components/BbBaseSelect/BbBaseSelect.vue_vue_type_script_setup_true_lang.js +74 -65
  201. package/dist/components/BbBaseSelect/types.d.ts +22 -0
  202. package/dist/components/BbBaseSlider/BbBaseSlider.vue_vue_type_script_setup_true_lang.js +5 -5
  203. package/dist/components/BbBaseSwitchGroup/BbBaseSwitchGroup.vue_vue_type_script_setup_true_lang.js +30 -28
  204. package/dist/components/BbBaseTimePickerInput/BbBaseTimePickerInput.vue.d.ts +1 -1
  205. package/dist/components/BbBaseTimePickerInput/BbBaseTimePickerInput.vue_vue_type_script_setup_true_lang.js +104 -104
  206. package/dist/components/BbBreadcrumbs/BbBreadcrumbs.vue_vue_type_script_setup_true_lang.js +35 -35
  207. package/dist/components/BbButton/BbButton.vue_vue_type_script_setup_true_lang.js +85 -81
  208. package/dist/components/BbCheckboxGroup/types.d.ts +2 -1
  209. package/dist/components/BbCollapsible/types.d.ts +7 -1
  210. package/dist/components/BbColorInput/BbColorInput.vue.d.ts +1 -1
  211. package/dist/components/BbColorInput/BbColorInput.vue_vue_type_script_setup_true_lang.js +18 -18
  212. package/dist/components/BbColorPalette/BbColorPalette.vue.d.ts +2 -2
  213. package/dist/components/BbColorPalette/BbColorPalette.vue_vue_type_script_setup_true_lang.js +50 -50
  214. package/dist/components/BbConfirm/BbConfirm.vue_vue_type_script_setup_true_lang.js +17 -17
  215. package/dist/components/BbDatePicker/BbDatePicker.vue.d.ts +1 -1
  216. package/dist/components/BbDatePicker/BbDatePicker.vue_vue_type_script_setup_true_lang.js +100 -100
  217. package/dist/components/BbDatePickerInput/BbDatePickerInput.vue_vue_type_script_setup_true_lang.js +21 -21
  218. package/dist/components/BbDialog/BbDialog.vue.d.ts +1 -1
  219. package/dist/components/BbDialog/BbDialog.vue_vue_type_script_setup_true_lang.js +133 -107
  220. package/dist/components/BbDialog/types.d.ts +29 -2
  221. package/dist/components/BbDropdown/AdaptiveDropdown.vue.d.ts +2 -0
  222. package/dist/components/BbDropdown/AdaptiveDropdown.vue_vue_type_script_setup_true_lang.js +99 -100
  223. package/dist/components/BbDropdown/BbDropdown.vue.d.ts +2 -2
  224. package/dist/components/BbDropdown/BbDropdown.vue_vue_type_script_setup_true_lang.js +208 -201
  225. package/dist/components/BbDropdown/BbDropdownList.vue_vue_type_script_setup_true_lang.js +225 -208
  226. package/dist/components/BbDropdown/DropdownPipelineResolver.vue_vue_type_script_setup_true_lang.js +21 -21
  227. package/dist/components/BbDropdown/types.d.ts +20 -5
  228. package/dist/components/BbDropdownButton/BbDropdownButton.vue_vue_type_script_setup_true_lang.js +5 -5
  229. package/dist/components/BbIcon/BbIcon.vue_vue_type_script_setup_true_lang.js +46 -46
  230. package/dist/components/BbIcon/iconCache.d.ts +33 -0
  231. package/dist/components/BbIcon/iconCache.js +17 -0
  232. package/dist/components/BbNumberInput/BbNumberInput.vue.d.ts +1 -1
  233. package/dist/components/BbNumberInput/BbNumberInput.vue_vue_type_script_setup_true_lang.js +15 -15
  234. package/dist/components/BbOffCanvas/BbOffCanvas.vue.d.ts +1 -1
  235. package/dist/components/BbOffCanvas/BbOffCanvas.vue_vue_type_script_setup_true_lang.js +254 -208
  236. package/dist/components/BbOffCanvas/types.d.ts +30 -5
  237. package/dist/components/BbPagination/BbPagination.vue.d.ts +1 -1
  238. package/dist/components/BbPopover/BbPopover.vue.d.ts +2 -2
  239. package/dist/components/BbPopover/BbPopover.vue_vue_type_script_setup_true_lang.js +149 -146
  240. package/dist/components/BbPopover/types.d.ts +3 -2
  241. package/dist/components/BbRadioGroup/types.d.ts +3 -1
  242. package/dist/components/BbSelect/BbSelect.vue_vue_type_script_setup_true_lang.js +27 -23
  243. package/dist/components/BbSelect/types.d.ts +32 -0
  244. package/dist/components/BbSelectPopover/BbSelectPopover.vue_vue_type_script_setup_true_lang.js +221 -213
  245. package/dist/components/BbSlider/BbSlider.vue.d.ts +1 -1
  246. package/dist/components/BbSlider/BbSlider.vue_vue_type_script_setup_true_lang.js +20 -20
  247. package/dist/components/BbTable/BbTable.vue.d.ts +10 -4
  248. package/dist/components/BbTable/BbTable.vue_vue_type_script_setup_true_lang.js +1433 -600
  249. package/dist/components/BbTable/BbTableDataRow.d.ts +162 -0
  250. package/dist/components/BbTable/BbTableDataRow.js +136 -0
  251. package/dist/components/BbTable/BbTableExpandRow.d.ts +73 -0
  252. package/dist/components/BbTable/BbTableExpandRow.js +52 -0
  253. package/dist/components/BbTable/types.d.ts +324 -111
  254. package/dist/components/BbTable/utils.d.ts +92 -4
  255. package/dist/components/BbTable/utils.js +71 -36
  256. package/dist/components/BbTabs/types.d.ts +0 -8
  257. package/dist/components/BbTag/BbTag.vue.d.ts +1 -1
  258. package/dist/components/BbTag/BbTag.vue_vue_type_script_setup_true_lang.js +18 -18
  259. package/dist/components/BbTextInput/BbTextInput.vue.d.ts +1 -1
  260. package/dist/components/BbTextInput/BbTextInput.vue_vue_type_script_setup_true_lang.js +18 -18
  261. package/dist/components/BbTextarea/BbTextarea.vue.d.ts +1 -1
  262. package/dist/components/BbTextarea/BbTextarea.vue_vue_type_script_setup_true_lang.js +54 -54
  263. package/dist/components/BbTimePicker/BbTimePicker.vue.d.ts +1 -1
  264. package/dist/components/BbTimePicker/BbTimePicker.vue_vue_type_script_setup_true_lang.js +80 -80
  265. package/dist/components/BbTimePickerInput/BbTimePickerInput.vue_vue_type_script_setup_true_lang.js +61 -61
  266. package/dist/components/BbToast/BbToast.vue_vue_type_script_setup_true_lang.js +17 -17
  267. package/dist/components/BbToast/BbToastMessage.vue_vue_type_script_setup_true_lang.js +13 -13
  268. package/dist/components/BbTooltip/types.d.ts +5 -1
  269. package/dist/components/ChipsBox/ChipsBox.vue_vue_type_script_setup_true_lang.js +17 -17
  270. package/dist/components/ClearableButton/ClearableButton.vue_vue_type_script_setup_true_lang.js +5 -5
  271. package/dist/components/CommonPopover/CommonPopover.vue_vue_type_script_setup_true_lang.js +2 -1
  272. package/dist/components/FlatListBox/FlatListBox.vue_vue_type_script_setup_true_lang.js +83 -83
  273. package/dist/components/GroupedListBox/GroupedListBox.vue_vue_type_script_setup_true_lang.js +56 -56
  274. package/dist/composables/useBaseOptions.js +30 -20
  275. package/dist/composables/useBbConfig.d.ts +27 -6
  276. package/dist/composables/useBbConfig.js +8 -2
  277. package/dist/composables/useConfig.d.ts +59 -0
  278. package/dist/composables/useConfig.js +9 -0
  279. package/dist/composables/useItemsGetter.d.ts +11 -0
  280. package/dist/composables/useItemsGetter.js +44 -18
  281. package/dist/composables/useLocale.js +10 -7
  282. package/dist/composables/useMobile.js +5 -5
  283. package/dist/composables/usePrefill.d.ts +21 -2
  284. package/dist/composables/usePrefill.js +25 -19
  285. package/dist/composables/useSsrState.d.ts +20 -0
  286. package/dist/composables/useSsrState.js +13 -0
  287. package/dist/composables/useTableWidthContext.d.ts +24 -4
  288. package/dist/composables/useTableWidthContext.js +31 -28
  289. package/dist/composables/useToast.js +5 -5
  290. package/dist/deprecation/ai-deprecations.json.d.ts +121 -11
  291. package/dist/deprecation/ai-deprecations.json.js +1 -1
  292. package/dist/directives/bbDropdown.d.ts +15 -4
  293. package/dist/directives/bbDropdown.js +31 -9
  294. package/dist/directives/createPopoverDirective.d.ts +62 -0
  295. package/dist/directives/createPopoverDirective.js +63 -23
  296. package/dist/i18n/locales/cs.json +4 -1
  297. package/dist/i18n/locales/da.json +4 -1
  298. package/dist/i18n/locales/de.json +4 -1
  299. package/dist/i18n/locales/el.json +4 -1
  300. package/dist/i18n/locales/en.json +4 -1
  301. package/dist/i18n/locales/es.json +4 -1
  302. package/dist/i18n/locales/fi.json +4 -1
  303. package/dist/i18n/locales/fr.json +4 -1
  304. package/dist/i18n/locales/hu.json +4 -1
  305. package/dist/i18n/locales/it.json +4 -1
  306. package/dist/i18n/locales/ja.json +4 -1
  307. package/dist/i18n/locales/ko.json +4 -1
  308. package/dist/i18n/locales/nb.json +4 -1
  309. package/dist/i18n/locales/nl.json +4 -1
  310. package/dist/i18n/locales/pl.json +4 -1
  311. package/dist/i18n/locales/pt.json +4 -1
  312. package/dist/i18n/locales/ro.json +4 -1
  313. package/dist/i18n/locales/ru.json +4 -1
  314. package/dist/i18n/locales/sv.json +4 -1
  315. package/dist/i18n/locales/tr.json +4 -1
  316. package/dist/i18n/locales/uk.json +4 -1
  317. package/dist/i18n/locales/zh-cn.json +4 -1
  318. package/dist/index.d.ts +7 -2
  319. package/dist/index.js +69 -67
  320. package/dist/llms-full.txt +3997 -1458
  321. package/dist/llms-medium.txt +140 -73
  322. package/dist/llms.txt +7 -6
  323. package/dist/locale-blueprint.json +4 -1
  324. package/dist/nuxt-auto-imports.d.ts +100 -0
  325. package/dist/nuxt-auto-imports.js +55 -0
  326. package/dist/nuxt-module.d.ts +22 -1
  327. package/dist/nuxt.js +22 -8
  328. package/dist/plugin.d.ts +10 -1
  329. package/dist/plugin.js +20 -19
  330. package/dist/runtime/nuxt-plugin.js +28 -21
  331. package/dist/styles.css +1 -1
  332. package/dist/utilities/misc/listboxMetrics.d.ts +3 -3
  333. package/dist/utilities/misc/listboxMetrics.js +2 -2
  334. package/dist/utilities/misc/ssrStateInjectionKey.d.ts +42 -0
  335. package/dist/utilities/misc/ssrStateInjectionKey.js +4 -0
  336. package/dist/validated/BbForm.vue_vue_type_script_setup_true_lang.js +45 -27
  337. package/dist/validated/BbSelect.vue.d.ts +2 -0
  338. package/dist/validated/BbSelect.vue_vue_type_script_setup_true_lang.js +1 -0
  339. package/dist/validated/useValidatedField.js +25 -23
  340. package/dist/vite.js +7 -3
  341. package/llms.txt +8 -7
  342. package/package.json +2 -2
  343. package/scripts/lib/eslint-plugin.d.ts +19 -1
  344. package/scripts/lib/eslint-plugin.mjs +155 -14
  345. package/scripts/lib/html-attributes.mjs +91 -0
  346. package/scripts/lib/validate-bb-markup.mjs +59 -11
  347. package/dist/assets/svgs/sort.svg_raw.js +0 -4
  348. package/dist/components/BbBadge/BadgeAppendIcon.vue.d.ts +0 -3
  349. package/dist/components/BbBadge/BadgeAppendIcon.vue.js +0 -5
  350. package/dist/components/BbBadge/BadgeAppendIcon.vue_vue_type_script_setup_true_lang.js +0 -22
@@ -24,6 +24,9 @@
24
24
  <template v-if="$slots.title" #title="slotProps">
25
25
  <slot name="title" v-bind="slotProps" />
26
26
  </template>
27
+ <template v-if="$slots.description" #description="slotProps">
28
+ <slot name="description" v-bind="slotProps" />
29
+ </template>
27
30
  <template v-if="$slots.footer" #footer>
28
31
  <slot name="footer" />
29
32
  </template>
@@ -31,8 +34,11 @@
31
34
  <dialog
32
35
  v-else
33
36
  ref="dialog"
37
+ :aria-describedby="
38
+ hasRenderedAtLeastOnce && hasDescription() ? descriptionId : undefined
39
+ "
34
40
  :aria-labelledby="
35
- hasRenderedAtLeastOnce && (renderHeader || $slots.header)
41
+ hasRenderedAtLeastOnce && (hasTitle() || $slots.header)
36
42
  ? titleId
37
43
  : undefined
38
44
  "
@@ -57,11 +63,20 @@
57
63
  @pointerdown="onBackdropPointerDown"
58
64
  >
59
65
  <template v-if="hasRenderedAtLeastOnce">
60
- <div v-if="renderHeader || $slots.header" class="bb-dialog__header">
66
+ <div v-if="renderHeader() || $slots.header" class="bb-dialog__header">
61
67
  <slot :close="close" name="header" :title="title" :title-id="titleId">
62
- <span :id="titleId" class="bb-dialog__title">
68
+ <span v-if="hasTitle()" :id="titleId" class="bb-dialog__title">
63
69
  <slot name="title" :text="title">{{ title }}</slot>
64
70
  </span>
71
+ <p
72
+ v-if="hasDescription()"
73
+ :id="descriptionId"
74
+ class="bb-dialog__description"
75
+ >
76
+ <slot name="description" :text="description">{{
77
+ description
78
+ }}</slot>
79
+ </p>
65
80
  <CloseButton
66
81
  v-if="!hideClose"
67
82
  :aria-label="t('dialog.closeLabel').value"
@@ -72,7 +87,7 @@
72
87
  <div class="bb-dialog__body scrollbar-border">
73
88
  <div class="bb-dialog__body-content">
74
89
  <CloseButton
75
- v-if="!renderHeader && !$slots.header && !hideClose"
90
+ v-if="!renderHeader() && !$slots.header && !hideClose"
76
91
  :aria-label="t('dialog.closeLabel').value"
77
92
  @click="onCloseButtonClick"
78
93
  />
@@ -106,13 +121,14 @@ import {
106
121
  } from '@/utils/overlayEscapeStack';
107
122
  import { useId } from '@/composables/useId';
108
123
  import { useLocale } from '@/composables/useLocale';
124
+ import { useLogger } from '@/composables/useLogger';
109
125
  import { useMobile } from '@/composables/useMobile';
110
126
  import { useBreakpoint } from '@/composables/useBreakpoint';
111
127
  import { useUntil } from '@/composables/useUntil';
112
128
  import { removedPropsFor } from '@/deprecation/removedProps';
113
129
  import { warnRemovedAttrs } from '@/utilities/functions/warnRemovedAttrs';
114
130
  import { wait } from '@/utilities/functions/wait';
115
- import { config } from 'virtual:bitboss-ui/config';
131
+ import { useConfig } from '@/composables/useConfig';
116
132
  import type { BbDialogProps, BbDialogEvents, BbDialogSlots } from './types';
117
133
  import type { BbOffCanvasProps } from '../BbOffCanvas/types';
118
134
  import CloseButton from '../CloseIcon/CloseButton.vue';
@@ -142,7 +158,9 @@ const props = withDefaults(defineProps<BbDialogProps>(), {
142
158
 
143
159
  const emit = defineEmits<BbDialogEvents>();
144
160
 
145
- defineSlots<BbDialogSlots>();
161
+ const slots = defineSlots<BbDialogSlots>();
162
+
163
+ const config = useConfig();
146
164
 
147
165
  if (process.env.NODE_ENV !== 'production')
148
166
  warnRemovedAttrs('BbDialog', removedPropsFor('BbDialog'));
@@ -173,6 +191,7 @@ watch([() => props.adaptive, isMobile], () => {
173
191
  // drawer's extent mean different things, so the drawer defaults to 'auto';
174
192
  // 3. `offCanvasProps`, so the consumer overrides any of the above.
175
193
  const canvasBindings = computed<Partial<BbOffCanvasProps>>(() => ({
194
+ description: props.description,
176
195
  disabled: props.disabled,
177
196
  eager: props.eager,
178
197
  focusTarget: props.focusTarget,
@@ -190,7 +209,40 @@ const canvasBindings = computed<Partial<BbOffCanvasProps>>(() => ({
190
209
 
191
210
  const dialog = ref<HTMLDialogElement | null>(null);
192
211
  const titleId = `title_${useId().id.value}`;
193
- const renderHeader = computed(() => !!props.title);
212
+ /*
213
+ * `aria-describedby` points HERE and nowhere else.
214
+ *
215
+ * BbConfirm has described its dialog by its message for a while, and its
216
+ * comment says exactly why that is safe there and was not safe on BbDialog:
217
+ * a confirm's text is short and static, where BbDialog's body is arbitrary
218
+ * markup and pointing at it would read entire forms aloud. A dedicated
219
+ * `description` is the confirm case — one short static line — so the wiring
220
+ * that v3 dropped along with the prop can come back with it, aimed at the
221
+ * element that is actually a description.
222
+ */
223
+ const descriptionId = `desc_${useId().id.value}`;
224
+ const hasDescription = () => !!props.description || !!slots.description;
225
+ /*
226
+ * A `#title` slot is a title — it renders the default header exactly as the
227
+ * `title` prop does. It was keyed on `!!props.title` alone, so a dialog that
228
+ * only slotted its title rendered NO header at all and the declared slot was
229
+ * silently inert (v2 rendered it: the slot replaced the title text, and the
230
+ * header was not gated on the prop). `#header` stays separate below: it
231
+ * REPLACES the header rather than filling it, and owns its own close control.
232
+ *
233
+ * A function, not a computed, now that it reads a slot: `$slots` is not a
234
+ * reactive dependency, so a computed would latch its first value and miss a
235
+ * `#title` that appears later (a consumer's `<template v-if="…" #title>`).
236
+ * Evaluated per render it tracks the slot correctly — the same reason
237
+ * BbOffCanvas's twin is a function.
238
+ */
239
+ const hasTitle = () => !!props.title || !!slots.title;
240
+ /*
241
+ * A description raises the header on its own — a describing line with no title
242
+ * is a legitimate shape, and gating the header on the title alone would drop
243
+ * it silently.
244
+ */
245
+ const renderHeader = () => hasTitle() || hasDescription();
194
246
  const hasRenderedAtLeastOnce: Ref<boolean> = useUntil(
195
247
  () => model.value || props.eager,
196
248
  {
@@ -426,6 +478,29 @@ const toggleDialog = async (value: boolean) => {
426
478
  }
427
479
  };
428
480
 
481
+ /*
482
+ * Q18.13 — `aria-labelledby` is bound to `titleId` as soon as a `#header` slot
483
+ * exists, but the slot content is the author's: nothing guarantees they put
484
+ * that id on their heading. A name pointing at a missing element is WORSE than
485
+ * no name — assistive tech announces the surface unnamed and the author has no
486
+ * signal. Binding conditionally is not possible (the attribute is computed
487
+ * before the slot renders), so warn once, in dev, after the header is in the
488
+ * DOM.
489
+ */
490
+ const warnIfHeaderNameIsDangling = () => {
491
+ if (process.env.NODE_ENV === 'production') return;
492
+ // `props.title`, not `renderHeader` (which now also counts `#title`): a
493
+ // `#header` slot replaces the whole header, so the dangling-id risk is the
494
+ // same whatever else was passed. Keyed exactly like BbOffCanvas's twin.
495
+ if (!slots.header || props.title) return;
496
+ nextTick(() => {
497
+ if (!dialog.value || document.getElementById(titleId)) return;
498
+ useLogger().warn(
499
+ `BbDialog: the #header slot does not contain an element with id="${titleId}", so aria-labelledby points at nothing and the dialog announces as unnamed. Bind the slot's \`titleId\` to your heading: <template #header="{ titleId }"><h2 :id="titleId">…</h2></template>.`
500
+ );
501
+ });
502
+ };
503
+
429
504
  watch(model, (value) => {
430
505
  // Latch the surface at the moment we open, then freeze it: a resize across
431
506
  // the mobile breakpoint mid-session must not swap dialog <-> drawer.
@@ -435,6 +510,7 @@ watch(model, (value) => {
435
510
  });
436
511
  onMounted(() => {
437
512
  if (model.value && surface.value === 'dialog') toggleDialog(true);
513
+ warnIfHeaderNameIsDangling();
438
514
  });
439
515
  onBeforeUnmount(() => {
440
516
  clearTimeout(denyCloseTimer);
@@ -507,6 +583,18 @@ export type { Sizes };
507
583
  * Props controlling the BbDialog appearance, accessibility, and closing behaviour.
508
584
  */
509
585
  export type BbDialogProps = {
586
+ /**
587
+ * One short line under the title, in the header — the shadcn
588
+ * `DialogDescription` shape: same block as the title, lower hierarchy,
589
+ * muted.
590
+ *
591
+ * It is also what `aria-describedby` points at. That wiring was dropped in
592
+ * v3 along with the old `description` prop, on the reasoning that pointing
593
+ * it at arbitrary body content would read whole forms aloud — true, and the
594
+ * reason it aims at THIS element only. Keep it to a sentence; anything
595
+ * longer belongs in the body.
596
+ */
597
+ description?: string;
510
598
  /**
511
599
  * Disable EVERY user-initiated dismissal: backdrop click, Escape AND the
512
600
  * header close (×) button (denied attempts play the deny nudge). Use it
@@ -540,7 +628,7 @@ export type BbDialogProps = {
540
628
  /**
541
629
  * Overrides merged over the offcanvas (mobile) surface's props. The drawer
542
630
  * defaults to a bottom, draggable, content-sized sheet
543
- * (`direction: 'bottom'`, `draggable: true`, `size: 'auto'`); use this to
631
+ * (`side: 'bottom'`, `draggable: true`, `size: 'auto'`); use this to
544
632
  * override those, set other drawer-only options (`stackGap`), or override
545
633
  * shared props whose meaning differs on the drawer (`stack`). Ignored on the
546
634
  * desktop dialog surface.
@@ -615,12 +703,24 @@ export type BbDialogHeaderSlotProps = {
615
703
  };
616
704
 
617
705
  /** Props exposed by the `title` slot. */
706
+ /** Props exposed by the `description` slot. */
707
+ export type BbDialogDescriptionSlotProps = {
708
+ /** The `description` prop value. */
709
+ text: BbDialogProps['description'];
710
+ };
711
+
618
712
  export type BbDialogTitleSlotProps = {
619
713
  /** The `title` prop value. */
620
714
  text: BbDialogProps['title'];
621
715
  };
622
716
 
623
717
  export type BbDialogSlots = {
718
+ /**
719
+ * Replaces the description text under the title. Renders the header even
720
+ * when `title` and `description` are unset — a slotted description is a
721
+ * description, the same rule `#title` follows.
722
+ */
723
+ description?: (props: BbDialogDescriptionSlotProps) => any;
624
724
  /** Primary body content of the dialog, rendered in the scrollable body area. */
625
725
  default?: (props: BbDialogDefaultSlotProps) => any;
626
726
  /** Content rendered in the dialog footer, below the body area. Typically used for action buttons. */
@@ -640,7 +740,11 @@ export type BbDialogSlots = {
640
740
  * width, or it renders squeezed against the left edge.
641
741
  */
642
742
  header?: (props: BbDialogHeaderSlotProps) => any;
643
- /** Replaces the default title text inside the header. Remains linked to the dialog through `aria-labelledby`. */
743
+ /**
744
+ * Replaces the default title text inside the header. Remains linked to the
745
+ * dialog through `aria-labelledby`. Providing this slot renders the header
746
+ * even when `title` is unset — a slotted title is a title.
747
+ */
644
748
  title?: (props: BbDialogTitleSlotProps) => any;
645
749
  };
646
750
 
@@ -657,6 +761,13 @@ export type { BbDialogSlots as BaseDialogSlots };
657
761
  ```css
658
762
  /* @inherit --transition-duration --max-width — set inline from props; @inherit --scrollbar-width — set on body by the scroll lock */
659
763
  .bb-dialog {
764
+ /* Axis split of --bb-panel-p: --px (inline) / --py (block),
765
+ each branching off it. Set the pair only when the axes differ; setting
766
+ --bb-panel-p alone keeps them equal. Local on this root class (not
767
+ :root) so scoped --bb-panel-p overrides keep reaching the slots; for
768
+ per-part asymmetry, scope --py to the part class. */
769
+ --px: var(--bb-panel-p);
770
+ --py: var(--bb-panel-p);
660
771
  --page-padding: 20px;
661
772
  --transition-timing-function: var(--bb-ease);
662
773
 
@@ -751,26 +862,71 @@ export type { BbDialogSlots as BaseDialogSlots };
751
862
  }
752
863
 
753
864
  .bb-dialog__header {
865
+ /* Shared by the close control and by the space the title reserves for it,
866
+ * so the two can never drift apart. */
867
+ --close-size: 28px;
868
+
754
869
  align-items: center;
755
870
  column-gap: 12px;
756
871
  display: flex;
757
872
  flex-shrink: 0;
758
873
  justify-content: space-between;
759
- padding: var(--bb-panel-p) var(--bb-panel-p) calc(var(--bb-panel-p) / 2)
760
- var(--bb-panel-p);
874
+ padding: var(--py) var(--px) calc(var(--py) / 2) var(--px);
761
875
 
762
876
  .bb-dialog__title {
763
877
  font-size: var(--dialog-title-fs, calc(var(--bb-fs) + 2px));
764
878
  font-weight: 500;
765
879
  line-height: var(--dialog-title-fs, calc(var(--bb-fs) + 2px));
880
+ /* Long titles wrap rather than truncate — a dialog title is usually
881
+ * naming the record you are about to act on, so hiding the end of it
882
+ * is worse than a second line. `anywhere` because the thing that
883
+ * overflows is typically one unbroken id with nowhere to break. */
884
+ min-width: 0;
885
+ overflow-wrap: anywhere;
886
+
887
+ /* The close control is out of flow (below), so `column-gap` has
888
+ * nothing to push against and the title would run under it. Reserve
889
+ * the space here instead — only when there is actually a control to
890
+ * clear, so `hideClose` keeps the full width. */
891
+ &:has(~ .bb-close-button) {
892
+ padding-right: calc(var(--close-size) + 4px);
893
+ }
766
894
  }
767
895
 
896
+ /* Absolute on purpose: pinned to the panel corner, so a title that wraps
897
+ * to two lines does not drag the × down with it, and the control never
898
+ * adds its 28px to the header's height (the title's line box sets that).
899
+ * The negative offsets align the ICON's edges with the padding box —
900
+ * the button's own `--p` sits outside it. */
768
901
  > .bb-close-button {
769
- --size: 28px;
902
+ --size: var(--close-size);
770
903
  --p: 7px;
771
904
  position: absolute;
772
- right: calc(var(--bb-panel-p) - var(--p));
773
- top: calc(var(--bb-panel-p) - var(--p));
905
+ right: calc(var(--px) - var(--p));
906
+ top: calc(var(--py) - var(--p));
907
+ }
908
+
909
+ /* Only when a description is present. A header without one keeps its
910
+ original single-row, vertically-centred layout exactly — this must not
911
+ move any dialog that does not opt in. */
912
+ &:has(.bb-dialog__description) {
913
+ align-items: flex-start;
914
+ flex-direction: column;
915
+ row-gap: 2px;
916
+ }
917
+
918
+ .bb-dialog__description {
919
+ color: var(--bb-text-muted);
920
+ font-size: var(--bb-fs);
921
+ font-weight: 400;
922
+ line-height: 20px;
923
+ margin: 0;
924
+ /* Clears the absolutely-positioned close button the same way the title
925
+ does. The × sits at the top-right, and a one-line title is short
926
+ enough that the description's first line can still run under it. */
927
+ &:has(~ .bb-close-button) {
928
+ padding-right: calc(var(--close-size) + 4px);
929
+ }
774
930
  }
775
931
  }
776
932
 
@@ -781,20 +937,20 @@ export type { BbDialogSlots as BaseDialogSlots };
781
937
 
782
938
  &:first-child {
783
939
  .bb-dialog__body-content {
784
- padding-top: var(--bb-panel-p);
940
+ padding-top: var(--py);
785
941
 
786
942
  > .bb-close-button {
787
943
  --size: 28px;
788
944
  --p: 7px;
789
945
  position: absolute;
790
- right: calc(var(--bb-panel-p) - var(--p));
791
- top: calc(var(--bb-panel-p) - var(--p));
946
+ right: calc(var(--px) - var(--p));
947
+ top: calc(var(--py) - var(--p));
792
948
  }
793
949
  }
794
950
  }
795
951
 
796
952
  &-content {
797
- padding: 0px var(--bb-panel-p) var(--dialog-gap, var(--bb-panel-p));
953
+ padding: 0px var(--px) var(--dialog-gap, var(--py));
798
954
  }
799
955
 
800
956
  /* Hide any nested dialogs that are not open so that scale transition works without affecting fixed positioning */
@@ -805,7 +961,7 @@ export type { BbDialogSlots as BaseDialogSlots };
805
961
 
806
962
  .bb-dialog__footer {
807
963
  border-top: 1px solid var(--bb-border);
808
- padding: var(--dialog-gap, var(--bb-panel-p)) var(--bb-panel-p);
964
+ padding: var(--dialog-gap, var(--py)) var(--px);
809
965
  pointer-events: auto;
810
966
 
811
967
  &:empty {