bitboss-ui 3.0.0-beta.26 → 3.0.0-beta.28

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 (122) hide show
  1. package/bin/bitboss-ui-mcp.mjs +1 -1
  2. package/dist/ai/BbColorInput.md +5 -4
  3. package/dist/ai/BbColorPalette.md +8 -5
  4. package/dist/ai/BbConfirm.md +16 -3
  5. package/dist/ai/BbDatePicker.md +24 -12
  6. package/dist/ai/BbDatePickerInput.md +16 -7
  7. package/dist/ai/BbDropdownButton.md +5 -2
  8. package/dist/ai/BbPtScope.md +136 -0
  9. package/dist/ai/BbSelect.md +10 -4
  10. package/dist/ai/BbSelectPopover.md +9 -8
  11. package/dist/ai/BbTag.md +0 -2
  12. package/dist/ai/BbTextInput.md +6 -2
  13. package/dist/ai/BbTimePicker.md +14 -5
  14. package/dist/ai/BbTimePickerInput.md +14 -4
  15. package/dist/ai/BbToast.md +10 -2
  16. package/dist/ai/changelog.json +63 -5
  17. package/dist/ai/components.json +347 -61
  18. package/dist/ai/guides/agent-contract.md +14 -3
  19. package/dist/ai/guides/app-layout.md +3 -1
  20. package/dist/ai/guides/design-language.md +10 -6
  21. package/dist/ai/guides/design-tokens.md +2 -1
  22. package/dist/ai/guides/installation-and-plugin-setup.md +27 -5
  23. package/dist/ai/guides/migration/components/bb-color-palette.md +9 -9
  24. package/dist/ai/guides/migration/v2-to-v3.md +62 -58
  25. package/dist/ai/guides/passthrough.md +182 -73
  26. package/dist/ai/index.md +1 -0
  27. package/dist/ai/source/BbCheckbox.md +4 -4
  28. package/dist/ai/source/BbColorInput.md +6 -4
  29. package/dist/ai/source/BbColorPalette.md +234 -183
  30. package/dist/ai/source/BbConfirm.md +9 -2
  31. package/dist/ai/source/BbConfirmPortal.md +7 -0
  32. package/dist/ai/source/BbDatePicker.md +406 -325
  33. package/dist/ai/source/BbDatePickerInput.md +12 -13
  34. package/dist/ai/source/BbDialog.md +7 -0
  35. package/dist/ai/source/BbDropdown.md +9 -0
  36. package/dist/ai/source/BbDropdownButton.md +45 -9
  37. package/dist/ai/source/BbOffCanvas.md +7 -0
  38. package/dist/ai/source/BbPopover.md +7 -0
  39. package/dist/ai/source/BbPtScope.md +54 -0
  40. package/dist/ai/source/BbRadio.md +4 -4
  41. package/dist/ai/source/BbSelect.md +8 -4
  42. package/dist/ai/source/BbSelectPopover.md +47 -12
  43. package/dist/ai/source/BbSlider.md +19 -2
  44. package/dist/ai/source/BbSwitch.md +4 -4
  45. package/dist/ai/source/BbTable.md +49 -2
  46. package/dist/ai/source/BbTag.md +19 -15
  47. package/dist/ai/source/BbTimePicker.md +132 -46
  48. package/dist/ai/source/BbTimePickerInput.md +61 -34
  49. package/dist/ai/source/BbToast.md +1 -1
  50. package/dist/ai/source/BbTooltip.md +7 -0
  51. package/dist/ai/source/CommonField.md +6 -2
  52. package/dist/ai/source/CommonTimeSelector.md +6 -1
  53. package/dist/components/BbColorInput/BbColorInput.vue_vue_type_script_setup_true_lang.js +8 -0
  54. package/dist/components/BbColorInput/types.d.ts +5 -4
  55. package/dist/components/BbColorInput/types.js +1 -0
  56. package/dist/components/BbColorPalette/BbColorPalette.vue_vue_type_script_setup_true_lang.js +253 -244
  57. package/dist/components/BbColorPalette/types.d.ts +3 -3
  58. package/dist/components/BbColorPalette/types.js +1 -0
  59. package/dist/components/BbConfirm/BbConfirm.vue_vue_type_script_setup_true_lang.js +4 -3
  60. package/dist/components/BbConfirm/types.d.ts +7 -0
  61. package/dist/components/BbDatePicker/BbDatePicker.vue_vue_type_script_setup_true_lang.js +252 -232
  62. package/dist/components/BbDatePicker/DatePickerYearPanel.vue_vue_type_script_setup_true_lang.js +1 -0
  63. package/dist/components/BbDatePicker/types.d.ts +10 -4
  64. package/dist/components/BbDatePicker/types.js +1 -0
  65. package/dist/components/BbDatePickerInput/BbDatePickerInput.vue_vue_type_script_setup_true_lang.js +297 -296
  66. package/dist/components/BbDatePickerInput/types.d.ts +5 -2
  67. package/dist/components/BbDialog/BbDialog.vue_vue_type_script_setup_true_lang.js +120 -120
  68. package/dist/components/BbDropdown/BbDropdown.vue_vue_type_script_setup_true_lang.js +115 -113
  69. package/dist/components/BbDropdownButton/BbDropdownButton.vue_vue_type_script_setup_true_lang.js +4 -0
  70. package/dist/components/BbDropdownButton/types.d.ts +31 -9
  71. package/dist/components/BbDropdownButton/types.js +9 -1
  72. package/dist/components/BbOffCanvas/BbOffCanvas.vue_vue_type_script_setup_true_lang.js +116 -116
  73. package/dist/components/BbPopover/BbPopover.vue_vue_type_script_setup_true_lang.js +146 -146
  74. package/dist/components/BbPtScope/BbPtScope.vue.d.ts +12 -0
  75. package/dist/components/BbPtScope/BbPtScope.vue.js +5 -0
  76. package/dist/components/BbPtScope/BbPtScope.vue_vue_type_script_setup_true_lang.js +13 -0
  77. package/dist/components/BbPtScope/types.d.ts +15 -0
  78. package/dist/components/BbSelect/BbSelect.vue_vue_type_script_setup_true_lang.js +124 -123
  79. package/dist/components/BbSelect/types.d.ts +1 -1
  80. package/dist/components/BbSelectPopover/BbSelectPopover.vue_vue_type_script_setup_true_lang.js +151 -143
  81. package/dist/components/BbSelectPopover/types.d.ts +3 -3
  82. package/dist/components/BbSelectPopover/types.js +1 -0
  83. package/dist/components/BbSlider/BbSlider.vue_vue_type_script_setup_true_lang.js +180 -180
  84. package/dist/components/BbTable/BbTable.vue_vue_type_script_setup_true_lang.js +814 -800
  85. package/dist/components/BbTag/BbTag.vue_vue_type_script_setup_true_lang.js +145 -145
  86. package/dist/components/BbTimePicker/BbTimePicker.vue_vue_type_script_setup_true_lang.js +134 -121
  87. package/dist/components/BbTimePicker/types.d.ts +10 -4
  88. package/dist/components/BbTimePicker/types.js +1 -0
  89. package/dist/components/BbTimePickerInput/BbTimePickerInput.vue_vue_type_script_setup_true_lang.js +249 -243
  90. package/dist/components/BbTimePickerInput/types.d.ts +6 -3
  91. package/dist/components/BbToast/BbToast.vue_vue_type_script_setup_true_lang.js +1 -1
  92. package/dist/components/BbTooltip/BbTooltip.vue_vue_type_script_setup_true_lang.js +40 -40
  93. package/dist/components/CommonField/CommonField.vue_vue_type_script_setup_true_lang.js +32 -32
  94. package/dist/components/CommonTimeSelector/CommonTimeSelector.vue_vue_type_script_setup_true_lang.js +2 -1
  95. package/dist/composables/useConfirm.d.ts +11 -2
  96. package/dist/composables/useConfirm.js +1 -1
  97. package/dist/composables/usePassthrough.d.ts +27 -1
  98. package/dist/composables/usePassthrough.js +111 -92
  99. package/dist/composables/useToast.d.ts +2 -1
  100. package/dist/composables/useToast.js +1 -1
  101. package/dist/directives/createPopoverDirective.js +68 -53
  102. package/dist/index.d.ts +4 -0
  103. package/dist/index.js +24 -23
  104. package/dist/llms-full.txt +589 -216
  105. package/dist/llms-medium.txt +52 -14
  106. package/dist/nuxt-auto-imports.js +1 -1
  107. package/dist/nuxt-module.d.ts +2 -0
  108. package/dist/nuxt.js +12 -12
  109. package/dist/pt-scope-registry.d.ts +15 -0
  110. package/dist/styles.css +1 -1
  111. package/dist/types/PtScope.d.ts +13 -0
  112. package/dist/types/passthrough.d.ts +19 -0
  113. package/dist/types/ptComponentMap.d.ts +59 -0
  114. package/dist/utils/passthrough.d.ts +12 -4
  115. package/dist/utils/passthrough.js +28 -19
  116. package/dist/utils/ptScope.d.ts +8 -0
  117. package/dist/utils/ptScope.js +4 -0
  118. package/dist/validated/BbColorInput.vue_vue_type_script_setup_true_lang.js +7 -0
  119. package/dist/validated/index.d.ts +1 -0
  120. package/dist/vite-plugin.d.ts +38 -6
  121. package/dist/vite.js +270 -263
  122. package/package.json +1 -1
