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

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 (252) hide show
  1. package/README.md +55 -3
  2. package/bin/bitboss-ui-mcp.mjs +419 -9
  3. package/bin/bitboss-ui.mjs +293 -22
  4. package/dist/ai/BbAccordion.md +21 -23
  5. package/dist/ai/BbAlert.md +6 -12
  6. package/dist/ai/BbAvatar.md +60 -24
  7. package/dist/ai/BbBadge.md +12 -20
  8. package/dist/ai/BbBaseButton.md +14 -16
  9. package/dist/ai/BbBaseCheckboxIcon.md +6 -10
  10. package/dist/ai/BbBaseColorInput.md +1 -0
  11. package/dist/ai/BbBaseDatePickerInput.md +1 -0
  12. package/dist/ai/BbBaseNumberInput.md +1 -0
  13. package/dist/ai/BbBaseRadioIcon.md +6 -10
  14. package/dist/ai/BbBaseSelect.md +1 -0
  15. package/dist/ai/BbBaseSwitchIcon.md +5 -9
  16. package/dist/ai/BbBaseTag.md +1 -0
  17. package/dist/ai/BbBaseTextInput.md +2 -1
  18. package/dist/ai/BbBaseTextarea.md +1 -0
  19. package/dist/ai/BbBaseTimePickerInput.md +1 -0
  20. package/dist/ai/BbBreadcrumbs.md +23 -34
  21. package/dist/ai/BbButton.md +35 -47
  22. package/dist/ai/BbCheckbox.md +21 -37
  23. package/dist/ai/BbCheckboxGroup.md +13 -13
  24. package/dist/ai/BbCollapsible.md +14 -26
  25. package/dist/ai/BbColorInput.md +27 -23
  26. package/dist/ai/BbColorPalette.md +23 -35
  27. package/dist/ai/BbConfirm.md +17 -32
  28. package/dist/ai/BbDatePickerInput.md +29 -21
  29. package/dist/ai/BbDialog.md +159 -62
  30. package/dist/ai/BbDropdown.md +21 -25
  31. package/dist/ai/BbDropdownButton.md +13 -30
  32. package/dist/ai/BbDropzone.md +9 -11
  33. package/dist/ai/BbIcon.md +44 -33
  34. package/dist/ai/BbIndicator.md +2 -2
  35. package/dist/ai/BbNumberInput.md +32 -20
  36. package/dist/ai/BbOffCanvas.md +42 -42
  37. package/dist/ai/BbPagination.md +21 -23
  38. package/dist/ai/BbPopover.md +15 -17
  39. package/dist/ai/BbProgress.md +40 -51
  40. package/dist/ai/BbRadio.md +9 -9
  41. package/dist/ai/BbRadioGroup.md +7 -11
  42. package/dist/ai/BbRating.md +8 -12
  43. package/dist/ai/BbSelect.md +46 -36
  44. package/dist/ai/BbSelectPopover.md +19 -31
  45. package/dist/ai/BbSlider.md +15 -19
  46. package/dist/ai/BbSmoothHeight.md +16 -31
  47. package/dist/ai/BbSpinner.md +118 -74
  48. package/dist/ai/BbSwitch.md +25 -18
  49. package/dist/ai/BbSwitchGroup.md +9 -14
  50. package/dist/ai/BbTable.md +102 -55
  51. package/dist/ai/BbTabs.md +59 -82
  52. package/dist/ai/BbTag.md +26 -23
  53. package/dist/ai/BbTextInput.md +63 -27
  54. package/dist/ai/BbTextarea.md +42 -34
  55. package/dist/ai/BbTimePickerInput.md +14 -0
  56. package/dist/ai/BbToast.md +14 -34
  57. package/dist/ai/BbTooltip.md +22 -20
  58. package/dist/ai/BbTree.md +46 -72
  59. package/dist/ai/CommonInputWrapper.md +1 -0
  60. package/dist/ai/changelog.json +170 -62
  61. package/dist/ai/components.json +1678 -11
  62. package/dist/ai/composables/useConfirm.md +5 -2
  63. package/dist/ai/composables/useToast.md +4 -2
  64. package/dist/ai/guides/agent-contract.md +7 -4
  65. package/dist/ai/guides/ai-router.md +37 -22
  66. package/dist/ai/guides/component-picker.md +23 -18
  67. package/dist/ai/guides/design-language.md +151 -21
  68. package/dist/ai/guides/design-tokens.md +29 -4
  69. package/dist/ai/guides/icons-policy.md +46 -21
  70. package/dist/ai/guides/installation-and-plugin-setup.md +286 -17
  71. package/dist/ai/guides/migration/components/bb-rating.md +26 -1
  72. package/dist/ai/guides/migration/components/bb-tooltip.md +18 -0
  73. package/dist/ai/guides/migration/v2-to-v3.md +50 -23
  74. package/dist/ai/index.md +1 -1
  75. package/dist/ai/recipes/inertia/approvals-inbox.md +3 -3
  76. package/dist/ai/recipes/inertia/inline-edit-workspace.md +2 -2
  77. package/dist/ai/recipes/inertia/onboarding.md +2 -2
  78. package/dist/ai/recipes/inertia/ownership-atlas.md +6 -6
  79. package/dist/ai/recipes/inertia/record-form.md +5 -5
  80. package/dist/ai/recipes/inertia/records-workspace.md +4 -4
  81. package/dist/ai/recipes/inertia/upload-center.md +6 -6
  82. package/dist/ai/recipes/inertia/wizard-form.md +5 -5
  83. package/dist/ai/recipes/nuxt/approvals-inbox.md +3 -3
  84. package/dist/ai/recipes/nuxt/inline-edit-workspace.md +2 -2
  85. package/dist/ai/recipes/nuxt/onboarding.md +2 -2
  86. package/dist/ai/recipes/nuxt/record-form.md +5 -5
  87. package/dist/ai/recipes/nuxt/records-workspace.md +4 -4
  88. package/dist/ai/recipes/nuxt/upload-center.md +6 -6
  89. package/dist/ai/recipes/nuxt/wizard-form.md +5 -5
  90. package/dist/ai/recipes/vue/approvals-inbox.md +3 -3
  91. package/dist/ai/recipes/vue/inline-edit-workspace.md +2 -2
  92. package/dist/ai/recipes/vue/onboarding.md +2 -2
  93. package/dist/ai/recipes/vue/record-form.md +10 -10
  94. package/dist/ai/recipes/vue/records-workspace.md +4 -4
  95. package/dist/ai/recipes/vue/upload-center.md +6 -6
  96. package/dist/ai/recipes/vue/wizard-form.md +5 -5
  97. package/dist/ai/source/BbBadge.md +1 -1
  98. package/dist/ai/source/BbBaseCheckbox.md +1 -1
  99. package/dist/ai/source/BbBaseColorInput.md +7 -0
  100. package/dist/ai/source/BbBaseDatePicker.md +5 -5
  101. package/dist/ai/source/BbBaseDatePickerInput.md +9 -2
  102. package/dist/ai/source/BbBaseNumberInput.md +7 -0
  103. package/dist/ai/source/BbBaseRadio.md +1 -1
  104. package/dist/ai/source/BbBaseRating.md +5 -5
  105. package/dist/ai/source/BbBaseSelect.md +8 -1
  106. package/dist/ai/source/BbBaseSlider.md +5 -5
  107. package/dist/ai/source/BbBaseSwitch.md +1 -1
  108. package/dist/ai/source/BbBaseTag.md +7 -0
  109. package/dist/ai/source/BbBaseTextInput.md +7 -0
  110. package/dist/ai/source/BbBaseTextarea.md +7 -0
  111. package/dist/ai/source/BbBaseTimePickerInput.md +8 -1
  112. package/dist/ai/source/BbBreadcrumbs.md +20 -1
  113. package/dist/ai/source/BbButton.md +2 -2
  114. package/dist/ai/source/BbColorInput.md +14 -0
  115. package/dist/ai/source/BbDatePickerInput.md +14 -0
  116. package/dist/ai/source/BbDialog.md +39 -8
  117. package/dist/ai/source/BbDropdown.md +1 -1
  118. package/dist/ai/source/BbDropzone.md +5 -5
  119. package/dist/ai/source/BbIcon.md +23 -10
  120. package/dist/ai/source/BbNumberInput.md +14 -0
  121. package/dist/ai/source/BbOffCanvas.md +50 -28
  122. package/dist/ai/source/BbPagination.md +2 -2
  123. package/dist/ai/source/BbPopover.md +12 -1
  124. package/dist/ai/source/BbSelect.md +14 -0
  125. package/dist/ai/source/BbSelectPopover.md +45 -7
  126. package/dist/ai/source/BbSpinner.md +2 -2
  127. package/dist/ai/source/BbTable.md +11 -11
  128. package/dist/ai/source/BbTag.md +14 -0
  129. package/dist/ai/source/BbTextInput.md +14 -0
  130. package/dist/ai/source/BbTextarea.md +14 -0
  131. package/dist/ai/source/BbTimePickerInput.md +14 -0
  132. package/dist/ai/source/BbTooltip.md +57 -10
  133. package/dist/ai/source/ChipsBox.md +1 -1
  134. package/dist/ai/source/CommaBox.md +1 -1
  135. package/dist/ai/source/CommonInputWrapper.md +128 -33
  136. package/dist/ai/source/GuidesComponent.md +14 -7
  137. package/dist/ai/source/OptionsContainer.md +1 -1
  138. package/dist/components/BbBadge/BadgeBodyContent.vue_vue_type_script_setup_true_lang.js +1 -1
  139. package/dist/components/BbBadge/BbBadge.vue_vue_type_script_setup_true_lang.js +1 -1
  140. package/dist/components/BbBaseCheckbox/BbBaseCheckbox.vue_vue_type_script_setup_true_lang.js +1 -1
  141. package/dist/components/BbBaseColorInput/BbBaseColorInput.vue_vue_type_script_setup_true_lang.js +4 -1
  142. package/dist/components/BbBaseColorInput/types.d.ts +5 -0
  143. package/dist/components/BbBaseDatePicker/BbBaseDatePicker.vue_vue_type_script_setup_true_lang.js +4 -4
  144. package/dist/components/BbBaseDatePicker/BbBaseDatePickerInputDaySelector.vue_vue_type_script_setup_true_lang.js +1 -1
  145. package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerInput.vue_vue_type_script_setup_true_lang.js +5 -2
  146. package/dist/components/BbBaseDatePickerInput/types.d.ts +5 -0
  147. package/dist/components/BbBaseInputContainer/BbBaseInputContainer.vue.d.ts +1 -1
  148. package/dist/components/BbBaseNumberInput/BbBaseNumberInput.vue_vue_type_script_setup_true_lang.js +4 -1
  149. package/dist/components/BbBaseNumberInput/types.d.ts +5 -0
  150. package/dist/components/BbBaseRadio/BbBaseRadio.vue_vue_type_script_setup_true_lang.js +1 -1
  151. package/dist/components/BbBaseRating/BbBaseRating.vue_vue_type_script_setup_true_lang.js +3 -3
  152. package/dist/components/BbBaseSelect/BbBaseSelect.vue_vue_type_script_setup_true_lang.js +4 -1
  153. package/dist/components/BbBaseSelect/types.d.ts +5 -0
  154. package/dist/components/BbBaseSlider/BbBaseSlider.vue_vue_type_script_setup_true_lang.js +3 -3
  155. package/dist/components/BbBaseSwitch/BbBaseSwitch.vue_vue_type_script_setup_true_lang.js +1 -1
  156. package/dist/components/BbBaseTag/BbBaseTag.vue_vue_type_script_setup_true_lang.js +4 -1
  157. package/dist/components/BbBaseTag/types.d.ts +5 -0
  158. package/dist/components/BbBaseTextInput/BbBaseTextInput.vue_vue_type_script_setup_true_lang.js +4 -1
  159. package/dist/components/BbBaseTextInput/types.d.ts +5 -0
  160. package/dist/components/BbBaseTextarea/BbBaseTextarea.vue_vue_type_script_setup_true_lang.js +4 -1
  161. package/dist/components/BbBaseTextarea/types.d.ts +5 -0
  162. package/dist/components/BbBaseTimePickerInput/BbBaseTimePickerInput.vue_vue_type_script_setup_true_lang.js +5 -2
  163. package/dist/components/BbBaseTimePickerInput/types.d.ts +5 -0
  164. package/dist/components/BbBreadcrumbs/BbBreadcrumbs.vue_vue_type_script_setup_true_lang.js +71 -71
  165. package/dist/components/BbButton/BbButton.vue_vue_type_script_setup_true_lang.js +2 -2
  166. package/dist/components/BbColorInput/BbColorInput.vue_vue_type_script_setup_true_lang.js +5 -2
  167. package/dist/components/BbColorInput/types.d.ts +12 -0
  168. package/dist/components/BbDatePickerInput/BbDatePickerInput.vue_vue_type_script_setup_true_lang.js +4 -2
  169. package/dist/components/BbDatePickerInput/types.d.ts +12 -0
  170. package/dist/components/BbDialog/BbDialog.vue_vue_type_script_setup_true_lang.js +102 -97
  171. package/dist/components/BbDropdown/AdaptiveDropdown.vue_vue_type_script_setup_true_lang.js +1 -1
  172. package/dist/components/BbDropdown/BbDropdown.vue_vue_type_script_setup_true_lang.js +58 -58
  173. package/dist/components/BbDropzone/BbDropzone.vue_vue_type_script_setup_true_lang.js +2 -2
  174. package/dist/components/BbIcon/BbIcon.vue_vue_type_script_setup_true_lang.js +33 -35
  175. package/dist/components/BbIcon/iconCache.d.ts +30 -0
  176. package/dist/components/BbIcon/iconCache.js +21 -3
  177. package/dist/components/BbNumberInput/BbNumberInput.vue_vue_type_script_setup_true_lang.js +5 -2
  178. package/dist/components/BbNumberInput/types.d.ts +12 -0
  179. package/dist/components/BbOffCanvas/BbOffCanvas.vue_vue_type_script_setup_true_lang.js +57 -56
  180. package/dist/components/BbPagination/BbPagination.vue_vue_type_script_setup_true_lang.js +2 -2
  181. package/dist/components/BbPopover/BbPopover.vue_vue_type_script_setup_true_lang.js +138 -138
  182. package/dist/components/BbSelect/BbSelect.vue_vue_type_script_setup_true_lang.js +4 -2
  183. package/dist/components/BbSelect/types.d.ts +12 -0
  184. package/dist/components/BbSelectPopover/BbSelectPopover.vue_vue_type_script_setup_true_lang.js +43 -43
  185. package/dist/components/BbSpinner/BbSpinner.vue_vue_type_script_setup_true_lang.js +1 -1
  186. package/dist/components/BbSpinner/types.d.ts +1 -1
  187. package/dist/components/BbTable/BbTable.vue_vue_type_script_setup_true_lang.js +8 -8
  188. package/dist/components/BbTable/BbTableDataRow.js +2 -2
  189. package/dist/components/BbTag/BbTag.vue_vue_type_script_setup_true_lang.js +5 -2
  190. package/dist/components/BbTag/types.d.ts +12 -0
  191. package/dist/components/BbTextInput/BbTextInput.vue_vue_type_script_setup_true_lang.js +5 -2
  192. package/dist/components/BbTextInput/types.d.ts +12 -0
  193. package/dist/components/BbTextarea/BbTextarea.vue_vue_type_script_setup_true_lang.js +5 -2
  194. package/dist/components/BbTextarea/types.d.ts +12 -0
  195. package/dist/components/BbTimePickerInput/BbTimePickerInput.vue_vue_type_script_setup_true_lang.js +4 -2
  196. package/dist/components/BbTimePickerInput/types.d.ts +12 -0
  197. package/dist/components/BbToast/BbToastRegion.vue_vue_type_script_setup_true_lang.js +62 -62
  198. package/dist/components/BbTooltip/BbTooltip.vue_vue_type_script_setup_true_lang.js +81 -78
  199. package/dist/components/BbTooltip/types.d.ts +8 -1
  200. package/dist/components/ChipsBox/ChipsBox.vue_vue_type_script_setup_true_lang.js +1 -1
  201. package/dist/components/CommaBox/CommaBox.vue_vue_type_script_setup_true_lang.js +1 -1
  202. package/dist/components/CommonInputWrapper/CommonInputWrapper.vue.d.ts +1 -0
  203. package/dist/components/CommonInputWrapper/CommonInputWrapper.vue_vue_type_script_setup_true_lang.js +4 -2
  204. package/dist/components/CommonInputWrapper/types.d.ts +10 -0
  205. package/dist/components/OptionsContainer/OptionsContainer.vue_vue_type_script_setup_true_lang.js +1 -1
  206. package/dist/composables/useConfirm.d.ts +22 -0
  207. package/dist/composables/useConfirm.js +43 -40
  208. package/dist/composables/useSafeAreaInternal.js +1 -1
  209. package/dist/composables/useToast.d.ts +16 -0
  210. package/dist/composables/useToast.js +20 -16
  211. package/dist/composables/useViewportWidth.d.ts +20 -6
  212. package/dist/composables/useViewportWidth.js +8 -7
  213. package/dist/icon-scan.d.ts +276 -0
  214. package/dist/icon-scan.js +485 -0
  215. package/dist/icons-whitelist.d.ts +5 -4
  216. package/dist/index.d.ts +2 -0
  217. package/dist/input-variants.d.ts +18 -0
  218. package/dist/llms-full.txt +2173 -1537
  219. package/dist/llms-medium.txt +504 -82
  220. package/dist/llms.txt +1 -1
  221. package/dist/nuxt-module.d.ts +1 -0
  222. package/dist/nuxt.js +10 -7
  223. package/dist/plugin.js +1 -0
  224. package/dist/runtime/nuxt-plugin.js +2 -1
  225. package/dist/styles.css +1 -1
  226. package/dist/types/Config.d.ts +18 -0
  227. package/dist/types/InputVariant.d.ts +22 -0
  228. package/dist/utils/cssLayers.d.ts +91 -0
  229. package/dist/utils/cssLayers.js +43 -0
  230. package/dist/utils/injectLibraryStyles.d.ts +3 -1
  231. package/dist/utils/injectLibraryStyles.js +24 -23
  232. package/dist/validated/BbColorInput.vue_vue_type_script_setup_true_lang.js +1 -0
  233. package/dist/validated/BbDatePickerInput.vue_vue_type_script_setup_true_lang.js +1 -0
  234. package/dist/validated/BbNumberInput.vue_vue_type_script_setup_true_lang.js +1 -0
  235. package/dist/validated/BbSelect.vue_vue_type_script_setup_true_lang.js +1 -0
  236. package/dist/validated/BbTag.vue_vue_type_script_setup_true_lang.js +1 -0
  237. package/dist/validated/BbTextInput.vue_vue_type_script_setup_true_lang.js +1 -0
  238. package/dist/validated/BbTextarea.vue_vue_type_script_setup_true_lang.js +1 -0
  239. package/dist/validated/BbTimePickerInput.vue_vue_type_script_setup_true_lang.js +1 -0
  240. package/dist/validated/index.d.ts +1 -0
  241. package/dist/vite-plugin.d.ts +89 -12
  242. package/dist/vite.js +331 -281
  243. package/llms.txt +1 -1
  244. package/package.json +7 -5
  245. package/scripts/lib/ensure-manifest.mjs +28 -5
  246. package/scripts/lib/eslint-plugin.d.ts +35 -0
  247. package/scripts/lib/eslint-plugin.mjs +299 -3
  248. package/scripts/lib/hand-roll-hints.mjs +50 -6
  249. package/scripts/lib/html-attributes.mjs +42 -0
  250. package/scripts/lib/mcp-config.mjs +38 -34
  251. package/scripts/lib/public-type-exports.mjs +246 -0
  252. package/scripts/lib/validate-bb-markup.mjs +205 -12
