bitboss-ui 3.0.0-beta.47 → 3.0.0-beta.48
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/bin/bitboss-ui.mjs +52 -1
- package/dist/ai/BbAccordion.md +1 -1
- package/dist/ai/BbButton.md +12 -3
- package/dist/ai/BbCollapsible.md +1 -1
- package/dist/ai/BbColorPalette.md +1 -1
- package/dist/ai/BbConfirm.md +8 -0
- package/dist/ai/BbConfirmPortal.md +1 -1
- package/dist/ai/BbDropdown.md +1 -1
- package/dist/ai/BbDropdownButton.md +1 -1
- package/dist/ai/BbHoverCard.md +15 -5
- package/dist/ai/BbHoverCardPortal.md +1 -1
- package/dist/ai/BbPopover.md +18 -17
- package/dist/ai/BbPopoverPortal.md +1 -1
- package/dist/ai/BbTabs.md +1 -1
- package/dist/ai/BbTabsRoot.md +1 -1
- package/dist/ai/BbTooltip.md +5 -3
- package/dist/ai/CommonPopover.md +1 -1
- package/dist/ai/changelog.json +45 -5
- package/dist/ai/components.json +26 -23
- package/dist/ai/guides/installation-and-plugin-setup.md +2 -0
- package/dist/ai/guides/migration/v2-to-v3.md +29 -11
- package/dist/ai/guides/migration/v3-beta-css-classes.md +29 -27
- package/dist/ai/guides/passthrough.md +2 -2
- package/dist/ai/manifest/components/BbAccordion.json +1 -1
- package/dist/ai/manifest/components/BbBreadcrumbs.tree.json +1 -1
- package/dist/ai/manifest/components/BbButton.json +1 -0
- package/dist/ai/manifest/components/BbButton.tree.json +1 -1
- package/dist/ai/manifest/components/BbCollapsible.json +1 -1
- package/dist/ai/manifest/components/BbColorPalette.json +1 -1
- package/dist/ai/manifest/components/BbConfirmPortal.json +5 -2
- package/dist/ai/manifest/components/BbDropdown.json +1 -1
- package/dist/ai/manifest/components/BbDropdown.tree.json +1 -1
- package/dist/ai/manifest/components/BbDropdownButton.json +1 -1
- package/dist/ai/manifest/components/BbDropdownButton.tree.json +1 -1
- package/dist/ai/manifest/components/BbHoverCard.json +1 -1
- package/dist/ai/manifest/components/BbHoverCardPortal.json +2 -2
- package/dist/ai/manifest/components/BbPopover.json +1 -1
- package/dist/ai/manifest/components/BbPopoverPortal.json +2 -2
- package/dist/ai/manifest/components/BbSelect.tree.json +2 -2
- package/dist/ai/manifest/components/BbSelectPopover.tree.json +1 -1
- package/dist/ai/manifest/components/BbTabs.json +1 -1
- package/dist/ai/manifest/components/BbTabsRoot.json +1 -1
- package/dist/ai/manifest/components/BbTag.tree.json +1 -1
- package/dist/ai/manifest/components/BbTooltip.json +1 -1
- package/dist/ai/manifest/components/ChipsBox.tree.json +1 -1
- package/dist/ai/manifest/components/CommonPopover.json +1 -1
- package/dist/ai/manifest/index.json +2 -2
- package/dist/ai/manifest/meta.json +3 -0
- package/dist/ai/manifest/types.api.json +3 -1
- package/dist/ai/manifest/types.wrapper.json +1 -0
- package/dist/ai/source/BbBadge.md +12 -8
- package/dist/ai/source/BbBadgeButton.md +12 -8
- package/dist/ai/source/BbButton.md +13 -5
- package/dist/ai/source/BbCollapsible.md +2 -1
- package/dist/ai/source/BbColorPalette.md +2 -1
- package/dist/ai/source/BbConfirm.md +17 -0
- package/dist/ai/source/BbConfirmPortal.md +19 -5
- package/dist/ai/source/BbDropdown.md +2 -1
- package/dist/ai/source/BbDropdownGroup.md +2 -1
- package/dist/ai/source/BbHoverCard.md +30 -3
- package/dist/ai/source/BbHoverCardPortal.md +18 -3
- package/dist/ai/source/BbPopover.md +33 -4
- package/dist/ai/source/BbPopoverPortal.md +19 -3
- package/dist/ai/source/BbTabs.md +3 -1
- package/dist/ai/source/BbTabsList.md +3 -1
- package/dist/ai/source/BbTabsPanels.md +3 -1
- package/dist/ai/source/BbTabsRoot.md +3 -1
- package/dist/ai/source/BbTooltip.md +34 -3
- package/dist/ai/source/CommonPopover.md +2 -1
- package/dist/components/BbButton/BbButton.vue_vue_type_script_setup_true_lang.js +8 -3
- package/dist/components/BbButton/types.d.ts +8 -3
- package/dist/components/BbButton/types.js +5 -1
- package/dist/components/BbCollapsible/types.d.ts +2 -1
- package/dist/components/BbColorPalette/types.d.ts +2 -1
- package/dist/components/BbConfirm/BbConfirmPortal.vue.d.ts +2 -5
- package/dist/components/BbConfirm/types.d.ts +15 -0
- package/dist/components/BbDropdown/types.d.ts +2 -1
- package/dist/components/BbHoverCard/BbHoverCard.vue_vue_type_script_setup_true_lang.js +145 -142
- package/dist/components/BbHoverCard/BbHoverCardPortal.vue.d.ts +2 -2
- package/dist/components/BbHoverCard/types.d.ts +14 -1
- package/dist/components/BbPopover/BbPopover.vue_vue_type_script_setup_true_lang.js +157 -155
- package/dist/components/BbPopover/BbPopoverPortal.vue.d.ts +2 -2
- package/dist/components/BbPopover/types.d.ts +15 -1
- package/dist/components/BbTabs/types.d.ts +3 -1
- package/dist/components/BbTooltip/BbTooltip.vue_vue_type_script_setup_true_lang.js +81 -73
- package/dist/components/BbTooltip/types.d.ts +3 -1
- package/dist/components/CommonPopover/types.d.ts +2 -1
- package/dist/directives/directivePortal.d.ts +13 -7
- package/dist/directives/directivePortal.js +1 -4
- package/dist/index.d.ts +3 -3
- package/dist/llms-full.txt +131 -79
- package/dist/llms-medium.txt +2 -0
- package/dist/styles.css +2 -2
- package/dist/types/passthrough.d.ts +1 -1
- package/dist/types/ptComponentMap.d.ts +1 -1
- package/dist/utils/versionCheck.js +1 -1
- package/package.json +1 -1
- package/scripts/lib/eslint-disable.mjs +5 -0
- package/scripts/lib/eslint-plugin.d.ts +4 -0
- package/scripts/lib/eslint-plugin.mjs +69 -0
- package/scripts/lib/portal-names.mjs +458 -0
- package/scripts/lib/unimported-components.mjs +5 -2
package/bin/bitboss-ui.mjs
CHANGED
|
@@ -78,6 +78,11 @@ import {
|
|
|
78
78
|
import { applyBitbossFixes } from '../scripts/lib/check-fix.mjs';
|
|
79
79
|
import { stringControlsFor } from '../scripts/lib/text-null-value.mjs';
|
|
80
80
|
import { projectResolution } from '../scripts/lib/unimported-components.mjs';
|
|
81
|
+
import {
|
|
82
|
+
MAY_HAVE_PORTALS,
|
|
83
|
+
portalFindings,
|
|
84
|
+
projectPortalIndex,
|
|
85
|
+
} from '../scripts/lib/portal-names.mjs';
|
|
81
86
|
import { cssClassFindings } from '../scripts/lib/css-class-check.mjs';
|
|
82
87
|
import {
|
|
83
88
|
cssLocalFindings,
|
|
@@ -1083,6 +1088,43 @@ async function checkCommand(
|
|
|
1083
1088
|
}
|
|
1084
1089
|
}
|
|
1085
1090
|
|
|
1091
|
+
// Q63.8: portal names, judged against the whole project's declarations
|
|
1092
|
+
// and call sites (scripts too: `confirm({ portal })` lives there). A full
|
|
1093
|
+
// run reads every source file; explicit paths / `--changed`, only those.
|
|
1094
|
+
// Markdown fences are never read: a doc names portals it never declares.
|
|
1095
|
+
{
|
|
1096
|
+
const portalIndex = projectPortalIndex(projectRoot);
|
|
1097
|
+
const PORTAL_SOURCE = /\.(?:vue|[cm]?[jt]sx?)$/;
|
|
1098
|
+
const TEST_FILE = /\.(?:test|spec)(?:-d)?\.[cm]?[jt]sx?$/;
|
|
1099
|
+
const portalScope = (
|
|
1100
|
+
changed ? changed.all : globs.length ? files : projectSources
|
|
1101
|
+
).filter(
|
|
1102
|
+
(path) =>
|
|
1103
|
+
PORTAL_SOURCE.test(path) &&
|
|
1104
|
+
!path.endsWith('.d.ts') &&
|
|
1105
|
+
!TEST_FILE.test(path)
|
|
1106
|
+
);
|
|
1107
|
+
for (const path of portalScope) {
|
|
1108
|
+
let content;
|
|
1109
|
+
try {
|
|
1110
|
+
content = readText(path);
|
|
1111
|
+
} catch {
|
|
1112
|
+
continue;
|
|
1113
|
+
}
|
|
1114
|
+
if (!MAY_HAVE_PORTALS.test(content)) continue;
|
|
1115
|
+
const isDisabled = disabledChecker(content);
|
|
1116
|
+
for (const finding of portalFindings(content, path, portalIndex)) {
|
|
1117
|
+
if (isDisabled(finding.line, ruleForFinding(finding))) {
|
|
1118
|
+
suppressed++;
|
|
1119
|
+
continue;
|
|
1120
|
+
}
|
|
1121
|
+
const entry = { file: relative(projectRoot, path), ...finding };
|
|
1122
|
+
if (finding.severity === 'warning') warnings.push(entry);
|
|
1123
|
+
else findings.push(entry);
|
|
1124
|
+
}
|
|
1125
|
+
}
|
|
1126
|
+
}
|
|
1127
|
+
|
|
1086
1128
|
for (const [name, file] of projectLocal) warnLocal(name, file);
|
|
1087
1129
|
// Q60.6: a `vue-tsc` below 3, read from package.json. One line, never
|
|
1088
1130
|
// fatal. (A missing `checkUnknownComponents` is no longer warned about:
|
|
@@ -1410,6 +1452,13 @@ Commands:
|
|
|
1410
1452
|
\`v-bb-hover-card="user-card"\` without the inner
|
|
1411
1453
|
quotes: an expression, not a portal name; write
|
|
1412
1454
|
\`"'user-card'"\`),
|
|
1455
|
+
\`unknown-portal\` (\`v-bb-hover-card\` /
|
|
1456
|
+
\`v-bb-popover\` / \`confirm()\` names a portal no
|
|
1457
|
+
\`<…Portal name>\` in the project declares; did-you-mean
|
|
1458
|
+
in the message), \`portal-family-mismatch\` (a
|
|
1459
|
+
hover-card portal opened by \`v-bb-popover\`, or the
|
|
1460
|
+
other way round; literal names only, a \`:name\`
|
|
1461
|
+
binding or a non-literal call site is never judged),
|
|
1413
1462
|
\`positional-provider\` (an \`items\` provider with
|
|
1414
1463
|
positional arguments: it receives one object,
|
|
1415
1464
|
\`({ query, reason, modelValue, signal })\`),
|
|
@@ -1470,7 +1519,9 @@ Commands:
|
|
|
1470
1519
|
component uses the \`Bb\` prefix; rename it),
|
|
1471
1520
|
\`single-reason\` (an \`items\` provider that tests
|
|
1472
1521
|
\`reason\` against one cause other than \`'search'\`;
|
|
1473
|
-
check \`reason !== 'search'\`), \`
|
|
1522
|
+
check \`reason !== 'search'\`), \`unused-portal\` (a
|
|
1523
|
+
\`<…Portal name>\` nothing opens: no call site and the
|
|
1524
|
+
name in no string of the project), \`vue-tsc-major\`
|
|
1474
1525
|
(\`vue-tsc\` below 3 in package.json: the generic
|
|
1475
1526
|
components' props go unchecked).
|
|
1476
1527
|
changelog [--since <version>] [--until <version>] [--json]
|
package/dist/ai/BbAccordion.md
CHANGED
|
@@ -643,7 +643,7 @@ A `pt` value written in `<script>` (a constant, a preset, a wrapper's
|
|
|
643
643
|
| Prop | Type | Default | Required | Description |
|
|
644
644
|
| --- | --- | --- | --- | --- |
|
|
645
645
|
| `pt:<part>`, `pt:<part>:<state>`, `pt` | `PtValue` | | | Passthrough — a class list, or `{ class, style, attrs }`, bound to one named part of the component; the state form applies only while that state is on. Parts: `header`, `panel`, `root`. States: `open`. What each one is: _Passthrough parts and states_ below. `pt` is the object form with the same keys minus the prefix (`{ icon: '…', 'icon:loading': '…' }`). See `guides/passthrough.md`. In `<script>` a `pt` value is typed `BbAccordionProps['pt']` (`PtValue` is not exported): § Typing `pt` in `<script>`. |
|
|
646
|
-
| `eager` | `boolean \| undefined` | `false` | |
|
|
646
|
+
| `eager` | `boolean \| undefined` | `false` | | Renders the content at mount, while closed, instead of on the first open. Closed content is `inert` and `aria-hidden` either way. |
|
|
647
647
|
| `headingLevel` | `1 \| 2 \| 3 \| 4 \| 5 \| 6 \| undefined` | | | Wraps the header button in a heading of this level (`<h1>`–`<h6>`), the APG accordion shape, so the header joins the page's outline. Match the level to where the accordion sits (a section under an `<h2>` takes `3`). No visual change: the heading's margins and font are reset. Omitted, there is no heading. |
|
|
648
648
|
| `id` | `string \| undefined` | | | The root's `id`; the header button's id (`<id>_header`) derives from it. Generated when omitted. |
|
|
649
649
|
| `modelValue` | `boolean \| undefined` | `false` | | Used by v-model to trigger opening / closing the collapsible. An accordion with no `v-model` starts closed. |
|
package/dist/ai/BbButton.md
CHANGED
|
@@ -494,6 +494,11 @@ const activeView = ref<IssueView>('list');
|
|
|
494
494
|
</script>
|
|
495
495
|
```
|
|
496
496
|
|
|
497
|
+
A toggle that is on carries `aria-pressed="true"` and the class
|
|
498
|
+
`bb-button--pressed`. Restyle that state with `pt:root:pressed` (or
|
|
499
|
+
`pt:icon:pressed`, `pt:text:pressed`), not with a selector of your own: it is
|
|
500
|
+
the state's contract.
|
|
501
|
+
|
|
497
502
|
Listen to `update:modelValue` only if you need side effects; state itself is
|
|
498
503
|
handled. For form-ish multi-selection prefer `BbCheckboxGroup` /
|
|
499
504
|
`BbRadioGroup`; toggle buttons are for immediate, tool-bar-like state.
|
|
@@ -835,8 +840,11 @@ label span). Typography inherits from `root`, so reach for `text` only when a
|
|
|
835
840
|
class must apply to the label ALONE — `truncate` on a long label that must not
|
|
836
841
|
clip the icons beside it. That span also carries the margin the label slides by
|
|
837
842
|
while the spinner is in, so a margin of your own fights the slide. States:
|
|
838
|
-
`loading`, `disabled
|
|
839
|
-
error.
|
|
843
|
+
`loading`, `disabled`, `pressed` (a `v-model` toggle that is on). A name
|
|
844
|
+
outside that list is a type error and an ESLint error. There is no `active`
|
|
845
|
+
state: a pointer press is Tailwind's `active:` variant (`pt:root="active:scale-95"`).
|
|
846
|
+
There is no `current` state either: a link to the current route is
|
|
847
|
+
`active-class` / `exact-active-class` (see Active state above).
|
|
840
848
|
|
|
841
849
|
**pt: a part, a part while loading, the object form**
|
|
842
850
|
|
|
@@ -1090,7 +1098,7 @@ Anti-patterns:
|
|
|
1090
1098
|
|
|
1091
1099
|
| Prop | Type | Default | Required | Description |
|
|
1092
1100
|
| --- | --- | --- | --- | --- |
|
|
1093
|
-
| `pt:<part>`, `pt:<part>:<state>`, `pt` | `PtValue` | | | Passthrough — a class list, or `{ class, style, attrs }`, bound to one named part of the component; the state form applies only while that state is on. Parts: `icon`, `root`, `spinner`, `text`. States: `disabled`, `loading`. What each one is: _Passthrough parts and states_ below. `pt` is the object form with the same keys minus the prefix (`{ icon: '…', 'icon:loading': '…' }`). See `guides/passthrough.md`. In `<script>` a `pt` value is typed `BbButtonProps['pt']` (`PtValue` is not exported): § Typing `pt` in `<script>`. |
|
|
1101
|
+
| `pt:<part>`, `pt:<part>:<state>`, `pt` | `PtValue` | | | Passthrough — a class list, or `{ class, style, attrs }`, bound to one named part of the component; the state form applies only while that state is on. Parts: `icon`, `root`, `spinner`, `text`. States: `disabled`, `loading`, `pressed`. What each one is: _Passthrough parts and states_ below. `pt` is the object form with the same keys minus the prefix (`{ icon: '…', 'icon:loading': '…' }`). See `guides/passthrough.md`. In `<script>` a `pt` value is typed `BbButtonProps['pt']` (`PtValue` is not exported): § Typing `pt` in `<script>`. |
|
|
1094
1102
|
| `activeClass` | `string \| undefined` | | | Class to apply when the link is active. |
|
|
1095
1103
|
| `append:icon` | `string \| undefined` | | | Icon to be added on the right of the text. |
|
|
1096
1104
|
| `ariaCurrentValue` | `"page" \| "step" \| "location" \| "date" \| "time" \| "true" \| "false" \| undefined` | `'page'` | | Value passed to the attribute `aria-current` when the link is exact active. |
|
|
@@ -1160,6 +1168,7 @@ States are listed in precedence order: when two are on at once and their entries
|
|
|
1160
1168
|
|
|
1161
1169
|
| State | When it is on |
|
|
1162
1170
|
| --- | --- |
|
|
1171
|
+
| `pressed` | Component-wide: a toggle button (`v-model`) is on — `aria-pressed="true"`, `--pressed` on the root. |
|
|
1163
1172
|
| `disabled` | Component-wide: the button is `disabled`. |
|
|
1164
1173
|
| `loading` | Component-wide: `loading` is on — the spinner shows and the button ignores the pointer. |
|
|
1165
1174
|
|
package/dist/ai/BbCollapsible.md
CHANGED
|
@@ -525,7 +525,7 @@ A `pt` value written in `<script>` (a constant, a preset, a wrapper's
|
|
|
525
525
|
| Prop | Type | Default | Required | Description |
|
|
526
526
|
| --- | --- | --- | --- | --- |
|
|
527
527
|
| `pt:<part>`, `pt:<part>:<state>`, `pt` | `PtValue` | | | Passthrough — a class list, or `{ class, style, attrs }`, bound to one named part of the component; the state form applies only while that state is on. Parts: `content`, `root`. States: `open`. What each one is: _Passthrough parts and states_ below. `pt` is the object form with the same keys minus the prefix (`{ icon: '…', 'icon:loading': '…' }`). See `guides/passthrough.md`. In `<script>` a `pt` value is typed `BbCollapsibleProps['pt']` (`PtValue` is not exported): § Typing `pt` in `<script>`. |
|
|
528
|
-
| `eager` | `boolean \| undefined` | `false` | |
|
|
528
|
+
| `eager` | `boolean \| undefined` | `false` | | Renders the content at mount, while closed, instead of on the first open. Closed content is `inert` and `aria-hidden` either way. |
|
|
529
529
|
| `modelValue` | `boolean \| undefined` | `false` | | Used by v-model to trigger opening / closing the collapsible. Optional, matching the runtime: `withDefaults` supplies `false`, so an omitted binding renders closed and Vue never warns. It was typed required while carrying that default, which made the manifest publish a row that was `required: true` AND `default: false` — a contradiction that read as a generator bug. |
|
|
530
530
|
| `tag` | `'div'` \| `'span'` | `"span"` | | Element rendered as the root, and mirrored by the inner animating element — so the pair is span-in-span or div-in-div, both valid. Keep the default inside phrasing content (a `<p>`); use `'div'` when the body is block content (paragraphs, lists, forms), which a `span` may not contain. |
|
|
531
531
|
| `transitionDuration` | `number \| undefined` | `250` | | How long the transition has to last in milliseconds |
|
|
@@ -760,7 +760,7 @@ A `pt` value written in `<script>` (a constant, a preset, a wrapper's
|
|
|
760
760
|
| `boundary` | `ElementOrComponentRefOrSelector \| undefined` | | | Constrains the popover within a bounding element. Accepts an HTMLElement, a Vue component ref, or a CSS selector string. |
|
|
761
761
|
| `disabled` | `boolean \| undefined` | `false` | | Disable all interaction (activator and palette). |
|
|
762
762
|
| `disableFlip` | `boolean \| undefined` | `false` | | Disables the automatic flip to the opposite side when the popover would overflow (flipping is on by default). |
|
|
763
|
-
| `eager` | `boolean \| undefined` | `false` | |
|
|
763
|
+
| `eager` | `boolean \| undefined` | `false` | | Renders the palette panel at mount instead of on the first open (the phone sheet's too). |
|
|
764
764
|
| `eyeDropper` | `boolean \| undefined` | `false` | | Show an eyedropper button inside the palette to sample any color on screen. Uses the native EyeDropper API — hidden automatically on unsupported browsers. |
|
|
765
765
|
| `label` | `string \| undefined` | | | Accessible label. The activator is named by it followed by the activator's own text, through `aria-labelledby`. Defaults to the locale string for "Open color picker" when omitted. |
|
|
766
766
|
| `modelValue` | `string \| null` | | yes | v-model: the current color as a `#RRGGBB` hex string (or `#RRGGBBAA` when `alpha` is enabled), or `null` when empty. |
|
package/dist/ai/BbConfirm.md
CHANGED
|
@@ -654,6 +654,14 @@ const removeMember = async () => {
|
|
|
654
654
|
When the portal owns its own action buttons, pass `actions: false` to hide the
|
|
655
655
|
standard footer and resolve from inside the slot with its `yes` / `no` helpers.
|
|
656
656
|
|
|
657
|
+
**Names are checked.** `bitboss-ui check` and the ESLint rule
|
|
658
|
+
`bitboss-ui/portal-names` (in `recommended`) read every literal
|
|
659
|
+
`confirm({ portal: 'name' })` in your scripts against the
|
|
660
|
+
`<BbConfirmPortal name>`s in your templates: a name no file declares fails,
|
|
661
|
+
with a did-you-mean, and `bitboss-ui/unused-portal` warns on a portal nothing
|
|
662
|
+
opens. A `portal` held in a variable, or `confirm(options)`, is never judged.
|
|
663
|
+
The slot's `props` is `any` per key, so `props.member.name` needs no cast.
|
|
664
|
+
|
|
657
665
|
### Size, fullscreen and focus
|
|
658
666
|
|
|
659
667
|
- `size` picks a maximum-width preset (`'xs'` … `'2xl'`, resolvable through
|
package/dist/ai/BbDropdown.md
CHANGED
|
@@ -2158,7 +2158,7 @@ A `pt` value written in `<script>` (a constant, a preset, a wrapper's
|
|
|
2158
2158
|
| `boundary` | `string \| Record<string, any> \| HTMLElement \| null \| undefined` | | | Constrains the dropdown within a bounding element. Accepts an HTMLElement, a Vue component ref, or a CSS selector string. |
|
|
2159
2159
|
| `compact` | `boolean \| undefined` | `false` | | Apply the compact density variant — the same ladder `BbSelect` uses, on both surfaces: flyout rows go 28px → 24px, sheet rows 44px → 36px. The label size does not change; density here is height, as it is for a select. A menu row is a touch target in a way a select option is not quite — a mis-tap fires the neighbouring COMMAND rather than picking the wrong value — so the compact sheet stops at 36px and never follows the flyout down to 24px. That is the same floor the select's sheet holds. |
|
|
2160
2160
|
| `disabled` | `boolean \| undefined` | `false` | | Disables the component |
|
|
2161
|
-
| `eager` | `boolean \| undefined` | `false` | |
|
|
2161
|
+
| `eager` | `boolean \| undefined` | `false` | | Renders the menu panel at mount instead of on the first open (the phone sheet's too). |
|
|
2162
2162
|
| `emptyText` | `string \| undefined` | | | Default placeholder text shown when a pipeline group resolves to no items. A group's own `emptyText` overrides this; both fall back to the localized `common.emptyText` (`'No data to display'`). |
|
|
2163
2163
|
| `enforceCoherence` | `boolean \| undefined` | `false` | | Default for pipeline groups: drop selections that are no longer present in a group's current items (e.g. after a `dependencies` re-fetch) from the selection and `v-model`. A group's own `enforceCoherence` overrides this. |
|
|
2164
2164
|
| `failedText` | `string \| undefined` | | | Default placeholder text shown when a pipeline group's latest load FAILED (its `items` getter threw). A group's own `failedText` overrides this; both fall back to the localized `common.failedText` (`"Couldn't load items"`). |
|
|
@@ -637,7 +637,7 @@ A `pt` value written in `<script>` (a constant, a preset, a wrapper's
|
|
|
637
637
|
| `compact` | `boolean \| undefined` | `false` | | Apply the compact density variant — the same ladder `BbSelect` uses, on both surfaces: flyout rows go 28px → 24px, sheet rows 44px → 36px. The label size does not change; density here is height, as it is for a select. A menu row is a touch target in a way a select option is not quite — a mis-tap fires the neighbouring COMMAND rather than picking the wrong value — so the compact sheet stops at 36px and never follows the flyout down to 24px. That is the same floor the select's sheet holds. |
|
|
638
638
|
| `disableAutoLoading` | `boolean \| undefined` | `false` | | Disables the automatic loading state that tracks async actions (enabled by default). Only affects the main action button: the split toggle half still mirrors the dropdown's internal async-action loading state. |
|
|
639
639
|
| `disabled` | `boolean \| undefined` | `false` | | Disables the component |
|
|
640
|
-
| `eager` | `boolean \| undefined` | `false` | |
|
|
640
|
+
| `eager` | `boolean \| undefined` | `false` | | Renders the menu panel at mount instead of on the first open (the phone sheet's too). |
|
|
641
641
|
| `id` | `string \| undefined` | | | Names this dropdown: the activator's id (unless it already has one), the menu's `menu_<id>`, and the key `useBbDropdownContext(id)` and a companion `BbDropdownGroup` pair by. Generated when omitted. |
|
|
642
642
|
| `items` | `BbDropdownItem[]` | `[]` | yes | Array used to render each dropdown button. They can act as `button`, as `a`, or as `router-link` as they are based on the functionality provided by `BbBaseButton`. Pass a flat array for a single group, nest arrays for divider-separated groups, or pass {@link InternalGroup} objects for titled / selectable sections. An item may carry its own `items` to open a submenu. The shapes can be mixed. |
|
|
643
643
|
| `loading` | `boolean \| undefined` | `false` | | Triggers a loading indicator. |
|
package/dist/ai/BbHoverCard.md
CHANGED
|
@@ -292,7 +292,8 @@ A directive has no slot, so the card's body is a **portal**, as in
|
|
|
292
292
|
`person-card` is `person` minus `card`, and nothing opens (`check` flags it).
|
|
293
293
|
The portal's slot gets `{ props, close }`.
|
|
294
294
|
- **A component:** `v-bb-hover-card="PersonCard"` renders `PersonCard` in the
|
|
295
|
-
card
|
|
295
|
+
card, with `portalProps` as its real props. It gets no `close`: content that
|
|
296
|
+
needs one is a named portal, or the `BbHoverCard` component.
|
|
296
297
|
- **The object form** takes either one as `portal`, data for it as
|
|
297
298
|
`portalProps` (the named portal's `props`, or the component's real props),
|
|
298
299
|
and any `BbHoverCard` prop: `{ portal: 'person-card', portalProps: { person },
|
|
@@ -302,6 +303,15 @@ The portal's content sees the page around it, as if it were written inline:
|
|
|
302
303
|
a component portal injects from where the trigger is, a named portal from
|
|
303
304
|
where its `<BbHoverCardPortal>` is declared.
|
|
304
305
|
|
|
306
|
+
**Names are checked.** A name is a string on one side and a `<BbHoverCardPortal
|
|
307
|
+
name>` on the other, so `bitboss-ui check` and the ESLint rules (in
|
|
308
|
+
`recommended`) read both across the project: `bitboss-ui/portal-names`
|
|
309
|
+
fails on a name no file declares, with a did-you-mean (`'renam'` → `rename`),
|
|
310
|
+
and on a popover portal opened by `v-bb-hover-card` (it names the family the portal belongs to); `bitboss-ui/unused-portal` warns on a
|
|
311
|
+
`<BbHoverCardPortal>` nothing opens. Only literal names are judged: a `:name`
|
|
312
|
+
binding or a name held in a variable is never reported. The slot's `props`
|
|
313
|
+
is `any` per key, so `props.person.name` needs no cast.
|
|
314
|
+
|
|
305
315
|
**A card per row, from the directive**
|
|
306
316
|
|
|
307
317
|
```vue
|
|
@@ -328,11 +338,11 @@ where its `<BbHoverCardPortal>` is declared.
|
|
|
328
338
|
<BbHoverCardPortal v-slot="{ props }" name="person-card">
|
|
329
339
|
<div class="grid gap-0.5">
|
|
330
340
|
<div class="font-medium text-(--bb-text)">
|
|
331
|
-
{{
|
|
341
|
+
{{ props.person.name }}
|
|
332
342
|
</div>
|
|
333
343
|
<div class="text-xs text-(--bb-text-muted)">
|
|
334
|
-
{{
|
|
335
|
-
{{
|
|
344
|
+
{{ props.person.team }} ·
|
|
345
|
+
{{ props.person.city }}
|
|
336
346
|
</div>
|
|
337
347
|
</div>
|
|
338
348
|
</BbHoverCardPortal>
|
|
@@ -454,7 +464,7 @@ value written in `<script>` is typed as `BbHoverCardProps['pt']`.
|
|
|
454
464
|
| `boundary` | `ElementOrComponentRefOrSelector \| undefined` | | | Constrains the card within a bounding element. When provided, the card will not overflow this container's bounds (e.g. a sidebar). Accepts an HTMLElement, a Vue component ref, or a CSS selector string. |
|
|
455
465
|
| `delay` | `number \| undefined` | `350` | | The delay in milliseconds before the card is shown: how long the pointer rests on the activator, or keyboard focus stays on it. BbTooltip's name; a different default, because a card that opened on every pass of the pointer would be in the way. Closing has a fixed grace instead (see the guide § Timing and the safe zone). |
|
|
456
466
|
| `disabled` | `boolean \| undefined` | `false` | | Disables the component. Disabling an open card closes it. |
|
|
457
|
-
| `eager` | `boolean \| undefined` | `false` | |
|
|
467
|
+
| `eager` | `boolean \| undefined` | `false` | | Renders the card's content at mount instead of on the first open. |
|
|
458
468
|
| `id` | `string \| undefined` | | | The activator's id (the card is `bbhc_<id>`, and is labelled by it once it holds a control). Generated when omitted. |
|
|
459
469
|
| `modelValue` | `boolean \| undefined` | `false` | | Used by v-model to open / close the card. A card with no `v-model` starts closed and is driven by hover and keyboard focus. |
|
|
460
470
|
| `offset` | `number \| undefined` | `4` | | Space the floating container will maintain from the activator. |
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
|
|
21
21
|
## Slots
|
|
22
22
|
|
|
23
|
-
- `default` — scope: `
|
|
23
|
+
- `default` — scope: `BbHoverCardPortalSlotProps` `{ props: P; close: () => void }` — The card's body. `props` is the directive's `portalProps`; `close` closes the card.
|
|
24
24
|
|
|
25
25
|
## See Also
|
|
26
26
|
|
package/dist/ai/BbPopover.md
CHANGED
|
@@ -360,8 +360,9 @@ A directive has no slot, so the body is a **portal**, as in `BbConfirm`:
|
|
|
360
360
|
it). The portal's slot gets `{ props, close }`: `props` is your
|
|
361
361
|
`portalProps`, `close` closes the popover.
|
|
362
362
|
- **A component:** `v-bb-popover="RenameForm"` renders `RenameForm` in the
|
|
363
|
-
popover; `portalProps` arrive as its real props
|
|
364
|
-
|
|
363
|
+
popover; `portalProps` arrive as its real props. It has no way to close the
|
|
364
|
+
popover: content that needs `close` is a named portal (its slot has it), or
|
|
365
|
+
the `BbPopover` component.
|
|
365
366
|
- **The object form** takes either one as `portal`, `portalProps`, and any
|
|
366
367
|
`BbPopover` prop (`width`, `scrollable`, `trigger`, …):
|
|
367
368
|
`{ portal: 'rename-report', portalProps: { report }, width: 260 }`. The
|
|
@@ -376,6 +377,15 @@ a field in a named portal declared inside the form. A `<BbPtScope>` around the
|
|
|
376
377
|
trigger styles the popover too. A component portal remounts on every open, so keep anything that must
|
|
377
378
|
survive between openings outside it.
|
|
378
379
|
|
|
380
|
+
**Names are checked.** A name is a string on one side and a `<BbPopoverPortal
|
|
381
|
+
name>` on the other, so `bitboss-ui check` and the ESLint rules (in
|
|
382
|
+
`recommended`) read both across the project: `bitboss-ui/portal-names`
|
|
383
|
+
fails on a name no file declares, with a did-you-mean (`'renam'` → `rename`),
|
|
384
|
+
and on a hover-card portal opened by `v-bb-popover` (it names the family the portal belongs to); `bitboss-ui/unused-portal` warns on a
|
|
385
|
+
`<BbPopoverPortal>` nothing opens. Only literal names are judged: a `:name`
|
|
386
|
+
binding or a name held in a variable is never reported. The slot's `props`
|
|
387
|
+
is `any` per key, so `props.report.title` needs no cast.
|
|
388
|
+
|
|
379
389
|
**Rename on every row, from the directive**
|
|
380
390
|
|
|
381
391
|
```vue
|
|
@@ -404,26 +414,17 @@ survive between openings outside it.
|
|
|
404
414
|
|
|
405
415
|
<!-- Declared once; renders only in the popover that opens. -->
|
|
406
416
|
<BbPopoverPortal v-slot="{ props, close }" name="rename-report">
|
|
407
|
-
<form
|
|
408
|
-
class="grid gap-2"
|
|
409
|
-
@submit.prevent="rename(props.report as Report, close)"
|
|
410
|
-
>
|
|
417
|
+
<form class="grid gap-2" @submit.prevent="rename(props.report, close)">
|
|
411
418
|
<BbTextInput
|
|
412
419
|
label="Title"
|
|
413
|
-
:model-value="draftOf(props.report
|
|
414
|
-
@update:model-value="drafts[
|
|
420
|
+
:model-value="draftOf(props.report)"
|
|
421
|
+
@update:model-value="drafts[props.report.id] = $event ?? ''"
|
|
415
422
|
/>
|
|
416
423
|
<div class="flex justify-end gap-2">
|
|
417
|
-
<BbButton
|
|
418
|
-
variant="ghost"
|
|
419
|
-
@click="discard(props.report as Report, close)"
|
|
420
|
-
>
|
|
424
|
+
<BbButton variant="ghost" @click="discard(props.report, close)">
|
|
421
425
|
Cancel
|
|
422
426
|
</BbButton>
|
|
423
|
-
<BbButton
|
|
424
|
-
:disabled="!draftOf(props.report as Report).trim()"
|
|
425
|
-
type="submit"
|
|
426
|
-
>
|
|
427
|
+
<BbButton :disabled="!draftOf(props.report).trim()" type="submit">
|
|
427
428
|
Save
|
|
428
429
|
</BbButton>
|
|
429
430
|
</div>
|
|
@@ -867,7 +868,7 @@ A `pt` value written in `<script>` (a constant, a preset, a wrapper's
|
|
|
867
868
|
| `adaptive` | `boolean \| undefined` | ``config.adaptive` (`true`)` | | On mobile viewports (below `config.mobileMaxWidth`), render the popover as a bottom-anchored, auto-sized off-canvas sheet instead of a floating panel. The `header`, `default` and `footer` slots are forwarded to the sheet. The `width` prop is intentionally ignored in this mode (it means a different thing for a sheet); pass `offCanvasProps` to size or otherwise customise the sheet. When unset, falls back to the global `config.adaptive`. |
|
|
868
869
|
| `boundary` | `ElementOrComponentRefOrSelector \| undefined` | | | Constrains the popover within a bounding element. When provided, the popover will not overflow this container's bounds (e.g. a sidebar). Accepts an HTMLElement, a Vue component ref, or a CSS selector string. |
|
|
869
870
|
| `disabled` | `boolean \| undefined` | `false` | | Disables the component. |
|
|
870
|
-
| `eager` | `boolean \| undefined` | `false` | |
|
|
871
|
+
| `eager` | `boolean \| undefined` | `false` | | Renders the panel's content at mount instead of on the first open (the phone sheet's too). |
|
|
871
872
|
| `focusTarget` | `string \| undefined` | | | Selector for the element that receives focus after opening. Defaults to the first focusable element inside the popover. |
|
|
872
873
|
| `id` | `string \| undefined` | | | The activator's id (the panel is `bbp_<id>` and is labelled by it). Generated when omitted. |
|
|
873
874
|
| `modelValue` | `boolean \| undefined` | `false` | | Used by v-model to open / close the popover. A popover with no `v-model` starts closed and is driven by its `trigger`. |
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
|
|
21
21
|
## Slots
|
|
22
22
|
|
|
23
|
-
- `default` — scope: `
|
|
23
|
+
- `default` — scope: `BbPopoverPortalSlotProps` `{ props: P; close: () => void }` — The popover body. `props` is the directive's `portalProps`; `close` closes the popover.
|
|
24
24
|
|
|
25
25
|
## See Also
|
|
26
26
|
|
package/dist/ai/BbTabs.md
CHANGED
|
@@ -1834,7 +1834,7 @@ A `pt` value written in `<script>` (a constant, a preset, a wrapper's
|
|
|
1834
1834
|
| `disableAnimateX` | `boolean \| undefined` | `false` | | Disables the horizontal slide transition between tab panels (enabled by default). |
|
|
1835
1835
|
| `disableAnimateY` | `boolean \| undefined` | `false` | | Disables the smooth height animation when switching between tab panels (enabled by default). |
|
|
1836
1836
|
| `disabled` | `boolean \| undefined` | `false` | | Disables the component |
|
|
1837
|
-
| `eager` | `boolean \| undefined` | `false` | |
|
|
1837
|
+
| `eager` | `boolean \| undefined` | `false` | | Renders every tab's panel at mount and keeps it mounted, hidden while inactive, instead of only the active one. One tab alone: its item's `eager`. |
|
|
1838
1838
|
| `headers` | `Record<string, string> \| undefined` | | | Additional HTTP headers forwarded to Inertia when navigation is triggered. Only meaningful in an Inertia context. |
|
|
1839
1839
|
| `id` | `string \| undefined` | | | The root's `id`, and the key `useBbTabsContext(id)` pairs by. Generated when omitted. |
|
|
1840
1840
|
| `items` | `BbTabsItem<K>[]` | | yes | Array of items that define the tabs in the component. |
|
package/dist/ai/BbTabsRoot.md
CHANGED
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
| `disableAnimateX` | `boolean \| undefined` | `false` | | Disables the horizontal slide transition between tab panels (enabled by default). |
|
|
23
23
|
| `disableAnimateY` | `boolean \| undefined` | `false` | | Disables the smooth height animation when switching between tab panels (enabled by default). |
|
|
24
24
|
| `disabled` | `boolean \| undefined` | `false` | | Disables the component |
|
|
25
|
-
| `eager` | `boolean \| undefined` | `false` | |
|
|
25
|
+
| `eager` | `boolean \| undefined` | `false` | | Renders every tab's panel at mount and keeps it mounted, hidden while inactive, instead of only the active one. One tab alone: its item's `eager`. |
|
|
26
26
|
| `headers` | `Record<string, string> \| undefined` | | | Additional HTTP headers forwarded to Inertia when navigation is triggered. Only meaningful in an Inertia context. |
|
|
27
27
|
| `id` | `string \| undefined` | | | The root's `id`, and the key `useBbTabsContext(id)` pairs by. Generated when omitted. |
|
|
28
28
|
| `items` | `BbTabsItem<K>[]` | | yes | Array of items that define the tabs in the component. |
|
package/dist/ai/BbTooltip.md
CHANGED
|
@@ -262,8 +262,10 @@ is concerned — the whole label (shortcut included) is flattened into the
|
|
|
262
262
|
`.bb-tooltip` in your own CSS.
|
|
263
263
|
- `disabled` suppresses the tooltip entirely — and dismisses it if already open,
|
|
264
264
|
so you can bind it to skip a hint when the label is already visible elsewhere.
|
|
265
|
-
-
|
|
266
|
-
`
|
|
265
|
+
- The bubble is **lazy** (its popover and content render on the first open,
|
|
266
|
+
so a closed tooltip costs little in a long table); `eager` renders it up
|
|
267
|
+
front, and `transition-duration` (ms) times the fade. The description screen
|
|
268
|
+
readers hear is there from mount either way.
|
|
267
269
|
|
|
268
270
|
**Delayed, width-capped hint**
|
|
269
271
|
|
|
@@ -584,7 +586,7 @@ A `pt` value written in `<script>` (a constant, a preset, a wrapper's
|
|
|
584
586
|
| `boundary` | `ElementOrComponentRefOrSelector \| undefined` | | | Constrains the tooltip within a bounding element. When provided, the tooltip will not overflow this container's bounds (e.g. a sidebar). Accepts an HTMLElement, a Vue component ref, or a CSS selector string. |
|
|
585
587
|
| `delay` | `number \| undefined` | `0` | | The delay in milliseconds before the tooltip is shown. |
|
|
586
588
|
| `disabled` | `boolean \| undefined` | `false` | | Disables the component |
|
|
587
|
-
| `eager` | `boolean \| undefined` | `false` | |
|
|
589
|
+
| `eager` | `boolean \| undefined` | `false` | | Renders the tooltip's popover and content at mount instead of on the first open. The description screen readers hear exists from mount either way. |
|
|
588
590
|
| `hideArrow` | `boolean \| undefined` | `false` | | Hides the tooltip arrow. A tooltip shows its arrow by default (it's the one popover-family surface where an arrow is meaningful — a speech bubble pointing at its anchor); set this to drop it. |
|
|
589
591
|
| `id` | `string \| undefined` | | | Seed for the tooltip's internal id. It is **prefixed** (`bb_<id>`) and set on the inner content element, not on the root — so `document.getElementById(theIdYouPassed)` finds nothing. Pass it to make the generated id stable (SSR snapshots, tests), not to look the element up. |
|
|
590
592
|
| `modelValue` | `boolean \| undefined` | `false` | | Used by v-model to show / hide the tooltip. A tooltip with no `v-model` starts hidden and is driven by hover / focus. |
|
package/dist/ai/CommonPopover.md
CHANGED
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
| `bubbleAttrs` | `Record<string, unknown> \| ((space: CommonPopoverAvailableSpace) => Record<string, unknown>) \| undefined` | | | Attributes bound on the bubble element (`class`, `style`, `inert`, …), merged after its own `bb-common-popover__bubble` class. Lets the owning component make the bubble its layout container instead of nesting a second box inside it. The function form receives the same free space as the default slot, for attributes that depend on it (a height cap). |
|
|
23
23
|
| `dialog` | `boolean \| undefined` | `false` | | Renders the popover as a `<dialog>` element (modal overlay) instead of a `<span>` with the Popover API. |
|
|
24
24
|
| `disableFlip` | `boolean \| undefined` | `false` | | Disables the automatic flip to the opposite side when the popover would overflow (flipping is on by default). |
|
|
25
|
-
| `eager` | `boolean \| undefined` | `false` | |
|
|
25
|
+
| `eager` | `boolean \| undefined` | `false` | | Renders the bubble's content at mount instead of on the first open. Either way it stays rendered once it has been. |
|
|
26
26
|
| `forceAutoUpdate` | `boolean \| undefined` | `false` | | Keeps floating-ui's `autoUpdate` (scroll/resize/resize-observer tracking) running while the popover is closed. By default the position is only tracked while the popover is open, so idle popovers attach no listeners. Enable this only when the anchor moves while the popover is closed and the next open must be pixel-perfect immediately. |
|
|
27
27
|
| `hideArrow` | `boolean \| undefined` | `false` | | Hides the arrow indicator. |
|
|
28
28
|
| `modelValue` | `boolean \| undefined` | `false` | | Used by v-model to show / hide the bubble. Closed until the owning component opens it. |
|
package/dist/ai/changelog.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 3,
|
|
3
3
|
"library": "bitboss-ui",
|
|
4
|
-
"version": "3.0.0-beta.
|
|
4
|
+
"version": "3.0.0-beta.48",
|
|
5
5
|
"upgrade": "v2-to-v3",
|
|
6
6
|
"guide": "ai/guides/migration/v2-to-v3.md",
|
|
7
7
|
"legend": {
|
|
@@ -58,7 +58,8 @@
|
|
|
58
58
|
"3.0.0-beta.44",
|
|
59
59
|
"3.0.0-beta.45",
|
|
60
60
|
"3.0.0-beta.46",
|
|
61
|
-
"3.0.0-beta.47"
|
|
61
|
+
"3.0.0-beta.47",
|
|
62
|
+
"3.0.0-beta.48"
|
|
62
63
|
],
|
|
63
64
|
"unpublished": [
|
|
64
65
|
"3.0.0-alpha.2",
|
|
@@ -78,15 +79,15 @@
|
|
|
78
79
|
"3.0.0-beta.40"
|
|
79
80
|
],
|
|
80
81
|
"summary": {
|
|
81
|
-
"renames":
|
|
82
|
-
"behaviourBreaks":
|
|
82
|
+
"renames": 214,
|
|
83
|
+
"behaviourBreaks": 174,
|
|
83
84
|
"bySurface": {
|
|
84
85
|
"prop": 15,
|
|
85
86
|
"option": 1,
|
|
86
87
|
"pt": 14,
|
|
87
88
|
"slot": 14,
|
|
88
89
|
"cssVar": 32,
|
|
89
|
-
"class":
|
|
90
|
+
"class": 138
|
|
90
91
|
},
|
|
91
92
|
"unreleased": 0
|
|
92
93
|
},
|
|
@@ -2944,6 +2945,20 @@
|
|
|
2944
2945
|
"firstReleasedIn": "3.0.0-beta.36",
|
|
2945
2946
|
"guide": "ai/guides/migration/v3-beta-css-classes.md"
|
|
2946
2947
|
},
|
|
2948
|
+
{
|
|
2949
|
+
"id": "css:bb-button--active",
|
|
2950
|
+
"kind": "rename",
|
|
2951
|
+
"surface": "class",
|
|
2952
|
+
"components": [
|
|
2953
|
+
".bb-button"
|
|
2954
|
+
],
|
|
2955
|
+
"from": ".bb-button--active",
|
|
2956
|
+
"to": ".bb-button--pressed",
|
|
2957
|
+
"since": "",
|
|
2958
|
+
"default": "",
|
|
2959
|
+
"firstReleasedIn": "3.0.0-beta.48",
|
|
2960
|
+
"guide": "ai/guides/migration/v3-beta-css-classes.md"
|
|
2961
|
+
},
|
|
2947
2962
|
{
|
|
2948
2963
|
"id": "css:bb-commabox-item--focused",
|
|
2949
2964
|
"kind": "rename",
|
|
@@ -5596,6 +5611,31 @@
|
|
|
5596
5611
|
"ruling": "owner 2026-10-06 (Q60.9)",
|
|
5597
5612
|
"guide": "v2-to-v3.md § 6 item 45 + BbTabs.guide.md § Arrow keys on server strips / § Accessibility",
|
|
5598
5613
|
"firstReleasedIn": "3.0.0-beta.47"
|
|
5614
|
+
},
|
|
5615
|
+
{
|
|
5616
|
+
"id": "f306",
|
|
5617
|
+
"kind": "behaviour",
|
|
5618
|
+
"summary": "`v-bb-popover` / `v-bb-hover-card` component portals get no `close`: `emit('close')` closes nothing; use a named portal's slot `close` or the component",
|
|
5619
|
+
"components": [
|
|
5620
|
+
"BbPopover",
|
|
5621
|
+
"BbHoverCard"
|
|
5622
|
+
],
|
|
5623
|
+
"description": "A component portal of v-bb-popover / v-bb-hover-card (v-bb-popover=\"NoteForm\", { portal: NoteForm }) no longer receives an onClose listener, so its emit('close') closes nothing (shipped in 3.0.0-beta.47 for one release). Only a named portal's slot gets close; content that must close its panel becomes a <BbPopoverPortal> / <BbHoverCardPortal> or uses the BbPopover / BbHoverCard component",
|
|
5624
|
+
"ruling": "owner 2026-10-06",
|
|
5625
|
+
"guide": "v2-to-v3.md § 6 item 46 + BbPopover.guide.md / BbHoverCard.guide.md § the directive",
|
|
5626
|
+
"firstReleasedIn": "3.0.0-beta.48"
|
|
5627
|
+
},
|
|
5628
|
+
{
|
|
5629
|
+
"id": "f307",
|
|
5630
|
+
"kind": "behaviour",
|
|
5631
|
+
"summary": "BbButton toggle on: `bb-button--active` → `bb-button--pressed`; new `pt:*:pressed` state",
|
|
5632
|
+
"components": [
|
|
5633
|
+
"BbButton"
|
|
5634
|
+
],
|
|
5635
|
+
"description": "A toggle BbButton (v-model) that is on carries bb-button--pressed, not bb-button--active (no alias): it is pressed (aria-pressed=\"true\"), not \"active\". A rule on .bb-button--active stops matching. Style the on state with the new pt:root:pressed (any part, the state is component-wide), or a selector on .bb-button--pressed / [aria-pressed='true']. There is no active pt state (a pointer press is Tailwind's active: variant) and no current one (activeClass / exactActiveClass)",
|
|
5636
|
+
"ruling": "owner 2026-10-06 (Q60.14, button half)",
|
|
5637
|
+
"guide": "v2-to-v3.md § 6 item 47 + v3-beta-css-classes.md (class row) + BbButton.guide.md § Toggle buttons",
|
|
5638
|
+
"firstReleasedIn": "3.0.0-beta.48"
|
|
5599
5639
|
}
|
|
5600
5640
|
]
|
|
5601
5641
|
}
|