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
@@ -128,30 +128,28 @@ bubbles from flickering while the pointer crosses the dense toolbar.
128
128
  ```vue
129
129
  <template>
130
130
  <div
131
- class="flex max-w-sm flex-col gap-2 rounded-[var(--bb-radius)] border border-[color:var(--bb-border)] p-3"
131
+ class="flex max-w-sm flex-col gap-2 rounded-(--bb-radius) border border-(--bb-border) p-3"
132
132
  >
133
133
  <div class="flex items-start justify-between gap-2">
134
134
  <div class="flex min-w-0 flex-col gap-0.5">
135
135
  <span class="truncate text-sm font-medium">Q3 board deck</span>
136
- <span class="text-xs text-[color:var(--bb-text-muted)]">
136
+ <span class="text-xs text-(--bb-text-muted)">
137
137
  Shared draft · Acme Studio · edited 2h ago
138
138
  </span>
139
139
  </div>
140
- <span class="shrink-0 text-xs text-[color:var(--bb-text-muted)]"
141
- >PDF</span
142
- >
140
+ <span class="shrink-0 text-xs text-(--bb-text-muted)">PDF</span>
143
141
  </div>
144
142
 
145
143
  <div
146
144
  aria-label="Document actions"
147
- class="inline-flex w-fit items-center gap-0.5 rounded-[var(--bb-radius)] border border-[color:var(--bb-border)] p-0.5"
145
+ class="inline-flex w-fit items-center gap-0.5 rounded-(--bb-radius) border border-(--bb-border) p-0.5"
148
146
  role="toolbar"
149
147
  >
150
148
  <template v-for="action in actions" :key="action.label">
151
149
  <span
152
150
  v-if="action.startsGroup"
153
151
  aria-hidden="true"
154
- class="mx-0.5 h-4 w-px bg-[color:var(--bb-border)]"
152
+ class="mx-0.5 h-4 w-px bg-(--bb-border)"
155
153
  ></span>
156
154
  <BbTooltip :delay="400" :text="action.label">
157
155
  <template #activator="{ props }">
@@ -211,7 +209,7 @@ works on any variant.
211
209
  </template>
212
210
  <span class="flex items-center gap-1.5">
213
211
  Search
214
- <kbd class="rounded border border-current px-1 font-mono text-[10px] leading-4 opacity-75">⌘K</kbd>
212
+ <kbd class="rounded-sm border border-current px-1 font-mono text-[10px] leading-4 opacity-75">⌘K</kbd>
215
213
  </span>
216
214
  </BbTooltip>
217
215
  <BbTooltip>
@@ -226,7 +224,7 @@ works on any variant.
226
224
  </template>
227
225
  <span class="flex items-center gap-1.5">
228
226
  Toggle sidebar
229
- <kbd class="rounded border border-current px-1 font-mono text-[10px] leading-4 opacity-75">⌘B</kbd>
227
+ <kbd class="rounded-sm border border-current px-1 font-mono text-[10px] leading-4 opacity-75">⌘B</kbd>
230
228
  </span>
231
229
  </BbTooltip>
232
230
  </div>
@@ -244,8 +242,14 @@ is concerned — the whole label (shortcut included) is flattened into the
244
242
  useful on dense toolbars to avoid a flicker of bubbles while the cursor passes
245
243
  over. It delays only the **open**; the close is always a short debounce (so the
246
244
  pointer can travel from the trigger into the bubble without it vanishing).
247
- - `width` caps the bubble (pixels, or a percentage of the activator) so long
248
- hints wrap instead of stretching across the screen.
245
+ - `width` caps the bubble so long hints wrap instead of stretching across the
246
+ screen. It is a **maximum, not a fixed width** — the bubble still shrinks to
247
+ short text, so a one-line hint never sits in an oversized box. A bare number
248
+ is pixels, a percentage is measured against the activator, and any other CSS
249
+ length (`'20rem'`, `'min(320px, 90vw)'`) passes through. Bubbles already cap
250
+ at `40ch` without it; reach for the prop when a specific hint wants a
251
+ different measure, and for a library-wide change set `--max-w` on
252
+ `.bb-tooltip` in your own CSS.
249
253
  - `disabled` suppresses the tooltip entirely — and dismisses it if already open,
250
254
  so you can bind it to skip a hint when the label is already visible elsewhere.
251
255
  - Content is **lazy** (rendered on first open); `eager` renders it up front, and
@@ -339,25 +343,23 @@ brief settle, matching dense toolbars.
339
343
  ```vue
