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
|
@@ -39,6 +39,25 @@ explicitly (section 8).
|
|
|
39
39
|
|
|
40
40
|
## 0. Upgrade strategy — do it in this order
|
|
41
41
|
|
|
42
|
+
> **Already on v3, bumping between prereleases?** This guide is the v2 → v3
|
|
43
|
+
> move; you want the much shorter answer instead:
|
|
44
|
+
>
|
|
45
|
+
> ```bash
|
|
46
|
+
> npx bitboss-ui changelog --since 3.0.0-beta.20 # what BREAKS in the bump
|
|
47
|
+
> ```
|
|
48
|
+
>
|
|
49
|
+
> Then turn that list into **your** files, before you install anything:
|
|
50
|
+
>
|
|
51
|
+
> ```bash
|
|
52
|
+
> npm pack bitboss-ui@3.0.0-beta.21 && tar -xzf bitboss-ui-3.0.0-beta.21.tgz
|
|
53
|
+
> npx bitboss-ui check --manifest package/dist/ai/components.json
|
|
54
|
+
> ```
|
|
55
|
+
>
|
|
56
|
+
> `check` normally judges the INSTALLED version, which can only tell you what
|
|
57
|
+
> an upgrade broke after you took it. `--manifest` points it at the version you
|
|
58
|
+
> are moving to, so the damage is visible first. Agents with the MCP server get
|
|
59
|
+
> the same answer from `list_changes({ since })`.
|
|
60
|
+
|
|
42
61
|
1. **Swap the setup** (section 1): install the build plugin and the runtime
|
|
43
62
|
plugin. Nothing renders correctly until this is done.
|
|
44
63
|
2. **Move your config** (section 2): everything you passed to
|
|
@@ -52,6 +71,13 @@ explicitly (section 8).
|
|
|
52
71
|
fail loudly. Fix them component by component with the per-component guides.
|
|
53
72
|
5. **Audit what the compiler cannot find** (section 8): untyped templates,
|
|
54
73
|
`v-bind` objects, and behavioral flips are silent. Run the grep playbook.
|
|
74
|
+
**Your stylesheets are the silent half.** `vue-tsc` never reads CSS, so a
|
|
75
|
+
rule targeting a renamed or deleted class simply stops matching — no error,
|
|
76
|
+
no warning, and the page often still looks close enough to pass review. A
|
|
77
|
+
v2-era theme file can carry hundreds of lines that have done nothing since
|
|
78
|
+
the upgrade. Section 5.6 has the rename table and the grep that finds them;
|
|
79
|
+
run it before you conclude a component "has no token for this", because a
|
|
80
|
+
dead override and a missing affordance look identical from the browser.
|
|
55
81
|
6. **Convert class overrides to variants** (section 7): userland
|
|
56
82
|
`class="bb-button--outline"`-style overrides keep _working_ but are now the
|
|
57
83
|
wrong pattern — the variant prop exists, is typed, and is the only form the
|
|
@@ -1031,28 +1057,29 @@ markup contract and the layout drift that comes with the substrate:
|
|
|
1031
1057
|
|
|
1032
1058
|
**Everything else**
|
|
1033
1059
|
|
|
1034
|
-
| v2 | v3
|
|
1035
|
-
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
1036
|
-
| `.bb-chip*` | `.bb-badge*` (component replaced)
|
|
1037
|
-
| `.bb-badge*` used as a floating count/dot (`--dot --floating --positioned --left --bottom --empty`, `__wrapper`, `__content-container`) | `.bb-indicator*` (component renamed)
|
|
1038
|
-
| `.bb-color-palette__*` (canvas, canvas-thumb, canvas-wrap, controls, eyedropper, preview, preview--alpha, preview-wrap, slider-thumb, slider-track, slider-wrap, slider-wrap--alpha, sliders, swatch, swatch--active, swatch-group, swatches) | `.bb-base-color-palette__*` — 1:1 on every one
|
|
1039
|
-
| `.bb-toast--top-start` / `--top` / `--top-end` / `--bottom-start` / `--bottom` / `--bottom-end` | `.bb-toast--top-left` / `--top-center` / `--top-right` / `--bottom-left` / `--bottom-center` / `--bottom-right` (matching the `position` prop's corner set)
|
|
1040
|
-
| `.bb-toast-message__icon-container` | **removed** — style `.bb-toast-message__icon` directly
|
|
1041
|
-
| `.bb-tree--open` | `.bb-tree__node--expanded`
|
|
1042
|
-
| `.bb-tree-row` | `.bb-tree__row`
|
|
1043
|
-
| `.bb-tree-main-content` | `.bb-tree__content`
|
|
1044
|
-
| `.bb-dropdown-button__dropdown-chevron` | `.bb-dropdown-button__chevron`
|
|
1045
|
-
| `.bb-dropdown-button--loading` / `__content` / `__icon` / `__prepend-icon` / `__append-icon` | **removed** — the split button delegates to `BbButton`'s internals; target `.bb-button__*` inside it
|
|
1046
|
-
| `.bb-dropdown__wrapper` | **removed** — the extra wrapper element is gone
|
|
1047
|
-
| `.bb-select-popover__search-spinner` | `.bb-select-popover__search-icon` (one element, spinner state included)
|
|
1048
|
-
| `.bb-base-date-picker__header` (the tinted banner holding the month/year controls) | `.bb-base-date-picker__controls` (+ the inner `__nav-center`) — the banner is gone; the controls sit on the calendar surface. `__header-container` and `__header-cell` are unrelated and unchanged: they are the weekday row.
|
|
1049
|
-
| `.bb-base-date-picker__control` / `__year-control` | `.bb-base-date-picker__nav-btn`
|
|
1050
|
-
| `.bb-base-date-picker__month-button` / `__year-button` | `.bb-base-date-picker__heading-btn` (+ `--active`)
|
|
1051
|
-
| `.bb-base-date-picker__weekday` | `.bb-base-date-picker__header-cell`
|
|
1052
|
-
| `.bb-base-date-picker__monthday` | `.bb-base-date-picker__date` (+ the inner `__date-button`)
|
|
1053
|
-
| `.bb-base-date-picker__year-container` | `.bb-base-date-picker__year-selector`
|
|
1054
|
-
| `.bb-base-date-picker__header--hidden`, `__selected-day-label` | **removed**
|
|
1055
|
-
| `.bb-commabox-item--has-comma` | the select's comma list renders `.bb-base-select__comma-item` (`.bb-commabox-item` itself survives; `--has-comma` and `.bb-chipsbox-item--focused` do not)
|
|
1060
|
+
| v2 | v3 |
|
|
1061
|
+
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
1062
|
+
| `.bb-chip*` | `.bb-badge*` (component replaced) |
|
|
1063
|
+
| `.bb-badge*` used as a floating count/dot (`--dot --floating --positioned --left --bottom --empty`, `__wrapper`, `__content-container`) | `.bb-indicator*` (component renamed) |
|
|
1064
|
+
| `.bb-color-palette__*` (canvas, canvas-thumb, canvas-wrap, controls, eyedropper, preview, preview--alpha, preview-wrap, slider-thumb, slider-track, slider-wrap, slider-wrap--alpha, sliders, swatch, swatch--active, swatch-group, swatches) | `.bb-base-color-palette__*` — 1:1 on every one |
|
|
1065
|
+
| `.bb-toast--top-start` / `--top` / `--top-end` / `--bottom-start` / `--bottom` / `--bottom-end` | `.bb-toast--top-left` / `--top-center` / `--top-right` / `--bottom-left` / `--bottom-center` / `--bottom-right` (matching the `position` prop's corner set) |
|
|
1066
|
+
| `.bb-toast-message__icon-container` | **removed** — style `.bb-toast-message__icon` directly |
|
|
1067
|
+
| `.bb-tree--open` | `.bb-tree__node--expanded` |
|
|
1068
|
+
| `.bb-tree-row` | `.bb-tree__row` |
|
|
1069
|
+
| `.bb-tree-main-content` | `.bb-tree__content` |
|
|
1070
|
+
| `.bb-dropdown-button__dropdown-chevron` | `.bb-dropdown-button__chevron` |
|
|
1071
|
+
| `.bb-dropdown-button--loading` / `__content` / `__icon` / `__prepend-icon` / `__append-icon` | **removed** — the split button delegates to `BbButton`'s internals; target `.bb-button__*` inside it |
|
|
1072
|
+
| `.bb-dropdown__wrapper` | **removed** — the extra wrapper element is gone |
|
|
1073
|
+
| `.bb-select-popover__search-spinner` | `.bb-select-popover__search-icon` (one element, spinner state included) |
|
|
1074
|
+
| `.bb-base-date-picker__header` (the tinted banner holding the month/year controls) | `.bb-base-date-picker__controls` (+ the inner `__nav-center`) — the banner is gone; the controls sit on the calendar surface. `__header-container` and `__header-cell` are unrelated and unchanged: they are the weekday row. |
|
|
1075
|
+
| `.bb-base-date-picker__control` / `__year-control` | `.bb-base-date-picker__nav-btn` |
|
|
1076
|
+
| `.bb-base-date-picker__month-button` / `__year-button` | `.bb-base-date-picker__heading-btn` (+ `--active`) |
|
|
1077
|
+
| `.bb-base-date-picker__weekday` | `.bb-base-date-picker__header-cell` |
|
|
1078
|
+
| `.bb-base-date-picker__monthday` | `.bb-base-date-picker__date` (+ the inner `__date-button`) |
|
|
1079
|
+
| `.bb-base-date-picker__year-container` | `.bb-base-date-picker__year-selector` |
|
|
1080
|
+
| `.bb-base-date-picker__header--hidden`, `__selected-day-label` | **removed** |
|
|
1081
|
+
| `.bb-commabox-item--has-comma` | the select's comma list renders `.bb-base-select__comma-item` (`.bb-commabox-item` itself survives; `--has-comma` and `.bb-chipsbox-item--focused` do not) |
|
|
1082
|
+
| `.sr-only` — the visually-hidden helper every component uses for accessible names and status text (it shared Tailwind's class name) | `.bb-sr-only`. Only a selector reaching **into** a component (`.bb-table .sr-only`) breaks; your own Tailwind `sr-only` in your markup is untouched — which is why this one is deliberately **not** in the §8 grep: a hit there would be your code, not ours |
|
|
1056
1083
|
|
|
1057
1084
|
The date **input**'s own field tree (`.bb-base-date-picker-input__field`,
|
|
1058
1085
|
`__fields`, `__placeholder`, `__separator`, `__calendar-btn`) moved to a shared
|
|
@@ -1283,7 +1310,7 @@ rg -n 'disabled-while-loading|disabledWhileLoading' # removed
|
|
|
1283
1310
|
rg -n 'animate-x|animate-y|animateX|animateY' # → disableAnimate*, now default-on
|
|
1284
1311
|
rg -n 'thumb-translate|thumbTranslate' # → disable-thumb-translate
|
|
1285
1312
|
rg -n ':flip=|flip="' # → disable-flip on palette/select-popover
|
|
1286
|
-
rg -n 'hide-arrow|show-arrow|arrow-padding|hideArrow|showArrow|arrowPadding' # removed
|
|
1313
|
+
rg -n 'hide-arrow|show-arrow|arrow-padding|hideArrow|showArrow|arrowPadding' # removed EVERYWHERE EXCEPT BbTooltip, which keeps hide-arrow + arrow-padding — hits on a tooltip are fine
|
|
1287
1314
|
rg -n '<BbChip' # component removed → BbBadge clearable
|
|
1288
1315
|
rg -n '<BbBadge' # v2 badges are v3 indicators — review each
|
|
1289
1316
|
rg -n '<BbTab\b' # → BbTabs (\b so a tag name alone on its line still matches, and <BbTabs does not)
|
package/dist/ai/index.md
CHANGED
|
@@ -12,7 +12,7 @@ This index helps agents quickly find component intent and authored guides before
|
|
|
12
12
|
- Setup policy: verify installation + plugin setup before proposing usage code.
|
|
13
13
|
- Icon policy: discover available icons first and use only existing icon names.
|
|
14
14
|
- Contract-first policy: each component link below is a typed contract (props/events/slots/v-model). Read `source/<Name>.md` only when the contract is not enough.
|
|
15
|
-
- Machine-readable manifest: [components.json](./components.json) lists every component API surface for programmatic validation.
|
|
15
|
+
- Machine-readable manifest: [components.json](./components.json) lists every component API surface for programmatic validation, plus a `types` array of the public TYPE exports (`BbTableColumn`, `BbDropdownItem`, …) naming the prop each one types and a `usage` tier — `api` is the two dozen you actually reach for, `wrapper` is for wrapping our components in yours, `advanced` is registries and contexts. Those are not components: import them, never write them as a tag.
|
|
16
16
|
- Package path: use `dist/ai/guides/ai-router.md` (then `dist/ai/index.md`) inside the installed `bitboss-ui` package (`node_modules/bitboss-ui/dist/ai/`).
|
|
17
17
|
|
|
18
18
|
## Recipes (Page-Level Assemblies)
|
|
@@ -1286,7 +1286,7 @@ const selectedCount = computed(() =>
|
|
|
1286
1286
|
<!-- Receipt: bigger than the row thumbnail, with a full-size link out. -->
|
|
1287
1287
|
<section class="flex flex-col gap-1.5">
|
|
1288
1288
|
<h3
|
|
1289
|
-
class="text-xs font-semibold
|
|
1289
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1290
1290
|
>
|
|
1291
1291
|
Receipt
|
|
1292
1292
|
</h3>
|
|
@@ -1333,7 +1333,7 @@ const selectedCount = computed(() =>
|
|
|
1333
1333
|
<!-- Activity feed. -->
|
|
1334
1334
|
<section class="flex flex-col gap-1.5">
|
|
1335
1335
|
<h3
|
|
1336
|
-
class="text-xs font-semibold
|
|
1336
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1337
1337
|
>
|
|
1338
1338
|
Activity
|
|
1339
1339
|
</h3>
|
|
@@ -1487,7 +1487,7 @@ const statusLabel = (status: ExpenseStatus) =>
|
|
|
1487
1487
|
<!-- Recent expenses: names drill down again — the stack keeps growing. -->
|
|
1488
1488
|
<section class="flex flex-col gap-1.5">
|
|
1489
1489
|
<h3
|
|
1490
|
-
class="text-xs font-semibold
|
|
1490
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1491
1491
|
>
|
|
1492
1492
|
Recent expenses
|
|
1493
1493
|
</h3>
|
|
@@ -1585,7 +1585,7 @@ const selectedCount = computed(() =>
|
|
|
1585
1585
|
<!-- Description. -->
|
|
1586
1586
|
<section class="flex flex-col gap-1.5">
|
|
1587
1587
|
<h3
|
|
1588
|
-
class="text-xs font-semibold
|
|
1588
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1589
1589
|
>
|
|
1590
1590
|
Description
|
|
1591
1591
|
</h3>
|
|
@@ -1597,7 +1597,7 @@ const selectedCount = computed(() =>
|
|
|
1597
1597
|
<!-- Activity feed. -->
|
|
1598
1598
|
<section class="flex flex-col gap-1.5">
|
|
1599
1599
|
<h3
|
|
1600
|
-
class="text-xs font-semibold
|
|
1600
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1601
1601
|
>
|
|
1602
1602
|
Activity
|
|
1603
1603
|
</h3>
|
|
@@ -841,7 +841,7 @@ const ctx = useOnboardingWorkspace();
|
|
|
841
841
|
</span>
|
|
842
842
|
<span
|
|
843
843
|
v-if="step.status === 'skipped'"
|
|
844
|
-
class="shrink-0 text-xs
|
|
844
|
+
class="shrink-0 text-xs tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
845
845
|
>
|
|
846
846
|
Skipped
|
|
847
847
|
</span>
|
|
@@ -1467,7 +1467,7 @@ const cadences: { value: ReminderCadence; label: string }[] = [
|
|
|
1467
1467
|
<!-- What you'll get. -->
|
|
1468
1468
|
<section class="flex flex-col gap-2.5">
|
|
1469
1469
|
<h3
|
|
1470
|
-
class="text-xs font-semibold
|
|
1470
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1471
1471
|
>
|
|
1472
1472
|
What you'll get
|
|
1473
1473
|
</h3>
|
|
@@ -1122,7 +1122,7 @@ const onTransfer = (value: unknown) => {
|
|
|
1122
1122
|
|
|
1123
1123
|
<section v-if="owner.notes" class="flex flex-col gap-1.5">
|
|
1124
1124
|
<h3
|
|
1125
|
-
class="text-xs font-semibold
|
|
1125
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1126
1126
|
>
|
|
1127
1127
|
Notes
|
|
1128
1128
|
</h3>
|
|
@@ -1132,7 +1132,7 @@ const onTransfer = (value: unknown) => {
|
|
|
1132
1132
|
<!-- Rollup by holding type. -->
|
|
1133
1133
|
<section class="flex flex-col gap-1.5">
|
|
1134
1134
|
<h3
|
|
1135
|
-
class="text-xs font-semibold
|
|
1135
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1136
1136
|
>
|
|
1137
1137
|
By type
|
|
1138
1138
|
</h3>
|
|
@@ -1144,11 +1144,11 @@ const onTransfer = (value: unknown) => {
|
|
|
1144
1144
|
>
|
|
1145
1145
|
<span class="min-w-0">{{ KIND_LABEL[row.kind] }}</span>
|
|
1146
1146
|
<span
|
|
1147
|
-
class="text-xs
|
|
1147
|
+
class="text-xs text-[color:var(--bb-text-muted)] tabular-nums"
|
|
1148
1148
|
>{{ row.count }}</span
|
|
1149
1149
|
>
|
|
1150
1150
|
<span
|
|
1151
|
-
class="text-xs
|
|
1151
|
+
class="text-xs text-[color:var(--bb-text-muted)] tabular-nums"
|
|
1152
1152
|
>{{ money(row.monthlyCost) }}</span
|
|
1153
1153
|
>
|
|
1154
1154
|
</li>
|
|
@@ -1158,7 +1158,7 @@ const onTransfer = (value: unknown) => {
|
|
|
1158
1158
|
<!-- The holdings themselves — a real list, not a summary sentence. -->
|
|
1159
1159
|
<section class="flex flex-col gap-1.5">
|
|
1160
1160
|
<h3
|
|
1161
|
-
class="text-xs font-semibold
|
|
1161
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1162
1162
|
>
|
|
1163
1163
|
Holdings
|
|
1164
1164
|
</h3>
|
|
@@ -1179,7 +1179,7 @@ const onTransfer = (value: unknown) => {
|
|
|
1179
1179
|
{{ STATUS_LABEL[holding.status] }}
|
|
1180
1180
|
</BbBadge>
|
|
1181
1181
|
<span
|
|
1182
|
-
class="text-xs
|
|
1182
|
+
class="text-xs text-[color:var(--bb-text-muted)] tabular-nums"
|
|
1183
1183
|
>{{ money(holding.monthlyCost) }}</span
|
|
1184
1184
|
>
|
|
1185
1185
|
</div>
|
|
@@ -686,7 +686,7 @@ const trail = computed(() => [
|
|
|
686
686
|
<template>
|
|
687
687
|
<section class="flex flex-col gap-3">
|
|
688
688
|
<h2
|
|
689
|
-
class="text-xs font-semibold
|
|
689
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
690
690
|
>
|
|
691
691
|
Details
|
|
692
692
|
</h2>
|
|
@@ -801,7 +801,7 @@ const ctx = useInvoiceForm();
|
|
|
801
801
|
<section class="flex flex-col gap-3">
|
|
802
802
|
<div class="flex items-center justify-between">
|
|
803
803
|
<h2
|
|
804
|
-
class="text-xs font-semibold
|
|
804
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
805
805
|
>
|
|
806
806
|
Line items
|
|
807
807
|
</h2>
|
|
@@ -1288,7 +1288,7 @@ const ctx = useInvoiceForm();
|
|
|
1288
1288
|
<!-- Billing profile: exactly the fields this form negotiates. -->
|
|
1289
1289
|
<section class="flex flex-col gap-1.5">
|
|
1290
1290
|
<h3
|
|
1291
|
-
class="text-xs font-semibold
|
|
1291
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1292
1292
|
>
|
|
1293
1293
|
Billing profile
|
|
1294
1294
|
</h3>
|
|
@@ -1318,7 +1318,7 @@ const ctx = useInvoiceForm();
|
|
|
1318
1318
|
through the route-leave guard. -->
|
|
1319
1319
|
<section class="flex flex-col gap-1.5">
|
|
1320
1320
|
<h3
|
|
1321
|
-
class="text-xs font-semibold
|
|
1321
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1322
1322
|
>
|
|
1323
1323
|
Recent invoices
|
|
1324
1324
|
</h3>
|
|
@@ -1332,7 +1332,7 @@ const ctx = useInvoiceForm();
|
|
|
1332
1332
|
{{ recent.number }}
|
|
1333
1333
|
</BbBaseButton>
|
|
1334
1334
|
<BbBadge variant="outline">{{ recent.status }}</BbBadge>
|
|
1335
|
-
<span class="text-xs
|
|
1335
|
+
<span class="text-xs text-[color:var(--bb-text-muted)] tabular-nums">
|
|
1336
1336
|
{{ currency.format(recent.amount) }}
|
|
1337
1337
|
</span>
|
|
1338
1338
|
</li>
|
|
@@ -1156,7 +1156,7 @@ const selectedCount = computed(() =>
|
|
|
1156
1156
|
<!-- Line items: a real mini-table, not a summary sentence. -->
|
|
1157
1157
|
<section class="flex flex-col gap-1.5">
|
|
1158
1158
|
<h3
|
|
1159
|
-
class="text-xs font-semibold
|
|
1159
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1160
1160
|
>
|
|
1161
1161
|
Line items
|
|
1162
1162
|
</h3>
|
|
@@ -1180,7 +1180,7 @@ const selectedCount = computed(() =>
|
|
|
1180
1180
|
<!-- Payments so far. -->
|
|
1181
1181
|
<section v-if="invoice.payments.length" class="flex flex-col gap-1.5">
|
|
1182
1182
|
<h3
|
|
1183
|
-
class="text-xs font-semibold
|
|
1183
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1184
1184
|
>
|
|
1185
1185
|
Payments
|
|
1186
1186
|
</h3>
|
|
@@ -1203,7 +1203,7 @@ const selectedCount = computed(() =>
|
|
|
1203
1203
|
<!-- Activity feed. -->
|
|
1204
1204
|
<section class="flex flex-col gap-1.5">
|
|
1205
1205
|
<h3
|
|
1206
|
-
class="text-xs font-semibold
|
|
1206
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1207
1207
|
>
|
|
1208
1208
|
Activity
|
|
1209
1209
|
</h3>
|
|
@@ -1353,7 +1353,7 @@ const longDate = (value: string) =>
|
|
|
1353
1353
|
variant — same identity-cell rule as the invoices table. -->
|
|
1354
1354
|
<section class="flex flex-col gap-1.5">
|
|
1355
1355
|
<h3
|
|
1356
|
-
class="text-xs font-semibold
|
|
1356
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1357
1357
|
>
|
|
1358
1358
|
Recent invoices
|
|
1359
1359
|
</h3>
|
|
@@ -1174,7 +1174,7 @@ const formattedSize = computed(() => {
|
|
|
1174
1174
|
class="flex-1"
|
|
1175
1175
|
:model-value="upload.progress"
|
|
1176
1176
|
/>
|
|
1177
|
-
<span class="text-xs
|
|
1177
|
+
<span class="text-xs text-[color:var(--bb-text-muted)] tabular-nums"
|
|
1178
1178
|
>{{ upload.progress }}%</span
|
|
1179
1179
|
>
|
|
1180
1180
|
</div>
|
|
@@ -1631,7 +1631,7 @@ const selectedCount = computed(() =>
|
|
|
1631
1631
|
<section class="flex flex-col gap-1.5">
|
|
1632
1632
|
<div class="flex items-center justify-between">
|
|
1633
1633
|
<h3
|
|
1634
|
-
class="text-xs font-semibold
|
|
1634
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1635
1635
|
>
|
|
1636
1636
|
Extracted fields
|
|
1637
1637
|
</h3>
|
|
@@ -1671,7 +1671,7 @@ const selectedCount = computed(() =>
|
|
|
1671
1671
|
one-click cell as in the table. -->
|
|
1672
1672
|
<section class="flex flex-col gap-1.5">
|
|
1673
1673
|
<h3
|
|
1674
|
-
class="text-xs font-semibold
|
|
1674
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1675
1675
|
>
|
|
1676
1676
|
Details
|
|
1677
1677
|
</h3>
|
|
@@ -1688,7 +1688,7 @@ const selectedCount = computed(() =>
|
|
|
1688
1688
|
<!-- Activity feed. -->
|
|
1689
1689
|
<section class="flex flex-col gap-1.5">
|
|
1690
1690
|
<h3
|
|
1691
|
-
class="text-xs font-semibold
|
|
1691
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1692
1692
|
>
|
|
1693
1693
|
Activity
|
|
1694
1694
|
</h3>
|
|
@@ -1840,7 +1840,7 @@ const longDate = (value: string) =>
|
|
|
1840
1840
|
<!-- Recent receipts: names drill down again — the stack keeps growing. -->
|
|
1841
1841
|
<section class="flex flex-col gap-1.5">
|
|
1842
1842
|
<h3
|
|
1843
|
-
class="text-xs font-semibold
|
|
1843
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1844
1844
|
>
|
|
1845
1845
|
Recent receipts
|
|
1846
1846
|
</h3>
|
|
@@ -1860,7 +1860,7 @@ const longDate = (value: string) =>
|
|
|
1860
1860
|
<BbBadge :variant="STATUS_VARIANT[recent.status]">{{
|
|
1861
1861
|
STATUS_LABEL[recent.status]
|
|
1862
1862
|
}}</BbBadge>
|
|
1863
|
-
<span class="text-xs
|
|
1863
|
+
<span class="text-xs text-[color:var(--bb-text-muted)] tabular-nums">
|
|
1864
1864
|
{{ currency.format(recent.amount) }}
|
|
1865
1865
|
</span>
|
|
1866
1866
|
</li>
|
|
@@ -1087,7 +1087,7 @@ const today = new Date().toISOString().slice(0, 10);
|
|
|
1087
1087
|
>
|
|
1088
1088
|
<div class="flex items-center justify-between gap-2">
|
|
1089
1089
|
<h3
|
|
1090
|
-
class="text-xs font-semibold
|
|
1090
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1091
1091
|
>
|
|
1092
1092
|
Audience
|
|
1093
1093
|
</h3>
|
|
@@ -1134,7 +1134,7 @@ const today = new Date().toISOString().slice(0, 10);
|
|
|
1134
1134
|
>
|
|
1135
1135
|
<div class="flex items-center justify-between gap-2">
|
|
1136
1136
|
<h3
|
|
1137
|
-
class="text-xs font-semibold
|
|
1137
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1138
1138
|
>
|
|
1139
1139
|
Content
|
|
1140
1140
|
</h3>
|
|
@@ -1165,7 +1165,7 @@ const today = new Date().toISOString().slice(0, 10);
|
|
|
1165
1165
|
>
|
|
1166
1166
|
<div class="flex items-center justify-between gap-2">
|
|
1167
1167
|
<h3
|
|
1168
|
-
class="text-xs font-semibold
|
|
1168
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1169
1169
|
>
|
|
1170
1170
|
Schedule
|
|
1171
1171
|
</h3>
|
|
@@ -1331,7 +1331,7 @@ const isReview = computed(() => ctx.step.value === 'review');
|
|
|
1331
1331
|
<!-- The segment's definition, so "who is in here" is answerable in place. -->
|
|
1332
1332
|
<section class="flex flex-col gap-1.5">
|
|
1333
1333
|
<h3
|
|
1334
|
-
class="text-xs font-semibold
|
|
1334
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1335
1335
|
>
|
|
1336
1336
|
Conditions
|
|
1337
1337
|
</h3>
|
|
@@ -1350,7 +1350,7 @@ const isReview = computed(() => ctx.step.value === 'review');
|
|
|
1350
1350
|
<!-- Recent campaigns to this segment: fatigue check before sending. -->
|
|
1351
1351
|
<section class="flex flex-col gap-1.5">
|
|
1352
1352
|
<h3
|
|
1353
|
-
class="text-xs font-semibold
|
|
1353
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1354
1354
|
>
|
|
1355
1355
|
Recent campaigns
|
|
1356
1356
|
</h3>
|
|
@@ -1234,7 +1234,7 @@ const clearSelection = () => {
|
|
|
1234
1234
|
<!-- Receipt: bigger than the row thumbnail, with a full-size link out. -->
|
|
1235
1235
|
<section class="flex flex-col gap-1.5">
|
|
1236
1236
|
<h3
|
|
1237
|
-
class="text-xs font-semibold
|
|
1237
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1238
1238
|
>
|
|
1239
1239
|
Receipt
|
|
1240
1240
|
</h3>
|
|
@@ -1281,7 +1281,7 @@ const clearSelection = () => {
|
|
|
1281
1281
|
<!-- Activity feed. -->
|
|
1282
1282
|
<section class="flex flex-col gap-1.5">
|
|
1283
1283
|
<h3
|
|
1284
|
-
class="text-xs font-semibold
|
|
1284
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1285
1285
|
>
|
|
1286
1286
|
Activity
|
|
1287
1287
|
</h3>
|
|
@@ -1435,7 +1435,7 @@ const statusLabel = (status: ExpenseStatus) =>
|
|
|
1435
1435
|
<!-- Recent expenses: names drill down again — the stack keeps growing. -->
|
|
1436
1436
|
<section class="flex flex-col gap-1.5">
|
|
1437
1437
|
<h3
|
|
1438
|
-
class="text-xs font-semibold
|
|
1438
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1439
1439
|
>
|
|
1440
1440
|
Recent expenses
|
|
1441
1441
|
</h3>
|
|
@@ -1548,7 +1548,7 @@ const clearSelection = () => {
|
|
|
1548
1548
|
<!-- Description. -->
|
|
1549
1549
|
<section class="flex flex-col gap-1.5">
|
|
1550
1550
|
<h3
|
|
1551
|
-
class="text-xs font-semibold
|
|
1551
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1552
1552
|
>
|
|
1553
1553
|
Description
|
|
1554
1554
|
</h3>
|
|
@@ -1560,7 +1560,7 @@ const clearSelection = () => {
|
|
|
1560
1560
|
<!-- Activity feed. -->
|
|
1561
1561
|
<section class="flex flex-col gap-1.5">
|
|
1562
1562
|
<h3
|
|
1563
|
-
class="text-xs font-semibold
|
|
1563
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1564
1564
|
>
|
|
1565
1565
|
Activity
|
|
1566
1566
|
</h3>
|
|
@@ -808,7 +808,7 @@ const ctx = useOnboardingWorkspace();
|
|
|
808
808
|
</span>
|
|
809
809
|
<span
|
|
810
810
|
v-if="step.status === 'skipped'"
|
|
811
|
-
class="shrink-0 text-xs
|
|
811
|
+
class="shrink-0 text-xs tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
812
812
|
>
|
|
813
813
|
Skipped
|
|
814
814
|
</span>
|
|
@@ -1414,7 +1414,7 @@ const cadences: { value: ReminderCadence; label: string }[] = [
|
|
|
1414
1414
|
<!-- What you'll get. -->
|
|
1415
1415
|
<section class="flex flex-col gap-2.5">
|
|
1416
1416
|
<h3
|
|
1417
|
-
class="text-xs font-semibold
|
|
1417
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1418
1418
|
>
|
|
1419
1419
|
What you'll get
|
|
1420
1420
|
</h3>
|
|
@@ -715,7 +715,7 @@ const trail = computed(() => [
|
|
|
715
715
|
<template>
|
|
716
716
|
<section class="flex flex-col gap-3">
|
|
717
717
|
<h2
|
|
718
|
-
class="text-xs font-semibold
|
|
718
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
719
719
|
>
|
|
720
720
|
Details
|
|
721
721
|
</h2>
|
|
@@ -830,7 +830,7 @@ const ctx = useInvoiceForm();
|
|
|
830
830
|
<section class="flex flex-col gap-3">
|
|
831
831
|
<div class="flex items-center justify-between">
|
|
832
832
|
<h2
|
|
833
|
-
class="text-xs font-semibold
|
|
833
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
834
834
|
>
|
|
835
835
|
Line items
|
|
836
836
|
</h2>
|
|
@@ -1317,7 +1317,7 @@ const ctx = useInvoiceForm();
|
|
|
1317
1317
|
<!-- Billing profile: exactly the fields this form negotiates. -->
|
|
1318
1318
|
<section class="flex flex-col gap-1.5">
|
|
1319
1319
|
<h3
|
|
1320
|
-
class="text-xs font-semibold
|
|
1320
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1321
1321
|
>
|
|
1322
1322
|
Billing profile
|
|
1323
1323
|
</h3>
|
|
@@ -1347,7 +1347,7 @@ const ctx = useInvoiceForm();
|
|
|
1347
1347
|
through the route-leave guard. -->
|
|
1348
1348
|
<section class="flex flex-col gap-1.5">
|
|
1349
1349
|
<h3
|
|
1350
|
-
class="text-xs font-semibold
|
|
1350
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1351
1351
|
>
|
|
1352
1352
|
Recent invoices
|
|
1353
1353
|
</h3>
|
|
@@ -1361,7 +1361,7 @@ const ctx = useInvoiceForm();
|
|
|
1361
1361
|
{{ recent.number }}
|
|
1362
1362
|
</BbBaseButton>
|
|
1363
1363
|
<BbBadge variant="outline">{{ recent.status }}</BbBadge>
|
|
1364
|
-
<span class="text-xs
|
|
1364
|
+
<span class="text-xs text-[color:var(--bb-text-muted)] tabular-nums">
|
|
1365
1365
|
{{ currency.format(recent.amount) }}
|
|
1366
1366
|
</span>
|
|
1367
1367
|
</li>
|
|
@@ -1141,7 +1141,7 @@ const clearSelection = () => {
|
|
|
1141
1141
|
<!-- Line items: a real mini-table, not a summary sentence. -->
|
|
1142
1142
|
<section class="flex flex-col gap-1.5">
|
|
1143
1143
|
<h3
|
|
1144
|
-
class="text-xs font-semibold
|
|
1144
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1145
1145
|
>
|
|
1146
1146
|
Line items
|
|
1147
1147
|
</h3>
|
|
@@ -1165,7 +1165,7 @@ const clearSelection = () => {
|
|
|
1165
1165
|
<!-- Payments so far. -->
|
|
1166
1166
|
<section v-if="invoice.payments.length" class="flex flex-col gap-1.5">
|
|
1167
1167
|
<h3
|
|
1168
|
-
class="text-xs font-semibold
|
|
1168
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1169
1169
|
>
|
|
1170
1170
|
Payments
|
|
1171
1171
|
</h3>
|
|
@@ -1188,7 +1188,7 @@ const clearSelection = () => {
|
|
|
1188
1188
|
<!-- Activity feed. -->
|
|
1189
1189
|
<section class="flex flex-col gap-1.5">
|
|
1190
1190
|
<h3
|
|
1191
|
-
class="text-xs font-semibold
|
|
1191
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1192
1192
|
>
|
|
1193
1193
|
Activity
|
|
1194
1194
|
</h3>
|
|
@@ -1311,7 +1311,7 @@ const longDate = (value: string) =>
|
|
|
1311
1311
|
variant — same identity-cell rule as the invoices table. -->
|
|
1312
1312
|
<section class="flex flex-col gap-1.5">
|
|
1313
1313
|
<h3
|
|
1314
|
-
class="text-xs font-semibold
|
|
1314
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1315
1315
|
>
|
|
1316
1316
|
Recent invoices
|
|
1317
1317
|
</h3>
|
|
@@ -1102,7 +1102,7 @@ const formattedSize = computed(() => {
|
|
|
1102
1102
|
class="flex-1"
|
|
1103
1103
|
:model-value="upload.progress"
|
|
1104
1104
|
/>
|
|
1105
|
-
<span class="text-xs
|
|
1105
|
+
<span class="text-xs text-[color:var(--bb-text-muted)] tabular-nums"
|
|
1106
1106
|
>{{ upload.progress }}%</span
|
|
1107
1107
|
>
|
|
1108
1108
|
</div>
|
|
@@ -1539,7 +1539,7 @@ const clearSelection = () => {
|
|
|
1539
1539
|
<section class="flex flex-col gap-1.5">
|
|
1540
1540
|
<div class="flex items-center justify-between">
|
|
1541
1541
|
<h3
|
|
1542
|
-
class="text-xs font-semibold
|
|
1542
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1543
1543
|
>
|
|
1544
1544
|
Extracted fields
|
|
1545
1545
|
</h3>
|
|
@@ -1579,7 +1579,7 @@ const clearSelection = () => {
|
|
|
1579
1579
|
one-click cell as in the table. -->
|
|
1580
1580
|
<section class="flex flex-col gap-1.5">
|
|
1581
1581
|
<h3
|
|
1582
|
-
class="text-xs font-semibold
|
|
1582
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1583
1583
|
>
|
|
1584
1584
|
Details
|
|
1585
1585
|
</h3>
|
|
@@ -1596,7 +1596,7 @@ const clearSelection = () => {
|
|
|
1596
1596
|
<!-- Activity feed. -->
|
|
1597
1597
|
<section class="flex flex-col gap-1.5">
|
|
1598
1598
|
<h3
|
|
1599
|
-
class="text-xs font-semibold
|
|
1599
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1600
1600
|
>
|
|
1601
1601
|
Activity
|
|
1602
1602
|
</h3>
|
|
@@ -1746,7 +1746,7 @@ const longDate = (value: string) =>
|
|
|
1746
1746
|
<!-- Recent receipts: names drill down again — the stack keeps growing. -->
|
|
1747
1747
|
<section class="flex flex-col gap-1.5">
|
|
1748
1748
|
<h3
|
|
1749
|
-
class="text-xs font-semibold
|
|
1749
|
+
class="text-xs font-semibold tracking-wide text-[color:var(--bb-text-muted)] uppercase"
|
|
1750
1750
|
>
|
|
1751
1751
|
Recent receipts
|
|
1752
1752
|
</h3>
|
|
@@ -1764,7 +1764,7 @@ const longDate = (value: string) =>
|
|
|
1764
1764
|
{{ recent.filename }}
|
|
1765
1765
|
</BbButton>
|
|
1766
1766
|
<BbBadge variant="outline">{{ recent.status }}</BbBadge>
|
|
1767
|
-
<span class="text-xs
|
|
1767
|
+
<span class="text-xs text-[color:var(--bb-text-muted)] tabular-nums">
|
|
1768
1768
|
{{ currency.format(recent.amount) }}
|
|
1769
1769
|
</span>
|
|
1770
1770
|
</li>
|