package/dist/ai/BbTag.md CHANGED
@@ -560,8 +560,6 @@ Set these on the element, or on a class you put on it, to retune this component
560
560
  | Property | Set on | Default | What it is |
561
561
  | --- | --- | --- | --- |
562
562
  | `--compensation-multiplier` | `.bb-tag__field` | `0.3` | Fraction of the shell's inner padding the chip row is pulled back by when no prepend icon precedes it (see the negative margin below). |
563
- | `--inner-h` | `.bb-tag__field` | `max( calc(var(--bb-leading) + var(--bb-input-py) * 2), calc(var(--bb-input-h) - …` | The first chip row's height: the tallest of one line plus its vertical padding, the input height less its borders, and the icon box. Feeds `--floating-py` and nothing else. |
564
- | `--floating-py` | `.bb-tag__field` | `calc((var(--inner-h) - var(--bb-input-icon)) / 2)` | Top offset for centring icons and affixes on that first row — the same value BbTextarea uses for that. Nothing in the library reads it, so this and the compact override below are currently inert. |
565
563
  | `--border-color` | `pt:box` | `per variant` | The resting border, at the fixed --bb-border-w. Errors and warnings paint their frame over it, so `pt:box="[--border-color:…]"` recolours the rest without hiding the state; a plain `border-*` utility on the base pt:box would hide it (ESLint… |
566
564
 
567
565
  ## Component tree
@@ -511,8 +511,12 @@ The native attributes that only mean something on the input itself —
511
511
  `maxlength`, `minlength`, `pattern`, `spellcheck`, `autocapitalize`,
512
512
  `autocorrect`, `enterkeyhint`, `list`, `form`, `dirname` — go straight to the
513
513
  native `<input>` (the same holds for BbTextarea, BbNumberInput, BbTag and
514
- BbColorInput, where `wrap` joins them on the textarea). Any other attribute
515
- you set lands on the field's outer element; reach the input with
514
+ BbColorInput, where `wrap` joins them on the textarea). The controls without
515
+ a text input route only what their native control reads: BbSelect sends
516
+ `form` to its hidden inputs, BbDatePickerInput and BbTimePickerInput send
517
+ `form`, `spellcheck`, `autocapitalize`, `autocorrect` and `enterkeyhint` to
518
+ every segment (each segment keeps its own `maxlength` and parsing). Any other
519
+ attribute you set lands on the field's outer element; reach the input with
516
520
  `pt:input="{ attrs: { … } }"`, which also wins over the attributes above.
