bitboss-ui 3.0.0-beta.51 → 3.0.0-beta.53

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 (90) hide show
  1. package/bin/bitboss-ui-mcp.mjs +16 -8
  2. package/dist/ai/BbBadge.md +3 -2
  3. package/dist/ai/BbColorPalette.md +4 -3
  4. package/dist/ai/BbDatePicker.md +1 -1
  5. package/dist/ai/BbDropdown.md +6 -2
  6. package/dist/ai/BbForm.md +25 -17
  7. package/dist/ai/BbHoverCard.md +1 -1
  8. package/dist/ai/BbPopover.md +5 -3
  9. package/dist/ai/BbSelectPopover.md +1 -1
  10. package/dist/ai/BbTable.md +176 -51
  11. package/dist/ai/BbTimePicker.md +1 -1
  12. package/dist/ai/BbTooltip.md +1 -1
  13. package/dist/ai/CommonPopover.md +1 -1
  14. package/dist/ai/changelog.json +77 -3
  15. package/dist/ai/components.json +14 -14
  16. package/dist/ai/guides/component-picker.md +3 -3
  17. package/dist/ai/guides/migration/components/bb-table.md +32 -31
  18. package/dist/ai/guides/migration/from-async-validator.md +60 -46
  19. package/dist/ai/guides/migration/v2-to-v3.md +46 -0
  20. package/dist/ai/guides/options-items-playbook.md +5 -5
  21. package/dist/ai/guides/validated-forms.md +19 -8
  22. package/dist/ai/helpers/inertia/manifest.json +1 -1
  23. package/dist/ai/manifest/components/BbBadge.json +1 -1
  24. package/dist/ai/manifest/components/BbColorPalette.json +1 -1
  25. package/dist/ai/manifest/components/BbDatePicker.json +1 -1
  26. package/dist/ai/manifest/components/BbDropdown.json +1 -1
  27. package/dist/ai/manifest/components/BbHoverCard.json +1 -1
  28. package/dist/ai/manifest/components/BbPopover.json +1 -1
  29. package/dist/ai/manifest/components/BbSelectPopover.json +1 -1
  30. package/dist/ai/manifest/components/BbTable.json +6 -5
  31. package/dist/ai/manifest/components/BbTable.tree.json +19 -0
  32. package/dist/ai/manifest/components/BbTimePicker.json +1 -1
  33. package/dist/ai/manifest/components/BbTooltip.json +1 -1
  34. package/dist/ai/manifest/components/CommonPopover.json +1 -1
  35. package/dist/ai/manifest/index.json +2 -2
  36. package/dist/ai/manifest/types.api.json +1 -1
  37. package/dist/ai/recipes/inertia/approvals-inbox.md +1 -1
  38. package/dist/ai/recipes/nuxt/approvals-inbox.md +1 -1
  39. package/dist/ai/recipes/vue/approvals-inbox.md +1 -1
  40. package/dist/ai/source/BbBadge.md +3 -4
  41. package/dist/ai/source/BbBadgeButton.md +3 -4
  42. package/dist/ai/source/BbColorPalette.md +3 -1
  43. package/dist/ai/source/BbDatePicker.md +4 -1
  44. package/dist/ai/source/BbDropdown.md +5 -3
  45. package/dist/ai/source/BbDropdownGroup.md +5 -3
  46. package/dist/ai/source/BbHoverCard.md +3 -2
  47. package/dist/ai/source/BbHoverCardPortal.md +3 -2
  48. package/dist/ai/source/BbPopover.md +3 -2
  49. package/dist/ai/source/BbPopoverPortal.md +3 -2
  50. package/dist/ai/source/BbSelectPopover.md +3 -1
  51. package/dist/ai/source/BbTable.md +405 -141
  52. package/dist/ai/source/BbTimePicker.md +4 -1
  53. package/dist/ai/source/BbTooltip.md +3 -2
  54. package/dist/ai/source/CommonPopover.md +11 -8
  55. package/dist/components/BbBadge/types.d.ts +3 -4
  56. package/dist/components/BbColorPalette/types.d.ts +3 -1
  57. package/dist/components/BbDatePicker/types.d.ts +4 -1
  58. package/dist/components/BbDropdown/types.d.ts +5 -3
  59. package/dist/components/BbForm/bindFormField.js +4 -4
  60. package/dist/components/BbHoverCard/types.d.ts +3 -2
  61. package/dist/components/BbPopover/types.d.ts +3 -2
  62. package/dist/components/BbSelectPopover/types.d.ts +3 -1
  63. package/dist/components/BbTable/BbTable.vue_vue_type_script_setup_true_lang.js +999 -957
  64. package/dist/components/BbTable/BbTableDataRow.js +77 -78
  65. package/dist/components/BbTable/types.d.ts +32 -9
  66. package/dist/components/BbTable/useRowReorder.d.ts +6 -0
  67. package/dist/components/BbTable/useRowReorder.js +217 -195
  68. package/dist/components/BbTable/utils.d.ts +21 -0
  69. package/dist/components/BbTable/utils.js +19 -16
  70. package/dist/components/BbTable/warroom/harness.d.ts +7 -0
  71. package/dist/components/BbTimePicker/types.d.ts +4 -1
  72. package/dist/components/BbTooltip/types.d.ts +3 -2
  73. package/dist/components/CommonPopover/CommonPopover.vue_vue_type_script_setup_true_lang.js +1 -1
  74. package/dist/components/CommonPopover/types.d.ts +4 -4
  75. package/dist/composables/useBaseOptions.d.ts +3 -3
  76. package/dist/composables/useBaseOptions.js +11 -11
  77. package/dist/composables/useBbTableContext.js +1 -0
  78. package/dist/composables/useItemText.d.ts +5 -0
  79. package/dist/composables/useItemText.js +14 -14
  80. package/dist/composables/useItemValue.js +9 -9
  81. package/dist/composables/useItemsGetter.js +55 -51
  82. package/dist/composables/useSegmentedFields.js +6 -1
  83. package/dist/composables/useTableWidthContext.d.ts +6 -0
  84. package/dist/composables/useTableWidthContext.js +2 -1
  85. package/dist/llms-full.txt +390 -177
  86. package/dist/llms-medium.txt +3 -3
  87. package/dist/styles.css +2 -2
  88. package/dist/utils/versionCheck.js +1 -1
  89. package/package.json +2 -1
  90. package/scripts/lib/hand-roll-hints.mjs +11 -2