@@ -8,26 +8,26 @@ import { extractDomContainer as o } from "../../utilities/functions/extractDomCo
8
8
  import { waitFor as s } from "../../utilities/functions/waitFor.js";
9
9
  import { transitions as ee } from "../../utilities/misc/transitions.js";
10
10
  import te from "../CommonPopover/CommonPopover.vue.js";
11
- import { parseWidthString as ne } from "../../utilities/functions/parseWidthString.js";
12
- import { isTopEscapeEntry as re, pushEscapeEntry as ie, removeEscapeEntry as ae } from "../../utils/overlayEscapeStack.js";
13
- import { useMobile as oe } from "../../composables/useMobile.js";
14
- import { provideSheetSurface as se } from "../../composables/useSheetSurface.js";
15
- import { useClosingInert as ce } from "../../composables/useClosingInert.js";
11
+ import { isTopEscapeEntry as ne, pushEscapeEntry as re, removeEscapeEntry as ie } from "../../utils/overlayEscapeStack.js";
12
+ import { useMobile as ae } from "../../composables/useMobile.js";
13
+ import { provideSheetSurface as oe } from "../../composables/useSheetSurface.js";
14
+ import { useClosingInert as se } from "../../composables/useClosingInert.js";
16
15
  import { wait as c } from "../../utilities/functions/wait.js";