517
521
 
518
522
  **An OTP field: text type, numeric keyboard, masked**
@@ -14,6 +14,7 @@
14
14
 
15
15
  | pt part | Lands on | In |
16
16
  | --- | --- | --- |
17
+ | `pt:panel` | the root of `CommonPopover` | `CommonPopover` _(internal)_ |
17
18
  | `pt:sheet` | `pt:root` of `BbOffCanvas` | `BbOffCanvas` ([contract](./BbOffCanvas.md)) |
18
19
  | `pt:item` | the root of `BbBaseButton` | `BbBaseButton` ([contract](./BbBaseButton.md)) |
19
20
 
@@ -145,6 +146,12 @@ props with `offCanvasProps`). Position the desktop popover with `placement`,
145
146
  `offset`, `padding`, `boundary`, and `disableFlip` — the same knobs as the other
146
147
  overlays. Escape and backdrop clicks close it; focus returns to the activator.
147
148
 
149
+ The sheet can be **dragged down to dismiss** and shows **no ✕** — picking,
150
+ drag, backdrop tap and Escape close it. The time wheels are no-drag zones: a
151
+ swipe there scrolls the wheel and never moves the sheet, even at the top of the
152
+ list. `offCanvasProps` is spread over those defaults: `{ hideClose: false }`
153
+ brings the ✕ back, `{ draggable: false }` pins the sheet.
154
+
148
155
  ### The `v-bb-time` directive
