bitboss-ui 3.0.0-beta.0 → 3.0.0-beta.2

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 (35) hide show
  1. package/bin/bitboss-ui.mjs +133 -12
  2. package/dist/ai/changelog.json +1 -1
  3. package/dist/ai/components.json +2 -2
  4. package/dist/ai/guides/ai-router.md +2 -2
  5. package/dist/ai/guides/design-tokens.md +46 -6
  6. package/dist/ai/guides/installation-and-plugin-setup.md +71 -5
  7. package/dist/ai/guides/migration/components/bb-alert.md +37 -0
  8. package/dist/ai/guides/migration/components/bb-avatar.md +47 -8
  9. package/dist/ai/guides/migration/components/bb-badge.md +23 -1
  10. package/dist/ai/guides/migration/components/bb-button.md +64 -0
  11. package/dist/ai/guides/migration/components/bb-checkbox-group.md +55 -1
  12. package/dist/ai/guides/migration/components/bb-date-picker-input.md +9 -2
  13. package/dist/ai/guides/migration/components/bb-dialog.md +121 -11
  14. package/dist/ai/guides/migration/components/bb-icon.md +42 -0
  15. package/dist/ai/guides/migration/components/bb-offcanvas.md +35 -1
  16. package/dist/ai/guides/migration/components/bb-rating.md +52 -1
  17. package/dist/ai/guides/migration/components/bb-select.md +48 -0
  18. package/dist/ai/guides/migration/components/bb-table.md +156 -10
  19. package/dist/ai/guides/migration/components/bb-tabs.md +79 -1
  20. package/dist/ai/guides/migration/components/bb-text-input.md +23 -1
  21. package/dist/ai/guides/migration/components/bb-toast.md +44 -10
  22. package/dist/ai/guides/migration/components/use-confirm.md +48 -13
  23. package/dist/ai/guides/migration/v2-to-v3.md +626 -108
  24. package/dist/ai/index.md +9 -9
  25. package/dist/ai/source/BbDialog.md +0 -3
  26. package/dist/ai/source/BbDropdown.md +24 -1
  27. package/dist/ai/source/BbDropdownGroup.md +24 -1
  28. package/dist/index.d.ts +2 -1
  29. package/dist/llms-full.txt +1814 -367
  30. package/dist/llms-medium.txt +82 -16
  31. package/dist/llms.txt +11 -11
  32. package/dist/styles.css +1 -1
  33. package/llms.txt +12 -12
  34. package/package.json +2 -1
  35. package/scripts/lib/validate-bb-markup.mjs +105 -17
@@ -5,16 +5,16 @@
5
5
  > how to choose a component, and the design language — plus a catalogue
6
6
  > of every public component.
7
7
 
8
- Canonical URL: https://cdn.jsdelivr.net/npm/bitboss-ui@alpha/dist/llms-medium.txt
8
+ Canonical URL: https://cdn.jsdelivr.net/npm/bitboss-ui@beta/dist/llms-medium.txt
9
9
 
10
10
  Need more? Fetch the specific component contract you need — one hop, not
11
- the whole catalogue: https://cdn.jsdelivr.net/npm/bitboss-ui@alpha/dist/ai/<ComponentName>.md
12
- Machine-readable API surface: https://cdn.jsdelivr.net/npm/bitboss-ui@alpha/dist/ai/components.json
11
+ the whole catalogue: https://cdn.jsdelivr.net/npm/bitboss-ui@beta/dist/ai/<ComponentName>.md
12
+ Machine-readable API surface: https://cdn.jsdelivr.net/npm/bitboss-ui@beta/dist/ai/components.json
13
13
 
14
14
  ---
15
15
 
16
16
  <!-- dist/ai/guides/ai-router.md -->
17
- <!-- https://cdn.jsdelivr.net/npm/bitboss-ui@alpha/dist/ai/guides/ai-router.md -->
17
+ <!-- https://cdn.jsdelivr.net/npm/bitboss-ui@beta/dist/ai/guides/ai-router.md -->
18
18
 
19
19
  # AI Router
20
20
 
@@ -28,9 +28,9 @@ Package export entry: `bitboss-ui/ai` → `dist/ai/index.md`.
28
28
  Subpaths: `bitboss-ui/ai/components.json`, `bitboss-ui/ai/guides/…`, etc.
