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
@@ -496,35 +496,35 @@ const form = useForm({ brandColor: '#4f46e5' });
496
496
 
497
497
  | Prop | Type | Default | Required | Description |
498
498
  | --- | --- | --- | --- | --- |
499
- | `adaptive` | `boolean \| undefined` | `undefined` | | When `true`, the color palette opens as a bottom off-canvas sheet on mobile viewports instead of a floating popover; on desktop it stays a popover. Mirrors the adaptive behaviour of `BbSelect`/`BbDatePickerInput`. When unset, falls back to … |
500
- | `alpha` | `boolean \| undefined` | | | Enable the alpha channel. Shows an opacity slider and uses `#RRGGBBAA` hex8 format. |
499
+ | `adaptive` | `boolean \| undefined` | ``config.adaptive` (`true`)` | | When `true`, the color palette opens as a bottom off-canvas sheet on mobile viewports instead of a floating popover; on desktop it stays a popover. Mirrors the adaptive behaviour of `BbSelect`/`BbDatePickerInput`. When unset, falls back to … |
500
+ | `alpha` | `boolean \| undefined` | `false` | | Enable the alpha channel. Shows an opacity slider and uses `#RRGGBBAA` hex8 format. |
501
501
  | `append:icon` | `string \| undefined` | | | Name of the icon to be added at the end of the input. |
502
502
  | `autocomplete` | `string \| undefined` | | | Guides the browser as to the type of information expected in the field. |
503
503
  | `autofocus` | `Booleanish \| undefined` | | | Sets autofocus on page load. |
504
- | `clearable` | `boolean \| undefined` | | | Displays a clear button when the input has a value and is being interacted with. |
505
- | `compact` | `boolean \| undefined` | | | Displays the component in a compact version. |
504
+ | `clearable` | `boolean \| undefined` | `false` | | Displays a clear button when the input has a value and is being interacted with. |
505
+ | `compact` | `boolean \| undefined` | `false` | | Displays the component in a compact version. |
506
506
  | `description` | `string \| undefined` | | | Descriptive text displayed below the label and above the input. Unlike the hint it is always visible, and it is linked to the input via `aria-describedby` (after any `errors` / `warnings`, before the `hint`). |
507
507
  | `direction` | `InputDirection \| undefined` | | | Direction of the layout of the component. Can either be a predefined value or a pattern separated by a space like `xx xxxxx`. |
508
- | `disabled` | `boolean \| undefined` | | | Disables the component. |
508
+ | `disabled` | `boolean \| undefined` | `false` | | Disables the component. |
509
509
  | `errors` | `string \| string[] \| undefined` | | | Can be a string or an array of string containing the messages to display. They render in an `aria-live="polite"` region (announced when they appear) and, while the list is non-empty, are referenced FIRST from the control's `aria-describedby… |
510
- | `eyeDropper` | `boolean \| undefined` | | | Show an eyedropper button to sample any color on screen. Uses the native EyeDropper API — hidden automatically on unsupported browsers. |
511
- | `hasErrors` | `boolean \| undefined` | | | Define if the component should be in an error state. It usually attaches a CSS class for styling purposes. |
512
- | `hasWarning` | `boolean \| undefined` | | | Define if the component should be in a warning state. Same chrome as errors with `--bb-warn`; errors take priority. |
513
- | `hideLabel` | `boolean \| undefined` | | | Visually hides the label of the input while maintaining accessibility. |
510
+ | `eyeDropper` | `boolean \| undefined` | `false` | | Show an eyedropper button to sample any color on screen. Uses the native EyeDropper API — hidden automatically on unsupported browsers. |
511
+ | `hasErrors` | `boolean \| undefined` | `false` | | Define if the component should be in an error state. It usually attaches a CSS class for styling purposes. |
512
+ | `hasWarning` | `boolean \| undefined` | `false` | | Define if the component should be in a warning state. Same chrome as errors with `--bb-warn`; errors take priority. |
513
+ | `hideLabel` | `boolean \| undefined` | `false` | | Visually hides the label of the input while maintaining accessibility. |
514
514
  | `hint` | `string \| undefined` | | | Text box to be displayed near the input, usually to indicate instructions. |
515
515
  | `id` | `string \| undefined` | | | The identifier of the component. |
516
516
  | `label` | `string` | | yes | Text content of the label of the element. |
517
517
  | `labelMode` | `"floating" \| "outside" \| "inside" \| undefined` | | | Label rendering mode: `outside` places the label above the input, `floating` overlays it on the field and shrinks it when a value is set, `inside` keeps it inside the field. |
518
518
  | `labelPosition` | `"left" \| "center" \| "right" \| undefined` | | | Sets the text alignment of the label. |
519
- | `loading` | `boolean \| undefined` | | | Sets the component in a loading state, usually triggering some visual styles. |
520
- | `modelValue` | `string \| null` | | yes | Used by v-model. |
519
+ | `loading` | `boolean \| undefined` | `false` | | Sets the component in a loading state, usually triggering some visual styles. |
520
+ | `modelValue` | `string \| null` | `null` | yes | Used by v-model. |
521
521
  | `name` | `string \| undefined` | | | Defines the name of the input. |
522
- | `persistentHint` | `boolean \| undefined` | | | Keeps the hint displayed. |
522
+ | `persistentHint` | `boolean \| undefined` | `false` | | Keeps the hint displayed. |
523
523
  | `placeholder` | `string \| undefined` | | | String displayed when there's no data. |