17
- import { get as le } from "../../utilities/functions/get.js";
18
- import { useLocale as ue } from "../../composables/useLocale.js";
19
- import de from "../BbIcon/BbIcon.vue.js";
20
- import fe from "../BbBadge/BbBadge.vue.js";
21
- import { isNil as pe } from "../../utilities/functions/isNil.js";
22
- import { matchAnyKey as me } from "../../utilities/functions/matchAnyKey.js";
23
- import he from "../../assets/svgs/search.svg_raw.js";
24
- import { useImeDismissBlur as ge } from "../../composables/useImeDismissBlur.js";
25
- import _e from "../BbOffCanvas/BbOffCanvas.vue.js";
26
- import ve from "../BbSmoothHeight/BbSmoothHeight.vue.js";
27
- import { hash as ye } from "../../utilities/functions/hash.js";
28
- import { useArray as be } from "../../composables/useArray.js";
29
- import { useItemsGetter as xe } from "../../composables/useItemsGetter.js";
30
- import { useHashedWatcher as Se } from "../../composables/useHashedWatcher.js";
16
+ import { get as ce } from "../../utilities/functions/get.js";
17
+ import { useLocale as le } from "../../composables/useLocale.js";
18
+ import ue from "../BbIcon/BbIcon.vue.js";
19
+ import de from "../BbBadge/BbBadge.vue.js";
20
+ import { isNil as fe } from "../../utilities/functions/isNil.js";
21
+ import { matchAnyKey as pe } from "../../utilities/functions/matchAnyKey.js";
22
+ import me from "../../assets/svgs/search.svg_raw.js";
23
+ import { useImeDismissBlur as he } from "../../composables/useImeDismissBlur.js";
24
+ import ge from "../BbOffCanvas/BbOffCanvas.vue.js";
25
+ import _e from "../BbSmoothHeight/BbSmoothHeight.vue.js";
26
+ import { hash as ve } from "../../utilities/functions/hash.js";
27
+ import { useArray as ye } from "../../composables/useArray.js";
28
+ import { useItemsGetter as be } from "../../composables/useItemsGetter.js";
29
+ import { useHashedWatcher as xe } from "../../composables/useHashedWatcher.js";
30
+ import { parseWidthString as Se } from "../../utilities/functions/parseWidthString.js";
31
31
  import Ce from "../ClearableButton/ClearableButton.vue.js";