@@ -2724,16 +2724,24 @@ function listChanges({
2724
2724
  guide: doc.guide,
2725
2725
  count: all.length,
2726
2726
  releases,
2727
+ // Zero counts are left out (a missing key is 0): the map grows by a
2728
+ // release each beta and must stay one small answer (beta.53 hit the
2729
+ // 3 000-char budget with every bucket spelling out its zeros).
2727
2730
  perRelease: Object.fromEntries(
2728
- Object.entries(perRelease).sort(([a], [b]) =>
2729
- a === 'unreleased'
2730
- ? 1
2731
- : b === 'unreleased'
2732
- ? -1
2733
- : compareVersions(a, b)
2734
- )
2731
+ Object.entries(perRelease)
2732
+ .sort(([a], [b]) =>
2733
+ a === 'unreleased'
2734
+ ? 1
2735
+ : b === 'unreleased'
2736
+ ? -1
2737
+ : compareVersions(a, b)
2738
+ )
2739
+ .map(([at, bucket]) => [
2740
+ at,
2741
+ Object.fromEntries(Object.entries(bucket).filter(([, n]) => n > 0)),
2742
+ ])
2735
2743
  ),
2736
- hint: 'Counts only. What breaks when you bump: list_changes({ since: "<the version you have>" }) — one line per change; coming from v2: since: "2". One component: { component: "BbSelect" }. Full rows: detail: "rows".',
2744
+ hint: 'Counts only (a missing count is 0). What a bump breaks: list_changes({ since: "<your version>" }), one line per change; from v2: since: "2". One component: { component: "BbSelect" }. Full rows: detail: "rows".',
2737
2745
  };
2738
2746
  }
2739
2747
 
@@ -70,7 +70,8 @@ For a small, closed status set (paid / pending / overdue, plan tiers), register
70
70
  the soft palette from
71
71
  [design language guide](./guides/design-language.md) § Using color
72
72
  (`soft-gray` / `soft-blue` / `soft-green` / `soft-amber` / `soft-red`) and style
73
- `.bb-badge--<name>` in your project stylesheet. Never invent `variant="success"`
73
+ `.bb-badge--<name>` in your project stylesheet. Type a status map as
74
+ `Record<Status, BadgeVariantType>`. Never invent `variant="success"`
74
75
  — that name is not built-in and ships no CSS. The example below uses the soft