340
344
  <template>
341
345
  <div
342
- class="max-w-sm overflow-hidden rounded-[var(--bb-radius)] border border-[color:var(--bb-border)]"
346
+ class="max-w-sm overflow-hidden rounded-(--bb-radius) border border-(--bb-border)"
343
347
  >
344
348
  <div
345
- class="flex items-baseline justify-between gap-2 border-b border-[color:var(--bb-border)] px-3 py-2"
349
+ class="flex items-baseline justify-between gap-2 border-b border-(--bb-border) px-3 py-2"
346
350
  >
347
351
  <span class="text-sm font-medium">Attachments</span>
348
- <span class="text-xs text-[color:var(--bb-text-muted)]"
349
- >INV-1042 · 3 files</span
350
- >
352
+ <span class="text-xs text-(--bb-text-muted)">INV-1042 · 3 files</span>
351
353
  </div>
352
354
 
353
- <div class="divide-y divide-[color:var(--bb-border)]">
355
+ <div class="divide-y divide-(--bb-border)">
354
356
  <div
355
357
  v-for="file in files"
356
358
  :key="file.name"
357
359
  class="flex items-center gap-2 px-3 py-1.5 text-sm"
358
360
  >
359
361
  <BbIcon
360
- class="shrink-0 text-[color:var(--bb-text-muted)]"
362
+ class="shrink-0 text-(--bb-text-muted)"
361
363
  :icon="file.icon"
362
364
  size="sm"
363
365
  />
@@ -369,7 +371,7 @@ brief settle, matching dense toolbars.
369
371
  >
370
372
  {{ file.name }}
371
373
  </span>