524
524
  | `prepend:icon` | `string \| undefined` | | | Name of the icon to be added at the start of the input. |
525
- | `readonly` | `boolean \| undefined` | | | Sets the input in a readonly state. |
526
- | `required` | `boolean \| undefined` | | | Sets the input as required. |
527
- | `reverse` | `boolean \| undefined` | | | Reverses the layout. Applicable in every direction the order of the label and the input is swapped. |
525
+ | `readonly` | `boolean \| undefined` | `false` | | Sets the input in a readonly state. |
526
+ | `required` | `boolean \| undefined` | `false` | | Sets the input as required. |
527
+ | `reverse` | `boolean \| undefined` | `false` | | Reverses the layout. Applicable in every direction the order of the label and the input is swapped. |
528
528
  | `swatches` | `boolean \| string[][] \| undefined` | | | Controls swatches display in the picker: - `true` — show the built-in Material-palette swatches - `string[][]` — show custom swatches (each inner array = a column of shades) - `false` / omitted — no swatches section |
529
529
  | `warnings` | `string \| string[] \| undefined` | | | Warning messages to display beneath the field, in their own `aria-live` region and amber (`--bb-text-warn`). A string or array; a non-empty list implies the warning state. Errors suppress warnings when both are set. While displayed they are… |
530
530
 
@@ -53,6 +53,12 @@ prop), so always initialise it; `null` is the correct "no color yet" value.
53
53
  `null` renders an "empty" trigger (nothing painted) and is what you get when
54
54
  nothing is chosen yet.
55
55
 
56
+ **The palette never emits `null`** — every selection is a concrete hex — so
57
+ `null` is an _inbound_ value only. Once the user picks a colour there is no
58
+ built-in way back to empty: clearing is the consumer's job (set the model to
59
+ `null` yourself from a Clear button). Don't write an `update:modelValue`
60
+ handler that branches on `null`; that branch is dead code.
61
+
56
62
  The label manager below embraces the emit frequency instead of fighting it: the