149
156
 
150
157
  For the leanest case — a time cell in a schedule table where you don't want a
@@ -187,8 +194,10 @@ there is no text field to type into, `BbTimePickerInput` when there is.
187
194
 
188
195
  `pt` reaches a named part with a class list — or, in the object form, a
189
196
  style and attributes — optionally only while a state is on. Parts: `root`
190
- (the time panel, in the popover and in the sheet alike), `sheet` (the bottom
191
- sheet around it on a phone — no node on desktop) and `item` (one column entry, a broadcast). States: `open`,
197
+ (the floating element — the bottom sheet on a phone), `panel` (the time box you
198
+ see: the popover's painted bubble on desktop, the box inside the sheet on a
199
+ phone), `sheet` (the bottom
200
+ sheet on a phone only, applied after `root`) and `item` (one column entry, a broadcast). States: `open`,
192
201
  and `selected` per entry.
193
202
 
194
203
  The opening-time cell above, restyled through those parts: the current
@@ -256,7 +265,7 @@ typeahead. Always pass a `label` when the trigger is an unlabelled cell or icon.
256
265
 
257
266
  | Prop | Type | Default | Required | Description |
258
267
  | --- | --- | --- | --- | --- |
259
- | `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: `item`, `root`, `sheet`. States: `open`, `selected`. `pt` is the object form with the same keys minus the prefix (`{ icon: '…', 'icon:loading': '…' }`). See `guides/passthrough.md`. |
268
+ | `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: `item`, `panel`, `root`, `sheet`. States: `open`, `selected`. `pt` is the object form with the same keys minus the prefix (`{ icon: '…', 'icon:loading': '…' }`). See `guides/passthrough.md`. |
260
269
  | `activator` | `ElementOrComponentRef \| undefined` | | | External activator element or component ref. When provided, the `activator` slot is not rendered and click + ARIA are attached programmatically to the referenced element — mirroring `BbDatePicker`. |
261
270
  | `activeSegment` | `BbTimePickerSegment \| undefined` | | | Which end the columns edit in range mode (`v-model:active-segment`). Standalone use manages this internally via the in-panel toggle; a host can drive it. Ignored outside `range`. |
262
271
  | `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`. |
@@ -270,7 +279,7 @@ typeahead. Always pass a `label` when the trigger is an unlabelled cell or icon.
270
279
  | `max` | `string \| undefined` | | | Maximum selectable time in `HH:mm` format. Values outside the pattern throw during setup to surface configuration mistakes. |
271
280
  | `min` | `string \| undefined` | | | Minimum selectable time in `HH:mm` format. Values outside the pattern throw during setup to surface configuration mistakes. |
272
281
  | `modelValue` | `string \| string[] \| null` | | yes | v-model value: `null` for empty, a 24-hour `HH:mm` (or `HH:mm:ss` with `seconds`) string, or a two-element `[start, end]` array when `range` is true. |