32
32
  import { useIndexById as we } from "../../composables/useIndexById.js";
33
33
  import { useBaseOptions as Te } from "../../composables/useBaseOptions.js";
@@ -162,7 +162,7 @@ var qe = {
162
162
  S(() => E.activator, (e) => {
163
163
  e && ct(e);
164
164
  }, { immediate: !0 });
165
- let { isMobile: P } = oe(), F = l(() => E.disableWriting === "mobile" ? !P.value : E.disableWriting === "desktop" ? P.value : !E.disableWriting), lt = l(() => E.disableWriting === "mobile" && P.value || E.disableWriting === "desktop" && !P.value ? "none" : void 0), { t: ut } = ue(), dt = l(() => E.searchInputAriaLabel ?? ut("select.searchLabel").value), ft = l(() => !!E.clearable && (H.value.length > 0 || (E.multiple ? Array.isArray(E.modelValue) && E.modelValue.length > 0 : !pe(E.modelValue)))), I = E.id || t().id.value, pt = l(() => E.ariaInvalid ?? !!E.hasErrors ? "true" : void 0), mt = l(() => {
165
+ let { isMobile: P } = ae(), F = l(() => E.disableWriting === "mobile" ? !P.value : E.disableWriting === "desktop" ? P.value : !E.disableWriting), lt = l(() => E.disableWriting === "mobile" && P.value || E.disableWriting === "desktop" && !P.value ? "none" : void 0), { t: ut } = le(), dt = l(() => E.searchInputAriaLabel ?? ut("select.searchLabel").value), ft = l(() => !!E.clearable && (H.value.length > 0 || (E.multiple ? Array.isArray(E.modelValue) && E.modelValue.length > 0 : !fe(E.modelValue)))), I = E.id || t().id.value, pt = l(() => E.ariaInvalid ?? !!E.hasErrors ? "true" : void 0), mt = l(() => {
166
166
  let e = E.ariaDescribedby;
167
167
  if (Array.isArray(e)) return e.map((e) => e.trim()).filter(Boolean).join(" ") || void 0;
168
168
  if (typeof e == "string") return e.trim() || void 0;
@@ -179,7 +179,7 @@ var qe = {
179
179
  if (E.width === "auto") return "auto";
180
180
  if (E.width == null || E.width === "") return N.value ? `${N.value}px` : "320px";
181
181
  try {
182
- let { value: e, unit: t } = ne(E.width);
182
+ let { value: e, unit: t } = Se(E.width);
183
183
  return t === "%" ? N.value ? `${N.value * (e / 100)}px` : "320px" : `${e}${t}`;
184
184
  } catch {
185
185
  return typeof E.width == "string" ? E.width.trim() : N.value ? `${N.value}px` : "320px";
@@ -215,7 +215,7 @@ var qe = {
215
215
  let t = e.target instanceof Element ? e.target : e.target instanceof Text ? e.target.parentElement : null;
216
216
  if (!t) return;
217
217
  let n = M.value?.contains(t), r = !!t.closest(".bb-common-popover");
218
- if (n || r) return;
218
+ if (n || r || e.type === "focusin" && M.value && t.contains(M.value)) return;
219
219
  let i = t instanceof HTMLLabelElement ? t : t.closest("label");
220
220
  i?.control && M.value?.contains(i.control) || (await Y(), On());
221
221
  }, kt = l(() => !(E.readonly || E.disabled || G.value && !Ut.value.length)), At = new AbortController(), jt = async () => s(() => !!k.value, {
@@ -254,11 +254,11 @@ var qe = {
254
254
  }, B = async () => {
255
255
  K.value && (await Y(), L());
256
256
  }, V = Symbol("bb-select-popover-escape"), Lt = (e) => {
257
- !K.value || e.key !== "Escape" || re(V) && (e.stopImmediatePropagation(), e.preventDefault(), B());
258
- }, H = v(""), Rt = v(!1), { getter: zt, debouncedGetter: Bt, clientReproducible: Vt, hydratedFromSsr: Ht, items: Ut, loading: Wt } = xe({
257
+ !K.value || e.key !== "Escape" || ne(V) && (e.stopImmediatePropagation(), e.preventDefault(), B());
258
+ }, H = v(""), Rt = v(!1), { getter: zt, debouncedGetter: Bt, clientReproducible: Vt, hydratedFromSsr: Ht, items: Ut, loading: Wt } = be({
259
259
  items: b(E, "items"),
260
260
  debounce: E.queryDebounceTime
261
- }), { array: Gt, add: Kt, remove: qt, set: Jt } = be(), Yt = l(() => E.multiple ? !!E.modelValue?.length : !pe(E.modelValue)), Xt = l(() => E.prefill === !1 && !Array.isArray(E.items) && F.value && !Yt.value), Zt = l(() => Xt.value && !H.value ? ut("select.searchToStart").value : E.noDataText), { hasPrefilled: Qt, isPrefilling: $t, canLoad: en, prefill: tn, markPrefilled: nn } = De({
261
+ }), { array: Gt, add: Kt, remove: qt, set: Jt } = ye(), Yt = l(() => E.multiple ? !!E.modelValue?.length : !fe(E.modelValue)), Xt = l(() => E.prefill === !1 && !Array.isArray(E.items) && F.value && !Yt.value), Zt = l(() => Xt.value && !H.value ? ut("select.searchToStart").value : E.noDataText), { hasPrefilled: Qt, isPrefilling: $t, canLoad: en, prefill: tn, markPrefilled: nn } = De({
262
262
  alreadyLoaded: Ht,
263
263
  clientReproducible: Vt,
264
264
  trigger: l(() => Array.isArray(E.items) || E.prefill === !0 || E.enforceCoherence && Yt.value || E.prefill === "interaction" && Rt.value),
@@ -281,17 +281,17 @@ var qe = {
281
281
  }), { coherent: sn, coherentValue: cn } = Ee({
282
282
  modelValue: b(E, "modelValue"),
283
283
  multiple: E.multiple,
284
- iteratee: (e) => !!on.value[ye(e)]
285
- }), W = l(() => [].concat(E.modelValue).map((e) => on.value[ye(e)]).filter(Boolean)), ln = (e) => ({
284
+ iteratee: (e) => !!on.value[ve(e)]
285
+ }), W = l(() => [].concat(E.modelValue).map((e) => on.value[ve(e)]).filter(Boolean)), ln = (e) => ({
286
286
  item: e.item,
287
287
  text: e.text,
288
288
  value: e.value,
289
289
  selected: e.selected ?? !0,
290
290
  disabled: e.disabled ?? !1
291
291
  }), un = l(() => W.value.map(ln)), G = l(() => !!(Wt.value || E.loading)), dn = l(() => G.value && U.value.length > 0), fn = l(() => !!E.hasErrors), pn = l(() => !!E.hasWarning && !fn.value), mn = l(() => W.value.map((e) => e.text).filter(Boolean).join(", ") || "");
292
- Se(() => E.modelValue, async () => {
292
+ xe(() => E.modelValue, async () => {
293
293
  en.value && (sn.value || (await zt(H.value, !0, E.modelValue), E.enforceCoherence && (D("update:modelValue", cn.value), k.value?.blur())));
294
- }, { debounce: E.modelValueDebounceTime }), Se(() => [E.dependencies, E.items], async () => {
294
+ }, { debounce: E.modelValueDebounceTime }), xe(() => [E.dependencies, E.items], async () => {
295
295
  en.value && (await zt(H.value, !0, E.modelValue), E.enforceCoherence && !sn.value && (D("update:modelValue", cn.value), k.value?.blur()));
296
296
  }, { debounce: E.depsDebounceTime });
297
297
  let hn = async (e) => {
@@ -309,11 +309,11 @@ var qe = {
309
309
  }, _n = l(() => {
310
310
  if (!H.value || !E.multiple && W.value.some((e) => e.text === H.value)) return U.value;
311
311
  let e = H.value.trim();
312
- return E.filterBy.length ? U.value.filter((t) => me(t.item, E.filterBy, e)) : U.value.filter((t) => me(t, ["text"], e));
313
- }), vn = Symbol("default"), yn = (e) => pe(E.groupBy) ? vn : typeof E.groupBy == "function" ? E.groupBy(e.item) : le(e.item, E.groupBy), bn = l(() => {
312
+ return E.filterBy.length ? U.value.filter((t) => pe(t.item, E.filterBy, e)) : U.value.filter((t) => pe(t, ["text"], e));
313
+ }), vn = Symbol("default"), yn = (e) => fe(E.groupBy) ? vn : typeof E.groupBy == "function" ? E.groupBy(e.item) : ce(e.item, E.groupBy), bn = l(() => {
314
314
  let e = {};
315
315
  for (let t of _n.value) {
316
- let n = yn(t), r = ye(n);
316
+ let n = yn(t), r = ve(n);
317
317
  e[r] || (e[r] = {
318
318
  id: r,
319
319
  data: n ?? null,
@@ -321,14 +321,14 @@ var qe = {
321
321
  }), e[r].options.push(t);
322
322
  }
323
323
  return Object.values(e).filter((e) => e.options.length);
324
- }), K = v(!1), xn = n(K), Sn = ce(K, () => E.transitionDuration), Cn = () => (E.adaptive ?? tt.adaptive) && P.value ? "canvas" : "popover", wn = v(Cn()), q = l(() => wn.value === "canvas");
324
+ }), K = v(!1), xn = n(K), Sn = se(K, () => E.transitionDuration), Cn = () => (E.adaptive ?? tt.adaptive) && P.value ? "canvas" : "popover", wn = v(Cn()), q = l(() => wn.value === "canvas");
325
325
  S([
326
326
  () => E.adaptive,
327
327
  P,
328
328
  K
329
329
  ], () => {
330
330
  K.value || (wn.value = Cn());
331
- }), se(q), ge({
331
+ }), oe(q), he({
332
332
  active: () => K.value && q.value,
333
333
  input: () => A.value
334
334
  });
@@ -343,9 +343,9 @@ var qe = {
343
343
  ...E.offCanvasProps?.title ? {} : { "aria-labelledby": Pn.value },
344
344
  ...E.offCanvasProps
345
345
  })), J = async ({ focusPopoverContent: e = !0 } = {}) => {
346
- E.disabled || E.readonly || K.value || (wn.value = Cn(), Rt.value = !0, K.value = !0, !(!Qt.value && !$t.value && !Xt.value && (await tn(), !K.value)) && (await Ie(), K.value && (q.value || (ht = !0, gt(), ie(V), document.addEventListener("click", z), document.addEventListener("focusin", z), document.addEventListener("keydown", Lt, { capture: !0 }), e && (await c(0), K.value && (F.value ? R() : bt()))))));
346
+ E.disabled || E.readonly || K.value || (wn.value = Cn(), Rt.value = !0, K.value = !0, !(!Qt.value && !$t.value && !Xt.value && (await tn(), !K.value)) && (await Ie(), K.value && (q.value || (ht = !0, gt(), re(V), document.addEventListener("click", z, { capture: !0 }), document.addEventListener("focusin", z, { capture: !0 }), document.addEventListener("keydown", Lt, { capture: !0 }), e && (await c(0), K.value && (F.value ? R() : bt()))))));
347
347
  }, Y = async () => {
348
- K.value && (K.value = !1, k.value?.blur(), j.value = void 0, H.value = "", !q.value && (_t(), ae(V), document.removeEventListener("click", z), document.removeEventListener("focusin", z), document.removeEventListener("keydown", Lt, { capture: !0 })));
348
+ K.value && (K.value = !1, k.value?.blur(), j.value = void 0, H.value = "", !q.value && (_t(), ie(V), document.removeEventListener("click", z, { capture: !0 }), document.removeEventListener("focusin", z, { capture: !0 }), document.removeEventListener("keydown", Lt, { capture: !0 })));
349
349
  }, En = () => {
350
350
  k.value?.blur(), j.value = void 0, H.value = "", On(), L();
351
351
  }, Dn = () => K.value ? Y() : J(), X = v(!1), Z = () => {
@@ -436,7 +436,7 @@ var qe = {
436
436
  ], ([e, t, n, r, i, a, o, s]) => {
437
437
  e && (e.setAttribute("aria-expanded", String(t)), o || e.setAttribute("aria-label", s), r == null ? e.removeAttribute("aria-invalid") : e.setAttribute("aria-invalid", r), n ? e.setAttribute("aria-controls", `${I}_listbox`) : e.removeAttribute("aria-controls"), i == null ? e.removeAttribute("aria-describedby") : e.setAttribute("aria-describedby", i), t && a ? e.setAttribute("aria-activedescendant", a) : e.removeAttribute("aria-activedescendant"));
438
438
  }, { immediate: !0 }), ze(() => {
439
- clearTimeout(An), $?.(), At.abort(), ae(V), document.removeEventListener("click", z), document.removeEventListener("focusin", z), document.removeEventListener("keydown", Lt, { capture: !0 });
439
+ clearTimeout(An), $?.(), At.abort(), ie(V), document.removeEventListener("click", z, { capture: !0 }), document.removeEventListener("focusin", z, { capture: !0 }), document.removeEventListener("keydown", Lt, { capture: !0 });
440
440
  }), (e, t) => (_(), f(je, null, [
441
441
  st.value ? d("", !0) : y(e.$slots, "activator", g(h({ key: 0 }, {
442
442
  props: { ref: ct },
@@ -493,11 +493,11 @@ var qe = {
493
493
  class: "bb-select-popover__search-warning-icon",
494
494
  focusable: "false"
495
495
  }),
496
- p(de, {
496
+ p(ue, {
497
497
  "aria-hidden": "true",
498
498
  class: "bb-select-popover__search-icon",
499
499
  focusable: "false",
500
- icon: x(he)
500
+ icon: x(me)
501
501
  }, null, 8, ["icon"]),
502
502
  e.clearable ? (_(), u(Ce, {
503
503
  key: 0,
@@ -517,7 +517,7 @@ var qe = {
517
517
  "aria-expanded": "true",
518
518
  "aria-invalid": pt.value,
519
519
  "aria-label": dt.value,
520
- class: "bb-select-popover__focus-proxy sr-only",
520
+ class: "bb-select-popover__focus-proxy bb-sr-only",
521
521
  role: "combobox",
522
522
  tabindex: "-1",
523
523
  type: "button",
@@ -573,7 +573,7 @@ var qe = {
573
573
  ])]),
574
574
  _: 3
575
575
  }),
576
- q.value ? (_(), u(_e, h({
576
+ q.value ? (_(), u(ge, h({
577
577
  key: 1,
578
578
  modelValue: K.value,
579
579
  "onUpdate:modelValue": t[3] ||= (e) => K.value = e,
@@ -592,7 +592,7 @@ var qe = {
592
592
  }]),
593
593
  tabindex: "-1"
594
594
  }, [
595
- e.multiple && W.value.length ? (_(), f("div", Ze, [Me("div", Qe, [(_(!0), f(je, null, Be(W.value, (n) => (_(), u(fe, {
595
+ e.multiple && W.value.length ? (_(), f("div", Ze, [Me("div", Qe, [(_(!0), f(je, null, Be(W.value, (n) => (_(), u(de, {
596
596
  key: n.valueHash,
597
597
  class: "bb-select-popover__sheet-chip",
598
598
  clearable: !e.disabled && !e.readonly,
@@ -605,7 +605,7 @@ var qe = {
605
605
  _: 2
606
606
  }, 1032, ["clearable", "onClick:clear"]))), 128))])])) : d("", !0),
607
607
  p(x(rt)),
608
- p(ve, null, {
608
+ p(_e, null, {
609
609
  default: C(() => [p(x(at))]),
610
610
  _: 1
611
611
  })
@@ -7,7 +7,7 @@ import { createBlock as i, createElementBlock as a, createElementVNode as o, cre
7
7
  var f = {
8
8
  key: 0,
9
9
  role: "status"
10
- }, p = { class: "sr-only" }, m = /*@__PURE__*/ c({
10
+ }, p = { class: "bb-sr-only" }, m = /*@__PURE__*/ c({
11
11
  __name: "BbSpinner",
12
12
  props: {
13
13
  size: { default: "md" },
@@ -7,7 +7,7 @@ export type Size = IconSize;
7
7
  export type BbSpinnerProps = Pick<BbIconProps, 'size'> & {
8
8
  /**
9
9
  * Accessible loading announcement. When set, the spinner is wrapped in a
10
- * `role="status"` element containing this text rendered `sr-only`, so
10
+ * `role="status"` element containing this text rendered `bb-sr-only`, so
11
11
  * screen readers announce the loading state. When omitted the markup is
12
12
  * unchanged and the spinner is purely decorative.
13
13
  */
@@ -27,18 +27,18 @@ import { defaultRangeExtractor as Ve, elementScroll as He, observeElementOffset
27
27
  //#region src/components/BbTable/BbTable.vue?vue&type=script&setup=true&lang.ts
28
28
  var Ye = {
29
29
  key: 0,
30
- class: "sr-only"
30
+ class: "bb-sr-only"
31
31
  }, Xe = ["id"], Ze = ["id"], Qe = {
32
32
  "aria-live": "polite",
33
- class: "bb-table-loading__text sr-only",
33
+ class: "bb-table-loading__text bb-sr-only",
34
34
  role: "status"
35
35
  }, $e = {
36
36
  "aria-live": "polite",
37
- class: "bb-table__reorder-status sr-only",
37
+ class: "bb-table__reorder-status bb-sr-only",
38
38
  role: "status"
39
- }, et = ["aria-labelledby", "aria-rowcount"], tt = ["inert"], nt = ["aria-rowindex"], rt = { class: "bb-table-header__content" }, it = { class: "bb-table-check__label-text sr-only" }, at = {
39
+ }, et = ["aria-labelledby", "aria-rowcount"], tt = ["inert"], nt = ["aria-rowindex"], rt = { class: "bb-table-header__content" }, it = { class: "bb-table-check__label-text bb-sr-only" }, at = {
40
40
  key: 1,
41
- class: "bb-table-radio__label-text sr-only"
41
+ class: "bb-table-radio__label-text bb-sr-only"
42
42
  }, ot = [
43
43
  "aria-describedby",
44
44
  "aria-sort",
@@ -50,7 +50,7 @@ var Ye = {
50
50
  ], st = { class: "bb-table-header__content" }, ct = {
51
51
  key: 1,
52
52
  class: "bb-table-header__content"
53
- }, lt = ["onDblclick", "onPointerdown"], ut = { class: "bb-table-header__content sr-only" }, dt = ["aria-rowindex"], ft = {
53
+ }, lt = ["onDblclick", "onPointerdown"], ut = { class: "bb-table-header__content bb-sr-only" }, dt = ["aria-rowindex"], ft = {
54
54
  key: 0,
55
55
  class: "bb-table-skeleton__cell bb-table-skeleton__cell--select",
56
56
  role: "cell"
@@ -1478,12 +1478,12 @@ var Ye = {
1478
1478
  e.caption ? (S(), _("div", {
1479
1479
  key: 1,
1480
1480
  id: nn.value,
1481
- class: b(["bb-table-caption", { "sr-only": !e.displayCaption }])
1481
+ class: b(["bb-table-caption", { "bb-sr-only": !e.displayCaption }])
1482
1482
  }, T(e.caption), 11, Xe)) : g("", !0),
1483
1483
  e.reorderable || e.resizable ? (S(), _("div", {
1484
1484
  key: 2,
1485
1485
  id: rn.value,
1486
- class: "sr-only"
1486
+ class: "bb-sr-only"
1487
1487
  }, [e.reorderable ? (S(), _(m, { key: 0 }, [Ce(T(E(L)("table.reorderInstructions").value), 1)], 64)) : g("", !0), e.resizable && !J.value ? (S(), _(m, { key: 1 }, [Ce(T(E(L)("table.resizeInstructions").value), 1)], 64)) : g("", !0)], 8, Ze)) : g("", !0),
1488
1488
  v("span", Qe, T(Di.value ? e.loadingText || E(L)("common.loadingText").value : ""), 1),
1489
1489
  e.reorderable ? (S(), _(m, { key: 3 }, [v("span", $e, T(fn.value), 1), v("div", {
@@ -54,7 +54,7 @@ var s = r({
54
54
  disabled: o.disabled,
55
55
  readonly: n.readonly,
56
56
  onChange: l
57
- }), i("span", { class: "bb-table-check__label-text sr-only" }, o.accessibleLabel)]) : i("label", { class: ["bb-table-radio__label", { "bb-table-radio__label--disabled": o.disabled }] }, [i(t, {
57
+ }), i("span", { class: "bb-table-check__label-text bb-sr-only" }, o.accessibleLabel)]) : i("label", { class: ["bb-table-radio__label", { "bb-table-radio__label--disabled": o.disabled }] }, [i(t, {
58
58
  checked: o.selected,
59
59
  class: "bb-table-radio",
60
60
  disabled: o.disabled,
@@ -62,7 +62,7 @@ var s = r({
62
62
  readonly: n.readonly,
63
63
  value: o.value,
64
64
  onChange: l
65
- }), i("span", { class: "bb-table-radio__label-text sr-only" }, o.accessibleLabel)])]));
65
+ }), i("span", { class: "bb-table-radio__label-text bb-sr-only" }, o.accessibleLabel)])]));
66
66
  }, d = () => {
67
67
  let { context: e, item: t } = r, s = t.cols.length - 1;
68
68
  return t.cols.map((c, l) => i("div", {
@@ -15,6 +15,7 @@ var g = /*@__PURE__*/ c({
15
15
  comma: { type: Boolean },
16
16
  clearable: { type: Boolean },
17
17
  compact: { type: Boolean },
18
+ variant: {},
18
19
  description: {},
19
20
  direction: {},
20
21
  disabled: { type: Boolean },
@@ -130,7 +131,8 @@ var g = /*@__PURE__*/ c({
130
131
  placeholder: e.placeholder,
131
132
  "prepend:icon": _["prepend:icon"],
132
133
  readonly: e.readonly,
133
- required: e.required
134
+ required: e.required,
135
+ variant: e.variant
134
136
  }, w), {
135
137
  "prepend-outer": h((t) => [m(e.$slots, "prepend-outer", d(l(t)))]),
136
138
  prepend: h((t) => [m(e.$slots, "prepend", d(l(t)))]),
@@ -160,7 +162,8 @@ var g = /*@__PURE__*/ c({
160
162
  "placeholder",
161
163
  "prepend:icon",
162
164
  "readonly",
163
- "required"
165
+ "required",
166
+ "variant"
164
167
  ])]),
165
168
  _: 3
166
169
  }, 8, [
@@ -1,3 +1,4 @@
1
+ import { InputVariantType } from '../../types/InputVariant';
1
2
  import { HTMLAttributes, InputHTMLAttributes } from 'vue';
2
3
  import { InputDirection } from '../../types/InputDirection';
3
4
  import { IconType } from '../../types/Icon';
@@ -38,6 +39,17 @@ export type BbTagProps = {
38
39
  * Sets the component in a compact mode.
39
40
  */
40
41
  compact?: boolean;
42
+ /**
43
+ * Visual variant of the field box — the same names and tokens as the
44
+ * `BbButton` variants. Colours only: height, padding and border width are
45
+ * identical across variants, so a form never reflows when one changes.
46
+ * `'ghost'` has no border in any state (errors and warnings show through
47
+ * the icon and the messages); every variant keeps the focus ring.
48
+ * Register extra names with the plugin's `inputVariants` option.
49
+ *
50
+ * @defaultValue `'outline'`
51
+ */
52
+ variant?: InputVariantType;
41
53
  /**
42
54
  * Descriptive text displayed below the label and above the input. Unlike the hint it is always
43
55
  * visible, and it is linked to the input via `aria-describedby` (after any
@@ -13,6 +13,7 @@ var v = /*@__PURE__*/ l({
13
13
  autofocus: {},
14
14
  clearable: { type: Boolean },
15
15
  compact: { type: Boolean },
16
+ variant: {},
16
17
  description: {},
17
18
  direction: {},
18
19
  disabled: { type: Boolean },
@@ -124,7 +125,8 @@ var v = /*@__PURE__*/ l({
124
125
  "prepend:icon": y["prepend:icon"],
125
126
  readonly: e.readonly,
126
127
  required: e.required,
127
- type: e.type
128
+ type: e.type,
129
+ variant: e.variant
128
130
  }, O), s({
129
131
  "append-outer": _(() => [h(e.$slots, "append-outer")]),
130
132
  append: _(() => [h(e.$slots, "append")]),
@@ -161,7 +163,8 @@ var v = /*@__PURE__*/ l({
161
163
  "prepend:icon",
162
164
  "readonly",
163
165
  "required",
164
- "type"
166
+ "type",
167
+ "variant"
165
168
  ])]),
166
169
  _: 3
167
170
  }, 8, [
@@ -1,3 +1,4 @@
1
+ import { InputVariantType } from '../../types/InputVariant';
1
2
  import { HTMLAttributes, InputHTMLAttributes } from 'vue';
2
3
  import { InputDirection } from '../../types/InputDirection';
3
4
  import { MaskInputOptions } from 'maska';
@@ -24,6 +25,17 @@ export type BbTextInputProps = {
24
25
  * Displays the component in a compact version.
25
26
  */
26
27
  compact?: boolean;
28
+ /**
29
+ * Visual variant of the field box — the same names and tokens as the
30
+ * `BbButton` variants. Colours only: height, padding and border width are
31
+ * identical across variants, so a form never reflows when one changes.
32
+ * `'ghost'` has no border in any state (errors and warnings show through
33
+ * the icon and the messages); every variant keeps the focus ring.
34
+ * Register extra names with the plugin's `inputVariants` option.
35
+ *
36
+ * @defaultValue `'outline'`
37
+ */
38
+ variant?: InputVariantType;
27
39
  /**
28
40
  * Descriptive text displayed below the label and above the input. Unlike the hint it is always
29
41
  * visible, and it is linked to the input via `aria-describedby` (after any
@@ -13,6 +13,7 @@ var h = /*@__PURE__*/ s({
13
13
  autoGrow: { type: Boolean },
14
14
  clearable: { type: Boolean },
15
15
  compact: { type: Boolean },
16
+ variant: {},
16
17
  description: {},
17
18
  direction: {},
18
19
  disabled: { type: Boolean },
@@ -117,7 +118,8 @@ var h = /*@__PURE__*/ s({
117
118
  "prepend:icon": g["prepend:icon"],
118
119
  readonly: e.readonly,
119
120
  required: e.required,
120
- rows: e.rows
121
+ rows: e.rows,
122
+ variant: e.variant
121
123
  }, w), {
122
124
  "append-outer": m(() => [p(e.$slots, "append-outer")]),
123
125
  append: m(() => [p(e.$slots, "append")]),
@@ -145,7 +147,8 @@ var h = /*@__PURE__*/ s({
145
147
  "prepend:icon",
146
148
  "readonly",
147
149
  "required",
148
- "rows"
150
+ "rows",
151
+ "variant"
149
152
  ])]),
150
153
  _: 3
151
154
  }, 8, [
@@ -1,3 +1,4 @@
1
+ import { InputVariantType } from '../../types/InputVariant';
1
2
  import { HTMLAttributes, InputHTMLAttributes } from 'vue';
2
3
  import { InputDirection } from '../../types/InputDirection';
3
4
  import { IconType } from '../../types/Icon';
@@ -27,6 +28,17 @@ export type BbTextareaProps = {
27
28
  * Sets the component in a compact state.
28
29
  */
29
30
  compact?: boolean;
31
+ /**
32
+ * Visual variant of the field box — the same names and tokens as the
33
+ * `BbButton` variants. Colours only: height, padding and border width are
34
+ * identical across variants, so a form never reflows when one changes.
35
+ * `'ghost'` has no border in any state (errors and warnings show through
36
+ * the icon and the messages); every variant keeps the focus ring.
37
+ * Register extra names with the plugin's `inputVariants` option.
38
+ *
39
+ * @defaultValue `'outline'`
40
+ */
41
+ variant?: InputVariantType;
30
42
  /**
31
43
  * Descriptive text displayed below the label and above the input. Unlike the hint it is always
32
44
  * visible, and it is linked to the input via `aria-describedby` (after any
@@ -17,6 +17,7 @@ var _ = /*@__PURE__*/ s({
17
17
  autofocus: {},
18
18
  clearable: { type: Boolean },
19
19
  compact: { type: Boolean },
20
+ variant: {},
20
21
  description: {},
21
22
  direction: {},
22
23
  disabled: { type: Boolean },
@@ -120,7 +121,8 @@ var _ = /*@__PURE__*/ s({
120
121
  required: e.required,
121
122
  seconds: e.seconds,
122
123
  step: e.step,
123
- "transition-duration": e.transitionDuration
124
+ "transition-duration": e.transitionDuration,
125
+ variant: e.variant
124
126
  }, E), {
125
127
  "prepend-outer": g(() => [h(e.$slots, "prepend-outer")]),
126
128
  prepend: g(() => [h(e.$slots, "prepend")]),
@@ -129,7 +131,7 @@ var _ = /*@__PURE__*/ s({
129
131
  append: g(() => [h(e.$slots, "append")]),
130
132
  "append-outer": g(() => [h(e.$slots, "append-outer")]),
131
133
  _: 2
132
- }, 1040, /* @__PURE__ */ "id.adaptive.ampm.append:icon.aria-describedby.autocomplete.autofocus.clearable.compact.disable-writing.disabled.has-errors.has-warning.loading.max.min.model-value.name.off-canvas-props.placeholder.prepend:icon.range.readonly.required.seconds.step.transition-duration".split("."))]),
134
+ }, 1040, /* @__PURE__ */ "id.adaptive.ampm.append:icon.aria-describedby.autocomplete.autofocus.clearable.compact.disable-writing.disabled.has-errors.has-warning.loading.max.min.model-value.name.off-canvas-props.placeholder.prepend:icon.range.readonly.required.seconds.step.transition-duration.variant".split("."))]),
133
135
  _: 3
134
136
  }, 8, [
135
137
  "id",
@@ -1,3 +1,4 @@
1
+ import { InputVariantType } from '../../types/InputVariant';
1
2
  import { HTMLAttributes, InputHTMLAttributes } from 'vue';
2
3
  import { InputDirection } from '../../types/InputDirection';
3
4
  import { IconType } from '../../types/Icon';
@@ -34,6 +35,17 @@ export type BbTimePickerInputProps = {
34
35
  clearable?: boolean;
35
36
  /** Sets the component in a compact state. */
36
37
  compact?: boolean;
38
+ /**
39
+ * Visual variant of the field box — the same names and tokens as the
40
+ * `BbButton` variants. Colours only: height, padding and border width are
41
+ * identical across variants, so a form never reflows when one changes.
42
+ * `'ghost'` has no border in any state (errors and warnings show through
43
+ * the icon and the messages); every variant keeps the focus ring.
44
+ * Register extra names with the plugin's `inputVariants` option.
45
+ *
46
+ * @defaultValue `'outline'`
47
+ */
48
+ variant?: InputVariantType;
37
49
  /**
38
50
  * Descriptive text displayed below the label and above the input. Always
39
51
  * visible and linked to the input via `aria-describedby` (after any