29
29
 
30
30
  **Not installed, or can only fetch URLs?** The same files are served from the
31
- published package at `https://cdn.jsdelivr.net/npm/bitboss-ui@alpha/dist/ai/…`.
31
+ published package at `https://cdn.jsdelivr.net/npm/bitboss-ui@beta/dist/ai/…`.
32
32
  If you can make only one request, fetch
33
- [`…@alpha/dist/llms-medium.txt`](https://cdn.jsdelivr.net/npm/bitboss-ui@alpha/dist/llms-medium.txt)
33
+ [`…@beta/dist/llms-medium.txt`](https://cdn.jsdelivr.net/npm/bitboss-ui@beta/dist/llms-medium.txt)
34
34
  — this router plus the agent contract, setup, component picker, design language
35
35
  and the full component catalogue, in ~110 KB.
36
36
 
@@ -133,7 +133,7 @@ nothing else); the command names them if they are missing.
133
133
  ---
134
134
 
135
135
  <!-- dist/ai/guides/agent-contract.md -->
136
- <!-- https://cdn.jsdelivr.net/npm/bitboss-ui@alpha/dist/ai/guides/agent-contract.md -->
136
+ <!-- https://cdn.jsdelivr.net/npm/bitboss-ui@beta/dist/ai/guides/agent-contract.md -->
137
137
 
138
138
  # Agent Contract
139
139
 
@@ -391,7 +391,7 @@ case is not decidable from markup and has no hint.
391
391
  ---
392
392
 
393
393
  <!-- dist/ai/guides/installation-and-plugin-setup.md -->
394
- <!-- https://cdn.jsdelivr.net/npm/bitboss-ui@alpha/dist/ai/guides/installation-and-plugin-setup.md -->
394
+ <!-- https://cdn.jsdelivr.net/npm/bitboss-ui@beta/dist/ai/guides/installation-and-plugin-setup.md -->
395
395
 
396
396
  # Installation and Plugin Setup
397
397
 
@@ -403,16 +403,21 @@ Source of truth for integrating `bitboss-ui`. Two pieces are always required:
403
403
  ## 1) Install
404
404
 
405
405
  ```bash
406
- # v3 is a prerelease — the `@alpha` tag is REQUIRED.
406
+ # v3 is a prerelease — a dist-tag is REQUIRED.
407
407
  # A bare `npm install bitboss-ui` still resolves to v2, which has no build
408
408
  # plugin and no `dist/ai` knowledge base, so everything below silently fails.
409
- npm install bitboss-ui@alpha
409
+ npm install bitboss-ui@beta
410
410
  # recommended default icon set (any @iconify-json/* works)
411
411
  npm install -D @iconify-json/lucide
412
412
  ```
413
413
 
414
414
  Confirm you got v3 before continuing — `npm ls bitboss-ui` must report a
415
- `3.0.0-alpha.*` version. If it reports `2.x`, nothing in this guide applies.
415
+ `3.0.0-*` version. If it reports `2.x`, nothing in this guide applies.
416
+
417
+ **`@beta` is the current v3 channel.** `@alpha` still resolves, but it is
418
+ frozen at the last alpha and does not receive fixes — it is not simply an older
419
+ copy of the same line. `@latest` is the **v2** line and always will be until v3
420
+ goes stable, so never reach for it here.
416
421
 
417
422
  Peer dependency: `vue ^3.5.12` — the only required one. `@inertiajs/vue3` is an **optional** peer, needed only in Inertia apps.
418
423
 
@@ -609,6 +614,48 @@ import 'bitboss-ui/styles.css';
609
614
  import 'bitboss-ui/reset.css';
610
615
  ```
611
616
 
617
+ **Exception — an app that needs its own CSS to load _before_ the library.**
618
+ Auto-injection is library-first and not configurable: the runtime plugin
619
+ inserts its `<style>` **before the first** `style`/`link[rel="stylesheet"]`
620
+ already in `<head>` (`src/utils/injectLibraryStyles.ts`), so the guaranteed
621
+ order above is exactly what you get and every app stylesheet — your Tailwind
622
+ entry included — lands after the library. There is no option to inject later.
623
+
624
+ That is the order most apps want. It is the wrong order if you need library
625
+ rules to beat Tailwind's Preflight **by source order**, which is the case on
626
+ **Tailwind v3**: `@tailwind base` compiles to ordinary unlayered CSS, so under
627
+ auto-injection Preflight sits after the library sheet and its element resets
628
+ (`button`, `input`, `h1`, …) win every equal-specificity tie. `injectStyles:
629
+ false` + `resetCss: false` (the default) disables injection entirely and hands
630
+ you the order:
631
+
632
+ ```ts
633
+ // vite.config.ts / the `bitboss` key in nuxt.config.ts
634
+ bitbossUi({ iconDir: '…', injectStyles: false, resetCss: false });
635
+ ```
636
+
637
+ ```ts
638
+ // app entry — order is yours now
639
+ import './app.css'; // your Tailwind entry
640
+ import 'bitboss-ui/styles.css'; // after Tailwind, so library rules win the ties
641
+ ```
642
+
643
+ Leave `resetCss` at `false` here — Preflight already reset everything.
644
+ Nothing else about the plugin changes; `injectStyles` controls only whether the
645
+ library injects its own `<style>`.
646
+
647
+ **Tailwind v4 apps do not need this** — source order does not decide their ties
648
+ at all. `@import 'tailwindcss'` puts Preflight in a real `@layer base` and
649
+ utilities in `@layer utilities`, and layered rules lose to unlayered rules of
650
+ equal specificity **regardless of source order**. `dist/styles.css` declares no
651
+ `@layer`, so the library wins those ties wherever it is injected: leave
652
+ auto-injection on. The same mechanic bites the other way, and silently — a
653
+ utility cannot re-size a Bb component either. `<BbButton class="h-12 px-6">`
654
+ loses to the library's own `.bb-button { height: var(--h); padding-left:
655
+ var(--px); padding-right: var(--px) }` (equal specificity, unlayered), with no
656
+ warning from anything. Size Bb components through their props and tokens, never
657
+ utilities. (Same trap as the scoped-`<style>` case above, one level up.)
658
+
612
659
  ## 6) Icons
613
660
 
614
661
  - `iconDir` (required) is scanned recursively for `.svg` files; each file becomes `local:<basename>`.
@@ -650,6 +697,15 @@ When `true`, the **dev server** adds `./node_modules/.bitboss-ui/local-icons.jso
650
697
 
651
698
  When `true`, the **dev server** registers the bitboss-ui MCP server in each project-scoped agent-harness config on boot — `.mcp.json` (Claude Code), `.cursor/mcp.json` (Cursor), and `.vscode/mcp.json` (VS Code / Copilot) — so agents can query the knowledge base with no manual setup. The write is merge-safe (leaves other servers alone) and idempotent (only logs when it actually changes a file). Windsurf is intentionally **not** written here: its config is global (`~/.codeium`), and silently editing a home-dir file that affects every project on the machine from a dev-server boot would be surprising — run `npx bitboss-ui ai-init --mcp` to register Windsurf too. This flag is the zero-command equivalent of that command's project-scoped writes. The MCP server's own runtime — `@modelcontextprotocol/sdk` and `zod` — ships as **optional peer dependencies** (~12 MB, more than every runtime dependency of the library combined, and loaded by nothing else), so install them with `npm i -D @modelcontextprotocol/sdk zod` before the harness first launches the server; both this flag and `ai-init --mcp` warn when they are missing.
652
699
 
700
+ **MCP is a convenience, not a requirement, and skipping it costs no
701
+ knowledge.** The server is a reader over files the install already put on disk
702
+ — every tool `readFileSync`s out of `node_modules/bitboss-ui/dist/ai/` (plus
703
+ `dist/styles.css` for the token lookup). An agent that opens that directory
704
+ itself has the identical knowledge base, `npx bitboss-ui check` runs without the
705
+ peers, and `ai-init` (no `--mcp`) still writes the harness pointers. If you are
706
+ migrating under a "no new dependencies" constraint, leave `mcp` at `false`,
707
+ skip `--mcp`, and point your agent at `dist/ai/guides/ai-router.md`.
708
+
653
709
  ### `inertiaLinkName?: string` (default: `'Link'`)
654
710
 
655
711
  Global component name used for Inertia links. **Optional** — when nothing is
@@ -828,7 +884,17 @@ than inventing hues.
828
884
 
829
885
  The package ships its agent docs in `node_modules/bitboss-ui/dist/ai/`. **Start at** `guides/ai-router.md`, then the catalogue `index.md`. Run `npx bitboss-ui ai-init` in the consumer project to inject harness-agnostic pointers (AGENTS.md, Cursor rules, Copilot instructions, Claude skill, Windsurf rules) so coding agents discover them without a vendor lock-in. After generating Bb\* markup, run `npx bitboss-ui check` (supports `--json`) so unknown props fail before review.
830
886
 
831
- Add `--mcp` to also register a live MCP server (`npx bitboss-ui@<installed version> mcp`, pinned so npx can never fetch a different version from the registry) the harness launches on demand — it merges the entry (never overwriting other servers) into `.mcp.json` (Claude Code), `.cursor/mcp.json` (Cursor), `.vscode/mcp.json` (VS Code / Copilot), and `~/.codeium/windsurf/mcp_config.json` (Windsurf). **Windsurf's config is global** — it has no per-project scope, so registering it affects every project on the machine; that is why only the explicit `ai-init --mcp` command writes it, while the plugin's `mcp: true` dev-server flag (§7) auto-registers the project-scoped harnesses only. Install the server's optional peers first — `npm i -D @modelcontextprotocol/sdk zod` — they are not dependencies of the library (~12 MB used only by the MCP server); the command warns if they are absent.
887
+ **Three tiers ship under `dist/ai/`**, and the third one is easy to miss:
888
+ `guides/` + `recipes/` are the authored prose; `<Name>.md` at the root is the
889
+ generated typed contract for each component (props, slots, events, examples);
890
+ `source/<Name>.md` is that same component's **complete implementation** —
891
+ `.vue` template, `types.ts` and `index.css` in one file, one per component
892
+ including the internal ones the package does not export. Read the source tier
893
+ when the contract cannot answer the question — the usual case is rebuilding
894
+ chrome around a control the library does not ship, since the class names such a
895
+ template emits are already styled by the public `bitboss-ui/styles.css`.
896
+
897
+ Add `--mcp` to also register a live MCP server (`npx bitboss-ui@<installed version> mcp`, pinned so npx can never fetch a different version from the registry) the harness launches on demand — it merges the entry (never overwriting other servers) into `.mcp.json` (Claude Code), `.cursor/mcp.json` (Cursor), `.vscode/mcp.json` (VS Code / Copilot), and `~/.codeium/windsurf/mcp_config.json` (Windsurf). **Windsurf's config is global** — it has no per-project scope, so registering it affects every project on the machine; that is why only the explicit `ai-init --mcp` command writes it, while the plugin's `mcp: true` dev-server flag (§7) auto-registers the project-scoped harnesses only. Install the server's optional peers first — `npm i -D @modelcontextprotocol/sdk zod` — they are not dependencies of the library (~12 MB used only by the MCP server); the command warns if they are absent. **`--mcp` is optional and skipping it loses you nothing but the transport** — the server only reads the `dist/ai/` files listed above, so run plain `ai-init` and let the agent read that directory if you cannot add the peers (see `mcp?: boolean` in §7).
832
898
 
833
899
  For a human-in-the-loop (and agent) safety net, add the `bitboss-ui/eslint-plugin` flat-config plugin (`...bitbossUi.configs.recommended`) so unknown/removed `Bb*` props surface as ESLint errors in the editor and CI — the same manifest checks as `bitboss-ui check`, reusing your `eslint-plugin-vue` parser. Real HTML attributes fall through untouched; escape hatches are the standard `<!-- eslint-disable-next-line bitboss-ui/no-unknown-attributes -->` and the rule's `allowAttributes` / `allowComponents` options. **`eslint --fix` also auto-migrates deprecated v2 props** (renames, boolean-polarity inversions like `allowWriting`→`disableWriting`, value remaps like BbToast `placement`→`position`, and deletion of inert removed props); structural migrations that need a slot/directive/CSS are reported but left by hand. **This library is TS-first (recipes ship `<script setup lang="ts">`, some with `generic="T"`), so wire `@typescript-eslint/parser` for both `.ts` and `.vue` files** — without it `vue-eslint-parser` throws a `Parsing error` on those files, which means no rule (including `no-unknown-attributes`) runs on them at all. See the README "ESLint plugin" section for the full config snippet (both parser blocks + the `npm i -D @typescript-eslint/parser` line) and the fix table. `recommended` also enables `bitboss-ui/no-active-class-on-root-link`: `active-class` on a link-capable `Bb*` component (`BbButton`/`BbBaseButton`/`BbBadgeButton`) matches by path PREFIX, so a link whose target is the literal root (`href="/"` / `to="/"`) reads as "active" on every URL — the rule flags that combination and points you at `exact-active-class` instead.
834
900
 
@@ -848,7 +914,7 @@ It also enables `bitboss-ui/require-partner-prop`: an opt-in prop set without it
848
914
  - [ ] build plugin configured: `bitboss-ui/vite` plugin or `bitboss-ui/nuxt` module (`bitboss` config key);
849
915
  - [ ] `iconDir` points at an existing SVG folder;
850
916
  - [ ] runtime plugin installed: `app.use(bitbossUiPlugin)` (automatic in Nuxt);
851
- - [ ] style strategy chosen: auto injection (default) or `injectStyles: false` + `import 'bitboss-ui/styles.css'`;
917
+ - [ ] style strategy chosen: auto injection (default) or `injectStyles: false` + `import 'bitboss-ui/styles.css'` — auto injection is always library-first, so a Tailwind **v3** app that needs Preflight to load before the library must take the second option (§5);
852
918
  - [ ] if a reset is required: `resetCss: true` or `import 'bitboss-ui/reset.css'`;
853
919
  - [ ] Inertia apps: `@inertiajs/vue3` installed (no link registration needed; set `inertiaLinkName` only if you register your own link wrapper).
854
920
  - [ ] building the [Layout Scaffold](../recipes/vue/layout-scaffold.md)? `npm i @vueuse/core` — `usePageShellContext.ts` imports `injectLocal`/`provideLocal` from it. This library depends on it too, so it can resolve via hoisting without being declared — don't rely on that; declare it in your own `package.json` or a strict installer (pnpm, Yarn PnP) will fail to resolve it.
@@ -861,7 +927,7 @@ If one of the checks fails, fix setup before creating component examples.
861
927
  ---
862
928
 
863
929
  <!-- dist/ai/guides/component-picker.md -->
864
- <!-- https://cdn.jsdelivr.net/npm/bitboss-ui@alpha/dist/ai/guides/component-picker.md -->
930
+ <!-- https://cdn.jsdelivr.net/npm/bitboss-ui@beta/dist/ai/guides/component-picker.md -->
865
931
 
866
932
  # Component Picker
867
933
 
@@ -1136,7 +1202,7 @@ See:
1136
1202
  ---
1137
1203
 
1138
1204
  <!-- dist/ai/guides/design-language.md -->
1139
- <!-- https://cdn.jsdelivr.net/npm/bitboss-ui@alpha/dist/ai/guides/design-language.md -->
1205
+ <!-- https://cdn.jsdelivr.net/npm/bitboss-ui@beta/dist/ai/guides/design-language.md -->
1140
1206
 
1141
1207
  # Design Language
1142
1208
 
@@ -1721,7 +1787,7 @@ text, `--bb-label-weight`
1721
1787
 
1722
1788
  ## Component catalogue
1723
1789
 
1724
- Every public component. Open one contract at `https://cdn.jsdelivr.net/npm/bitboss-ui@alpha/dist/ai/<Name>.md` before using it — never guess a prop name.
1790
+ Every public component. Open one contract at `https://cdn.jsdelivr.net/npm/bitboss-ui@beta/dist/ai/<Name>.md` before using it — never guess a prop name.
1725
1791
 
1726
1792
  - **BbAccordion** — Expands and collapses a content panel.
1727
1793
  - **BbAlert** — Shows contextual status messages.
package/dist/llms.txt CHANGED
@@ -4,8 +4,8 @@
4
4
 
5
5
  ## AI Knowledge Base
6
6
 
7
- - [Core knowledge base](https://cdn.jsdelivr.net/npm/bitboss-ui@alpha/dist/llms-medium.txt): **Fetch this if you can only fetch one file** — hard rules, setup, component picker, design language, and the full component catalogue in ~70 KB.
8
- - [Complete knowledge base](https://cdn.jsdelivr.net/npm/bitboss-ui@alpha/dist/llms-full.txt): Everything concatenated (~2 MB). Bulk ingestion only — too large to prompt with.
7
+ - [Core knowledge base](https://cdn.jsdelivr.net/npm/bitboss-ui@beta/dist/llms-medium.txt): **Fetch this if you can only fetch one file** — hard rules, setup, component picker, design language, and the full component catalogue in ~70 KB.
8
+ - [Complete knowledge base](https://cdn.jsdelivr.net/npm/bitboss-ui@beta/dist/llms-full.txt): Everything concatenated (~2 MB). Bulk ingestion only — too large to prompt with.
9
9
  - [AI Router](ai/guides/ai-router.md): **Start here** — tiny hop map for any coding agent (which file to open next).
10
10
  - [Component index](ai/index.md): Full component catalogue with agent rules, grouped by category. Each entry links a typed contract (props/events/slots/v-model).
11
11
  - [Component manifest](ai/components.json): Machine-readable API surface of every component, for programmatic validation.
@@ -25,40 +25,40 @@
25
25
  - [Inertia Helpers](ai/guides/inertia-helpers.md): App-side toolkit for Laravel + Inertia apps — typed page props, lazy props, URL-driven filters, paginated/selection page contexts, promise forms, and navigation guards that pair with bitboss-ui pages.
26
26
  - [Migration v2 → v3](ai/guides/migration/v2-to-v3.md): Complete upgrade guide from bitboss-ui 2.x to 3.0 — plugin-based setup, token overhaul, variant registries, global behavioral changes, and the silent-failure audit playbook.
27
27
  - [Migration v2→v3: BbAlert](ai/guides/migration/components/bb-alert.md): showClose inverted to hideClose, theme replaced by typed variant.
28
- - [Migration v2→v3: BbAvatar](ai/guides/migration/components/bb-avatar.md): The color prop is removed — the initials fallback is always primary.
28
+ - [Migration v2→v3: BbAvatar](ai/guides/migration/components/bb-avatar.md): The color prop is removed — retheme the fallback through the --bg-color / --text-color locals.
29
29
  - [Migration v2→v3: BbBadge (and where your v2 badges went)](ai/guides/migration/components/bb-badge.md): The v2 BbBadge (floating count/dot) is now BbIndicator; the v3 BbBadge is a new inline pill that also replaces BbChip.
30
30
  - [Migration v2→v3: BbBreadcrumbs](ai/guides/migration/components/bb-breadcrumbs.md): Item keys must be strings, the text divider prop is gone, per-item slot names are normalized.
31
31
  - [Migration v2→v3: BbButton](ai/guides/migration/components/bb-button.md): Async click handlers now auto-track loading (behavior flip), built-in tooltip props removed, variant locked to the registry.
32
32
  - [Migration v2→v3: BbCheckbox / BbRadio / BbSwitch](ai/guides/migration/components/bb-checkbox.md): reverse polarity inverted (explicit values flip, default layout unchanged), checked narrowed to boolean, color removed, BbRadio's name no longer required.
33
- - [Migration v2→v3: BbCheckboxGroup / BbRadioGroup / BbSwitchGroup](ai/guides/migration/components/bb-checkbox-group.md): labelPosition renamed legendPosition, per-item disabled is now inert (use selectable), color and the option affix slots removed, BbRadioGroup's name no longer required.
33
+ - [Migration v2→v3: BbCheckboxGroup / BbRadioGroup / BbSwitchGroup](ai/guides/migration/components/bb-checkbox-group.md): labelPosition renamed legendPosition, per-item disabled is now inert (use selectable), color and the option affix slots removed, BbRadioGroup's name no longer required, and the shared bb-cr-container CSS block split into one per group.
34
34
  - [Migration v2→v3: BbChip (removed)](ai/guides/migration/components/bb-chip.md): BbChip is gone — BbBadge with clearable is the replacement; non-clearable chips were badges all along.
35
35
  - [Migration v2→v3: BbCollapsible](ai/guides/migration/components/bb-collapsible.md): The tag prop is removed; the root is always a div.
36
36
  - [Migration v2→v3: BbColorInput](ai/guides/migration/components/bb-color-input.md): picker renamed to eyeDropper.
37
37
  - [Migration v2→v3: BbColorPalette](ai/guides/migration/components/bb-color-palette.md): flip inverted to disableFlip, showArrow removed, picker renamed eyeDropper, update:open dropped, model updates never emit null.
38
38
  - [Migration v2→v3: BbDatePickerInput](ai/guides/migration/components/bb-date-picker-input.md): allowWriting inverted to disableWriting and hidePopover renamed to disableCalendar, both with a changed token set; the width prop is removed; adaptive mobile sheet by default; non-floating output carries the local offset instead of UTC `Z` (new `utc` prop restores v2 output).
39
- - [Migration v2→v3: BbDialog](ai/guides/migration/components/bb-dialog.md): showClose inverted to hideClose, several presentation props removed, default widths changed, adaptive bottom sheet on mobile by default.
39
+ - [Migration v2→v3: BbDialog](ai/guides/migration/components/bb-dialog.md): showClose inverted to hideClose, several presentation props and the #close/#description slots removed, default widths changed, adaptive bottom sheet on mobile by default, --bb-dialog-* tokens replaced by --bb-panel-p plus locals.
40
40
  - [Migration v2→v3: BbDropdown](ai/guides/migration/components/bb-dropdown.md): Items now expect text as the label and can carry variants/submenus; arrowPadding removed; adaptive mobile sheet on by default.
41
41
  - [Migration v2→v3: BbDropdownButton](ai/guides/migration/components/bb-dropdown-button.md): autoLoading renamed to disableAutoLoading, disabledWhileLoading and theme removed.
42
42
  - [Migration v2→v3: BbDropzone](ai/guides/migration/components/bb-dropzone.md): modelValue is typed, accept no longer throws and takes bare tokens, and the hidden native-submit input only renders when name is set.
43
43
  - [Migration v2→v3: BbIcon](ai/guides/migration/components/bb-icon.md): The required prop is renamed type→icon, color is removed, and the xxl size key becomes 2xl.
44
44
  - [Migration v2→v3: BbIntersection](ai/guides/migration/components/bb-intersection.md): Removed with no replacement — it wrapped IntersectionObserver and carried no styling; use @vueuse/core's useIntersectionObserver.
45
- - [Migration v2→v3: BbOffCanvas](ai/guides/migration/components/bb-offcanvas.md): direction→side; showClose→hideClose; size defaults change; adaptive drawer configs unify on offCanvasProps.
45
+ - [Migration v2→v3: BbOffCanvas](ai/guides/migration/components/bb-offcanvas.md): direction→side; showClose→hideClose; description and the #close/#description slots removed; size defaults change; adaptive drawer configs unify on offCanvasProps.
46
46
  - [Migration v2→v3: BbPagination](ai/guides/migration/components/bb-pagination.md): querykey renamed to queryKey; the loading prop is removed.
47
47
  - [Migration v2→v3: BbPopover](ai/guides/migration/components/bb-popover.md): Built-in close button, restoreFocus, theme, and the arrow are gone; close affordances move into your content.
48
- - [Migration v2→v3: BbRating](ai/guides/migration/components/bb-rating.md): color removed; name no longer required.
48
+ - [Migration v2→v3: BbRating](ai/guides/migration/components/bb-rating.md): color removed; name no longer required; the star state modifier renamed --highlighted to --filled/--empty; --bb-rating-size demoted to a local --size; input-position finally works.
49
49
  - [Migration v2→v3: BbSelect](ai/guides/migration/components/bb-select.md): allowWriting inverted to disableWriting, filterBy narrowed to string[], prefill value renamed, chevron/options slots removed, and two behavior changes (second click, mount-time coherence).
50
50
  - [Migration v2→v3: BbSelectPopover](ai/guides/migration/components/bb-select-popover.md): flip and allowWriting inverted, arrow props removed, filterBy narrowed, options slots replaced by header/footer; shares BbSelect's behavior changes.
51
51
  - [Migration v2→v3: BbSlider](ai/guides/migration/components/bb-slider.md): thumbTranslate inverted to disableThumbTranslate; string model values and color removed.
52
52
  - [Migration v2→v3: BbSmoothHeight](ai/guides/migration/components/bb-smooth-height.md): The `tag` prop is narrowed to `div | span`, and the inner measuring element now mirrors it instead of always being a `<div>`.
53
53
  - [Migration v2→v3: BbSpinner](ai/guides/migration/components/bb-spinner.md): The color prop is removed; spinners follow currentColor.
54
- - [Migration v2→v3: BbTable](ai/guides/migration/components/bb-table.md): allowSelectAll inverted to disableSelectAll; loading no longer blanks populated tables and now inerts rows; #loading is first-load-only; #no-data fills a full-width table cell instead of replacing the row.
55
- - [Migration v2→v3: BbTabs (was BbTab)](ai/guides/migration/components/bb-tabs.md): Component renamed; querykey→queryKey; animations default on; label slots renamed and all dynamic names/URL slugs normalized.
54
+ - [Migration v2→v3: BbTable](ai/guides/migration/components/bb-table.md): allowSelectAll inverted to disableSelectAll; loading no longer blanks populated tables and now inerts rows; #loading is first-load-only; #no-data fills a full-width table cell instead of replacing the row; columns gained sortable + rowClass, which collide with same-named consumer fields.
55
+ - [Migration v2→v3: BbTabs (was BbTab)](ai/guides/migration/components/bb-tabs.md): Component renamed; querykey→queryKey; animations default on; label slots renamed and all dynamic names/URL slugs normalized; the entire .bb-tab BEM tree renamed to .bb-tabs / .bb-tabs-list / .bb-tabs-panes.
56
56
  - [Migration v2→v3: BbTag](ai/guides/migration/components/bb-tag.md): modelValue is strictly string[] now, multiple is removed, and duplicates are rejected case-insensitively by default.
57
- - [Migration v2→v3: BbTextInput](ai/guides/migration/components/bb-text-input.md): The type prop narrows to the text-like input types — number/date values must move to their dedicated components.
57
+ - [Migration v2→v3: BbTextInput](ai/guides/migration/components/bb-text-input.md): The type prop narrows to the text-like input types — number/date values must move to their dedicated components; a bare `floating` attribute was never a prop, the spelling is label-mode="floating".
58
58
  - [Migration v2→v3: BbToast and toast()](ai/guides/migration/components/bb-toast.md): Host placement becomes position with a corner-based value set; toast() options rewritten (variant, duration, actions, portal).
59
59
  - [Migration v2→v3: BbTooltip](ai/guides/migration/components/bb-tooltip.md): timeout renamed to delay; theme replaced by typed variant; hideArrow is now a declared prop; block removed; modelValue is new.
60
60
  - [Migration v2→v3: BbTree](ai/guides/migration/components/bb-tree.md): Item model rewritten — payload moves under meta, open becomes expanded, identifier becomes itemValue, expansion is a v-model.
61
- - [Migration v2→v3: confirm() / useConfirm](ai/guides/migration/components/use-confirm.md): yesText/onYes/noText/onNo collapse into yes/no configs, actions becomes an array-or-false, labels are localized, footer buttons default md.
61
+ - [Migration v2→v3: confirm() / useConfirm](ai/guides/migration/components/use-confirm.md): yesText/onYes/noText/onNo collapse into yes/no configs, actions becomes an array-or-false, theme→variant, timeout→duration, autoClose flips to default-true, labels are localized, footer buttons default md.
62
62
  - [Migration v2→v3: useBroadcastChannelInstance](ai/guides/migration/components/use-broadcast-channel-instance.md): Removed — cross-tab messaging is not a UI concern; use useBroadcastChannel from @vueuse/core.
63
63
  - [Page Shell](ai/guides/page-shell.md): App-side page layout — topbar, content, and a right details sidebar driven by a stack-based context (push a record to peek it, pop to go back). The implementation ships in the per-platform Layout Scaffold recipe; this guide covers when and how to use it.
64
64
  - [Validated Forms (vee-validate)](ai/guides/validated-forms.md): The `bitboss-ui/validated` entrypoint — form controls pre-wired to vee-validate. Global rules give an effort-free `rules="required|email"` string syntax; BbForm hosts the form; requiredAsterisk marks required fields.