bitboss-ui 3.0.0-beta.20 → 3.0.0-beta.21
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/dist/ai/BbTable.md +206 -98
- package/dist/ai/changelog.json +21 -3
- package/dist/ai/components.json +40 -15
- package/dist/ai/guides/component-picker.md +18 -18
- package/dist/ai/guides/icons-policy.md +7 -3
- package/dist/ai/guides/installation-and-plugin-setup.md +11 -14
- package/dist/ai/guides/migration/components/bb-table.md +131 -17
- package/dist/ai/recipes/inertia/approvals-inbox.md +0 -1
- package/dist/ai/recipes/inertia/inline-edit-workspace.md +0 -1
- package/dist/ai/recipes/inertia/ownership-atlas.md +8 -9
- package/dist/ai/recipes/inertia/record-form.md +0 -1
- package/dist/ai/recipes/inertia/records-workspace.md +0 -1
- package/dist/ai/recipes/inertia/upload-center.md +0 -1
- package/dist/ai/recipes/nuxt/approvals-inbox.md +0 -1
- package/dist/ai/recipes/nuxt/inline-edit-workspace.md +0 -1
- package/dist/ai/recipes/nuxt/record-form.md +0 -1
- package/dist/ai/recipes/nuxt/records-workspace.md +0 -1
- package/dist/ai/recipes/nuxt/upload-center.md +0 -1
- package/dist/ai/recipes/vue/approvals-inbox.md +0 -1
- package/dist/ai/recipes/vue/inline-edit-workspace.md +0 -1
- package/dist/ai/recipes/vue/records-workspace.md +0 -1
- package/dist/ai/recipes/vue/upload-center.md +0 -1
- package/dist/ai/source/BbTable.md +564 -173
- package/dist/components/BbTable/BbTable.vue.d.ts +2 -0
- package/dist/components/BbTable/BbTable.vue_vue_type_script_setup_true_lang.js +865 -735
- package/dist/components/BbTable/types.d.ts +98 -46
- package/dist/components/BbTable/utils.d.ts +21 -16
- package/dist/components/BbTable/utils.js +8 -8
- package/dist/composables/useTableWidthContext.d.ts +24 -4
- package/dist/composables/useTableWidthContext.js +31 -28
- package/dist/deprecation/ai-deprecations.json.d.ts +22 -0
- package/dist/deprecation/ai-deprecations.json.js +1 -1
- package/dist/llms-full.txt +381 -173
- package/dist/llms-medium.txt +29 -32
- package/dist/vite.js +1 -1
- package/package.json +1 -1
- package/scripts/lib/eslint-plugin.mjs +9 -14
- package/scripts/lib/validate-bb-markup.mjs +0 -7
package/dist/llms-medium.txt
CHANGED
|
@@ -426,19 +426,16 @@ goes stable, so never reach for it here.
|
|
|
426
426
|
|
|
427
427
|
Peer dependency: `vue ^3.5.12` — the only required one. `@inertiajs/vue3` is an **optional** peer, needed only in Inertia apps.
|
|
428
428
|
|
|
429
|
-
`@iconify/collections
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
mean …?" suggestion for a mistyped icon name) never fire — a wrong provider
|
|
440
|
-
icon then surfaces only as `BbIcon`'s generic runtime `Icon "…" does not exist.`
|
|
441
|
-
Nothing else changes: icons that resolve still render, in dev and in production.
|
|
429
|
+
You do **not** need `@iconify/collections`. It is declared as an optional peer
|
|
430
|
+
for one reason only: when it happens to be installed, the dev-overlay message
|
|
431
|
+
for an unknown icon prefix can say for certain whether that prefix is a real
|
|
432
|
+
Iconify set ("requires `@iconify-json/mdi`, run …") or not ("neither an
|
|
433
|
+
installed set nor a known Iconify prefix"). Without it the same overlay fires
|
|
434
|
+
with a hedged wording ("no installed icon set has the prefix `mdi`; if it is an
|
|
435
|
+
Iconify set, run …"). A mistyped name inside a set you **have** installed
|
|
436
|
+
(`lucide:eye-misspelled`) is diagnosed from the set's own data in both cases,
|
|
437
|
+
with a "did you mean …?" suggestion. Nothing else changes: icons that resolve
|
|
438
|
+
still render, in dev and in production.
|
|
442
439
|
|
|
443
440
|
**Known-good toolchain:** TypeScript **5.x or 6.x** if your build gate runs
|
|
444
441
|
`vue-tsc`. Both type-check cleanly against the shipped `.d.ts`; the library
|
|
@@ -703,7 +700,7 @@ utilities. (Same trap as the scoped-`<style>` case above, one level up.)
|
|
|
703
700
|
## 6) Icons
|
|
704
701
|
|
|
705
702
|
- `iconDir` (required) is scanned recursively for `.svg` files; each file becomes `local:<basename>`.
|
|
706
|
-
- Provider icons (`lucide:pencil`, `mdi:home`, …) require the matching `@iconify-json/<prefix>` package installed in the consumer app.
|
|
703
|
+
- Provider icons (`lucide:pencil`, `mdi:home`, …) require the matching `@iconify-json/<prefix>` package installed in the consumer app. In dev, every `prefix:name` the registry does not know produces a Vite error overlay with the fix: a mistyped name inside an installed set gets a "did you mean …?" hint, and an uninstalled prefix gets the list of installed sets plus the `npm install -D @iconify-json/<prefix>` command (the optional `@iconify/collections` peer only sharpens that wording, see [Install](#1-install)). A missing `local:` icon is a missing file in `iconDir` and surfaces as `BbIcon`'s runtime error naming it. Production builds report none of this — the scan simply drops what does not resolve, so a wrong name fails at runtime there.
|
|
707
704
|
- Production builds bundle **only statically referenced** provider icons — write icon names as literal strings (`icon="lucide:trash-2"`), never assemble them dynamically.
|
|
708
705
|
- The plugin also writes `node_modules/.bitboss-ui/local-icons.json` and (in dev, unless `vscodeSettings: false`) wires `.vscode/settings.json` so the Iconify editor extension previews local icons.
|
|
709
706
|
|
|
@@ -1227,24 +1224,24 @@ a composable you want is not in this corpus's `composables/` folder — it is no
|
|
|
1227
1224
|
here.** Check this list before inventing a name; if the need is genuinely absent,
|
|
1228
1225
|
compose it or write it yourself.
|
|
1229
1226
|
|
|
1230
|
-
| Assumed component or composable | Reality
|
|
1231
|
-
| -------------------------------------------------------------- |
|
|
1232
|
-
| `BbColumnManager` — show/hide/reorder columns | Does not exist as a component. Order is `v-model:order` on `BbTable` (an array of keys any panel can write; `reorderable` adds the built-in header drag + keyboard handle); visibility is
|
|
1233
|
-
| `BbKanban` / drag-and-drop board | Does not exist. There is no reusable DnD primitive in the library (`BbTable`'s header drag is internal to the table) — compose the board from `BbTable` (a table/list view of the same data) or hand-roll the drag-and-drop interaction yourself.
|
|
1234
|
-
| `BbModal` | It is [BbDialog](../BbDialog.md).
|
|
1235
|
-
| `BbDrawer` / `BbSheet` | It is [BbOffCanvas](../BbOffCanvas.md).
|
|
1236
|
-
| `BbCombobox` / `BbAutocomplete` | It is [BbSelect](../BbSelect.md) / [BbSelectPopover](../BbSelectPopover.md) — search is built in, see `disable-writing`.
|
|
1237
|
-
| `BbToggle` / `BbToggleGroup` | It is [BbButton](../BbButton.md) with `v-model` (+ `true-value` / `false-value`), which owns `aria-pressed` and the active class.
|
|
1238
|
-
| `TagChip` / colored, read-only tag chip | It is [BbBadge](../BbBadge.md) — [BbTag](../BbTag.md) is a tags-_input_ only, not a display component. Use `BbBadge` with a registered `soft-*` variant for a fixed palette, or a one-off `--bg`/`--color` override per row for arbitrary/data-driven colors (BbBadge.md § One-off colors) — not a registered variant per distinct color.
|
|
1239
|
-
| `BbTab` (singular) | The consumer API is [BbTabs](../BbTabs.md) / `BbTabsRoot`. `BbTab` appears only as the **v2 "before" side** of the migration diffs.
|
|
1240
|
-
| `BbCard` | Does not exist — a card is a `<div>` with tokens. See [design-language](./design-language.md).
|
|
1241
|
-
| `BbList` / `BbListItem` / `BbDescriptionList` | Do not exist — a list row is an `<li>` with tokens, and [BbBaseButton](../BbBaseButton.md) makes the whole row navigable. See the note under Data Display.
|
|
1242
|
-
| `useLiveFeed` / any polling or cross-tab feed helper | Does not exist, and neither does a cross-tab helper — `useBroadcastChannelInstance` was removed (cross-tab messaging is not a UI concern). Use `useBroadcastChannel` from `@vueuse/core`; the polling and the merge are yours.
|
|
1243
|
-
| `BbStepper` / `BbWizard` | Does not exist as a component; the wizard-form recipe composes one.
|
|
1244
|
-
| `BbSkeleton` (standalone) | Only `BbTable` ships skeletons, via the column `skeleton` field.
|
|
1245
|
-
| `BbCommand` / command palette | Does not exist. Compose `BbDialog` + `BbSelectPopover`.
|
|
1246
|
-
| `BbCalendar` (month / scheduling view) | Does not exist. [BbDatePicker](../BbDatePicker.md) is a picker, not a calendar surface.
|
|
1247
|
-
| `BbChart` / `BbGraph`, `BbCarousel`, `BbTimeline`, `BbDivider` | Do not exist. No charting, carousel or timeline primitive ships here.
|
|
1227
|
+
| Assumed component or composable | Reality |
|
|
1228
|
+
| -------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
1229
|
+
| `BbColumnManager` — show/hide/reorder columns | Does not exist as a component. Order is `v-model:order` on `BbTable` (an array of keys any panel can write; `reorderable` adds the built-in header drag + keyboard handle); visibility is `hidden: true` on the column definition (the column stays declared and keeps its slot in the order; header slots get a `hideColumn()` that fires `hide:column`). Compose the panel from `BbPopover` + `BbCheckbox`. |
|
|
1230
|
+
| `BbKanban` / drag-and-drop board | Does not exist. There is no reusable DnD primitive in the library (`BbTable`'s header drag is internal to the table) — compose the board from `BbTable` (a table/list view of the same data) or hand-roll the drag-and-drop interaction yourself. |
|
|
1231
|
+
| `BbModal` | It is [BbDialog](../BbDialog.md). |
|
|
1232
|
+
| `BbDrawer` / `BbSheet` | It is [BbOffCanvas](../BbOffCanvas.md). |
|
|
1233
|
+
| `BbCombobox` / `BbAutocomplete` | It is [BbSelect](../BbSelect.md) / [BbSelectPopover](../BbSelectPopover.md) — search is built in, see `disable-writing`. |
|
|
1234
|
+
| `BbToggle` / `BbToggleGroup` | It is [BbButton](../BbButton.md) with `v-model` (+ `true-value` / `false-value`), which owns `aria-pressed` and the active class. |
|
|
1235
|
+
| `TagChip` / colored, read-only tag chip | It is [BbBadge](../BbBadge.md) — [BbTag](../BbTag.md) is a tags-_input_ only, not a display component. Use `BbBadge` with a registered `soft-*` variant for a fixed palette, or a one-off `--bg`/`--color` override per row for arbitrary/data-driven colors (BbBadge.md § One-off colors) — not a registered variant per distinct color. |
|
|
1236
|
+
| `BbTab` (singular) | The consumer API is [BbTabs](../BbTabs.md) / `BbTabsRoot`. `BbTab` appears only as the **v2 "before" side** of the migration diffs. |
|
|
1237
|
+
| `BbCard` | Does not exist — a card is a `<div>` with tokens. See [design-language](./design-language.md). |
|
|
1238
|
+
| `BbList` / `BbListItem` / `BbDescriptionList` | Do not exist — a list row is an `<li>` with tokens, and [BbBaseButton](../BbBaseButton.md) makes the whole row navigable. See the note under Data Display. |
|
|
1239
|
+
| `useLiveFeed` / any polling or cross-tab feed helper | Does not exist, and neither does a cross-tab helper — `useBroadcastChannelInstance` was removed (cross-tab messaging is not a UI concern). Use `useBroadcastChannel` from `@vueuse/core`; the polling and the merge are yours. |
|
|
1240
|
+
| `BbStepper` / `BbWizard` | Does not exist as a component; the wizard-form recipe composes one. |
|
|
1241
|
+
| `BbSkeleton` (standalone) | Only `BbTable` ships skeletons, via the column `skeleton` field. |
|
|
1242
|
+
| `BbCommand` / command palette | Does not exist. Compose `BbDialog` + `BbSelectPopover`. |
|
|
1243
|
+
| `BbCalendar` (month / scheduling view) | Does not exist. [BbDatePicker](../BbDatePicker.md) is a picker, not a calendar surface. |
|
|
1244
|
+
| `BbChart` / `BbGraph`, `BbCarousel`, `BbTimeline`, `BbDivider` | Do not exist. No charting, carousel or timeline primitive ships here. |
|
|
1248
1245
|
|
|
1249
1246
|
App chrome — an app shell, sidebar, page header, selection dock — is
|
|
1250
1247
|
deliberately **not** a component: it is yours to own. The per-platform
|
package/dist/vite.js
CHANGED
|
@@ -646,7 +646,7 @@ function tt(t) {
|
|
|
646
646
|
let t = b(e);
|
|
647
647
|
return t ? [`\t${JSON.stringify(e)}: () => import(${JSON.stringify(Q + t.prefix + "/" + t.name)}).then(m => m.default),`] : [];
|
|
648
648
|
}).join("\n");
|
|
649
|
-
return `const _local = import.meta.glob(${JSON.stringify(a)}, { query: '?raw', import: 'default' });\nconst _localIcons = Object.fromEntries(Object.entries(_local).map(([k, l]) => { const f = k.split(/[/\\\\]+/).pop(); return [\`local:\${f.replace(/\\.svg$/i, '')}\`, l]; }));\nconst _icons = {\n` + (u ? u + "\n" : "") + `\t..._localIcons,\n};\nconst _ip = new Set(${JSON.stringify(Array.from(_))});\nconst _loaded = new Set(${JSON.stringify(Array.from(m.keys()))});\nexport const icons = import.meta.env.DEV\n\t? new Proxy(_icons, {\n\t\tget(t, k) {\n\t\t\tif (k in t || typeof k !== 'string' || !k.includes(':')) return t[k];\n\t\t\tconst _c = k.indexOf(':'); const _p = k.slice(0, _c); const _n = k.slice(_c + 1);\n\t\t\tif (
|
|
649
|
+
return `const _local = import.meta.glob(${JSON.stringify(a)}, { query: '?raw', import: 'default' });\nconst _localIcons = Object.fromEntries(Object.entries(_local).map(([k, l]) => { const f = k.split(/[/\\\\]+/).pop(); return [\`local:\${f.replace(/\\.svg$/i, '')}\`, l]; }));\nconst _icons = {\n` + (u ? u + "\n" : "") + `\t..._localIcons,\n};\nconst _ip = new Set(${JSON.stringify(Array.from(_))});\nconst _loaded = new Set(${JSON.stringify(Array.from(m.keys()))});\nconst _installed = _loaded.size ? \`installed sets: \${[..._loaded].join(', ')}\` : 'no @iconify-json/* set is installed';\nconst _fail = (msg) => () => { const _e = new Error(); import.meta.hot?.send('bitboss-ui:icon-missing', { msg, stack: _e.stack }); return Promise.reject(new Error(msg)); };\nexport const icons = import.meta.env.DEV\n\t? new Proxy(_icons, {\n\t\tget(t, k) {\n\t\t\tif (k in t || typeof k !== 'string' || !k.includes(':')) return t[k];\n\t\t\tconst _c = k.indexOf(':'); const _p = k.slice(0, _c); const _n = k.slice(_c + 1);\n\t\t\tif (_p === 'local' || !/^[a-z][a-z0-9-]*$/.test(_p) || !/^[a-z][a-z0-9-]*$/.test(_n)) return undefined;\n\t\t\tif (_loaded.has(_p)) { const _names = Object.keys(t).filter(x => x.startsWith(_p + ':')).map(x => x.slice(_c + 1)); const _sq = _n.replace(/-/g, ''); const _sug = _names.find(x => x.replace(/-/g, '') === _sq) ?? (_n.length >= 3 ? _names.find(x => x.includes(_n) || (x.length >= 3 && _n.includes(x))) : undefined); return _fail(\`[bitboss-ui] icon "\${k}" does not exist in the \${_p} icon set\` + (_sug ? \` — did you mean "\${_p}:\${_sug}"?\` : '')); }\n\t\t\tconst _pkg = \`@iconify-json/\${_p}\`; const _cmd = \`run: npm install -D \${_pkg}\`;\n\t\t\tif (_ip.has(_p)) return _fail(\`[bitboss-ui] "\${k}" requires "\${_pkg}" — \${_cmd} (\${_installed})\`);\n\t\t\tif (_ip.size) return _fail(\`[bitboss-ui] "\${k}" — "\${_p}" is neither an installed icon set nor a known Iconify prefix (\${_installed})\`);\n\t\t\treturn _fail(\`[bitboss-ui] "\${k}" — no installed icon set has the prefix "\${_p}" (\${_installed}). If "\${_p}" is an Iconify set, \${_cmd}\`);\n\t\t},\n\t})\n\t: _icons;\n`;
|
|
650
650
|
},
|
|
651
651
|
buildStart() {
|
|
652
652
|
v(), q(f(r, n.iconDir), r), !i && n.vscodeSettings !== !1 && Z(r, {
|
package/package.json
CHANGED
|
@@ -413,22 +413,17 @@ function attrBinding(startTag, camelName) {
|
|
|
413
413
|
/**
|
|
414
414
|
* `#slot` name ↔ gating prop pairs on `BbTable`. Each of these slots is
|
|
415
415
|
* rendered from a `v-if`/coherence check on the paired prop/model
|
|
416
|
-
* (`BbTable.vue`: `v-if="
|
|
417
|
-
*
|
|
418
|
-
*
|
|
419
|
-
*
|
|
420
|
-
*
|
|
421
|
-
*
|
|
422
|
-
*
|
|
416
|
+
* (`BbTable.vue`: `v-if="selectable"`, `v-if="item.expanded"` — itself driven
|
|
417
|
+
* by whatever `expandedItems` holds) — so a template that fills the slot but
|
|
418
|
+
* never sets the prop compiles clean, ships clean, and renders nothing, with
|
|
419
|
+
* no warning anywhere (W6-R1). `header:select` shares the same gating prop
|
|
420
|
+
* as its row-level counterpart and is deliberately NOT listed separately —
|
|
421
|
+
* flagging `#select` already catches the same missing `selectable` prop.
|
|
422
|
+
* `#actions` is NOT a pair any more: since 2026-09-07 the slot itself creates
|
|
423
|
+
* the actions column (the `actions` prop was retired), so an `#actions`
|
|
424
|
+
* template can never be orphaned.
|
|
423
425
|
*/
|
|
424
426
|
const TABLE_SLOT_PROP_PAIRS = [
|
|
425
|
-
{
|
|
426
|
-
slot: 'actions',
|
|
427
|
-
prop: 'actions',
|
|
428
|
-
missing: 'the `actions` prop is not set',
|
|
429
|
-
explain: 'the actions cell — and this slot — never renders',
|
|
430
|
-
action: 'Set the `actions` prop',
|
|
431
|
-
},
|
|
432
427
|
{
|
|
433
428
|
slot: 'select',
|
|
434
429
|
prop: 'selectable',
|
|
@@ -884,13 +884,6 @@ export function checkNavAttrFallthrough(manifest, name, attrName) {
|
|
|
884
884
|
* `check` alone shipped orphan slots believing the markup was clean (SWP-015).
|
|
885
885
|
*/
|
|
886
886
|
export const TABLE_SLOT_PROP_PAIRS = [
|
|
887
|
-
{
|
|
888
|
-
slot: 'actions',
|
|
889
|
-
prop: 'actions',
|
|
890
|
-
missing: 'the `actions` prop is not set',
|
|
891
|
-
explain: 'the actions cell — and this slot — never renders',
|
|
892
|
-
action: 'Set the `actions` prop',
|
|
893
|
-
},
|
|
894
887
|
{
|
|
895
888
|
slot: 'select',
|
|
896
889
|
prop: 'selectable',
|