372
- <span class="shrink-0 text-xs text-[color:var(--bb-text-muted)]">{{
374
+ <span class="shrink-0 text-xs text-(--bb-text-muted)">{{
373
375
  file.size
374
376
  }}</span>
375
377
  </div>
@@ -468,7 +470,7 @@ const files: SharedFile[] = [
468
470
  | `text` | `string \| undefined` | | | Text content of the component. |
469
471
  | `transitionDuration` | `number \| undefined` | `250` | | How long the transition has to last in milliseconds |
470
472
  | `variant` | `keyof TooltipVariantRegistry \| undefined` | `"default"` | | Visual variant. `'default'` is the inverted (primary) bubble, `'destructive'` is the danger-tinted bubble for warnings. Any other string is applied as a `bb-tooltip--<name>` class hook. |
471
- | `width` | `string \| number \| undefined` | | | Width of the tooltip bubble in pixels, or as a percentage of the activator. |
473
+ | `width` | `string \| number \| undefined` | | | Caps the width of the tooltip bubble: it wraps at this measure but still shrinks to its text, so a short hint never sits in an oversized bubble. A bare number is read as pixels, a percentage is measured against the activator, and any other … |
472
474
 
473
475
  ## Events
474
476
 
package/dist/ai/BbTree.md CHANGED
@@ -68,20 +68,14 @@ normally:
68
68
  ```vue
69
69
  <template>
70
70
  <div
71
- class="w-full max-w-xs overflow-hidden rounded-[var(--bb-radius)] border border-[color:var(--bb-border)]"
71
+ class="w-full max-w-xs overflow-hidden rounded-(--bb-radius) border border-(--bb-border)"
72
72
  >
73
73
  <div
74
- class="flex items-center gap-1.5 border-b border-[color:var(--bb-border)] px-2.5 py-1.5"
74
+ class="flex items-center gap-1.5 border-b border-(--bb-border) px-2.5 py-1.5"
75
75
  >
76
- <BbIcon
77
- class="text-[color:var(--bb-text-muted)]"
78
- icon="lucide:users"
79
- size="sm"
80
- />
76
+ <BbIcon class="text-(--bb-text-muted)" icon="lucide:users" size="sm" />
81
77
  <span class="text-xs font-medium">People</span>
82
- <span class="ml-auto text-xs text-[color:var(--bb-text-muted)]"
83
- >Acme Studio</span
84
- >
78
+ <span class="ml-auto text-xs text-(--bb-text-muted)">Acme Studio</span>
85
79
  </div>
86
80
 
87
81
  <BbTree
@@ -96,12 +90,12 @@ normally:
96
90
  <button
97
91
  v-if="expandable"
98
92
  :aria-label="`${expanded ? 'Collapse' : 'Expand'} ${meta.name}`"
99
- class="flex w-full items-center gap-1.5 rounded-[var(--bb-radius-sm)] px-1.5 py-0.5 text-left text-sm font-medium hover:bg-[color:var(--bb-surface-hover)]"
93
+ class="flex w-full items-center gap-1.5 rounded-(--bb-radius-sm) px-1.5 py-0.5 text-left text-sm font-medium hover:bg-(--bb-surface-hover)"
100
94
  type="button"
101
95
  v-bind="expandProps"
102
96
  >
103
97
  <BbIcon
104
- class="shrink-0 text-[color:var(--bb-text-muted)]"
98
+ class="shrink-0 text-(--bb-text-muted)"
105
99
  :icon="expanded ? 'lucide:chevron-down' : 'lucide:chevron-right'"
106
100
  size="sm"
107
101
  />
@@ -114,7 +108,7 @@ normally:
114
108
  expanded with no toggle, so it reads as a pinned section. -->
115
109
  <span
116
110
  v-else-if="item.children?.length"
117
- class="flex items-center gap-1.5 px-1.5 py-1 text-xs font-semibold uppercase tracking-wide text-[color:var(--bb-text-muted)]"
111
+ class="flex items-center gap-1.5 px-1.5 py-1 text-xs font-semibold tracking-wide text-(--bb-text-muted) uppercase"
118
112
  >
119
113
  {{ meta.name }}
120
114
  </span>
@@ -124,7 +118,7 @@ normally:
124
118
  {{ initials(meta.name) }}
125
119
  </BbAvatar>
126
120
  <span class="min-w-0 truncate font-medium">{{ meta.name }}</span>
127
- <span class="shrink-0 text-xs text-[color:var(--bb-text-muted)]">{{
121
+ <span class="shrink-0 text-xs text-(--bb-text-muted)">{{
128
122
  meta.role
129
123
  }}</span>
130
124
  </span>
@@ -222,20 +216,14 @@ as plain rows.
222
216
  ```vue
223
217
  <template>
224
218
  <div
225
- class="w-full max-w-xs overflow-hidden rounded-[var(--bb-radius)] border border-[color:var(--bb-border)]"
219
+ class="w-full max-w-xs overflow-hidden rounded-(--bb-radius) border border-(--bb-border)"
226
220
  >
227
221
  <div
228
- class="flex items-center gap-1.5 border-b border-[color:var(--bb-border)] px-2.5 py-1.5"
222
+ class="flex items-center gap-1.5 border-b border-(--bb-border) px-2.5 py-1.5"
229
223
  >
230
- <BbIcon
231
- class="text-[color:var(--bb-text-muted)]"
232
- icon="lucide:files"
233
- size="sm"
234
- />
224
+ <BbIcon class="text-(--bb-text-muted)" icon="lucide:files" size="sm" />
235
225
  <span class="text-xs font-medium">Explorer</span>
236
- <span class="ml-auto text-xs text-[color:var(--bb-text-muted)]"
237
- >acme-web</span
238
- >
226
+ <span class="ml-auto text-xs text-(--bb-text-muted)">acme-web</span>
239
227
  </div>
240
228
 
241
229
  <BbTree
@@ -249,17 +237,17 @@ as plain rows.
249
237
  <button
250
238
  v-if="expandable"
251
239
  :aria-label="`${expanded ? 'Collapse' : 'Expand'} ${meta.name}`"
252
- class="flex w-full items-center gap-1.5 rounded-[var(--bb-radius-sm)] px-1.5 py-0.5 text-left text-sm hover:bg-[color:var(--bb-surface-hover)]"
240
+ class="flex w-full items-center gap-1.5 rounded-(--bb-radius-sm) px-1.5 py-0.5 text-left text-sm hover:bg-(--bb-surface-hover)"
253
241
  type="button"
254
242
  v-bind="expandProps"
255
243
  >
256
244
  <BbIcon
257
- class="shrink-0 text-[color:var(--bb-text-muted)]"
245
+ class="shrink-0 text-(--bb-text-muted)"
258
246
  :icon="expanded ? 'lucide:chevron-down' : 'lucide:chevron-right'"
259
247
  size="sm"
260
248
  />
261
249
  <BbIcon
262
- class="shrink-0 text-[color:var(--bb-text-muted)]"
250
+ class="shrink-0 text-(--bb-text-muted)"
263
251
  :icon="expanded ? 'lucide:folder-open' : 'lucide:folder'"
264
252
  size="sm"
265
253
  />
@@ -267,16 +255,14 @@ as plain rows.
267
255
  </button>
268
256
  <span
269
257
  v-else
270
- class="flex items-center gap-1.5 rounded-[var(--bb-radius-sm)] px-1.5 py-0.5 pl-[1.55rem] text-sm text-[color:var(--bb-text-muted)]"
258
+ class="flex items-center gap-1.5 rounded-(--bb-radius-sm) px-1.5 py-0.5 pl-[1.55rem] text-sm text-(--bb-text-muted)"
271
259
  >
272
260
  <BbIcon
273
- class="shrink-0 text-[color:var(--bb-text-faint)]"
261
+ class="shrink-0 text-(--bb-text-faint)"
274
262
  icon="lucide:file"
275
263
  size="sm"
276
264
  />
277
- <span class="truncate text-[color:var(--bb-text)]">{{
278
- meta.name
279
- }}</span>
265
+ <span class="truncate text-(--bb-text)">{{ meta.name }}</span>
280
266
  </span>
281
267
  </template>
282
268
  </BbTree>
@@ -364,7 +350,7 @@ or restore them on reload.
364
350
 
365
351
  <BbTree
366
352
  v-model:expanded-items="expandedSections"
367
- class="rounded-[var(--bb-radius)] border border-[color:var(--bb-border)] p-1.5"
353
+ class="rounded-(--bb-radius) border border-(--bb-border) p-1.5"
368
354
  :expandable="(node) => !!node.children?.length"
369
355
  item-value="id"
370
356
  :items="sections"
@@ -374,7 +360,7 @@ or restore them on reload.
374
360
  <button
375
361
  v-if="expandable"
376
362
  :aria-label="`${expanded ? 'Collapse' : 'Expand'} ${meta.label}`"
377
- class="flex w-full items-center gap-1.5 rounded-[var(--bb-radius-sm)] px-1.5 py-0.5 text-left text-xs font-semibold uppercase tracking-wide text-[color:var(--bb-text-muted)] hover:bg-[color:var(--bb-surface-hover)]"
363
+ class="flex w-full items-center gap-1.5 rounded-(--bb-radius-sm) px-1.5 py-0.5 text-left text-xs font-semibold tracking-wide text-(--bb-text-muted) uppercase hover:bg-(--bb-surface-hover)"
378
364
  type="button"
379
365
  v-bind="expandProps"
380
366
  >
@@ -471,7 +457,7 @@ useful for a custom layout or an inline empty state under one branch.
471
457
  ```vue
472
458
  <template>
473
459
  <BbTree
474
- class="w-full max-w-xs rounded-[var(--bb-radius)] border border-[color:var(--bb-border)] p-1.5"
460
+ class="w-full max-w-xs rounded-(--bb-radius) border border-(--bb-border) p-1.5"
475
461
  :expandable="(n) => !!n.children?.length"
476
462
  item-value="id"
477
463
  :items="pages"
@@ -481,7 +467,7 @@ useful for a custom layout or an inline empty state under one branch.
481
467
  <template #0="{ meta, expanded, expandProps }">
482
468
  <button
483
469
  :aria-label="`${expanded ? 'Collapse' : 'Expand'} ${meta.label}`"
484
- class="flex w-full items-center gap-1.5 rounded-[var(--bb-radius-sm)] px-1.5 py-0.5 text-left text-xs font-semibold uppercase tracking-wide text-[color:var(--bb-text-muted)] hover:bg-[color:var(--bb-surface-hover)]"
470
+ class="flex w-full items-center gap-1.5 rounded-(--bb-radius-sm) px-1.5 py-0.5 text-left text-xs font-semibold tracking-wide text-(--bb-text-muted) uppercase hover:bg-(--bb-surface-hover)"
485
471
  type="button"
486
472
  v-bind="expandProps"
487
473
  >
@@ -498,7 +484,7 @@ useful for a custom layout or an inline empty state under one branch.
498
484
  <template #trash="{ meta, expanded, expandProps }">
499
485
  <button
500
486
  :aria-label="`${expanded ? 'Collapse' : 'Expand'} ${meta.label}`"
501
- class="knowledge-base-tree__trash flex w-full items-center gap-1.5 rounded-[var(--bb-radius-sm)] px-1.5 py-0.5 text-left text-sm"
487
+ class="knowledge-base-tree__trash flex w-full items-center gap-1.5 rounded-(--bb-radius-sm) px-1.5 py-0.5 text-left text-sm"
502
488
  type="button"
503
489
  v-bind="expandProps"
504
490
  >
@@ -514,13 +500,11 @@ useful for a custom layout or an inline empty state under one branch.
514
500
  <li
515
501
  v-for="page in item.children ?? []"
516
502
  :key="page.meta.id"
517
- class="flex items-center gap-1.5 px-1.5 py-0.5 pl-[1.55rem] text-sm text-[color:var(--bb-text-muted)] line-through"
503
+ class="flex items-center gap-1.5 px-1.5 py-0.5 pl-[1.55rem] text-sm text-(--bb-text-muted) line-through"
518
504
  >
519
505
  <BbIcon icon="lucide:file-x" size="sm" /> {{ page.meta.label }}
520
506
  </li>
521
- <li
522
- class="px-1.5 pb-1 pl-[1.55rem] text-xs text-[color:var(--bb-text-muted)]"
523
- >
507
+ <li class="px-1.5 pb-1 pl-[1.55rem] text-xs text-(--bb-text-muted)">
524
508
  Deleted pages are removed for good after 30 days.
525
509
  </li>
526
510
  </ul>
@@ -529,10 +513,10 @@ useful for a custom layout or an inline empty state under one branch.
529
513
  <!-- Default slot: every remaining node (the pages). -->
530
514
  <template #default="{ meta }">
531
515
  <span
532
- class="flex items-center gap-1.5 rounded-[var(--bb-radius-sm)] px-1.5 py-0.5 pl-[1.55rem] text-sm"
516
+ class="flex items-center gap-1.5 rounded-(--bb-radius-sm) px-1.5 py-0.5 pl-[1.55rem] text-sm"
533
517
  >
534
518
  <BbIcon
535
- class="text-[color:var(--bb-text-faint)]"
519
+ class="text-(--bb-text-faint)"
536
520
  icon="lucide:file-text"
537
521
  size="sm"
538
522
  />
@@ -646,7 +630,7 @@ out of the box: collapsing is a smooth CSS grid-rows transition, not a remount.
646
630
  },
647
631
  ]"
648
632
  :expandable="(n) => !!n.children?.length"
649
- class="max-w-xs rounded-[var(--bb-radius)] border border-[color:var(--bb-border)] p-1.5"
633
+ class="max-w-xs rounded-(--bb-radius) border border-(--bb-border) p-1.5"
650
634
  style="--indent:1.5rem; --gap:.375rem"
651
635
  >
652
636
  <template #default="{ meta, expandable, expanded, expandProps }">
@@ -654,16 +638,16 @@ out of the box: collapsing is a smooth CSS grid-rows transition, not a remount.
654
638
  v-if="expandable"
655
639
  v-bind="expandProps"
656
640
  type="button"
657
- class="flex w-full items-center gap-1.5 rounded-[var(--bb-radius-sm)] px-1.5 py-0.5 text-left text-sm font-medium hover:bg-[color:var(--bb-surface-hover)]"
641
+ class="flex w-full items-center gap-1.5 rounded-(--bb-radius-sm) px-1.5 py-0.5 text-left text-sm font-medium hover:bg-(--bb-surface-hover)"
658
642
  >
659
643
  <BbIcon
660
- class="text-[color:var(--bb-text-muted)]"
644
+ class="text-(--bb-text-muted)"
661
645
  :icon="expanded ? 'lucide:chevron-down' : 'lucide:chevron-right'"
662
646
  size="sm"
663
647
  />
664
648
  {{ meta.name }}
665
649
  </button>
666
- <span v-else class="px-1.5 py-0.5 text-sm text-[color:var(--bb-text-muted)]">{{ meta.name }}</span>
650
+ <span v-else class="px-1.5 py-0.5 text-sm text-(--bb-text-muted)">{{ meta.name }}</span>
667
651
  </template>
668
652
  </BbTree>
669
653
  ```
@@ -682,7 +666,7 @@ scoped under a wrapper class so it stays local.
682
666
  ```vue
683
667
  <template>
684
668
  <BbTree
685
- class="connector-tree w-full max-w-xs rounded-[var(--bb-radius)] border border-[color:var(--bb-border)] p-1.5"
669
+ class="connector-tree w-full max-w-xs rounded-(--bb-radius) border border-(--bb-border) p-1.5"
686
670
  :expandable="(node) => !!node.children?.length"
687
671
  item-value="path"
688
672
  :items="items"
@@ -691,12 +675,12 @@ scoped under a wrapper class so it stays local.
691
675
  <button
692
676
  v-if="expandable"
693
677
  :aria-label="`${expanded ? 'Collapse' : 'Expand'} ${meta.name}`"
694
- class="flex items-center gap-1.5 rounded-[var(--bb-radius-sm)] px-1.5 py-0.5 text-sm hover:bg-[color:var(--bb-surface-hover)]"
678
+ class="flex items-center gap-1.5 rounded-(--bb-radius-sm) px-1.5 py-0.5 text-sm hover:bg-(--bb-surface-hover)"
695
679
  type="button"
696
680
  v-bind="expandProps"
697
681
  >
698
682
  <BbIcon
699
- class="shrink-0 text-[color:var(--bb-text-muted)]"
683
+ class="shrink-0 text-(--bb-text-muted)"
700
684
  :icon="expanded ? 'lucide:folder-open' : 'lucide:folder'"
701
685
  size="sm"
702
686
  />
@@ -704,14 +688,14 @@ scoped under a wrapper class so it stays local.
704
688
  </button>
705
689
  <span
706
690
  v-else
707
- class="flex items-center gap-1.5 px-1.5 py-0.5 text-sm text-[color:var(--bb-text-muted)]"
691
+ class="flex items-center gap-1.5 px-1.5 py-0.5 text-sm text-(--bb-text-muted)"
708
692
  >
709
693
  <BbIcon
710
- class="shrink-0 text-[color:var(--bb-text-faint)]"
694
+ class="shrink-0 text-(--bb-text-faint)"
711
695
  icon="lucide:file"
712
696
  size="sm"
713
697
  />
714
- <span class="text-[color:var(--bb-text)]">{{ meta.name }}</span>
698
+ <span class="text-(--bb-text)">{{ meta.name }}</span>
715
699
  </span>
716
700
  </template>
717
701
  </BbTree>
@@ -829,20 +813,14 @@ fetch and swap its children.
829
813
  ```vue
830
814
  <template>
831
815
  <div
832
- class="w-full max-w-xs overflow-hidden rounded-[var(--bb-radius)] border border-[color:var(--bb-border)]"
816
+ class="w-full max-w-xs overflow-hidden rounded-(--bb-radius) border border-(--bb-border)"
833
817
  >
834
818
  <div
835
- class="flex items-center gap-1.5 border-b border-[color:var(--bb-border)] px-2.5 py-1.5"
819
+ class="flex items-center gap-1.5 border-b border-(--bb-border) px-2.5 py-1.5"
836
820
  >
837
- <BbIcon
838
- class="text-[color:var(--bb-text-muted)]"
839
- icon="lucide:cloud"
840
- size="sm"
841
- />
821
+ <BbIcon class="text-(--bb-text-muted)" icon="lucide:cloud" size="sm" />
842
822
  <span class="text-xs font-medium">Remote files</span>
843
- <span class="ml-auto text-xs text-[color:var(--bb-text-muted)]"
844
- >lazy load</span
845
- >
823
+ <span class="ml-auto text-xs text-(--bb-text-muted)">lazy load</span>
846
824
  </div>
847
825
 
848
826
  <BbTree
@@ -857,17 +835,17 @@ fetch and swap its children.
857
835
  <button
858
836
  v-if="expandable"
859
837
  :aria-label="`${isOpen ? 'Collapse' : 'Expand'} ${meta.label}`"
860
- class="flex w-full items-center gap-1.5 rounded-[var(--bb-radius-sm)] px-1.5 py-0.5 text-left text-sm hover:bg-[color:var(--bb-surface-hover)]"
838
+ class="flex w-full items-center gap-1.5 rounded-(--bb-radius-sm) px-1.5 py-0.5 text-left text-sm hover:bg-(--bb-surface-hover)"
861
839
  type="button"
862
840
  v-bind="expandProps"
863
841
  >
864
842
  <BbIcon
865
- class="shrink-0 text-[color:var(--bb-text-muted)]"
843
+ class="shrink-0 text-(--bb-text-muted)"
866
844
  :icon="isOpen ? 'lucide:chevron-down' : 'lucide:chevron-right'"
867
845
  size="sm"
868
846
  />
869
847
  <BbIcon
870
- class="shrink-0 text-[color:var(--bb-text-muted)]"
848
+ class="shrink-0 text-(--bb-text-muted)"
871
849
  :icon="isOpen ? 'lucide:folder-open' : 'lucide:folder'"
872
850
  size="sm"
873
851
  />
@@ -875,7 +853,7 @@ fetch and swap its children.
875
853
  </button>
876
854
  <span
877
855
  v-else-if="meta.loading"
878
- class="flex items-center gap-1.5 px-1.5 py-0.5 pl-[1.55rem] text-sm text-[color:var(--bb-text-muted)]"
856
+ class="flex items-center gap-1.5 px-1.5 py-0.5 pl-[1.55rem] text-sm text-(--bb-text-muted)"
879
857
  >
880
858
  <BbSpinner size="xs" /> Loading…
881
859
  </span>
@@ -883,11 +861,7 @@ fetch and swap its children.
883
861
  v-else
884
862
  class="flex items-center gap-1.5 px-1.5 py-0.5 pl-[1.55rem] text-sm"
885
863
  >
886
- <BbIcon
887
- class="text-[color:var(--bb-text-faint)]"
888
- icon="lucide:file"
889
- size="sm"
890
- />
864
+ <BbIcon class="text-(--bb-text-faint)" icon="lucide:file" size="sm" />
891
865
  {{ meta.label }}
892
866
  </span>
893
867
  </template>
@@ -25,6 +25,7 @@
25
25
  | `preventFocus` | `boolean \| undefined` | `false` | | Prevents the wrapper from focusing the inner input on click. |
26
26
  | `readonly` | `boolean \| undefined` | `false` | | Whether the input is readonly. |
27
27
  | `reserveAppendSpace` | `boolean \| undefined` | `false` | | Keeps trailing action/icon space reserved even when currently empty. |
28
+ | `variant` | `InputVariantType \| undefined` | `"outline"` | | Visual variant of the field box. Controls colours only — background, border colour, focus border — while height, padding and border WIDTH stay identical across variants, so switching one never reflows a form. Mirrors the equally named `BbBu… |
28
29
 
29
30
  ## Events
30
31