75
76
  names: in your app it type-checks only after the `badgeVariants` registration
76
77
  and renders styled only with that CSS — both are in the linked section.
@@ -863,7 +864,7 @@ A `pt` value written in `<script>` (a constant, a preset, a wrapper's
863
864
  | `loading` | `boolean \| undefined` | `false` | | Shows a spinner in place of the leftmost icon (`icon` or `prepend:icon`; the `append:icon` when it is the only one; else the leading slot), as `BbButton` does, with a hidden loading announcement. |
864
865
  | `prepend:icon` | `string \| undefined` | | | Icon rendered before the label. |
865
866
  | `size` | `'xs'` \| `'sm'` \| `'md'` \| `'lg'` \| `'xl'` \| `'2xl'` | `"md"` | | Preset size of the badge. |
866
- | `variant` | `'outline'` \| `'primary'` \| `'destructive'` \| `'secondary'` \| `'none'` | `"primary"` | | Visual variant: `primary`, `secondary`, `destructive`, or `outline`. Register more via the vite plugin `badgeVariants` option and style `.bb-badge--<variant>` (set `--bg` / `--fg`). `'none'` renders no variant class — an escape hatch for a one-off look set through `--bg` / `--fg` on the element. |
867
+ | `variant` | `'outline'` \| `'primary'` \| `'destructive'` \| `'secondary'` \| `'none'` | `"primary"` | | Visual variant: `primary`, `secondary`, `destructive`, or `outline`. Status colours are a registration (vite plugin `badgeVariants`, the `soft-*` palette in design-language.md) styled as `.bb-badge--<variant>`. `'none'` renders no variant class: set `--bg` / `--fg` on the element. |
867
868
 
868
869
  ## Passthrough parts and states
869
870
 
@@ -447,8 +447,9 @@ The float itself is tuned with the popover props:
447
447
  unless you set `disable-flip`.
448
448
  - `offset` (default 4) — gap between anchor and popover; `padding` (default 6) —
449
449
  minimum space kept from the viewport edge.
450
- - `boundary` — constrain the popover inside an element (ref or CSS selector),
451
- e.g. a scrolling panel.
450
+ - `boundary` — keep the popover inside an element (ref or CSS selector)
451
+ alongside its trigger, e.g. a scrolling panel's width; it may open past the
452
+ edge away from the trigger, and only the viewport flips it.
452
453
  - `transition-duration` (default 250ms) and `eager` — render the palette content
453
454
  before it is first shown (useful for SSR/measurement; off by default so the
454
455
  body mounts lazily).
@@ -757,7 +758,7 @@ A `pt` value written in `<script>` (a constant, a preset, a wrapper's
757
758
  | `adaptive` | `boolean \| undefined` | ``config.adaptive` (`true`)` | | When `true`, the palette opens as a bottom off-canvas sheet on mobile viewports instead of a floating popover; on desktop it stays a popover. Mirrors the adaptive behaviour of `BbPopover`/`BbDropdown`/`BbDatePicker`. When unset, falls back to the global `config.adaptive`. |
758
759
  | `alpha` | `boolean \| undefined` | `false` | | Enable the alpha channel. The picker shows an opacity slider and emits `#RRGGBBAA` hex8 values. |
759
760
  | `anchor` | `ElementOrComponentRef \| undefined` | | | Element or component ref the popover positions itself relative to. Defaults to the activator element when omitted, allowing the popover to be anchored to a larger container (e.g. the full input row) while a smaller element (e.g. a color dot) remains the click target. |
760
- | `boundary` | `ElementOrComponentRefOrSelector \| undefined` | | | Constrains the popover within a bounding element. Accepts an HTMLElement, a Vue component ref, or a CSS selector string. |
761
+ | `boundary` | `ElementOrComponentRefOrSelector \| undefined` | | | Constrains the popover within a bounding element: it stays inside it alongside its trigger (sideways for a popover above or below); away from the trigger it may pass the edge, and it flips at the viewport only. Accepts an HTMLElement, a Vue component ref, or a CSS selector string. |
761
762
  | `disabled` | `boolean \| undefined` | `false` | | Disable all interaction (activator and palette). |
762
763
  | `disableFlip` | `boolean \| undefined` | `false` | | Disables the automatic flip to the opposite side when the popover would overflow (flipping is on by default). |
763
764
  | `eager` | `boolean \| undefined` | `false` | | Renders the palette panel at mount instead of on the first open (the phone sheet's too). |
@@ -416,7 +416,7 @@ and digit typeahead; the time rail exposes labelled columns. Always pass a
416
416
  | `adaptive` | `boolean \| undefined` | ``config.adaptive` (`true`)` | | On mobile, open in a bottom off-canvas sheet instead of a floating popover. When unset, falls back to the global `config.adaptive`. |
417
417
  | `ampm` | `boolean \| undefined` | `false` | | 12-hour display with an AM/PM column (requires `type="datetime"`); emits stay 24h. |
418
418
  | `anchor` | `ElementOrComponentRef \| undefined` | | | Element or component ref the popover positions itself relative to. Defaults to the activator when omitted (anchor to a larger row while a smaller element stays the click target). |
419
- | `boundary` | `ElementOrComponentRefOrSelector \| undefined` | | | Constrains the popover within a bounding element or CSS selector. |
419
+ | `boundary` | `ElementOrComponentRefOrSelector \| undefined` | | | Constrains the popover within a bounding element or CSS selector: sideways only, alongside the trigger; it flips at the viewport. |
420
420
  | `disabled` | `boolean \| undefined` | `false` | | Disables the activator and the calendar. |
421
421
  | `disableFlip` | `boolean \| undefined` | `false` | | Disable the automatic flip to the opposite side on overflow. |
422
422
  | `eager` | `boolean \| undefined` | `false` | | Render popover content before it is first shown. |
@@ -1600,7 +1600,11 @@ const items: BbDropdownItem[] = [
1600
1600
  `placement` is `'cursor'`.
1601
1601
  - `offset` (gap from the anchor), `padding` (minimum space kept from the
1602
1602
  viewport edge), and `boundary` (an element, component ref, or CSS selector
1603
- that confines the panel) tune positioning; `eager` pre-renders the panel
1603
+ the panel stays inside alongside its trigger; it may still open past the
1604
+ edge away from the trigger, and only the viewport flips it) tune positioning.
1605
+ Pass `boundary` a `useTemplateRef` or a selector, not `$refs.x`: `$refs` is
1606
+ not reactive, so a menu in a table cell rendered before the ref was set keeps
1607
+ no boundary until that row happens to re-render. `eager` pre-renders the panel
1604
1608
  before first open; `transitionDuration` controls the open/close animation.
1605
1609
  - The menu closes itself on outside click/focus, on `Escape`, when another
1606
1610
  dropdown opens, and when the activator scrolls out of view. `disabled`
@@ -2170,7 +2174,7 @@ A `pt` value written in `<script>` (a constant, a preset, a wrapper's
2170
2174
  | `activator` | `Record<string, any> \| HTMLElement \| null \| undefined` | | | An external activator element or component ref: the activator slot is not rendered, and the listeners and ARIA (`aria-haspopup` / `aria-expanded` / `aria-controls`) are attached to it; don't add your own. |
2171
2175
  | `adaptive` | `boolean \| undefined` | ``config.adaptive` (`true`)` | | On mobile (below `config.mobileMaxWidth`), renders the menu as a bottom sheet that drills into submenus one level at a time instead of hover flyouts; slots and selection are unchanged. Unset: the global `config.adaptive`. |
2172
2176
  | `anchor` | `Record<string, any> \| HTMLElement \| null \| undefined` | `the activator element` | | The element the panel positions against when it should differ from the activator (a wrapper the activator is part of); an HTMLElement or component ref. It also drives a percentage `width`. Ignored with `placement="cursor"`. |
2173
- | `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. |
2177
+ | `boundary` | `string \| Record<string, any> \| HTMLElement \| null \| undefined` | | | Keeps the panel inside this element alongside its trigger (sideways for a menu above or below); away from the trigger it may pass the edge, and only the viewport flips it. An HTMLElement, a component ref or a CSS selector: a `useTemplateRef`, never `$refs.x` (not reactive). |
2174
2178
  | `compact` | `boolean \| undefined` | `false` | | Compact density, the `BbSelect` ladder: flyout rows 28px → 24px, sheet rows 44px → 36px (a sheet row stays a touch target). The label size does not change. |
2175
2179
  | `disabled` | `boolean \| undefined` | `false` | | Disables the component |
2176
2180
  | `eager` | `boolean \| undefined` | `false` | | Renders the menu panel at mount instead of on the first open (the phone sheet's too), and keeps its rows after a close. Without it the rows mount on each open and go once the menu has closed. |
package/dist/ai/BbForm.md CHANGED
@@ -125,21 +125,26 @@ import {
125
125
  useBbFormContext,
126
126
  } from 'bitboss-ui';
127
127
 
128
- const signup = z
129
- .object({
130
- // An emptied text field holds `null`: the type's message covers it.
131
- name: z.string('Enter your name').trim().min(1, 'Enter your name'),
132
- // A transform: `@submit` receives the lower-cased address.
133
- email: z.email('Enter a valid email').toLowerCase(),
134
- password: z.string('Choose a password').min(8, 'At least 8 characters'),
135
- confirm: z.string('Repeat the password'),
136
- terms: z.literal(true, 'Accept the terms to continue'),
137
- })
138
- // A cross-field rule: `path` puts the message on the second field.
139
- .refine((form) => form.password === form.confirm, {
140
- message: 'The passwords do not match',
141
- path: ['confirm'],
142
- });
128
+ const fields = z.object({
129
+ // An emptied text field holds `null`: the type's message covers it.
130
+ name: z.string('Enter your name').trim().min(1, 'Enter your name'),
131
+ // A transform: `@submit` receives the lower-cased address.
132
+ email: z.email('Enter a valid email').toLowerCase(),
133
+ password: z.string('Choose a password').min(8, 'At least 8 characters'),
134
+ confirm: z.string('Repeat the password'),
135
+ terms: z.literal(true, 'Accept the terms to continue'),
136
+ });
137
+
138
+ // A cross-field rule: `path` puts the message on the second field, `when`
139
+ // runs it as soon as the two passwords parse (zod otherwise skips it while
140
+ // any other field fails).
141
+ const signup = fields.refine((form) => form.password === form.confirm, {
142
+ message: 'The passwords do not match',
143
+ path: ['confirm'],
144
+ when: (payload) =>
145
+ fields.pick({ password: true, confirm: true }).safeParse(payload.value)
146
+ .success,
147
+ });
143
148
 
144
149
  const form = useBbFormContext('signup');
145
150
  const created = ref<z.output<typeof signup> | null>(null);
@@ -165,7 +170,9 @@ What you get from the one prop:
165
170
  `name="lines[0][qty]"` (brackets read as dots). A field with no `name` is
166
171
  named after its label, `Full name` → `fullname`, so schema-driven forms set
167
172
  `name` on every field. A cross-field rule
168
- reaches the right field through its `path` (`path: ['confirm']` above).
173
+ reaches the right field through its `path` (`path: ['confirm']` above);
174
+ its `when` lets it run while other fields still fail (a zod object
175
+ refinement is skipped until the whole object parses).
169
176
  - **Submit is gated** by the schema, async refinements included, exactly as it
170
177
  is by field rules.
171
178
  - **`@submit` receives the schema's output.** Transforms and coercions have
@@ -1176,7 +1183,8 @@ first (`JSON.parse(JSON.stringify(form.values.value))`).
1176
1183
 
1177
1184
  ### `resetForm()` clears the fields, and your model
1178
1185
 
1179
- Resetting publishes the new value back through each field's
1186
+ `resetForm()` is the slot's name; from outside the form the same reset is
1187
+ `useBbFormContext(id).reset()` (the handle has no `resetForm`). Resetting publishes the new value back through each field's
1180
1188
  `update:modelValue` (and writes it into the object bound with `:model`), so
1181
1189
  the control, the form's own state and whatever ref you bound all agree
1182
1190
  afterwards.
@@ -463,7 +463,7 @@ value written in `<script>` is typed as `BbHoverCardProps['pt']`.
463
463
  | --- | --- | --- | --- | --- |
464
464
  | `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`, `footer`, `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 `BbHoverCardProps['pt']` (`PtValue` is not exported): § Typing `pt` in `<script>`. |
465
465
  | `activator` | `ElementOrComponentRef \| undefined` | | | External activator element or component ref. When provided, the activator slot is not rendered and the hover / focus listeners are attached programmatically to the referenced element. |
466
- | `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. |
466
+ | `boundary` | `ElementOrComponentRefOrSelector \| undefined` | | | Constrains the card within a bounding element: it stays inside it alongside its trigger (sideways for a card above or below); away from the trigger it may pass the edge, and it flips at the viewport only. Accepts an HTMLElement, a Vue component ref, or a CSS selector string. |
467
467
  | `delay` | `number \| undefined` | `350` | | Milliseconds the pointer (or keyboard focus) rests on the activator before the card shows; longer than BbTooltip's, so passing over does not open it. Closing has a fixed grace (guide § Timing and the safe zone). |
468
468
  | `disabled` | `boolean \| undefined` | `false` | | Disables the component. Disabling an open card closes it. |
469
469
  | `eager` | `boolean \| undefined` | `false` | | Renders the card's content at mount instead of on the first open. |
@@ -472,8 +472,10 @@ Fine-tune the geometry with:
472
472
  - `offset` — gap (px) between the activator and the panel (default `4`).
473
473
  - `padding` — minimum gap (px) the panel keeps from the page edge (default
474
474
  `10`).
475
- - `boundary` — an element, ref, or CSS selector that constrains the panel so it
476
- never escapes a scrolling region or sidebar.
475
+ - `boundary` — an element, ref, or CSS selector the panel stays inside
476
+ alongside its trigger (a sidebar's width, a table's). Away from the trigger
477
+ it may pass the edge: a panel under a table's last row opens below it
478
+ rather than flipping, and only the viewport flips it.
477
479
 
478
480
  `BbPopover` is a floating **panel**, not a speech bubble — it never renders an
479
481
  arrow. Reach for `BbTooltip` when you want an arrow pointing back at the trigger
@@ -871,7 +873,7 @@ A `pt` value written in `<script>` (a constant, a preset, a wrapper's
871
873
  | `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`, `footer`, `header`, `panel`, `root`, `sheet`. 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 `BbPopoverProps['pt']` (`PtValue` is not exported): § Typing `pt` in `<script>`. |
872
874
  | `activator` | `ElementOrComponentRef \| undefined` | | | External activator element or component ref. When provided, the activator slot is not rendered and click events are attached programmatically to the referenced element. |
873
875
  | `adaptive` | `boolean \| undefined` | ``config.adaptive` (`true`)` | | On mobile (below `config.mobileMaxWidth`), renders as a bottom sheet instead of a floating panel, with the same `header`, `default` and `footer` slots. `width` is ignored there: size the sheet with `offCanvasProps`. Unset: the global `config.adaptive`. |
874
- | `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. |
876
+ | `boundary` | `ElementOrComponentRefOrSelector \| undefined` | | | Constrains the popover within a bounding element: it stays inside it alongside its trigger (sideways for a popover above or below); away from the trigger it may pass the edge, and it flips at the viewport only. Accepts an HTMLElement, a Vue component ref, or a CSS selector string. |
875
877
  | `disabled` | `boolean \| undefined` | `false` | | Disables the component. |
876
878
  | `eager` | `boolean \| undefined` | `false` | | Renders the panel's content at mount instead of on the first open (the phone sheet's too). |
877
879
  | `focusTarget` | `string \| undefined` | | | Selector for the element that receives focus after opening. Defaults to the first focusable element inside the popover. |
@@ -1758,7 +1758,7 @@ A `pt` value written in `<script>` (a constant, a preset, a wrapper's
1758
1758
  | `ariaDescribedby` | `string \| string[] \| undefined` | | | Space-separated IDREF(s) that describe this field for assistive technologies. Accepts either a string or array of ids. |
1759
1759
  | `ariaInvalid` | `boolean \| undefined` | `undefined` | | Explicit invalid state for accessibility semantics. Falls back to `hasErrors` when not provided. |
1760
1760
  | `autocomplete` | `string \| undefined` | `"off"` | | Browser autocomplete hint for the popover search input. |
1761
- | `boundary` | `string \| Record<string, any> \| HTMLElement \| null \| undefined` | | | Constrains the popover to a specific boundary element. |
1761
+ | `boundary` | `string \| Record<string, any> \| HTMLElement \| null \| undefined` | | | Constrains the popover to a specific boundary element: it stays inside it alongside its trigger (sideways for a popover above or below); away from the trigger it may pass the edge, and it flips at the viewport only. |
1762
1762
  | `clearable` | `boolean \| undefined` | `false` | | Shows a clear button in the search field, in the lens' place while there is a query or a selection; it resets both. None without a search field. Leave it off when the activator already clears (as BbSelect's does). |
1763
1763
  | `compact` | `boolean \| undefined` | `false` | | Apply the compact density variant. |
1764
1764
  | `dependencies` | `unknown[] \| undefined` | `[]` | | Additional dependencies that trigger item reloading when changed. |