57
63
  chip repaints on every drag frame (cheap — it's one style binding), while the
58
64
  _persistence_ is debounced behind a short timer, so only the trailing edge of a
@@ -593,22 +599,22 @@ styling (a caret, a highlight). Two props gate interaction:
593
599
  | Prop | Type | Default | Required | Description |
594
600
  | --- | --- | --- | --- | --- |
595
601
  | `activator` | `ElementOrComponentRef \| undefined` | | | External activator element or component ref. When provided, the `activator` slot is not rendered and click listeners are attached programmatically to the referenced element — mirroring the BbDropdown activator API. |
596
- | `adaptive` | `boolean \| undefined` | `undefined` | | When `true`, the palette opens as a bottom off-canvas sheet on mobile viewports instead of a floating popover; on desktop it stays a popover. Mirrors the adaptive behaviour of `BbPopover`/`BbDropdown`/`BbDatePicker`. When unset, falls back … |
602
+ | `adaptive` | `boolean \| undefined` | ``config.adaptive` (`true`)` | | When `true`, the palette opens as a bottom off-canvas sheet on mobile viewports instead of a floating popover; on desktop it stays a popover. Mirrors the adaptive behaviour of `BbPopover`/`BbDropdown`/`BbDatePicker`. When unset, falls back … |
597
603
  | `alpha` | `boolean \| undefined` | `false` | | Enable the alpha channel. The picker shows an opacity slider and emits `#RRGGBBAA` hex8 values. |
598
604
  | `anchor` | `ElementOrComponentRef \| undefined` | | | Element or component ref the popover positions itself relative to. Defaults to the activator element when omitted, allowing the popover to be anchored to a larger container (e.g. the full input row) while a smaller element (e.g. a color dot… |
599
605
  | `boundary` | `ElementOrComponentRefOrSelector \| undefined` | | | Constrains the popover within a bounding element. Accepts an HTMLElement, a Vue component ref, or a CSS selector string. |
600
- | `disabled` | `boolean \| undefined` | | | Disable all interaction (activator and palette). |
601
- | `disableFlip` | `boolean \| undefined` | | | Disables the automatic flip to the opposite side when the popover would overflow (flipping is on by default). |
602
- | `eager` | `boolean \| undefined` | | | Prevents rendering content before it's made visible. |
606
+ | `disabled` | `boolean \| undefined` | `false` | | Disable all interaction (activator and palette). |
607
+ | `disableFlip` | `boolean \| undefined` | `false` | | Disables the automatic flip to the opposite side when the popover would overflow (flipping is on by default). |
608
+ | `eager` | `boolean \| undefined` | `false` | | Prevents rendering content before it's made visible. |
603
609
  | `eyeDropper` | `boolean \| undefined` | `false` | | Show an eyedropper button inside the palette to sample any color on screen. Uses the native EyeDropper API — hidden automatically on unsupported browsers. |
604
610
  | `label` | `string \| undefined` | | | Accessible label applied to the activator element via `aria-label`. Defaults to the locale string for "Open color picker" when omitted. |
605
611
  | `modelValue` | `string \| null` | | yes | v-model: the current color as a `#RRGGBB` hex string (or `#RRGGBBAA` when `alpha` is enabled), or `null` when empty. |
606
612
  | `offset` | `number \| undefined` | `4` | | Space the floating container will maintain from the activator. |
607
613
  | `padding` | `number \| undefined` | `6` | | Minimum empty space to keep from the edge of the page |
608
614
  | `placement` | `Placement \| undefined` | | | Position of the overlay in respect to the related activator. |
609
- | `readonly` | `boolean \| undefined` | | | Prevent opening the palette while keeping the activator visible. |
615
+ | `readonly` | `boolean \| undefined` | `false` | | Prevent opening the palette while keeping the activator visible. |
610
616
  | `swatches` | `boolean \| string[][] \| undefined` | | | Controls swatches display in the picker: - `true` — show the built-in Material-palette swatches - `string[][]` — show custom swatches (each inner array = a column of shades) - `false` / omitted — no swatches section |
611
- | `transitionDuration` | `number \| undefined` | `transitions.medium` | | How long the transition has to last in milliseconds |
617
+ | `transitionDuration` | `number \| undefined` | `250` | | How long the transition has to last in milliseconds |
612
618
 
613
619
  ## Events
614
620
 
@@ -34,8 +34,12 @@ first — this is that gate.
34
34
  Mount `<BbConfirm />` **exactly once, at the app root** (`App.vue` under Vue,
35
35
  `app.vue` under Nuxt, the `createInertiaApp` render root under Inertia) — a
36
36
  single instance serves the whole app, and `confirm()` can then be called from
37
- anywhere, components and stores alike. Calls queue: if a dialog is open, the
38
- next message waits its turn. Mounting a second host renders every dialog twice
37
+ anywhere, components and stores alike. **Calls do not queue a new
38
+ `confirm()` supersedes the open one**, and the superseded promise settles
39
+ `false` (an implicit dismiss; no callback runs). So two `confirm()` calls in a
40
+ row show only the second, and the first silently answers "no". If you need both
41
+ questions asked, `await` the first before opening the second.
42
+ Mounting a second host renders every dialog twice
39
43
  (nothing warns you). Mounting none is worse: `await confirm(...)` never settles
40
44
  and the caller hangs.
41
45
 
@@ -376,7 +380,7 @@ the peek closes. For app-lifetime confirms that survive any unmount, call
376
380
  `useConfirm()` outside a component scope (app setup, a store, module level).
377
381
 
378
382
  `useConfirm()` also returns `dismissAll()` — an imperative escape hatch that
379
- quietly dismisses the open dialog and any queued ones regardless of owner, for
383
+ quietly dismisses the open dialog regardless of owner, for
380
384
  app-level events like logout or a global error boundary.
381
385
 
382
386
  The classic case for `persistent` is the unsaved-changes prompt: an accidental
@@ -638,8 +642,11 @@ standard footer and resolve from inside the slot with its `yes` / `no` helpers.
638
642
 
639
643
  ### Gotchas and anti-patterns
640
644
 
641
- - **Don't hand-build a yes/no dialog** out of `BbDialog` + buttons — queueing,
642
- busy states, dismissal semantics and focus handling already live here.
645
+ - **Don't hand-build a yes/no dialog** out of `BbDialog` + buttons — busy
646
+ states, dismissal semantics, ownership and focus handling already live here.
647
+ - **Don't fire two `confirm()` calls without awaiting the first.** The second
648
+ supersedes the first, which settles `false` — so a "delete these two things"
649
+ flow written as two un-awaited confirms deletes nothing and asks once.
643
650
  - **Don't forget the `await`** — `confirm(...)` without it never gates
644
651
  anything.
645
652
  - **Don't call `close()` to "cancel"** a dialog whose buttons haven't run —
@@ -257,33 +257,33 @@ and digit typeahead; the time rail exposes labelled columns. Always pass a
257
257
  | --- | --- | --- | --- | --- |
258
258
  | `activator` | `ElementOrComponentRef \| undefined` | | | External activator element or component ref. When provided, the `activator` slot is not rendered and click + ARIA are attached programmatically to the referenced element — mirroring the `BbColorPalette` activator API. |
259
259
  | `activeSegment` | `BbDatePickerSegment \| undefined` | | | Which end the time rail edits in range + `type="datetime"` (`v-model:active-segment`). Standalone use manages this internally; an embedding host (the date input) drives it from its focused field. Ignored outside range + datetime. |
260
- | `adaptive` | `boolean \| undefined` | `undefined` | | On mobile, open in a bottom off-canvas sheet instead of a floating popover. When unset, falls back to the global `config.adaptive`. |
261
- | `ampm` | `boolean \| undefined` | | | 12-hour display with an AM/PM column (requires `type="datetime"`); emits stay 24h. |
260
+ | `adaptive` | `boolean \| undefined` | ``config.adaptive` (`true`)` | | On mobile, open in a bottom off-canvas sheet instead of a floating popover. When unset, falls back to the global `config.adaptive`. |
261
+ | `ampm` | `boolean \| undefined` | `false` | | 12-hour display with an AM/PM column (requires `type="datetime"`); emits stay 24h. |
262
262
  | `anchor` | `ElementOrComponentRef \| undefined` | | | Element or component ref the popover positions itself relative to. Defaults to the activator when omitted (anchor to a larger row while a smaller element stays the click target). |
263
263
  | `boundary` | `ElementOrComponentRefOrSelector \| undefined` | | | Constrains the popover within a bounding element or CSS selector. |
264
- | `disabled` | `boolean \| undefined` | | | Disables the activator and the calendar. |
265
- | `disableFlip` | `boolean \| undefined` | | | Disable the automatic flip to the opposite side on overflow. |
266
- | `eager` | `boolean \| undefined` | | | Render popover content before it is first shown. |
264
+ | `disabled` | `boolean \| undefined` | `false` | | Disables the activator and the calendar. |
265
+ | `disableFlip` | `boolean \| undefined` | `false` | | Disable the automatic flip to the opposite side on overflow. |
266
+ | `eager` | `boolean \| undefined` | `false` | | Render popover content before it is first shown. |
267
267
  | `firstDayOfWeek` | `0 \| 1 \| 2 \| 3 \| 4 \| 5 \| 6 \| undefined` | | | First day of the week (0 = Sunday … 6 = Saturday). |
268
- | `floating` | `boolean \| undefined` | | | Emit plain calendar strings instead of zoned ISO instants. Implied (and forced) by `type="month"` and `type="year"`. |
268
+ | `floating` | `boolean \| undefined` | `false` | | Emit plain calendar strings instead of zoned ISO instants. Implied (and forced) by `type="month"` and `type="year"`. |
269
269
  | `label` | `string \| undefined` | | | Accessible label applied to the activator via `aria-label`. |
270
270
  | `max` | `string \| undefined` | | | Maximum selectable value, in this `type`'s shape. A finer bound is accepted and ceiled to the unit, with a warning. |
271
271
  | `min` | `string \| undefined` | | | Minimum selectable value, in this `type`'s shape — `YYYY-MM-DD` (`YYYY-MM-DDTHH:mm` with `datetime`, `YYYY-MM` with `month`, `YYYY` with `year`). A finer bound is accepted and floored to the unit, with a warning. |
272
272
  | `modelValue` | `string \| string[] \| null` | | yes | v-model value. `null` for empty, a single string for single selection, or a two-element `[start, end]` array when `range` is true. The string shape follows `type`: `YYYY-MM-DD` when `floating` (`YYYY-MM` for `month`, `YYYY` for `year`), oth… |
273
- | `multiple` | `boolean \| undefined` | | | Enables multi-selection: every pick toggles a value in or out of a sorted array, and the panel stays open until it is dismissed. Works in whatever `type` selects — days, months or years — and requires an array `modelValue` (use `[]` for emp… |
273
+ | `multiple` | `boolean \| undefined` | `false` | | Enables multi-selection: every pick toggles a value in or out of a sorted array, and the panel stays open until it is dismissed. Works in whatever `type` selects — days, months or years — and requires an array `modelValue` (use `[]` for emp… |
274
274
  | `offCanvasProps` | `Partial<BbOffCanvasProps> \| undefined` | | | Extra props forwarded to the `BbOffCanvas` sheet when adaptive on mobile. |
275
275
  | `offset` | `number \| undefined` | `4` | | Space the popover keeps from the activator. |
276
276
  | `padding` | `number \| undefined` | | | Minimum empty space to keep from the edge of the page. |
277
277
  | `placement` | `Placement \| undefined` | | | Position of the popover relative to the activator/anchor. |
278
- | `range` | `boolean \| undefined` | | | Enables range selection (`[start, end]`). |
279
- | `readonly` | `boolean \| undefined` | | | Prevents opening while keeping the activator visible. |
280
- | `seconds` | `boolean \| undefined` | | | Adds the seconds column (requires `type="datetime"`). |
278
+ | `range` | `boolean \| undefined` | `false` | | Enables range selection (`[start, end]`). |
279
+ | `readonly` | `boolean \| undefined` | `false` | | Prevents opening while keeping the activator visible. |
280
+ | `seconds` | `boolean \| undefined` | `false` | | Adds the seconds column (requires `type="datetime"`). |
281
281
  | `selectable` | `((date: string) => boolean) \| undefined` | | | Predicate invoked per candidate; return `false` to disable it. Receives the value in this `type`'s shape — `YYYY-MM` under `month`, `YYYY` under `year`. |
282
- | `step` | `number \| undefined` | | | Minute-column granularity and arrow stepping (requires `type="datetime"`). |
282
+ | `step` | `number \| undefined` | `1` | | Minute-column granularity and arrow stepping (requires `type="datetime"`). |
283
283
  | `time` | `string \| string[] \| null \| undefined` | | | Companion time model (`v-model:time`), 24-hour `HH:mm` / `HH:mm:ss`. With `floating` it is the only carrier of the time; otherwise it mirrors the time inside `modelValue`. Requires `type="datetime"`. |
284
- | `transitionDuration` | `number \| undefined` | `transitions.medium` | | Popover/sheet transition duration in milliseconds. |
284
+ | `transitionDuration` | `number \| undefined` | `250` | | Popover/sheet transition duration in milliseconds. |
285
285
  | `type` | `DatePickerType \| undefined` | `"date"` | | What the picker selects, and therefore what it emits. - `date` (default) — a day. - `datetime` — a day plus a time rail beside the calendar. Non-floating values carry the time inside `modelValue`; with `floating` the time travels only throu… |
286
- | `utc` | `boolean \| undefined` | | | Emit UTC (`...Z`) instead of the local offset. Ignored with `floating`, and therefore with `type="month"`/`type="year"`. |
286
+ | `utc` | `boolean \| undefined` | `false` | | Emit UTC (`...Z`) instead of the local offset. Ignored with `floating`, and therefore with `type="month"`/`type="year"`. |
287
287
 
288
288
  ## Events
289
289
 
@@ -702,49 +702,49 @@ label>')` matches nothing; query each segment by its own label instead. See
702
702
 
703
703
  | Prop | Type | Default | Required | Description |
704
704
  | --- | --- | --- | --- | --- |
705
- | `adaptive` | `boolean \| undefined` | `undefined` | | On mobile the calendar opens inside a bottom off-canvas sheet instead of a floating popover, mirroring the adaptive behaviour of `BbPopover`/`BbSelect`. When unset, falls back to the global `config.adaptive`. |
706
- | `ampm` | `boolean \| undefined` | | | 12-hour display with an AM/PM segment (requires `type="datetime"`). Purely a field-composition concern: `modelValue` and the `time` model stay 24-hour regardless. Type `A`/`P` (or ArrowUp/Down) to set the meridiem. |
705
+ | `adaptive` | `boolean \| undefined` | ``config.adaptive` (`true`)` | | On mobile the calendar opens inside a bottom off-canvas sheet instead of a floating popover, mirroring the adaptive behaviour of `BbPopover`/`BbSelect`. When unset, falls back to the global `config.adaptive`. |
706
+ | `ampm` | `boolean \| undefined` | `false` | | 12-hour display with an AM/PM segment (requires `type="datetime"`). Purely a field-composition concern: `modelValue` and the `time` model stay 24-hour regardless. Type `A`/`P` (or ArrowUp/Down) to set the meridiem. |
707
707
  | `append:icon` | `string \| undefined` | | | Name of the icon to be added at the end of the input. |
708
708
  | `autocomplete` | `string \| undefined` | | | Guides the browser as to the type of information expected in the field. |
709
709
  | `autofocus` | `Booleanish \| undefined` | | | Sets autofocus on page load. |
710
- | `clearable` | `boolean \| undefined` | | | Displays a clear button when the input has a value and is being interacted with. |
711
- | `compact` | `boolean \| undefined` | | | Sets the component in a compact state. |
710
+ | `clearable` | `boolean \| undefined` | `false` | | Displays a clear button when the input has a value and is being interacted with. |
711
+ | `compact` | `boolean \| undefined` | `false` | | Sets the component in a compact state. |
712
712
  | `description` | `string \| undefined` | | | Descriptive text displayed below the label and above the input. Unlike the hint it is always visible, and it is linked to the input via `aria-describedby` (after any `errors` / `warnings`, before the `hint`). |
713
713
  | `direction` | `InputDirection \| undefined` | | | Direction of the layout of the component. Can either be a predefined value or a pattern separated by a space like `xx xxxxx`. |
714
714
  | `disableCalendar` | `boolean \| "mobile" \| "desktop" \| undefined` | | | Disables the calendar: hides the trigger button and prevents the popover from opening. Use `'desktop'` to disable it on desktop only (keeping the calendar for mobile, complementing `disableWriting: 'mobile'`) or `'mobile'` to disable it on … |
715
- | `disabled` | `boolean \| undefined` | | | Disables the component. |
716
- | `disableWriting` | `boolean \| "mobile" \| "desktop" \| undefined` | | | Disables typing into the input. Use `'mobile'` to disable typing only on mobile, `'desktop'` to disable typing only on desktop. |
715
+ | `disabled` | `boolean \| undefined` | `false` | | Disables the component. |
716
+ | `disableWriting` | `boolean \| "mobile" \| "desktop" \| undefined` | `false` | | Disables typing into the input. Use `'mobile'` to disable typing only on mobile, `'desktop'` to disable typing only on desktop. |
717
717
  | `errors` | `string \| string[] \| undefined` | | | Can be a string or an array of string containing the messages to display. They render in an `aria-live="polite"` region (announced when they appear) and, while the list is non-empty, are referenced FIRST from the control's `aria-describedby… |
718
718
  | `firstDayOfWeek` | `0 \| 1 \| 2 \| 3 \| 4 \| 5 \| 6 \| undefined` | | | Defines the first day of the week with `0` meaning Sunday and `6` meaning Saturday. |
719
- | `floating` | `boolean \| undefined` | | | If true the date will have a format YYYY-MM-DD instead of the default ISO string. |
720
- | `hasErrors` | `boolean \| undefined` | | | Define if the component should be in an error state. It usually attaches a CSS class for styling purposes. |
721
- | `hasWarning` | `boolean \| undefined` | | | Define if the component should be in a warning state. Same chrome as errors with `--bb-warn`; errors take priority. |
722
- | `hideLabel` | `boolean \| undefined` | | | Visually hides the label of the input while maintaining accessibility. |
719
+ | `floating` | `boolean \| undefined` | `false` | | If true the date will have a format YYYY-MM-DD instead of the default ISO string. |
720
+ | `hasErrors` | `boolean \| undefined` | `false` | | Define if the component should be in an error state. It usually attaches a CSS class for styling purposes. |
721
+ | `hasWarning` | `boolean \| undefined` | `false` | | Define if the component should be in a warning state. Same chrome as errors with `--bb-warn`; errors take priority. |
722
+ | `hideLabel` | `boolean \| undefined` | `false` | | Visually hides the label of the input while maintaining accessibility. |
723
723
  | `hint` | `string \| undefined` | | | Text box to be displayed near the input, usually to indicate instructions. |
724
724
  | `id` | `string \| undefined` | | | The identifier of the component. |
725
725
  | `label` | `string` | | yes | Text content of the label of the element. |
726
726
  | `labelMode` | `"floating" \| "outside" \| "inside" \| undefined` | | | Label rendering mode. |
727
727
  | `labelPosition` | `"left" \| "center" \| "right" \| undefined` | | | Sets the text alignment of the label. |
728
- | `loading` | `boolean \| undefined` | | | Sets the component in a loading state, usually triggering some visual styles. |
728
+ | `loading` | `boolean \| undefined` | `false` | | Sets the component in a loading state, usually triggering some visual styles. |
729
729
  | `max` | `string \| undefined` | | | Maximum selectable date in `YYYY-MM-DD` format — or, with `type="datetime"`, `YYYY-MM-DDTHH:mm` to tighten the boundary day to a minute. Values outside both patterns throw during setup to surface configuration mistakes. |
730
730
  | `min` | `string \| undefined` | | | Minimum selectable date in `YYYY-MM-DD` format — or, with `type="datetime"`, `YYYY-MM-DDTHH:mm` to tighten the boundary day to a minute. Values outside both patterns throw during setup to surface configuration mistakes. |
731
731
  | `modelValue` | `string \| string[] \| null` | | yes | Used by v-model. Can be null, a single string, or an array of strings based on whether a range or single date is needed. |
732
732
  | `name` | `string \| undefined` | | | Defines the name of the input. |
733
733
  | `offCanvasProps` | `Partial<BbOffCanvasProps> \| undefined` | | | Extra props forwarded to the `BbOffCanvas` sheet when `adaptive` is active on mobile (e.g. `title`, `size`, `persistent`). |
734
- | `persistentHint` | `boolean \| undefined` | | | Keeps the hint displayed. |
734
+ | `persistentHint` | `boolean \| undefined` | `false` | | Keeps the hint displayed. |
735
735
  | `placeholder` | `string \| undefined` | | | String displayed when there's no data. |
736
736
  | `prepend:icon` | `string \| undefined` | | | Name of the icon to be added at the start of the input. |
737
- | `range` | `boolean \| undefined` | | | Selects a range of dates between two dates. It selects all of the days between start and end. |
738
- | `readonly` | `boolean \| undefined` | | | Sets the input in a readonly state. |
739
- | `required` | `boolean \| undefined` | | | Sets the input as required. |
740
- | `reverse` | `boolean \| undefined` | | | Reverses the layout. Applicable in every direction the order of the label and the input is swapped. |
741
- | `seconds` | `boolean \| undefined` | | | Adds the seconds segment (requires `type="datetime"`). Without it, an incoming value carrying seconds displays truncated and is left untouched until the user commits an edit, at which point seconds zero out. |
737
+ | `range` | `boolean \| undefined` | `false` | | Selects a range of dates between two dates. It selects all of the days between start and end. |
738
+ | `readonly` | `boolean \| undefined` | `false` | | Sets the input in a readonly state. |
739
+ | `required` | `boolean \| undefined` | `false` | | Sets the input as required. |
740
+ | `reverse` | `boolean \| undefined` | `false` | | Reverses the layout. Applicable in every direction the order of the label and the input is swapped. |
741
+ | `seconds` | `boolean \| undefined` | `false` | | Adds the seconds segment (requires `type="datetime"`). Without it, an incoming value carrying seconds displays truncated and is left untouched until the user commits an edit, at which point seconds zero out. |
742
742
  | `selectable` | `((date: string) => boolean) \| undefined` | | | Function that accepts a `string` object and returns a boolean. `false` meaning the date cannot be selected. |
743
- | `step` | `number \| undefined` | | | Minute granularity for the calendar's minute column and arrow stepping (requires `type="datetime"`). Constrains what the component produces, never what it accepts: a typed off-grid value (e.g. `10:07` with `step: 15`) is emitted verbatim, a… |
743
+ | `step` | `number \| undefined` | `1` | | Minute granularity for the calendar's minute column and arrow stepping (requires `type="datetime"`). Constrains what the component produces, never what it accepts: a typed off-grid value (e.g. `10:07` with `step: 15`) is emitted verbatim, a… |
744
744
  | `time` | `string \| string[] \| null \| undefined` | | | Companion model for the time part (`v-model:time`), always 24-hour `HH:mm` / `HH:mm:ss` regardless of display. With `floating` it is the only carrier of the time; otherwise it mirrors the time inside `modelValue` (same digits) and writing i… |
745
745
  | `transitionDuration` | `number \| undefined` | | | Transition duration, in milliseconds, for the popover appearance. |
746
- | `type` | `DatePickerType \| undefined` | | | What the field edits, and therefore its segments and emitted shape. - `date` (default) — `DD/MM/YYYY`. - `datetime` — adds the time segments and the calendar's time rail. - `month` — `MM/YYYY`, emitting `YYYY-MM`. - `year` — `YYYY`, emittin… |
747
- | `utc` | `boolean \| undefined` | | | Emits values as UTC ISO strings (`...Z`) instead of ISO strings carrying the local offset (`...+01:00`). Emission-only: incoming values are parsed identically either way, so the prop can be added or removed without touching stored values. F… |
746
+ | `type` | `DatePickerType \| undefined` | `'date'` | | What the field edits, and therefore its segments and emitted shape. - `date` (default) — `DD/MM/YYYY`. - `datetime` — adds the time segments and the calendar's time rail. - `month` — `MM/YYYY`, emitting `YYYY-MM`. - `year` — `YYYY`, emittin… |
747
+ | `utc` | `boolean \| undefined` | `false` | | Emits values as UTC ISO strings (`...Z`) instead of ISO strings carrying the local offset (`...+01:00`). Emission-only: incoming values are parsed identically either way, so the prop can be added or removed without touching stored values. F… |
748
748
  | `warnings` | `string \| string[] \| undefined` | | | Warning messages to display beneath the field, in their own `aria-live` region and amber (`--bb-text-warn`). A string or array; a non-empty list implies the warning state. Errors suppress warnings when both are set. While displayed they are… |
749
749
 
750
750
  ## Events
@@ -186,6 +186,65 @@ Use the `title` slot to restyle just the title text — it stays wired to
186
186
  removes the whole header (the close button then floats over the body corner
187
187
  unless `hide-close`), and you own the accessible name.
188
188
 
189
+ Add `description` for one muted line under the title — the dialog's subtitle,
190
+ and the only thing `aria-describedby` points at:
191
+
192
+ **A described dialog**
193
+
194
+ ```vue
195
+ <template>
196
+ <div
197
+ class="flex w-full max-w-sm flex-col gap-3 rounded-[var(--bb-radius)] border p-4"
198
+ >
199
+ <div>
200
+ <p class="m-0 text-sm font-medium">INV-2044</p>
201
+ <p class="m-0 text-xs text-[color:var(--bb-text-muted)]">
202
+ Northwind Traders · €1,280.00 · paid
203
+ </p>
204
+ </div>
205
+ <div>
206
+ <BbButton
207
+ prepend:icon="lucide:trash-2"
208
+ variant="outline"
209
+ @click="open = true"
210
+ >
211
+ Delete invoice
212
+ </BbButton>
213
+ </div>
214
+ </div>
215
+ <BbDialog
216
+ v-model="open"
217
+ description="This permanently removes the invoice and its payment history."
218
+ title="Delete invoice INV-2044"
219
+ >
220
+ <p class="m-0">
221
+ Anything that does not fit in one line belongs here, in the body — which
222
+ is deliberately not what <code>aria-describedby</code> points at.
223
+ </p>
224
+ <template #footer>
225
+ <div class="flex justify-end gap-2">
226
+ <BbButton variant="ghost" @click="open = false">Cancel</BbButton>
227
+ <BbButton variant="destructive" @click="open = false">Delete</BbButton>
228
+ </div>
229
+ </template>
230
+ </BbDialog>
231
+ </template>
232
+
233
+ <script setup lang="ts">
234
+ import { ref } from 'vue';
235
+ import { BbButton, BbDialog } from 'bitboss-ui';
236
+
237
+ const open = ref(false);
238
+ </script>
239
+ ```
240
+
241
+ Keep it to a sentence; the detail belongs in the body, which is deliberately
242
+ **not** described (pointing `aria-describedby` at arbitrary markup makes a
243
+ screen reader read a whole form as the dialog's description). Use the
244
+ `description` slot when the line needs markup — it receives the prop as `text`.
245
+ A dialog with no `description` keeps its original single-row header, so nothing
246
+ shifts unless you opt in.
247
+
189
248
  Prefer `title` (or the `title` slot) for the standard header. The `header` slot
190
249
  replaces the entire header on both surfaces — you own the close control and must
191
250
  wire `titleId` for `aria-labelledby`. Give your root element `flex-1` so it fills
@@ -355,10 +414,13 @@ Every dismissal path is governed by two props:
355
414
  - `disabled` — same guard, different intent: the surface is busy (a save in
356
415
  flight). Combine with disabling your footer actions.
357
416
 
358
- Constraint: the header **close button bypasses both** it always closes,
359
- regardless of `persistent`/`disabled`. When a dialog truly must be resolved from
360
- the footer, pair `persistent` with `hide-close`, and keep a visible Cancel so
361
- users are never trapped.
417
+ The header **close button bypasses `persistent`, but respects `disabled`**
418
+ (`BbDialog.vue:471-477`): while `disabled` is set the × plays the same deny
419
+ nudge as the backdrop and does not close. So for the common case — a dialog
420
+ that must stay put while a save is in flight — `disabled` alone is enough and
421
+ you keep the ×. Reach for `hide-close` only when the dialog must be resolved
422
+ from the footer _permanently_; pair it with `persistent` and keep a visible
423
+ Cancel so users are never trapped.
362
424
 
363
425
  Backdrop clicks are drag-protected: a text selection that starts inside the
364
426
  dialog and releases over the backdrop does not close it — only a genuine click
@@ -759,6 +821,8 @@ default falls back to `config.adaptive`.
759
821
  - The dialog is a true modal (`showModal()`): the browser contains focus within
760
822
  it, the page behind is inert, and focus returns to the trigger when it
761
823
  closes. `focus-target` only chooses where focus **starts**.
824
+ - `description` is what `aria-describedby` points at, so the dialog announces
825
+ its purpose and not just its name. Nothing else is described — see above.
762
826
  - The header close button carries a localized `aria-label` out of the box
763
827
  (`config.locale`).
764
828
  - Don't lean on `persistent` to trap users. Keep a visible way out (a Cancel or
@@ -772,19 +836,20 @@ default falls back to `config.adaptive`.
772
836
 
773
837
  | Prop | Type | Default | Required | Description |
774
838
  | --- | --- | --- | --- | --- |
775
- | `adaptive` | `boolean \| undefined` | `undefined` | | Adapt the surface to the viewport: render as a `BbOffCanvas` drawer on mobile instead of a centered dialog. The surface is resolved when the dialog opens and stays fixed for that session: resizing across the mobile breakpoint while open nev… |
776
- | `disabled` | `boolean \| undefined` | | | Disable EVERY user-initiated dismissal: backdrop click, Escape AND the header close (×) button (denied attempts play the deny nudge). Use it while an operation is in flight (e.g. a save) so the dialog cannot be dismissed mid-work. Compare `… |
777
- | `eager` | `boolean \| undefined` | | | Render dialog content immediately instead of waiting for the first open. |
839
+ | `adaptive` | `boolean \| undefined` | ``config.adaptive` (`true`)` | | Adapt the surface to the viewport: render as a `BbOffCanvas` drawer on mobile instead of a centered dialog. The surface is resolved when the dialog opens and stays fixed for that session: resizing across the mobile breakpoint while open nev… |
840
+ | `description` | `string \| undefined` | | | One short line under the title, in the header the shadcn `DialogDescription` shape: same block as the title, lower hierarchy, muted. It is also what `aria-describedby` points at. That wiring was dropped in v3 along with the old `descripti… |
841
+ | `disabled` | `boolean \| undefined` | `false` | | Disable EVERY user-initiated dismissal: backdrop click, Escape AND the header close (×) button (denied attempts play the deny nudge). Use it while an operation is in flight (e.g. a save) so the dialog cannot be dismissed mid-work. Compare `… |
842
+ | `eager` | `boolean \| undefined` | `false` | | Render dialog content immediately instead of waiting for the first open. |
778
843
  | `focusTarget` | `string \| undefined` | | | CSS selector of the element to focus after opening. Defaults to the first tabbable element. |
779
844
  | `fullscreen` | `boolean \| "mobile" \| undefined` | | | Display the dialog fullscreen. Use `'mobile'` to restrict fullscreen to small devices. |
780
- | `hideClose` | `boolean \| undefined` | | | Hide the default close (×) button. The button is shown by default; set this to remove it (e.g. for a `persistent` dialog you don't want dismissible — the × otherwise still closes a persistent dialog). |
845
+ | `hideClose` | `boolean \| undefined` | `false` | | Hide the default close (×) button. The button is shown by default; set this to remove it (e.g. for a `persistent` dialog you don't want dismissible — the × otherwise still closes a persistent dialog). |
781
846
  | `modelValue` | `boolean \| undefined` | `false` | | Used by v-model to open / close the dialog. A dialog with no `v-model` starts closed. |
782
- | `offCanvasProps` | `Partial<BbOffCanvasProps> \| undefined` | | | Overrides merged over the offcanvas (mobile) surface's props. The drawer defaults to a bottom, draggable, content-sized sheet (`direction: 'bottom'`, `draggable: true`, `size: 'auto'`); use this to override those, set other drawer-only opti… |
783
- | `persistent` | `boolean \| undefined` | | | Prevent closing via outside clicks or Escape key. The header close (×) button STILL closes a persistent dialog — that is the documented escape hatch; combine with `hideClose` to remove it, or use `disabled` to block every dismissal. Program… |
847
+ | `offCanvasProps` | `Partial<BbOffCanvasProps> \| undefined` | | | Overrides merged over the offcanvas (mobile) surface's props. The drawer defaults to a bottom, draggable, content-sized sheet (`side: 'bottom'`, `draggable: true`, `size: 'auto'`); use this to override those, set other drawer-only options (… |
848
+ | `persistent` | `boolean \| undefined` | `false` | | Prevent closing via outside clicks or Escape key. The header close (×) button STILL closes a persistent dialog — that is the documented escape hatch; combine with `hideClose` to remove it, or use `disabled` to block every dismissal. Program… |
784
849
  | `size` | `Responsive<NonNullable<number \| ({ size?: any; } & string) \| keyof Sizes \| undefined>> \| undefined` | `"sm"` | | Controls the maximum width of the dialog. Accepts named presets from `'xs'` to `'2xl'`, a custom CSS width string, or a numeric pixel value — or a per-breakpoint map (e.g. `{ default: 'sm', lg: 'lg' }`) to switch width responsively. |
785
850
  | `stack` | `string \| undefined` | | | Name of the stack this dialog belongs to. Dialogs sharing the same `stack` value replace one another: only the most recently opened stays visible while the others in the stack are hidden beneath it. Dialogs in different stacks — or with no … |
786
851
  | `title` | `string \| undefined` | | | Title text announced to assistive technologies. If omitted, no header is rendered (unless a `header` slot is supplied) and accessibility must be handled manually. |
787
- | `transitionDuration` | `number \| undefined` | `transitions.medium` | | Controls the duration of the open and close animations. |
852
+ | `transitionDuration` | `number \| undefined` | `250` | | Controls the duration of the open and close animations. |
788
853
 
789
854
  ## Events
790
855
 
@@ -797,9 +862,10 @@ default falls back to `config.adaptive`.
797
862
  ## Slots
798
863
 
799
864
  - `default` — scope: `BbDialogDefaultSlotProps` — Primary body content of the dialog, rendered in the scrollable body area.
865
+ - `description` — scope: `BbDialogDescriptionSlotProps` — Replaces the description text under the title. Renders the header even when `title` and `description` are unset — a slotted description is a description, the same rule `#title` follows.
800
866
  - `footer` — scope: `object` — Content rendered in the dialog footer, below the body area. Typically used for action buttons.
801
867
  - `header` — scope: `BbDialogHeaderSlotProps` — Replaces the entire dialog header section (title + close button) on both surfaces — the desktop `<dialog>` and the mobile off-canvas. Because it replaces the default close (✕), the slot owns closing: render your own control wired to the `cl…
802
- - `title` — scope: `BbDialogTitleSlotProps` — Replaces the default title text inside the header. Remains linked to the dialog through `aria-labelledby`.
868
+ - `title` — scope: `BbDialogTitleSlotProps` — Replaces the default title text inside the header. Remains linked to the dialog through `aria-labelledby`. Providing this slot renders the header even when `title` is unset — a slotted title is a title.
803
869
 
804
870
  ## See Also
805
871