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.
- package/README.md +55 -3
- package/bin/bitboss-ui-mcp.mjs +419 -9
- package/bin/bitboss-ui.mjs +293 -22
- package/dist/ai/BbAccordion.md +21 -23
- package/dist/ai/BbAlert.md +6 -12
- package/dist/ai/BbAvatar.md +60 -24
- package/dist/ai/BbBadge.md +12 -20
- package/dist/ai/BbBaseButton.md +14 -16
- package/dist/ai/BbBaseCheckboxIcon.md +6 -10
- package/dist/ai/BbBaseColorInput.md +1 -0
- package/dist/ai/BbBaseDatePickerInput.md +1 -0
- package/dist/ai/BbBaseNumberInput.md +1 -0
- package/dist/ai/BbBaseRadioIcon.md +6 -10
- package/dist/ai/BbBaseSelect.md +1 -0
- package/dist/ai/BbBaseSwitchIcon.md +5 -9
- package/dist/ai/BbBaseTag.md +1 -0
- package/dist/ai/BbBaseTextInput.md +2 -1
- package/dist/ai/BbBaseTextarea.md +1 -0
- package/dist/ai/BbBaseTimePickerInput.md +1 -0
- package/dist/ai/BbBreadcrumbs.md +23 -34
- package/dist/ai/BbButton.md +35 -47
- package/dist/ai/BbCheckbox.md +21 -37
- package/dist/ai/BbCheckboxGroup.md +13 -13
- package/dist/ai/BbCollapsible.md +14 -26
- package/dist/ai/BbColorInput.md +27 -23
- package/dist/ai/BbColorPalette.md +23 -35
- package/dist/ai/BbConfirm.md +17 -32
- package/dist/ai/BbDatePickerInput.md +29 -21
- package/dist/ai/BbDialog.md +159 -62
- package/dist/ai/BbDropdown.md +21 -25
- package/dist/ai/BbDropdownButton.md +13 -30
- package/dist/ai/BbDropzone.md +9 -11
- package/dist/ai/BbIcon.md +44 -33
- package/dist/ai/BbIndicator.md +2 -2
- package/dist/ai/BbNumberInput.md +32 -20
- package/dist/ai/BbOffCanvas.md +42 -42
- package/dist/ai/BbPagination.md +21 -23
- package/dist/ai/BbPopover.md +15 -17
- package/dist/ai/BbProgress.md +40 -51
- package/dist/ai/BbRadio.md +9 -9
- package/dist/ai/BbRadioGroup.md +7 -11
- package/dist/ai/BbRating.md +8 -12
- package/dist/ai/BbSelect.md +46 -36
- package/dist/ai/BbSelectPopover.md +19 -31
- package/dist/ai/BbSlider.md +15 -19
- package/dist/ai/BbSmoothHeight.md +16 -31
- package/dist/ai/BbSpinner.md +118 -74
- package/dist/ai/BbSwitch.md +25 -18
- package/dist/ai/BbSwitchGroup.md +9 -14
- package/dist/ai/BbTable.md +102 -55
- package/dist/ai/BbTabs.md +59 -82
- package/dist/ai/BbTag.md +26 -23
- package/dist/ai/BbTextInput.md +63 -27
- package/dist/ai/BbTextarea.md +42 -34
- package/dist/ai/BbTimePickerInput.md +14 -0
- package/dist/ai/BbToast.md +14 -34
- package/dist/ai/BbTooltip.md +22 -20
- package/dist/ai/BbTree.md +46 -72
- package/dist/ai/CommonInputWrapper.md +1 -0
- package/dist/ai/changelog.json +170 -62
- package/dist/ai/components.json +1678 -11
- package/dist/ai/composables/useConfirm.md +5 -2
- package/dist/ai/composables/useToast.md +4 -2
- package/dist/ai/guides/agent-contract.md +7 -4
- package/dist/ai/guides/ai-router.md +37 -22
- package/dist/ai/guides/component-picker.md +23 -18
- package/dist/ai/guides/design-language.md +151 -21
- package/dist/ai/guides/design-tokens.md +29 -4
- package/dist/ai/guides/icons-policy.md +46 -21
- package/dist/ai/guides/installation-and-plugin-setup.md +286 -17
- package/dist/ai/guides/migration/components/bb-rating.md +26 -1
- package/dist/ai/guides/migration/components/bb-tooltip.md +18 -0
- package/dist/ai/guides/migration/v2-to-v3.md +50 -23
- package/dist/ai/index.md +1 -1
- package/dist/ai/recipes/inertia/approvals-inbox.md +3 -3
- package/dist/ai/recipes/inertia/inline-edit-workspace.md +2 -2
- package/dist/ai/recipes/inertia/onboarding.md +2 -2
- package/dist/ai/recipes/inertia/ownership-atlas.md +6 -6
- package/dist/ai/recipes/inertia/record-form.md +5 -5
- package/dist/ai/recipes/inertia/records-workspace.md +4 -4
- package/dist/ai/recipes/inertia/upload-center.md +6 -6
- package/dist/ai/recipes/inertia/wizard-form.md +5 -5
- package/dist/ai/recipes/nuxt/approvals-inbox.md +3 -3
- package/dist/ai/recipes/nuxt/inline-edit-workspace.md +2 -2
- package/dist/ai/recipes/nuxt/onboarding.md +2 -2
- package/dist/ai/recipes/nuxt/record-form.md +5 -5
- package/dist/ai/recipes/nuxt/records-workspace.md +4 -4
- package/dist/ai/recipes/nuxt/upload-center.md +6 -6
- package/dist/ai/recipes/nuxt/wizard-form.md +5 -5
- package/dist/ai/recipes/vue/approvals-inbox.md +3 -3
- package/dist/ai/recipes/vue/inline-edit-workspace.md +2 -2
- package/dist/ai/recipes/vue/onboarding.md +2 -2
- package/dist/ai/recipes/vue/record-form.md +10 -10
- package/dist/ai/recipes/vue/records-workspace.md +4 -4
- package/dist/ai/recipes/vue/upload-center.md +6 -6
- package/dist/ai/recipes/vue/wizard-form.md +5 -5
- package/dist/ai/source/BbBadge.md +1 -1
- package/dist/ai/source/BbBaseCheckbox.md +1 -1
- package/dist/ai/source/BbBaseColorInput.md +7 -0
- package/dist/ai/source/BbBaseDatePicker.md +5 -5
- package/dist/ai/source/BbBaseDatePickerInput.md +9 -2
- package/dist/ai/source/BbBaseNumberInput.md +7 -0
- package/dist/ai/source/BbBaseRadio.md +1 -1
- package/dist/ai/source/BbBaseRating.md +5 -5
- package/dist/ai/source/BbBaseSelect.md +8 -1
- package/dist/ai/source/BbBaseSlider.md +5 -5
- package/dist/ai/source/BbBaseSwitch.md +1 -1
- package/dist/ai/source/BbBaseTag.md +7 -0
- package/dist/ai/source/BbBaseTextInput.md +7 -0
- package/dist/ai/source/BbBaseTextarea.md +7 -0
- package/dist/ai/source/BbBaseTimePickerInput.md +8 -1
- package/dist/ai/source/BbBreadcrumbs.md +20 -1
- package/dist/ai/source/BbButton.md +2 -2
- package/dist/ai/source/BbColorInput.md +14 -0
- package/dist/ai/source/BbDatePickerInput.md +14 -0
- package/dist/ai/source/BbDialog.md +39 -8
- package/dist/ai/source/BbDropdown.md +1 -1
- package/dist/ai/source/BbDropzone.md +5 -5
- package/dist/ai/source/BbIcon.md +23 -10
- package/dist/ai/source/BbNumberInput.md +14 -0
- package/dist/ai/source/BbOffCanvas.md +50 -28
- package/dist/ai/source/BbPagination.md +2 -2
- package/dist/ai/source/BbPopover.md +12 -1
- package/dist/ai/source/BbSelect.md +14 -0
- package/dist/ai/source/BbSelectPopover.md +45 -7
- package/dist/ai/source/BbSpinner.md +2 -2
- package/dist/ai/source/BbTable.md +11 -11
- package/dist/ai/source/BbTag.md +14 -0
- package/dist/ai/source/BbTextInput.md +14 -0
- package/dist/ai/source/BbTextarea.md +14 -0
- package/dist/ai/source/BbTimePickerInput.md +14 -0
- package/dist/ai/source/BbTooltip.md +57 -10
- package/dist/ai/source/ChipsBox.md +1 -1
- package/dist/ai/source/CommaBox.md +1 -1
- package/dist/ai/source/CommonInputWrapper.md +128 -33
- package/dist/ai/source/GuidesComponent.md +14 -7
- package/dist/ai/source/OptionsContainer.md +1 -1
- package/dist/components/BbBadge/BadgeBodyContent.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/BbBadge/BbBadge.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/BbBaseCheckbox/BbBaseCheckbox.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/BbBaseColorInput/BbBaseColorInput.vue_vue_type_script_setup_true_lang.js +4 -1
- package/dist/components/BbBaseColorInput/types.d.ts +5 -0
- package/dist/components/BbBaseDatePicker/BbBaseDatePicker.vue_vue_type_script_setup_true_lang.js +4 -4
- package/dist/components/BbBaseDatePicker/BbBaseDatePickerInputDaySelector.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerInput.vue_vue_type_script_setup_true_lang.js +5 -2
- package/dist/components/BbBaseDatePickerInput/types.d.ts +5 -0
- package/dist/components/BbBaseInputContainer/BbBaseInputContainer.vue.d.ts +1 -1
- package/dist/components/BbBaseNumberInput/BbBaseNumberInput.vue_vue_type_script_setup_true_lang.js +4 -1
- package/dist/components/BbBaseNumberInput/types.d.ts +5 -0
- package/dist/components/BbBaseRadio/BbBaseRadio.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/BbBaseRating/BbBaseRating.vue_vue_type_script_setup_true_lang.js +3 -3
- package/dist/components/BbBaseSelect/BbBaseSelect.vue_vue_type_script_setup_true_lang.js +4 -1
- package/dist/components/BbBaseSelect/types.d.ts +5 -0
- package/dist/components/BbBaseSlider/BbBaseSlider.vue_vue_type_script_setup_true_lang.js +3 -3
- package/dist/components/BbBaseSwitch/BbBaseSwitch.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/BbBaseTag/BbBaseTag.vue_vue_type_script_setup_true_lang.js +4 -1
- package/dist/components/BbBaseTag/types.d.ts +5 -0
- package/dist/components/BbBaseTextInput/BbBaseTextInput.vue_vue_type_script_setup_true_lang.js +4 -1
- package/dist/components/BbBaseTextInput/types.d.ts +5 -0
- package/dist/components/BbBaseTextarea/BbBaseTextarea.vue_vue_type_script_setup_true_lang.js +4 -1
- package/dist/components/BbBaseTextarea/types.d.ts +5 -0
- package/dist/components/BbBaseTimePickerInput/BbBaseTimePickerInput.vue_vue_type_script_setup_true_lang.js +5 -2
- package/dist/components/BbBaseTimePickerInput/types.d.ts +5 -0
- package/dist/components/BbBreadcrumbs/BbBreadcrumbs.vue_vue_type_script_setup_true_lang.js +71 -71
- package/dist/components/BbButton/BbButton.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/components/BbColorInput/BbColorInput.vue_vue_type_script_setup_true_lang.js +5 -2
- package/dist/components/BbColorInput/types.d.ts +12 -0
- package/dist/components/BbDatePickerInput/BbDatePickerInput.vue_vue_type_script_setup_true_lang.js +4 -2
- package/dist/components/BbDatePickerInput/types.d.ts +12 -0
- package/dist/components/BbDialog/BbDialog.vue_vue_type_script_setup_true_lang.js +102 -97
- package/dist/components/BbDropdown/AdaptiveDropdown.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/BbDropdown/BbDropdown.vue_vue_type_script_setup_true_lang.js +58 -58
- package/dist/components/BbDropzone/BbDropzone.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/components/BbIcon/BbIcon.vue_vue_type_script_setup_true_lang.js +33 -35
- package/dist/components/BbIcon/iconCache.d.ts +30 -0
- package/dist/components/BbIcon/iconCache.js +21 -3
- package/dist/components/BbNumberInput/BbNumberInput.vue_vue_type_script_setup_true_lang.js +5 -2
- package/dist/components/BbNumberInput/types.d.ts +12 -0
- package/dist/components/BbOffCanvas/BbOffCanvas.vue_vue_type_script_setup_true_lang.js +57 -56
- package/dist/components/BbPagination/BbPagination.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/components/BbPopover/BbPopover.vue_vue_type_script_setup_true_lang.js +138 -138
- package/dist/components/BbSelect/BbSelect.vue_vue_type_script_setup_true_lang.js +4 -2
- package/dist/components/BbSelect/types.d.ts +12 -0
- package/dist/components/BbSelectPopover/BbSelectPopover.vue_vue_type_script_setup_true_lang.js +43 -43
- package/dist/components/BbSpinner/BbSpinner.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/BbSpinner/types.d.ts +1 -1
- package/dist/components/BbTable/BbTable.vue_vue_type_script_setup_true_lang.js +8 -8
- package/dist/components/BbTable/BbTableDataRow.js +2 -2
- package/dist/components/BbTag/BbTag.vue_vue_type_script_setup_true_lang.js +5 -2
- package/dist/components/BbTag/types.d.ts +12 -0
- package/dist/components/BbTextInput/BbTextInput.vue_vue_type_script_setup_true_lang.js +5 -2
- package/dist/components/BbTextInput/types.d.ts +12 -0
- package/dist/components/BbTextarea/BbTextarea.vue_vue_type_script_setup_true_lang.js +5 -2
- package/dist/components/BbTextarea/types.d.ts +12 -0
- package/dist/components/BbTimePickerInput/BbTimePickerInput.vue_vue_type_script_setup_true_lang.js +4 -2
- package/dist/components/BbTimePickerInput/types.d.ts +12 -0
- package/dist/components/BbToast/BbToastRegion.vue_vue_type_script_setup_true_lang.js +62 -62
- package/dist/components/BbTooltip/BbTooltip.vue_vue_type_script_setup_true_lang.js +81 -78
- package/dist/components/BbTooltip/types.d.ts +8 -1
- package/dist/components/ChipsBox/ChipsBox.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/CommaBox/CommaBox.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/CommonInputWrapper/CommonInputWrapper.vue.d.ts +1 -0
- package/dist/components/CommonInputWrapper/CommonInputWrapper.vue_vue_type_script_setup_true_lang.js +4 -2
- package/dist/components/CommonInputWrapper/types.d.ts +10 -0
- package/dist/components/OptionsContainer/OptionsContainer.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/composables/useConfirm.d.ts +22 -0
- package/dist/composables/useConfirm.js +43 -40
- package/dist/composables/useSafeAreaInternal.js +1 -1
- package/dist/composables/useToast.d.ts +16 -0
- package/dist/composables/useToast.js +20 -16
- package/dist/composables/useViewportWidth.d.ts +20 -6
- package/dist/composables/useViewportWidth.js +8 -7
- package/dist/icon-scan.d.ts +276 -0
- package/dist/icon-scan.js +485 -0
- package/dist/icons-whitelist.d.ts +5 -4
- package/dist/index.d.ts +2 -0
- package/dist/input-variants.d.ts +18 -0
- package/dist/llms-full.txt +2173 -1537
- package/dist/llms-medium.txt +504 -82
- package/dist/llms.txt +1 -1
- package/dist/nuxt-module.d.ts +1 -0
- package/dist/nuxt.js +10 -7
- package/dist/plugin.js +1 -0
- package/dist/runtime/nuxt-plugin.js +2 -1
- package/dist/styles.css +1 -1
- package/dist/types/Config.d.ts +18 -0
- package/dist/types/InputVariant.d.ts +22 -0
- package/dist/utils/cssLayers.d.ts +91 -0
- package/dist/utils/cssLayers.js +43 -0
- package/dist/utils/injectLibraryStyles.d.ts +3 -1
- package/dist/utils/injectLibraryStyles.js +24 -23
- package/dist/validated/BbColorInput.vue_vue_type_script_setup_true_lang.js +1 -0
- package/dist/validated/BbDatePickerInput.vue_vue_type_script_setup_true_lang.js +1 -0
- package/dist/validated/BbNumberInput.vue_vue_type_script_setup_true_lang.js +1 -0
- package/dist/validated/BbSelect.vue_vue_type_script_setup_true_lang.js +1 -0
- package/dist/validated/BbTag.vue_vue_type_script_setup_true_lang.js +1 -0
- package/dist/validated/BbTextInput.vue_vue_type_script_setup_true_lang.js +1 -0
- package/dist/validated/BbTextarea.vue_vue_type_script_setup_true_lang.js +1 -0
- package/dist/validated/BbTimePickerInput.vue_vue_type_script_setup_true_lang.js +1 -0
- package/dist/validated/index.d.ts +1 -0
- package/dist/vite-plugin.d.ts +89 -12
- package/dist/vite.js +331 -281
- package/llms.txt +1 -1
- package/package.json +7 -5
- package/scripts/lib/ensure-manifest.mjs +28 -5
- package/scripts/lib/eslint-plugin.d.ts +35 -0
- package/scripts/lib/eslint-plugin.mjs +299 -3
- package/scripts/lib/hand-roll-hints.mjs +50 -6
- package/scripts/lib/html-attributes.mjs +42 -0
- package/scripts/lib/mcp-config.mjs +38 -34
- package/scripts/lib/public-type-exports.mjs +246 -0
- package/scripts/lib/validate-bb-markup.mjs +205 -12
package/dist/ai/BbTabs.md
CHANGED
|
@@ -45,12 +45,10 @@ in one component.
|
|
|
45
45
|
|
|
46
46
|
```vue
|
|
47
47
|
<template>
|
|
48
|
-
<div
|
|
49
|
-
class="max-w-md rounded-[var(--bb-radius)] border border-[color:var(--bb-border)] p-3"
|
|
50
|
-
>
|
|
48
|
+
<div class="max-w-md rounded-(--bb-radius) border border-(--bb-border) p-3">
|
|
51
49
|
<div class="mb-3 flex flex-col gap-0.5">
|
|
52
50
|
<p class="text-sm font-medium">Acme Checkout</p>
|
|
53
|
-
<p class="text-xs text-
|
|
51
|
+
<p class="text-xs text-(--bb-text-muted)">
|
|
54
52
|
Project · last deploy 14m ago
|
|
55
53
|
</p>
|
|
56
54
|
</div>
|
|
@@ -58,34 +56,34 @@ in one component.
|
|
|
58
56
|
<template #overview>
|
|
59
57
|
<div class="grid gap-1.5 pt-3 text-sm">
|
|
60
58
|
<p class="font-medium">Health: stable</p>
|
|
61
|
-
<p class="text-xs text-
|
|
59
|
+
<p class="text-xs text-(--bb-text-muted)">
|
|
62
60
|
Error rate 0.12% · p95 180ms · 3 open incidents
|
|
63
61
|
</p>
|
|
64
62
|
</div>
|
|
65
63
|
</template>
|
|
66
64
|
<template #activity>
|
|
67
|
-
<ul class="divide-y divide-
|
|
65
|
+
<ul class="divide-y divide-(--bb-border) pt-3">
|
|
68
66
|
<li
|
|
69
67
|
v-for="event in activity"
|
|
70
68
|
:key="event.id"
|
|
71
69
|
class="flex flex-col gap-0.5 py-2"
|
|
72
70
|
>
|
|
73
71
|
<p class="text-sm">{{ event.text }}</p>
|
|
74
|
-
<p class="text-xs text-
|
|
72
|
+
<p class="text-xs text-(--bb-text-muted)">
|
|
75
73
|
{{ event.when }}
|
|
76
74
|
</p>
|
|
77
75
|
</li>
|
|
78
76
|
</ul>
|
|
79
77
|
</template>
|
|
80
78
|
<template #members>
|
|
81
|
-
<ul class="divide-y divide-
|
|
79
|
+
<ul class="divide-y divide-(--bb-border) pt-3">
|
|
82
80
|
<li
|
|
83
81
|
v-for="member in members"
|
|
84
82
|
:key="member.email"
|
|
85
83
|
class="flex items-center justify-between gap-2 py-2 text-sm"
|
|
86
84
|
>
|
|
87
85
|
<span class="truncate">{{ member.name }}</span>
|
|
88
|
-
<span class="shrink-0 text-xs text-
|
|
86
|
+
<span class="shrink-0 text-xs text-(--bb-text-muted)">{{
|
|
89
87
|
member.role
|
|
90
88
|
}}</span>
|
|
91
89
|
</li>
|
|
@@ -136,9 +134,7 @@ dynamic-name slot instead of writing one block per key:
|
|
|
136
134
|
**Dynamic pane slots from generated items**
|
|
137
135
|
|
|
138
136
|
```vue
|
|
139
|
-
<div
|
|
140
|
-
class="max-w-md rounded-[var(--bb-radius)] border border-[color:var(--bb-border)] p-3"
|
|
141
|
-
>
|
|
137
|
+
<div class="max-w-md rounded-(--bb-radius) border border-(--bb-border) p-3">
|
|
142
138
|
<BbTabs
|
|
143
139
|
compact
|
|
144
140
|
:items="[
|
|
@@ -152,7 +148,7 @@ dynamic-name slot instead of writing one block per key:
|
|
|
152
148
|
:key="stage"
|
|
153
149
|
#[stage]
|
|
154
150
|
>
|
|
155
|
-
<p class="pt-3 text-sm capitalize text-
|
|
151
|
+
<p class="pt-3 text-sm capitalize text-(--bb-text-muted)">{{ stage }} documents.</p>
|
|
156
152
|
</template>
|
|
157
153
|
</BbTabs>
|
|
158
154
|
</div>
|
|
@@ -172,9 +168,7 @@ button or link inside a label — the trigger is already the control).
|
|
|
172
168
|
|
|
173
169
|
```vue
|
|
174
170
|
<template>
|
|
175
|
-
<div
|
|
176
|
-
class="max-w-md rounded-[var(--bb-radius)] border border-[color:var(--bb-border)] p-3"
|
|
177
|
-
>
|
|
171
|
+
<div class="max-w-md rounded-(--bb-radius) border border-(--bb-border) p-3">
|
|
178
172
|
<BbTabs v-model="active" compact :items="tabs">
|
|
179
173
|
<template #label:inbox="{ text }">
|
|
180
174
|
<span class="inline-flex items-center gap-1.5">
|
|
@@ -183,26 +177,26 @@ button or link inside a label — the trigger is already the control).
|
|
|
183
177
|
</span>
|
|
184
178
|
</template>
|
|
185
179
|
<template #inbox>
|
|
186
|
-
<ul class="divide-y divide-
|
|
180
|
+
<ul class="divide-y divide-(--bb-border) pt-3">
|
|
187
181
|
<li
|
|
188
182
|
v-for="thread in inbox"
|
|
189
183
|
:key="thread.id"
|
|
190
184
|
class="flex flex-col gap-0.5 py-2"
|
|
191
185
|
>
|
|
192
186
|
<p class="text-sm font-medium">{{ thread.subject }}</p>
|
|
193
|
-
<p class="text-xs text-
|
|
187
|
+
<p class="text-xs text-(--bb-text-muted)">
|
|
194
188
|
{{ thread.from }} · {{ thread.when }}
|
|
195
189
|
</p>
|
|
196
190
|
</li>
|
|
197
191
|
</ul>
|
|
198
192
|
</template>
|
|
199
193
|
<template #sent>
|
|
200
|
-
<p class="pt-3 text-sm text-
|
|
194
|
+
<p class="pt-3 text-sm text-(--bb-text-muted)">
|
|
201
195
|
12 messages sent this week.
|
|
202
196
|
</p>
|
|
203
197
|
</template>
|
|
204
198
|
<template #spam>
|
|
205
|
-
<p class="pt-3 text-sm text-
|
|
199
|
+
<p class="pt-3 text-sm text-(--bb-text-muted)">
|
|
206
200
|
3 filtered messages · last scan 2h ago.
|
|
207
201
|
</p>
|
|
208
202
|
</template>
|
|
@@ -290,12 +284,10 @@ the Audience and Schedule tabs:
|
|
|
290
284
|
|
|
291
285
|
```vue
|
|
292
286
|
<template>
|
|
293
|
-
<div
|
|
294
|
-
class="max-w-md rounded-[var(--bb-radius)] border border-[color:var(--bb-border)] p-3"
|
|
295
|
-
>
|
|
287
|
+
<div class="max-w-md rounded-(--bb-radius) border border-(--bb-border) p-3">
|
|
296
288
|
<div class="mb-3 flex flex-col gap-0.5">
|
|
297
289
|
<p class="text-sm font-medium">Product announcement</p>
|
|
298
|
-
<p class="text-xs text-
|
|
290
|
+
<p class="text-xs text-(--bb-text-muted)">
|
|
299
291
|
Draft · scheduled for Tue 09:00 local
|
|
300
292
|
</p>
|
|
301
293
|
</div>
|
|
@@ -320,7 +312,7 @@ the Audience and Schedule tabs:
|
|
|
320
312
|
</div>
|
|
321
313
|
</template>
|
|
322
314
|
<template #audience>
|
|
323
|
-
<p class="pt-3 text-sm text-
|
|
315
|
+
<p class="pt-3 text-sm text-(--bb-text-muted)">
|
|
324
316
|
Sending to
|
|
325
317
|
<span class="font-medium tabular-nums">{{
|
|
326
318
|
recipients.toLocaleString()
|
|
@@ -329,7 +321,7 @@ the Audience and Schedule tabs:
|
|
|
329
321
|
</p>
|
|
330
322
|
</template>
|
|
331
323
|
<template #schedule>
|
|
332
|
-
<p class="pt-3 text-sm text-
|
|
324
|
+
<p class="pt-3 text-sm text-(--bb-text-muted)">
|
|
333
325
|
Queued for Tuesday 09:00 in each recipient's local timezone.
|
|
334
326
|
</p>
|
|
335
327
|
</template>
|
|
@@ -379,12 +371,10 @@ nothing when you flip back:
|
|
|
379
371
|
|
|
380
372
|
```vue
|
|
381
373
|
<template>
|
|
382
|
-
<div
|
|
383
|
-
class="max-w-md rounded-[var(--bb-radius)] border border-[color:var(--bb-border)] p-3"
|
|
384
|
-
>
|
|
374
|
+
<div class="max-w-md rounded-(--bb-radius) border border-(--bb-border) p-3">
|
|
385
375
|
<div class="mb-3 flex flex-col gap-0.5">
|
|
386
376
|
<p class="text-sm font-medium">Release notes</p>
|
|
387
|
-
<p class="text-xs text-
|
|
377
|
+
<p class="text-xs text-(--bb-text-muted)">
|
|
388
378
|
Markdown draft · preview before publishing.
|
|
389
379
|
</p>
|
|
390
380
|
</div>
|
|
@@ -405,14 +395,12 @@ nothing when you flip back:
|
|
|
405
395
|
</div>
|
|
406
396
|
</template>
|
|
407
397
|
<template #preview>
|
|
408
|
-
<div class="grid gap-1.5
|
|
398
|
+
<div class="grid gap-1.5 pt-3 text-sm whitespace-pre-line">
|
|
409
399
|
<template v-if="draft.trim()">
|
|
410
400
|
<p class="font-medium">{{ previewTitle }}</p>
|
|
411
|
-
<p class="text-
|
|
401
|
+
<p class="text-(--bb-text-muted)">{{ previewBody }}</p>
|
|
412
402
|
</template>
|
|
413
|
-
<p v-else class="text-
|
|
414
|
-
Nothing to preview.
|
|
415
|
-
</p>
|
|
403
|
+
<p v-else class="text-(--bb-text-muted)">Nothing to preview.</p>
|
|
416
404
|
</div>
|
|
417
405
|
</template>
|
|
418
406
|
</BbTabs>
|
|
@@ -470,12 +458,10 @@ active section stays in the URL without flooding Back history:
|
|
|
470
458
|
|
|
471
459
|
```vue
|
|
472
460
|
<template>
|
|
473
|
-
<div
|
|
474
|
-
class="max-w-md rounded-[var(--bb-radius)] border border-[color:var(--bb-border)] p-3"
|
|
475
|
-
>
|
|
461
|
+
<div class="max-w-md rounded-(--bb-radius) border border-(--bb-border) p-3">
|
|
476
462
|
<div class="mb-3 flex flex-col gap-0.5">
|
|
477
463
|
<p class="text-sm font-medium">Workspace settings</p>
|
|
478
|
-
<p class="text-xs text-
|
|
464
|
+
<p class="text-xs text-(--bb-text-muted)">
|
|
479
465
|
Northwind Billing · changes save per section.
|
|
480
466
|
</p>
|
|
481
467
|
</div>
|
|
@@ -511,7 +497,7 @@ active section stays in the URL without flooding Back history:
|
|
|
511
497
|
</div>
|
|
512
498
|
</template>
|
|
513
499
|
<template #members>
|
|
514
|
-
<ul class="divide-y divide-
|
|
500
|
+
<ul class="divide-y divide-(--bb-border) pt-3">
|
|
515
501
|
<li
|
|
516
502
|
v-for="member in members"
|
|
517
503
|
:key="member.email"
|
|
@@ -519,11 +505,11 @@ active section stays in the URL without flooding Back history:
|
|
|
519
505
|
>
|
|
520
506
|
<span class="min-w-0 truncate">
|
|
521
507
|
<span class="font-medium">{{ member.name }}</span>
|
|
522
|
-
<span class="text-xs text-
|
|
508
|
+
<span class="text-xs text-(--bb-text-muted)">
|
|
523
509
|
· {{ member.email }}</span
|
|
524
510
|
>
|
|
525
511
|
</span>
|
|
526
|
-
<span class="shrink-0 text-xs text-
|
|
512
|
+
<span class="shrink-0 text-xs text-(--bb-text-muted)">{{
|
|
527
513
|
member.role
|
|
528
514
|
}}</span>
|
|
529
515
|
</li>
|
|
@@ -532,7 +518,7 @@ active section stays in the URL without flooding Back history:
|
|
|
532
518
|
<template #billing>
|
|
533
519
|
<div class="grid gap-1.5 pt-3">
|
|
534
520
|
<p class="text-sm font-medium">Pro · €49 / month</p>
|
|
535
|
-
<p class="text-xs text-
|
|
521
|
+
<p class="text-xs text-(--bb-text-muted)">
|
|
536
522
|
Next invoice Jul 28, 2026 · Visa ···· 4242
|
|
537
523
|
</p>
|
|
538
524
|
<div class="pt-1">
|
|
@@ -577,9 +563,7 @@ const onSaveGeneral = async () => {
|
|
|
577
563
|
**Full-width strip with a disabled tab**
|
|
578
564
|
|
|
579
565
|
```vue
|
|
580
|
-
<div
|
|
581
|
-
class="max-w-md rounded-[var(--bb-radius)] border border-[color:var(--bb-border)] p-3"
|
|
582
|
-
>
|
|
566
|
+
<div class="max-w-md rounded-(--bb-radius) border border-(--bb-border) p-3">
|
|
583
567
|
<BbTabs
|
|
584
568
|
block
|
|
585
569
|
compact
|
|
@@ -589,9 +573,9 @@ const onSaveGeneral = async () => {
|
|
|
589
573
|
{ key: 'billing', label: 'Billing', disabled: true },
|
|
590
574
|
]"
|
|
591
575
|
>
|
|
592
|
-
<template #summary><p class="pt-3 text-sm text-
|
|
593
|
-
<template #integrations><p class="pt-3 text-sm text-
|
|
594
|
-
<template #billing><p class="pt-3 text-sm text-
|
|
576
|
+
<template #summary><p class="pt-3 text-sm text-(--bb-text-muted)">Environment status at a glance.</p></template>
|
|
577
|
+
<template #integrations><p class="pt-3 text-sm text-(--bb-text-muted)">Connected services.</p></template>
|
|
578
|
+
<template #billing><p class="pt-3 text-sm text-(--bb-text-muted)">Locked on this plan.</p></template>
|
|
595
579
|
</BbTabs>
|
|
596
580
|
</div>
|
|
597
581
|
```
|
|
@@ -599,9 +583,7 @@ const onSaveGeneral = async () => {
|
|
|
599
583
|
**Vertical, compact strip**
|
|
600
584
|
|
|
601
585
|
```vue
|
|
602
|
-
<div
|
|
603
|
-
class="max-w-md rounded-[var(--bb-radius)] border border-[color:var(--bb-border)] p-3"
|
|
604
|
-
>
|
|
586
|
+
<div class="max-w-md rounded-(--bb-radius) border border-(--bb-border) p-3">
|
|
605
587
|
<BbTabs
|
|
606
588
|
compact
|
|
607
589
|
direction="vertical"
|
|
@@ -611,9 +593,9 @@ const onSaveGeneral = async () => {
|
|
|
611
593
|
{ key: 'api', label: 'API keys' },
|
|
612
594
|
]"
|
|
613
595
|
>
|
|
614
|
-
<template #general><p class="px-3 text-sm text-
|
|
615
|
-
<template #security><p class="px-3 text-sm text-
|
|
616
|
-
<template #api><p class="px-3 text-sm text-
|
|
596
|
+
<template #general><p class="px-3 text-sm text-(--bb-text-muted)">Workspace basics.</p></template>
|
|
597
|
+
<template #security><p class="px-3 text-sm text-(--bb-text-muted)">Sessions and 2FA.</p></template>
|
|
598
|
+
<template #api><p class="px-3 text-sm text-(--bb-text-muted)">Personal access tokens.</p></template>
|
|
617
599
|
</BbTabs>
|
|
618
600
|
</div>
|
|
619
601
|
```
|
|
@@ -640,12 +622,10 @@ ends.
|
|
|
640
622
|
|
|
641
623
|
```vue
|
|
642
624
|
<template>
|
|
643
|
-
<div
|
|
644
|
-
class="max-w-md rounded-[var(--bb-radius)] border border-[color:var(--bb-border)] p-3"
|
|
645
|
-
>
|
|
625
|
+
<div class="max-w-md rounded-(--bb-radius) border border-(--bb-border) p-3">
|
|
646
626
|
<div class="mb-3 flex flex-col gap-0.5">
|
|
647
627
|
<p class="text-sm font-medium">Release timeline</p>
|
|
648
|
-
<p class="text-xs text-
|
|
628
|
+
<p class="text-xs text-(--bb-text-muted)">
|
|
649
629
|
Monthly notes · scroll arrows when the strip overflows.
|
|
650
630
|
</p>
|
|
651
631
|
</div>
|
|
@@ -674,17 +654,17 @@ ends.
|
|
|
674
654
|
</template>
|
|
675
655
|
<!--
|
|
676
656
|
`slotKey(...)`, never the raw key. A pane's slot name is the
|
|
677
|
-
NORMALIZED key
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
657
|
+
NORMALIZED key: `v3.0` becomes `v3_0`, so `#[release.key]` would
|
|
658
|
+
name a slot that never matches and every pane would silently render
|
|
659
|
+
empty. The keys here carry a dot on purpose — with slug-safe keys
|
|
660
|
+
(`v1`…`v9`) the mistake is invisible.
|
|
681
661
|
-->
|
|
682
662
|
<template
|
|
683
663
|
v-for="release in releases"
|
|
684
664
|
:key="release.key"
|
|
685
665
|
#[slotKey(release.key)]
|
|
686
666
|
>
|
|
687
|
-
<p class="pt-3 text-sm text-
|
|
667
|
+
<p class="pt-3 text-sm text-(--bb-text-muted)">
|
|
688
668
|
{{ release.label }} shipped the design-token overhaul and the tabs
|
|
689
669
|
keyboard-navigation pass.
|
|
690
670
|
</p>
|
|
@@ -711,12 +691,14 @@ const months = [
|
|
|
711
691
|
'August',
|
|
712
692
|
'September',
|
|
713
693
|
];
|
|
694
|
+
// Realistic release tags: `v3.0` … `v3.8`. The dot is what makes the
|
|
695
|
+
// `slotKey` call in the template load-bearing (see the note there).
|
|
714
696
|
const releases: BbTabsItem[] = months.map((label, index) => ({
|
|
715
|
-
key: `
|
|
716
|
-
label: `${label}
|
|
697
|
+
key: `v3.${index}`,
|
|
698
|
+
label: `${label} · v3.${index}`,
|
|
717
699
|
}));
|
|
718
700
|
|
|
719
|
-
const active = ref('
|
|
701
|
+
const active = ref('v3.0');
|
|
720
702
|
</script>
|
|
721
703
|
```
|
|
722
704
|
|
|
@@ -743,12 +725,10 @@ context; use nesting freely.
|
|
|
743
725
|
|
|
744
726
|
```vue
|
|
745
727
|
<template>
|
|
746
|
-
<div
|
|
747
|
-
class="max-w-md rounded-[var(--bb-radius)] border border-[color:var(--bb-border)] p-3"
|
|
748
|
-
>
|
|
728
|
+
<div class="max-w-md rounded-(--bb-radius) border border-(--bb-border) p-3">
|
|
749
729
|
<div class="mb-3 flex flex-col gap-0.5">
|
|
750
730
|
<p class="text-sm font-medium">Acme Checkout</p>
|
|
751
|
-
<p class="text-xs text-
|
|
731
|
+
<p class="text-xs text-(--bb-text-muted)">
|
|
752
732
|
Workspace · Prev/Next via root slot
|
|
753
733
|
</p>
|
|
754
734
|
</div>
|
|
@@ -775,21 +755,21 @@ context; use nesting freely.
|
|
|
775
755
|
</BbButton>
|
|
776
756
|
</div>
|
|
777
757
|
</div>
|
|
778
|
-
<hr class="my-3 border-
|
|
758
|
+
<hr class="my-3 border-(--bb-border)" />
|
|
779
759
|
<BbTabsPanes>
|
|
780
760
|
<template #overview>
|
|
781
|
-
<p class="text-sm text-
|
|
761
|
+
<p class="text-sm text-(--bb-text-muted)">
|
|
782
762
|
Health stable · owners Alex + Sam · objective: cut checkout
|
|
783
763
|
latency 20%.
|
|
784
764
|
</p>
|
|
785
765
|
</template>
|
|
786
766
|
<template #activity>
|
|
787
|
-
<p class="text-sm text-
|
|
767
|
+
<p class="text-sm text-(--bb-text-muted)">
|
|
788
768
|
Shipped billing retries; fixed avatar upload timeout.
|
|
789
769
|
</p>
|
|
790
770
|
</template>
|
|
791
771
|
<template #members>
|
|
792
|
-
<p class="text-sm text-
|
|
772
|
+
<p class="text-sm text-(--bb-text-muted)">
|
|
793
773
|
14 editors, 23 viewers, 3 billing admins.
|
|
794
774
|
</p>
|
|
795
775
|
</template>
|
|
@@ -852,7 +832,7 @@ the tabs jumps straight to the Security section:
|
|
|
852
832
|
```vue
|
|
853
833
|
<template>
|
|
854
834
|
<div
|
|
855
|
-
class="max-w-md space-y-3 rounded-
|
|
835
|
+
class="max-w-md space-y-3 rounded-(--bb-radius) border border-(--bb-border) p-3"
|
|
856
836
|
>
|
|
857
837
|
<div class="grid gap-2">
|
|
858
838
|
<BbAlert
|
|
@@ -899,7 +879,7 @@ the tabs jumps straight to the Security section:
|
|
|
899
879
|
<template #security>
|
|
900
880
|
<div class="grid gap-1.5 pt-3 text-sm">
|
|
901
881
|
<p class="font-medium">Two-factor authentication</p>
|
|
902
|
-
<p class="text-xs text-
|
|
882
|
+
<p class="text-xs text-(--bb-text-muted)">
|
|
903
883
|
Off · last password change Mar 12, 2026 · 2 active sessions
|
|
904
884
|
</p>
|
|
905
885
|
<div class="pt-1">
|
|
@@ -910,15 +890,12 @@ the tabs jumps straight to the Security section:
|
|
|
910
890
|
</div>
|
|
911
891
|
</template>
|
|
912
892
|
<template #notifications>
|
|
913
|
-
<p class="pt-3 text-sm text-
|
|
893
|
+
<p class="pt-3 text-sm text-(--bb-text-muted)">
|
|
914
894
|
Email digests and mention alerts for alex@northwind.io.
|
|
915
895
|
</p>
|
|
916
896
|
</template>
|
|
917
897
|
</BbTabs>
|
|
918
|
-
<p
|
|
919
|
-
class="text-xs text-[color:var(--bb-text-muted)]"
|
|
920
|
-
data-test="active-section"
|
|
921
|
-
>
|
|
898
|
+
<p class="text-xs text-(--bb-text-muted)" data-test="active-section">
|
|
922
899
|
Active section: {{ current }}
|
|
923
900
|
</p>
|
|
924
901
|
</div>
|
package/dist/ai/BbTag.md
CHANGED
|
@@ -55,12 +55,10 @@ for the next.
|
|
|
55
55
|
|
|
56
56
|
```vue
|
|
57
57
|
<template>
|
|
58
|
-
<div
|
|
59
|
-
class="flex max-w-md flex-col gap-2 rounded-[var(--bb-radius)] border p-3"
|
|
60
|
-
>
|
|
58
|
+
<div class="flex max-w-md flex-col gap-2 rounded-(--bb-radius) border p-3">
|
|
61
59
|
<div class="flex flex-col gap-0.5">
|
|
62
60
|
<span class="text-sm font-medium">Profile · Skills</span>
|
|
63
|
-
<span class="text-xs text-
|
|
61
|
+
<span class="text-xs text-(--bb-text-muted)">
|
|
64
62
|
Shown on your public profile and in search
|
|
65
63
|
</span>
|
|
66
64
|
</div>
|
|
@@ -74,7 +72,7 @@ for the next.
|
|
|
74
72
|
persistent-hint
|
|
75
73
|
placeholder="Add a skill…"
|
|
76
74
|
/>
|
|
77
|
-
<p class="text-xs text-
|
|
75
|
+
<p class="text-xs text-(--bb-text-muted)" data-testid="count">
|
|
78
76
|
{{ skills.length }} skill{{ skills.length === 1 ? '' : 's' }} shown on
|
|
79
77
|
your profile
|
|
80
78
|
</p>
|
|
@@ -105,12 +103,10 @@ up to the first delimiter.
|
|
|
105
103
|
|
|
106
104
|
```vue
|
|
107
105
|
<template>
|
|
108
|
-
<div
|
|
109
|
-
class="flex max-w-sm flex-col gap-2 rounded-[var(--bb-radius)] border p-3"
|
|
110
|
-
>
|
|
106
|
+
<div class="flex max-w-sm flex-col gap-2 rounded-(--bb-radius) border p-3">
|
|
111
107
|
<div class="flex flex-col gap-0.5">
|
|
112
108
|
<span class="text-sm font-medium">Issue #4821</span>
|
|
113
|
-
<span class="text-xs text-
|
|
109
|
+
<span class="text-xs text-(--bb-text-muted)"
|
|
114
110
|
>bitboss-ui · triage labels</span
|
|
115
111
|
>
|
|
116
112
|
</div>
|
|
@@ -124,7 +120,7 @@ up to the first delimiter.
|
|
|
124
120
|
persistent-hint
|
|
125
121
|
placeholder="bug, regression, breaking-change…"
|
|
126
122
|
/>
|
|
127
|
-
<p class="text-xs text-
|
|
123
|
+
<p class="text-xs text-(--bb-text-muted)" data-testid="labels">
|
|
128
124
|
{{ labels.join(' · ') || 'No labels yet' }}
|
|
129
125
|
</p>
|
|
130
126
|
</div>
|
|
@@ -168,12 +164,10 @@ when a remaining allowance hits the floor), not “unlimited”.
|
|
|
168
164
|
|
|
169
165
|
```vue
|
|
170
166
|
<template>
|
|
171
|
-
<div
|
|
172
|
-
class="flex max-w-md flex-col gap-2 rounded-[var(--bb-radius)] border p-3"
|
|
173
|
-
>
|
|
167
|
+
<div class="flex max-w-md flex-col gap-2 rounded-(--bb-radius) border p-3">
|
|
174
168
|
<div class="flex flex-col gap-0.5">
|
|
175
169
|
<span class="text-sm font-medium">Invite to Acme Studio</span>
|
|
176
|
-
<span class="text-xs text-
|
|
170
|
+
<span class="text-xs text-(--bb-text-muted)">
|
|
177
171
|
Up to 5 people · they get editor access
|
|
178
172
|
</span>
|
|
179
173
|
</div>
|
|
@@ -190,10 +184,7 @@ when a remaining allowance hits the floor), not “unlimited”.
|
|
|
190
184
|
@max="onMax"
|
|
191
185
|
@update:model-value="warning = ''"
|
|
192
186
|
/>
|
|
193
|
-
<p
|
|
194
|
-
class="text-xs text-[color:var(--bb-text-muted)]"
|
|
195
|
-
data-testid="invite-status"
|
|
196
|
-
>
|
|
187
|
+
<p class="text-xs text-(--bb-text-muted)" data-testid="invite-status">
|
|
197
188
|
{{ recipients.length }} / 5 invited<span v-if="warning">
|
|
198
189
|
— {{ warning }}</span
|
|
199
190
|
>
|
|
@@ -245,12 +236,10 @@ rarely. `clearable` still empties the whole field.
|
|
|
245
236
|
|
|
246
237
|
```vue
|
|
247
238
|
<template>
|
|
248
|
-
<div
|
|
249
|
-
class="flex max-w-sm flex-col gap-2 rounded-[var(--bb-radius)] border p-3"
|
|
250
|
-
>
|
|
239
|
+
<div class="flex max-w-sm flex-col gap-2 rounded-(--bb-radius) border p-3">
|
|
251
240
|
<div class="flex flex-col gap-0.5">
|
|
252
241
|
<span class="text-sm font-medium">Weekly digest</span>
|
|
253
|
-
<span class="text-xs text-
|
|
242
|
+
<span class="text-xs text-(--bb-text-muted)">
|
|
254
243
|
Topics land as a compact comma list
|
|
255
244
|
</span>
|
|
256
245
|
</div>
|
|
@@ -263,7 +252,7 @@ rarely. `clearable` still empties the whole field.
|
|
|
263
252
|
name="topics"
|
|
264
253
|
placeholder="Add a topic…"
|
|
265
254
|
/>
|
|
266
|
-
<p class="text-xs text-
|
|
255
|
+
<p class="text-xs text-(--bb-text-muted)">
|
|
267
256
|
Your weekly digest covers {{ topics.length }} topics.
|
|
268
257
|
</p>
|
|
269
258
|
</div>
|
|
@@ -298,6 +287,19 @@ const topics = ref<string[]>(['Product updates', 'Engineering', 'Design']);
|
|
|
298
287
|
with `errors` / `has-errors` for validation messaging; the input exposes
|
|
299
288
|
`aria-invalid` in the error state.
|
|
300
289
|
|
|
290
|
+
### Variants
|
|
291
|
+
|
|
292
|
+
`variant` picks the field box's look and nothing else — height, padding and
|
|
293
|
+
border width are identical across variants. `outline` (default) is the raised
|
|
294
|
+
panel with the neutral border, `secondary` a soft tinted surface with a faint
|
|
295
|
+
border, and `ghost` draws **no border in any state**: a hover wash is the
|
|
296
|
+
affordance, the focus ring still shows, and errors or warnings surface through
|
|
297
|
+
the icon and the message rather than a tinted edge. `ghost` is the inline-edit
|
|
298
|
+
table cell (`<BbTag compact hide-label variant="ghost" />`) — no
|
|
299
|
+
`:deep()` needed. The names and tokens are the `BbButton` ones; extra names
|
|
300
|
+
register through the plugin's `inputVariants` option. The full ladder is in
|
|
301
|
+
the `BbTextInput` guide.
|
|
302
|
+
|
|
301
303
|
### Works well with
|
|
302
304
|
|
|
303
305
|
- `BbSelect` — when the values come from a known list instead of free text.
|
|
@@ -390,6 +392,7 @@ only sets the label's text alignment.
|
|
|
390
392
|
| `readonly` | `boolean \| undefined` | `false` | | Sets the input in a readonly state. |
|
|
391
393
|
| `required` | `boolean \| undefined` | `false` | | Sets the input as required. |
|
|
392
394
|
| `reverse` | `boolean \| undefined` | `false` | | Reverses the layout. Applicable in every direction the order of the label and the input is swapped. |
|
|
395
|
+
| `variant` | `InputVariantType \| undefined` | `'outline'` | | Visual variant of the field box — the same names and tokens as the `BbButton` variants. Colours only: height, padding and border width are identical across variants, so a form never reflows when one changes. `'ghost'` has no border in any s… |
|
|
393
396
|
| `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… |
|
|
394
397
|
|
|
395
398
|
## Events
|