273
- | `offCanvasProps` | `Partial<BbOffCanvasProps> \| undefined` | | | Extra props forwarded to the `BbOffCanvas` sheet when adaptive on mobile. |
282
+ | `offCanvasProps` | `Partial<BbOffCanvasProps> \| undefined` | | | Extra props forwarded to the `BbOffCanvas` sheet when `adaptive` is active on mobile (e.g. `title`, `size`, `persistent`). Spread over the defaults: the sheet is `draggable` (the time wheels never drag it) and hides its ✕ (picking, backdrop… |
274
283
  | `offset` | `number \| undefined` | `4` | | Space the popover keeps from the activator. |
275
284
  | `padding` | `number \| undefined` | | | Minimum empty space to keep from the edge of the page. |
276
285
  | `placement` | `Placement \| undefined` | | | Position of the popover relative to the activator/anchor. |
@@ -304,7 +313,7 @@ typeahead. Always pass a `label` when the trigger is an unlabelled cell or icon.
304
313
  - **CSS custom properties** listed on a node are declared on THAT node's root and read by elements inside it. Set one on that node's root or on the element inside it that reads it — the pt part that lands there is how you reach it (`pt:box="[--border-color:…]"` on a text input) — never on `BbTimePicker`'s root, where the node's own declaration masks it (design-tokens guide, _Overriding one from a consumer app_, rule 0).
305
314
  - Listed nodes are the ones `BbTimePicker`'s API reaches or that declare a documented CSS variable; the rest fold into "also mounts". The complete tree, repeats and undocumented locals included, is the `tree` field of this component in `components.json`.
306
315
 
307
- - `BbTimePicker` _(this component)_ — its own template binds: `root` → `div.bb-time-picker__panel`; hands `BbOffCanvas` the pt map `{ sheet: 'root' }` (ours → theirs)
316
+ - `BbTimePicker` _(this component)_ — its own template binds: `panel` → `div`, `panel` → `CommonPopover`; hands `BbOffCanvas` the pt map `{ sheet: 'root' }` (ours → theirs)
308
317
  - `CommonTimeSelector` _(internal — not importable, reach it through `BbTimePicker`)_ — `BbTimePicker`'s pt parts land here: `item` → `BbBaseButton`; documented CSS variables: `--time-mark`
309
318
  - `BbBaseButton` _(public — [contract](./BbBaseButton.md))_ — its own pt parts (`BbBaseButton`): `root` → `RouterComponent`, `root` → `a`, `root` → `component`; also mounts `RouterComponent`
310
319
  - `BbOffCanvas` _(public — [contract](./BbOffCanvas.md))_ — its own pt parts (`BbOffCanvas`): `header` → `div.bb-offcanvas__header`, `title` → `span.bb-offcanvas__title`, `description` → `p.bb-offcanvas__description`, `close` → `CloseButton`, `content` → `div.bb-offcanvas__body`, `footer` → `div.bb-offcanvas__footer`; documented CSS variables: `--stack-x`, `--stack-fill`, `--stack-transition-duration`, `--px`, `--close-size`
@@ -14,6 +14,7 @@
14
14
 
15
15
  | pt part | Lands on | In |
16
16
  | --- | --- | --- |
17
+ | `pt:panel` | the root of `CommonPopover` | `CommonPopover` _(internal)_ |
17
18
  | `pt:sheet` | `pt:root` of `BbOffCanvas` | `BbOffCanvas` ([contract](./BbOffCanvas.md)) |
18
19
  | `pt:root` | `div.bb-field` | `CommonField` _(internal)_ |
19
20
  | `pt:label` | `component` | `CommonField` _(internal)_ |
@@ -100,6 +101,13 @@ is required.
100
101
  <BbTimePickerInput v-model="state.slotAt" ampm :step="15" label="Pickup slot" />
101
102
  ```
102
103
 
104
+ Native attributes that describe typing — `spellcheck`, `autocapitalize`,
105
+ `autocorrect`, `enterkeyhint` — and `form` go to **every segment** (each one
106
+ is a real `<input>` that posts its own `<name>-<field>`); `maxlength`,
107
+ `pattern` and `list` are not routed, because each segment sets its own length
108
+ and parses its own digits. Any other attribute lands on the field root; a
109
+ `pt:input` attribute reaches every segment and wins over the routed ones.
110
+
103
111
  ### Bounds & ranges
104
112
 
105
113
  `min` / `max` (`HH:mm`) clamp typed times when interaction ends — the value
@@ -125,7 +133,9 @@ end]`; typing an inverted pair swaps it on blur with the usual
125
133
 
126
134
  The popover follows the family's adaptive pattern: on mobile (with the global
127
135
  `config.adaptive`, or the `adaptive` prop) the columns open in a bottom sheet
128
- (`offCanvasProps` forwards extras). `disableWriting` (`true` / `'mobile'` /
136
+ that drags down to dismiss and shows no ✕ (the wheels never drag it;
137
+ `offCanvasProps` is spread over those defaults — `{ hideClose: false }` brings
138
+ the ✕ back). `disableWriting` (`true` / `'mobile'` /
129
139
  `'desktop'`) turns off typing per platform — the columns then carry the
130
140
  interaction.
131
141
 
@@ -155,7 +165,7 @@ the `BbTextInput` guide.
155
165
 
156
166
  `pt` reaches a named part of the control with a class list — or, in the
157
167
  object form, a style and attributes — optionally only while a state is on.
158
- Parts: `root` (the container), `label`, `description`, `message` (the errors / warnings region — one node each, only one ever shows), `hint` (the helper line — shown on focus, or always with `persistent-hint`), `box` (the bordered field box), `input` (the native control), `icon` (`prepend:icon` + `append:icon` — a broadcast; the state glyphs are chrome), `spinner` (the spinner shown while `loading`), `prefix`, `suffix`, `clear` (the ✕ that empties the field). Plus `panel` (the time columns, in the popover and in the sheet alike), `sheet` (the bottom sheet around them on a phone only) and `item` (one column entry, a broadcast). `input` is every segment field; the clock trigger is chrome.
168
+ Parts: `root` (the container), `label`, `description`, `message` (the errors / warnings region — one node each, only one ever shows), `hint` (the helper line — shown on focus, or always with `persistent-hint`), `box` (the bordered field box), `input` (the native control), `icon` (`prepend:icon` + `append:icon` — a broadcast; the state glyphs are chrome), `spinner` (the spinner shown while `loading`), `prefix`, `suffix`, `clear` (the ✕ that empties the field). Plus `panel` (the time box you see — the popover's painted bubble on desktop, the box inside the sheet on a phone), `sheet` (the bottom sheet on a phone only) and `item` (one column entry, a broadcast). `input` is every segment field; the clock trigger is chrome.
159
169
  States: `errors`, `warnings` (never beside errors), `loading`, `disabled`, `readonly`, `has-value` (written `pt:box:has-value`). Plus `open` (the panel is showing) and `selected`, resolved per entry. A name outside that list is a type error and an
160
170
  ESLint error.
161
171
 
@@ -290,7 +300,7 @@ Messages _also_ render in an `aria-live="polite"` region.
290
300
  | `min` | `string \| undefined` | | | Minimum selectable time in `HH:mm` format. Values outside the pattern throw during setup to surface configuration mistakes. |
291
301
  | `modelValue` | `string \| string[] \| null` | | yes | v-model value: `null` for empty, a 24-hour `HH:mm` (or `HH:mm:ss` with `seconds`) string, or a two-element array when `range` is true. |
292
302
  | `name` | `string \| undefined` | | | Defines the name of the input. |
293
- | `offCanvasProps` | `Partial<BbOffCanvasProps> \| undefined` | | | Extra props forwarded to the `BbOffCanvas` sheet when `adaptive` is active on mobile (e.g. `title`, `size`, `persistent`). |
303
+ | `offCanvasProps` | `Partial<BbOffCanvasProps> \| undefined` | | | Extra props forwarded to the `BbOffCanvas` sheet when `adaptive` is active on mobile (e.g. `title`, `size`, `persistent`). Spread over the defaults: the sheet is `draggable` (the time wheels never drag it) and hides its ✕ (picking, backdrop… |
294
304
  | `persistentHint` | `boolean \| undefined` | `false` | | Keeps the hint displayed. |
295
305
  | `placeholder` | `string \| undefined` | | | String displayed when there's no data. |
296
306
  | `prepend:icon` | `string \| undefined` | | | Name of the icon to be added at the start of the input. |
@@ -354,7 +364,7 @@ Set these on the element, or on a class you put on it, to retune this component
354
364
  - **CSS custom properties** listed on a node are declared on THAT node's root and read by elements inside it. Set one on that node's root or on the element inside it that reads it — the pt part that lands there is how you reach it (`pt:box="[--border-color:…]"` on a text input) — never on `BbTimePickerInput`'s root, where the node's own declaration masks it (design-tokens guide, _Overriding one from a consumer app_, rule 0).
355
365
  - Listed nodes are the ones `BbTimePickerInput`'s API reaches or that declare a documented CSS variable; the rest fold into "also mounts". The complete tree, repeats and undocumented locals included, is the `tree` field of this component in `components.json`.
356
366
 
357
- - `BbTimePickerInput` _(this component)_ — its own template binds: `input` → `input.bb-segmented-field__field`, `suffix` → `span.bb-field-input__suffix`, `panel` → `div.bb-time-picker-input__panel`; hands `BbOffCanvas` the pt map `{ sheet: 'root' }` (ours → theirs)
367
+ - `BbTimePickerInput` _(this component)_ — its own template binds: `controlAttrs` → `input.bb-segmented-field__field`, `input` → `input.bb-segmented-field__field`, `suffix` → `span.bb-field-input__suffix`, `panel` → `div`, `panel` → `CommonPopover`; hands `BbOffCanvas` the pt map `{ sheet: 'root' }` (ours → theirs)
358
368
  - `BbOffCanvas` _(public — [contract](./BbOffCanvas.md))_ — its own pt parts (`BbOffCanvas`): `header` → `div.bb-offcanvas__header`, `title` → `span.bb-offcanvas__title`, `description` → `p.bb-offcanvas__description`, `close` → `CloseButton`, `content` → `div.bb-offcanvas__body`, `footer` → `div.bb-offcanvas__footer`; documented CSS variables: `--stack-x`, `--stack-fill`, `--stack-transition-duration`, `--px`, `--close-size`
359
369
  - `CloseButton` _(internal — not importable, reach it through `BbOffCanvas`)_ — documented CSS variables: `--size`, `--p`
360
370
  - `CommonField` _(internal — not importable, reach it through `BbTimePickerInput`)_ — `BbTimePickerInput`'s pt parts land here: `root` → `div.bb-field`, `label` → `component`, `description` → `span.bb-field__description`, `hint` → `span.bb-field__hint-text`, `message` → `div.bb-field__errors`, `message` → `div.bb-field__warnings`
@@ -57,6 +57,14 @@ import { BbToast } from 'bitboss-ui';
57
57
  </script>
58
58
  ```
59
59
 
60
+ **Areas with their own look.** A toast takes the passthrough scope and the
61
+ tokens of the place its HOST is mounted, not of the code that fired it. When
62
+ the app is split into areas that each wrap their pages in `<BbPtScope>`
63
+ ([passthrough guide](./guides/passthrough.md) § Named scopes), mount one
64
+ `<BbToast />` inside each area's layout, within its scope, and none at the app
65
+ root. That still means one host at a time — as long as **every** page renders
66
+ inside exactly one of those layouts.
67
+
60
68
  On Nuxt the host goes in `app.vue`; on Inertia, in the `createInertiaApp`
61
69
  render root — one mount above the router, so every page shares it and no page
62
70
  mounts its own. **Every example on this page mounts its own `<BbToast />` only
@@ -736,8 +744,8 @@ The full grammar, the merge rules and the global map are in the
736
744
 
737
745
  - **No host, no toasts**: `toast(...)` without a mounted `<BbToast />`
738
746
  enqueues silently — and the messages never expire, because the dismiss timer
739
- lives inside the host. Mount exactly one host, at the app root — never one per
740
- page or per component.
747
+ lives inside the host. Mount exactly one host at a time: at the app root
748
+ (or one per area layout, see _Setup_) — never one per page or per component.
741
749
  - Don't hand-roll notification markup or timers; between variants, upsert,
742
750
  portals, and persistence the component covers it.
743
751
  - Don't put must-act information only in a toast — it self-dismisses.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schemaVersion": 2,
3
3
  "library": "bitboss-ui",
4
- "version": "3.0.0-beta.26",
4
+ "version": "3.0.0-beta.28",
5
5
  "upgrade": "v2-to-v3",
6
6
  "guide": "ai/guides/migration/v2-to-v3.md",
7
7
  "releases": [
@@ -39,11 +39,13 @@
39
39
  "3.0.0-beta.23",
40
40
  "3.0.0-beta.24",
41
41
  "3.0.0-beta.25",
42
- "3.0.0-beta.26"
42
+ "3.0.0-beta.26",
43
+ "3.0.0-beta.27",
44
+ "3.0.0-beta.28"
43
45
  ],
44
46
  "summary": {
45
47
  "renames": 64,
46
- "behaviourBreaks": 64,
48
+ "behaviourBreaks": 72,
47
49
  "unreleased": 0
48
50
  },
49
51
  "breaking": [
@@ -564,10 +566,10 @@
564
566
  ".bb-color-palette"
565
567
  ],
566
568
  "from": ".bb-base-color-palette (the picker root)",
567
- "to": ".bb-color-palette__picker",
569
+ "to": ".bb-color-palette__panel (__picker until Queue 37)",
568
570
  "since": "",
569
571
  "default": "",
570
- "firstReleasedIn": "3.0.0-beta.26"
572
+ "firstReleasedIn": "3.0.0-beta.28"
571
573
  },
572
574
  {
573
575
  "kind": "rename",
@@ -949,6 +951,13 @@
949
951
  "guide": "components/bb-popover.md",
950
952
  "firstReleasedIn": "3.0.0-beta.17"
951
953
  },
954
+ {
955
+ "kind": "behaviour",
956
+ "description": "Picker pt surfaces: BbColorPalette / BbTimePicker / BbDatePicker pt:root moves from the inner content box to the floating element (the sheet on a phone); the box is the new pt:panel (the bubble). BbSelect / BbDatePickerInput / BbTimePickerInput pt:panel now land on the painted bubble, not the floating element / inner box. Classes __picker / __calendar → __panel",
957
+ "ruling": "Q37",
958
+ "guide": "ai/guides/passthrough.md (picker surfaces)",
959
+ "firstReleasedIn": "3.0.0-beta.27"
960
+ },
952
961
  {
953
962
  "kind": "behaviour",
954
963
  "description": "BbDropdown fetched (pipeline) rows no longer copy BbBaseButton props / icons / variant / onClick / disabled off the raw item — every field beyond text and value comes only from itemProps",
@@ -1235,6 +1244,55 @@
1235
1244
  "ruling": "owner 2026-09-16 (date-picker pt parts)",
1236
1245
  "guide": "v2-to-v3.md §5.6",
1237
1246
  "firstReleasedIn": "3.0.0-beta.26"
1247
+ },
1248
+ {
1249
+ "kind": "behaviour",
1250
+ "description": "BbDropdown defineExpose({ open }) (v3 prereleases only; v2 had no such handle) removed → show / hide events (and shown / hidden); BbDropdownButton reads them",
1251
+ "ruling": "Q30.4 (owner 2026-09-16)",
1252
+ "guide": "none — a v2 app never had it; components/bb-dropdown.md lists the surviving loading row",
1253
+ "firstReleasedIn": "3.0.0-beta.28"
1254
+ },
1255
+ {
1256
+ "kind": "behaviour",
1257
+ "description": "BbDatePicker defineExpose({ calendarEl }) (v3 prereleases only) removed → the calendar is reachable through its pt:panel / pt:day parts and the show / shown events",
1258
+ "ruling": "Q30.4 (owner 2026-09-16)",
1259
+ "guide": "none — v2 had no standalone BbDatePicker",
1260
+ "firstReleasedIn": "3.0.0-beta.28"
1261
+ },
1262
+ {
1263
+ "kind": "behaviour",
1264
+ "description": "BbDatePicker / BbTimePicker / BbColorPalette: a consumer class / $attrs lands on the floating element (the popover; the sheet on a phone) — before 3.0.0-beta.28 it was dropped on the fragment root with a Vue warning",
1265
+ "ruling": "Q39 (P11)",
1266
+ "guide": "ai/guides/passthrough.md (picker surfaces)",
1267
+ "firstReleasedIn": "3.0.0-beta.28"
1268
+ },
1269
+ {
1270
+ "kind": "behaviour",
1271
+ "description": "Open overlays close on KeepAlive deactivation: BbDialog / BbOffCanvas / BbPopover / BbTooltip emit update:modelValue false, BbDropdown / BbSelectPopover / the three standalone pickers emit hide; a BbTable resize or drag in flight is cancelled (nothing emitted). Before, a cached open surface kept its document listeners and a modal <dialog> lost its top layer",
1272
+ "ruling": "Q39.6 (2026-09-16)",
1273
+ "guide": "none needed — a cached surface reopens as usual; noted in each component's source",
1274
+ "firstReleasedIn": "3.0.0-beta.28"
1275
+ },
1276
+ {
1277
+ "kind": "behaviour",
1278
+ "description": "BbDropdownButton declares pt:item:selected / pt:item-text:selected / pt:item-icon:selected / pt:item-description:selected (additive; the entry parts only)",
1279
+ "ruling": "Q39.2 (2026-09-16)",
1280
+ "guide": "none — additive",
1281
+ "firstReleasedIn": "3.0.0-beta.28"
1282
+ },
1283
+ {
1284
+ "kind": "behaviour",
1285
+ "description": "BbSelect routes a consumer form attribute to its hidden inputs; BbDatePickerInput / BbTimePickerInput route form, spellcheck, autocapitalize, autocorrect, enterkeyhint to every segment (they used to land on .bb-field)",
1286
+ "ruling": "Q39.1 (2026-09-16)",
1287
+ "guide": "components/bb-text-input.md (family note)",
1288
+ "firstReleasedIn": "3.0.0-beta.28"
1289
+ },
1290
+ {
1291
+ "kind": "behaviour",
1292
+ "description": "BbTable virtual: the first frame renders a window of rows from the estimates (server render and the client's first frame alike; was an empty body until the first virtualizer flush). Scroll height settles once the first measurements land, a frame or two after mount",
1293
+ "ruling": "Q36 (2026-09-17)",
1294
+ "guide": "none — additive; nothing observable after the first frame",
1295
+ "firstReleasedIn": "3.0.0-beta.28"
1238
1296
  }
1239
1297
  ]
1240
1298
  }