bitboss-ui 3.0.0-beta.31 → 3.0.0-beta.32

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 (169) hide show
  1. package/dist/ai/BbBaseCheckboxIcon.md +3 -3
  2. package/dist/ai/BbBaseRadioIcon.md +3 -3
  3. package/dist/ai/BbBaseSwitchIcon.md +3 -3
  4. package/dist/ai/BbCalendar.md +18 -18
  5. package/dist/ai/BbCheckbox.md +2 -2
  6. package/dist/ai/BbCheckboxGroup.md +20 -13
  7. package/dist/ai/BbColorInput.md +3 -3
  8. package/dist/ai/BbDatePicker.md +19 -19
  9. package/dist/ai/BbDatePickerInput.md +20 -20
  10. package/dist/ai/BbDropdown.md +99 -23
  11. package/dist/ai/BbDropdownButton.md +19 -11
  12. package/dist/ai/BbNumberInput.md +3 -3
  13. package/dist/ai/BbRadio.md +2 -2
  14. package/dist/ai/BbRadioGroup.md +21 -22
  15. package/dist/ai/BbRating.md +3 -3
  16. package/dist/ai/BbSelect.md +17 -17
  17. package/dist/ai/BbSelectPopover.md +19 -11
  18. package/dist/ai/BbSwitch.md +2 -2
  19. package/dist/ai/BbSwitchGroup.md +20 -13
  20. package/dist/ai/BbTable.md +11 -16
  21. package/dist/ai/BbTabs.md +2 -2
  22. package/dist/ai/BbTag.md +3 -3
  23. package/dist/ai/BbTextInput.md +3 -3
  24. package/dist/ai/BbTextarea.md +3 -3
  25. package/dist/ai/BbTimePickerInput.md +3 -3
  26. package/dist/ai/FlatListBox.md +4 -4
  27. package/dist/ai/GroupedListBox.md +4 -4
  28. package/dist/ai/ListBox.md +7 -7
  29. package/dist/ai/OptionsContainer.md +1 -1
  30. package/dist/ai/changelog.json +18 -3
  31. package/dist/ai/components.json +800 -800
  32. package/dist/ai/guides/agent-contract.md +1 -1
  33. package/dist/ai/guides/migration/v2-to-v3.md +1 -1
  34. package/dist/ai/guides/options-items-playbook.md +1 -1
  35. package/dist/ai/guides/passthrough.md +97 -84
  36. package/dist/ai/source/BbBaseCheckboxIcon.md +1 -1
  37. package/dist/ai/source/BbBaseRadioIcon.md +1 -1
  38. package/dist/ai/source/BbBaseSwitchIcon.md +1 -1
  39. package/dist/ai/source/BbCalendar.md +35 -37
  40. package/dist/ai/source/BbCheckbox.md +1 -1
  41. package/dist/ai/source/BbCheckboxGroup.md +8 -8
  42. package/dist/ai/source/BbColorInput.md +3 -3
  43. package/dist/ai/source/BbDatePicker.md +9 -9
  44. package/dist/ai/source/BbDatePickerInput.md +21 -21
  45. package/dist/ai/source/BbDropdown.md +17 -15
  46. package/dist/ai/source/BbDropdownButton.md +13 -20
  47. package/dist/ai/source/BbDropdownGroup.md +17 -15
  48. package/dist/ai/source/BbNumberInput.md +1 -1
  49. package/dist/ai/source/BbRadio.md +1 -1
  50. package/dist/ai/source/BbRadioGroup.md +8 -8
  51. package/dist/ai/source/BbRating.md +4 -4
  52. package/dist/ai/source/BbSelect.md +14 -14
  53. package/dist/ai/source/BbSelectPopover.md +16 -15
  54. package/dist/ai/source/BbSwitch.md +1 -1
  55. package/dist/ai/source/BbSwitchGroup.md +6 -6
  56. package/dist/ai/source/BbTable.md +1 -1
  57. package/dist/ai/source/BbTabs.md +1 -1
  58. package/dist/ai/source/BbTabsList.md +1 -1
  59. package/dist/ai/source/BbTabsPanes.md +1 -1
  60. package/dist/ai/source/BbTabsRoot.md +1 -1
  61. package/dist/ai/source/BbTextInput.md +1 -1
  62. package/dist/ai/source/BbTextarea.md +1 -1
  63. package/dist/ai/source/BbTimePickerInput.md +1 -1
  64. package/dist/ai/source/FlatListBox.md +6 -6
  65. package/dist/ai/source/GroupedListBox.md +6 -6
  66. package/dist/ai/source/ListBox.md +1 -1
  67. package/dist/ai/source/OptionsContainer.md +5 -5
  68. package/dist/components/BbBaseCheckboxIcon/BbBaseCheckboxIcon.vue_vue_type_script_setup_true_lang.js +2 -2
  69. package/dist/components/BbBaseCheckboxIcon/types.d.ts +1 -1
  70. package/dist/components/BbBaseRadioIcon/BbBaseRadioIcon.vue_vue_type_script_setup_true_lang.js +2 -2
  71. package/dist/components/BbBaseRadioIcon/types.d.ts +1 -1
  72. package/dist/components/BbBaseSwitchIcon/BbBaseSwitchIcon.vue_vue_type_script_setup_true_lang.js +2 -2
  73. package/dist/components/BbBaseSwitchIcon/types.d.ts +1 -1
  74. package/dist/components/BbCalendar/BbCalendar.vue_vue_type_script_setup_true_lang.js +63 -63
  75. package/dist/components/BbCalendar/CalendarMonthPanel.vue_vue_type_script_setup_true_lang.js +4 -4
  76. package/dist/components/BbCalendar/CalendarYearPanel.vue_vue_type_script_setup_true_lang.js +4 -4
  77. package/dist/components/BbCalendar/types.d.ts +16 -16
  78. package/dist/components/BbCalendar/types.js +7 -7
  79. package/dist/components/BbCalendar/useCalendarContext.d.ts +1 -1
  80. package/dist/components/BbCalendar/useCalendarGrid.d.ts +1 -1
  81. package/dist/components/BbCheckbox/BbCheckbox.vue_vue_type_script_setup_true_lang.js +7 -7
  82. package/dist/components/BbCheckbox/types.d.ts +1 -1
  83. package/dist/components/BbCheckboxGroup/BbCheckboxGroup.vue_vue_type_script_setup_true_lang.js +23 -23
  84. package/dist/components/BbCheckboxGroup/types.d.ts +6 -6
  85. package/dist/components/BbColorInput/BbColorInput.vue_vue_type_script_setup_true_lang.js +16 -16
  86. package/dist/components/BbColorInput/types.d.ts +1 -1
  87. package/dist/components/BbColorInput/types.js +1 -1
  88. package/dist/components/BbDatePicker/BbDatePicker.vue_vue_type_script_setup_true_lang.js +68 -68
  89. package/dist/components/BbDatePicker/types.d.ts +3 -3
  90. package/dist/components/BbDatePicker/types.js +7 -7
  91. package/dist/components/BbDatePickerInput/BbDatePickerInput.vue_vue_type_script_setup_true_lang.js +148 -148
  92. package/dist/components/BbDatePickerInput/types.d.ts +4 -4
  93. package/dist/components/BbDatePickerInput/types.js +8 -8
  94. package/dist/components/BbDropdown/BbDropdown.vue_vue_type_script_setup_true_lang.js +12 -12
  95. package/dist/components/BbDropdown/BbDropdownList.vue_vue_type_script_setup_true_lang.js +4 -4
  96. package/dist/components/BbDropdown/types.d.ts +11 -9
  97. package/dist/components/BbDropdown/types.js +3 -3
  98. package/dist/components/BbDropdown/useDropdownContext.d.ts +1 -1
  99. package/dist/components/BbDropdownButton/BbDropdownButton.vue_vue_type_script_setup_true_lang.js +18 -18
  100. package/dist/components/BbDropdownButton/types.d.ts +7 -7
  101. package/dist/components/BbDropdownButton/types.js +6 -6
  102. package/dist/components/BbNumberInput/BbNumberInput.vue_vue_type_script_setup_true_lang.js +12 -12
  103. package/dist/components/BbNumberInput/types.d.ts +1 -1
  104. package/dist/components/BbRadio/BbRadio.vue_vue_type_script_setup_true_lang.js +7 -7
  105. package/dist/components/BbRadio/types.d.ts +1 -1
  106. package/dist/components/BbRadioGroup/BbRadioGroup.vue_vue_type_script_setup_true_lang.js +23 -23
  107. package/dist/components/BbRadioGroup/types.d.ts +6 -6
  108. package/dist/components/BbRating/BbRating.vue_vue_type_script_setup_true_lang.js +7 -7
  109. package/dist/components/BbRating/types.d.ts +3 -3
  110. package/dist/components/BbRating/types.js +1 -1
  111. package/dist/components/BbSelect/BbSelect.vue_vue_type_script_setup_true_lang.js +46 -46
  112. package/dist/components/BbSelect/types.d.ts +5 -5
  113. package/dist/components/BbSelect/types.js +4 -4
  114. package/dist/components/BbSelectPopover/BbSelectPopover.vue_vue_type_script_setup_true_lang.js +12 -12
  115. package/dist/components/BbSelectPopover/types.d.ts +10 -9
  116. package/dist/components/BbSelectPopover/types.js +3 -3
  117. package/dist/components/BbSwitch/BbSwitch.vue_vue_type_script_setup_true_lang.js +7 -7
  118. package/dist/components/BbSwitch/types.d.ts +1 -1
  119. package/dist/components/BbSwitchGroup/BbSwitchGroup.vue_vue_type_script_setup_true_lang.js +23 -23
  120. package/dist/components/BbSwitchGroup/types.d.ts +4 -4
  121. package/dist/components/BbTable/types.d.ts +1 -1
  122. package/dist/components/BbTabs/types.d.ts +1 -1
  123. package/dist/components/BbTag/BbTag.vue_vue_type_script_setup_true_lang.js +13 -13
  124. package/dist/components/BbTag/types.d.ts +1 -1
  125. package/dist/components/BbTextInput/BbTextInput.vue_vue_type_script_setup_true_lang.js +12 -12
  126. package/dist/components/BbTextInput/types.d.ts +1 -1
  127. package/dist/components/BbTextarea/BbTextarea.vue_vue_type_script_setup_true_lang.js +12 -12
  128. package/dist/components/BbTextarea/types.d.ts +1 -1
  129. package/dist/components/BbTimePickerInput/BbTimePickerInput.vue_vue_type_script_setup_true_lang.js +16 -16
  130. package/dist/components/BbTimePickerInput/types.d.ts +1 -1
  131. package/dist/components/BbTimePickerInput/types.js +1 -1
  132. package/dist/components/CommonFieldInput/CommonFieldInput.vue.d.ts +1 -1
  133. package/dist/components/FlatListBox/FlatListBox.vue_vue_type_script_setup_true_lang.js +5 -5
  134. package/dist/components/FlatListBox/types.d.ts +1 -1
  135. package/dist/components/GroupedListBox/GroupedListBox.vue_vue_type_script_setup_true_lang.js +5 -5
  136. package/dist/components/GroupedListBox/types.d.ts +1 -1
  137. package/dist/components/ListBox/types.d.ts +1 -1
  138. package/dist/components/OptionsContainer/OptionsContainer.vue_vue_type_script_setup_true_lang.js +2 -2
  139. package/dist/components/OptionsContainer/types.d.ts +2 -2
  140. package/dist/composables/usePassthrough.d.ts +2 -2
  141. package/dist/composables/usePassthrough.js +7 -10
  142. package/dist/llms-full.txt +437 -324
  143. package/dist/llms-medium.txt +1 -1
  144. package/dist/types/passthrough.d.ts +43 -38
  145. package/dist/types/passthrough.js +8 -8
  146. package/dist/types/ptComponentMap.d.ts +23 -23
  147. package/dist/utils/passthrough.d.ts +1 -4
  148. package/dist/utils/passthroughTestKit.d.ts +3 -3
  149. package/dist/validated/BbCheckbox.vue_vue_type_script_setup_true_lang.js +6 -6
  150. package/dist/validated/BbCheckboxGroup.vue.d.ts +22 -22
  151. package/dist/validated/BbCheckboxGroup.vue_vue_type_script_setup_true_lang.js +22 -22
  152. package/dist/validated/BbColorInput.vue_vue_type_script_setup_true_lang.js +16 -16
  153. package/dist/validated/BbDatePickerInput.vue_vue_type_script_setup_true_lang.js +144 -144
  154. package/dist/validated/BbNumberInput.vue_vue_type_script_setup_true_lang.js +12 -12
  155. package/dist/validated/BbRadioGroup.vue.d.ts +22 -22
  156. package/dist/validated/BbRadioGroup.vue_vue_type_script_setup_true_lang.js +22 -22
  157. package/dist/validated/BbRating.vue_vue_type_script_setup_true_lang.js +6 -6
  158. package/dist/validated/BbSelect.vue.d.ts +43 -43
  159. package/dist/validated/BbSelect.vue_vue_type_script_setup_true_lang.js +43 -43
  160. package/dist/validated/BbSwitch.vue_vue_type_script_setup_true_lang.js +6 -6
  161. package/dist/validated/BbSwitchGroup.vue.d.ts +22 -22
  162. package/dist/validated/BbSwitchGroup.vue_vue_type_script_setup_true_lang.js +22 -22
  163. package/dist/validated/BbTag.vue_vue_type_script_setup_true_lang.js +13 -13
  164. package/dist/validated/BbTextInput.vue_vue_type_script_setup_true_lang.js +12 -12
  165. package/dist/validated/BbTextarea.vue_vue_type_script_setup_true_lang.js +12 -12
  166. package/dist/validated/BbTimePickerInput.vue_vue_type_script_setup_true_lang.js +16 -16
  167. package/package.json +1 -1
  168. package/scripts/lib/component-tree.ts +1 -1
  169. package/scripts/lib/validate-bb-markup.mjs +8 -1
@@ -157,7 +157,7 @@ from an ancestor — so `--size` set on a wrapper `div` is simply ignored
157
157
  ### Restyling with passthrough
158
158
 
159
159
  `pt` reaches the one part with a class list — or, in the object form, a
160
- style and attributes. Part: `root` (the drawn glyph). States: `checked`, `indeterminate`, `readonly`, `disabled`, `warnings`, `errors`, `focused`, `focus-visible` — each
160
+ style and attributes. Part: `root` (the drawn glyph). States: `checked`, `indeterminate`, `readonly`, `disabled`, `warnings`, `errors`, `focused`, `focusVisible` — each
161
161
  true exactly while the glyph paints it, so they follow its own rules:
162
162
  `warnings` is off while `errors` is on.
163
163
 
@@ -202,7 +202,7 @@ The full grammar, the merge rules and the global map are in the
202
202
 
203
203
  | Prop | Type | Default | Required | Description |
204
204
  | --- | --- | --- | --- | --- |
205
- | `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: `root`. States: `checked`, `disabled`, `errors`, `focus-visible`, `focused`, `indeterminate`, `readonly`, `warnings`. 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`. |
205
+ | `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: `root`. States: `checked`, `disabled`, `errors`, `focused`, `focusVisible`, `indeterminate`, `readonly`, `warnings`. 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`. |
206
206
  | `checked` | `boolean \| undefined` | `false` | | Renders the checked state (fills the box and draws the checkmark). |
207
207
  | `disabled` | `boolean \| undefined` | `false` | | Disables the glyph (muted fill, not-allowed cursor). Purely visual. |
208
208
  | `focused` | `boolean \| undefined` | `false` | | Whether the paired native input has focus — any focus, mouse included. Paints `--focused`, the hook the `focused` passthrough state aliases (T19); draws nothing by itself — the ring stays on `focusVisible`. |
@@ -231,7 +231,7 @@ States are listed in precedence order: when two are on at once and their entries
231
231
  | `warnings` | Component-wide: the toggle shows warnings and no errors. |
232
232
  | `errors` | Component-wide: the toggle shows errors — the glyph and the message line turn red. |
233
233
  | `focused` | Component-wide: the native input has focus — any focus, mouse included, like the `focused` slot prop. |
234
- | `focus-visible` | Component-wide: that focus is keyboard-visible — where a focus ring belongs. |
234
+ | `focusVisible` | Component-wide: that focus is keyboard-visible — where a focus ring belongs. |
235
235
 
236
236
  ## Events
237
237
 
@@ -171,7 +171,7 @@ from an ancestor — so `--size` set on a wrapper `div` is simply ignored
171
171
  ### Restyling with passthrough
172
172
 
173
173
  `pt` reaches the one part with a class list — or, in the object form, a
174
- style and attributes. Part: `root` (the drawn glyph). States: `checked`, `readonly`, `disabled`, `warnings`, `errors`, `focused`, `focus-visible` — each
174
+ style and attributes. Part: `root` (the drawn glyph). States: `checked`, `readonly`, `disabled`, `warnings`, `errors`, `focused`, `focusVisible` — each
175
175
  true exactly while the glyph paints it, so they follow its own rules:
176
176
  `warnings` is off while `errors` is on.
177
177
 
@@ -217,7 +217,7 @@ The full grammar, the merge rules and the global map are in the
217
217
 
218
218
  | Prop | Type | Default | Required | Description |
219
219
  | --- | --- | --- | --- | --- |
220
- | `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: `root`. States: `checked`, `disabled`, `errors`, `focus-visible`, `focused`, `readonly`, `warnings`. 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`. |
220
+ | `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: `root`. States: `checked`, `disabled`, `errors`, `focused`, `focusVisible`, `readonly`, `warnings`. 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`. |
221
221
  | `checked` | `boolean \| undefined` | `false` | | Renders the checked state (grows the inner dot). |
222
222
  | `disabled` | `boolean \| undefined` | `false` | | Disables the glyph (muted fill, not-allowed cursor). Purely visual. |
223
223
  | `focused` | `boolean \| undefined` | `false` | | Whether the paired native input has focus — any focus, mouse included. Paints `--focused`, the hook the `focused` passthrough state aliases (T19); draws nothing by itself — the ring stays on `focusVisible`. |
@@ -244,7 +244,7 @@ States are listed in precedence order: when two are on at once and their entries
244
244
  | `warnings` | Component-wide: the toggle shows warnings and no errors. |
245
245
  | `errors` | Component-wide: the toggle shows errors — the glyph and the message line turn red. |
246
246
  | `focused` | Component-wide: the native input has focus — any focus, mouse included, like the `focused` slot prop. |
247
- | `focus-visible` | Component-wide: that focus is keyboard-visible — where a focus ring belongs. |
247
+ | `focusVisible` | Component-wide: that focus is keyboard-visible — where a focus ring belongs. |
248
248
 
249
249
  ## Events
250
250
 
@@ -167,7 +167,7 @@ from an ancestor — so `--w` set on a wrapper `div` is simply ignored
167
167
  ### Restyling with passthrough
168
168
 
169
169
  `pt` reaches the one part with a class list — or, in the object form, a
170
- style and attributes. Part: `root` (the drawn glyph). States: `checked`, `indeterminate`, `readonly`, `disabled`, `warnings`, `errors`, `focused`, `focus-visible` — each
170
+ style and attributes. Part: `root` (the drawn glyph). States: `checked`, `indeterminate`, `readonly`, `disabled`, `warnings`, `errors`, `focused`, `focusVisible` — each
171
171
  true exactly while the glyph paints it, so they follow its own rules:
172
172
  `warnings` is off while `errors` is on.
173
173
 
@@ -213,7 +213,7 @@ The full grammar, the merge rules and the global map are in the
213
213
 
214
214
  | Prop | Type | Default | Required | Description |
215
215
  | --- | --- | --- | --- | --- |
216
- | `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: `root`. States: `checked`, `disabled`, `errors`, `focus-visible`, `focused`, `indeterminate`, `readonly`, `warnings`. 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`. |
216
+ | `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: `root`. States: `checked`, `disabled`, `errors`, `focused`, `focusVisible`, `indeterminate`, `readonly`, `warnings`. 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`. |
217
217
  | `checked` | `boolean \| undefined` | `false` | | Renders the checked state (fills the track and slides the thumb to the end). |
218
218
  | `disabled` | `boolean \| undefined` | `false` | | Disables the glyph (muted track, not-allowed cursor). Purely visual. |
219
219
  | `focused` | `boolean \| undefined` | `false` | | Whether the paired native input has focus — any focus, mouse included. Paints `--focused`, the hook the `focused` passthrough state aliases (T19); draws nothing by itself — the ring stays on `focusVisible`. |
@@ -242,7 +242,7 @@ States are listed in precedence order: when two are on at once and their entries
242
242
  | `warnings` | Component-wide: the toggle shows warnings and no errors. |
243
243
  | `errors` | Component-wide: the toggle shows errors — the glyph and the message line turn red. |
244
244
  | `focused` | Component-wide: the native input has focus — any focus, mouse included, like the `focused` slot prop. |
245
- | `focus-visible` | Component-wide: that focus is keyboard-visible — where a focus ring belongs. |
245
+ | `focusVisible` | Component-wide: that focus is keyboard-visible — where a focus ring belongs. |
246
246
 
247
247
  ## Events
248
248
 
@@ -470,20 +470,20 @@ and attributes — optionally only while a state is on. Parts: `root` (the
470
470
  calendar's box, where a consumer `class` lands too; it carries the sizing
471
471
  tokens, so `pt:root="[--pad-x:2px]"` tightens the padding and the grid width
472
472
  follows), `header` (the navigation bar), `arrow` (the previous / next
473
- buttons), `month` and `year` (the heading buttons), `column-header` (each
474
- weekday letter), `day` (one whole day cell) and `day-button` (the button
475
- inside it), `month-item` and `year-item` (one button of the month / year
473
+ buttons), `month` and `year` (the heading buttons), `columnHeader` (each
474
+ weekday letter), `day` (one whole day cell) and `dayButton` (the button
475
+ inside it), `monthItem` and `yearItem` (one button of the month / year
476
476
  panel).
477
477
 
478
478
  States: `root` is `disabled` while the calendar is; `arrow` is `disabled` at a
479
479
  `min` / `max` bound; `month` and `year` are `active` while their panel is
480
- open. The cells resolve per node — on `day` and `day-button`: `selected`,
480
+ open. The cells resolve per node — on `day` and `dayButton`: `selected`,
481
481
  `disabled`, `today`, `outside` (a day of the previous or next month),
482
- `range-start` / `range-end` / `in-range` (a committed range) and `highlighted`
482
+ `rangeStart` / `rangeEnd` / `inRange` (a committed range) and `highlighted`
483
483
  (the keyboard cursor). The panel items carry the same set without `today` and
484
484
  `outside`.
485
485
 
486
- `day` is the whole cell and `day-button` the rounded mark inside it: a
486
+ `day` is the whole cell and `dayButton` the rounded mark inside it: a
487
487
  background on `pt:day` paints the full cell square, so restyle the mark on
488
488
  `pt:day-button`. The time rail is not a part.
489
489
 
@@ -522,7 +522,7 @@ the page is `BbDatePicker`.
522
522
 
523
523
  | Prop | Type | Default | Required | Description |
524
524
  | --- | --- | --- | --- | --- |
525
- | `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: `arrow`, `column-header`, `day`, `day-button`, `header`, `month`, `month-item`, `root`, `year`, `year-item`. States: `active`, `disabled`, `highlighted`, `in-range`, `outside`, `range-end`, `range-start`, `selected`, `today`. 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`. |
525
+ | `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: `arrow`, `columnHeader`, `day`, `dayButton`, `header`, `month`, `monthItem`, `root`, `year`, `yearItem`. States: `active`, `disabled`, `highlighted`, `inRange`, `outside`, `rangeEnd`, `rangeStart`, `selected`, `today`. 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`. |
526
526
  | `activeSegment` | `BbCalendarSegment \| undefined` | | | Which end the time rail edits in range + `type="datetime"` (`v-model:active-segment`). Standalone use manages this internally; an embedding host (the date input) drives it from its focused field. Ignored outside range + datetime. |
527
527
  | `ampm` | `boolean \| undefined` | `false` | | 12-hour display with an AM/PM column (requires `type="datetime"`); emits stay 24h. |
528
528
  | `disabled` | `boolean \| undefined` | `false` | | Disables every cell, the navigation and the time rail. |
@@ -552,22 +552,22 @@ the page is `BbDatePicker`.
552
552
  | `arrow` | The previous / next buttons — a broadcast. |
553
553
  | `month` | The month heading button; it opens the month panel. |
554
554
  | `year` | The year heading button; it opens the year panel. |
555
- | `column-header` | Each weekday letter above the grid — a broadcast. |
556
- | `day` | One whole day cell — a broadcast resolved per day. A background here paints the full cell square; restyle the round mark on `day-button`. |
557
- | `day-button` | The button inside a day cell — the mark that shows selection. A broadcast resolved per day. |
558
- | `month-item` | One month button of the month panel (the home grid of `type="month"`) — a broadcast resolved per month. |
559
- | `year-item` | One year button of the year list — a broadcast resolved per year. |
555
+ | `columnHeader` | Each weekday letter above the grid — a broadcast. |
556
+ | `day` | One whole day cell — a broadcast resolved per day. A background here paints the full cell square; restyle the round mark on `dayButton`. |
557
+ | `dayButton` | The button inside a day cell — the mark that shows selection. A broadcast resolved per day. |
558
+ | `monthItem` | One month button of the month panel (the home grid of `type="month"`) — a broadcast resolved per month. |
559
+ | `yearItem` | One year button of the year list — a broadcast resolved per year. |
560
560
 
561
561
  States are listed in precedence order: when two are on at once and their entries conflict, the later one wins.
562
562
 
563
563
  | State | When it is on |
564
564
  | --- | --- |
565
- | `outside` | Per node, on `day` / `day-button`: a day of the previous or next month, shown to fill the grid. |
566
- | `today` | Per node, on `day` / `day-button`: today. |
567
- | `in-range` | Per node, on the cells (`day`, `day-button`, `month-item`, `year-item`): inside a committed range, between its ends. |
565
+ | `outside` | Per node, on `day` / `dayButton`: a day of the previous or next month, shown to fill the grid. |
566
+ | `today` | Per node, on `day` / `dayButton`: today. |
567
+ | `inRange` | Per node, on the cells (`day`, `dayButton`, `monthItem`, `yearItem`): inside a committed range, between its ends. |
568
568
  | `selected` | Per node, on the cells: a chosen day, month or year. |
569
- | `range-start` | Per node, on the cells: a committed range's first day, month or year. |
570
- | `range-end` | Per node, on the cells: a committed range's last day, month or year. |
569
+ | `rangeStart` | Per node, on the cells: a committed range's first day, month or year. |
570
+ | `rangeEnd` | Per node, on the cells: a committed range's last day, month or year. |
571
571
  | `disabled` | Component-wide while the calendar is `disabled`. Also per node: on the cells, one outside `min` / `max` or refused by `selectable`; on `arrow`, at a bound or while the month / year panel is open. |
572
572
  | `active` | Per node, on `month` / `year`: its panel is open. |
573
573
  | `highlighted` | Per node, on the cells: the keyboard cursor. |
@@ -610,7 +610,7 @@ Set these on the element, or on a class you put on it, to retune this component
610
610
  - **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 `BbCalendar`'s root, where the node's own declaration masks it (design-tokens guide, _Overriding one from a consumer app_, rule 0).
611
611
  - Listed nodes are the ones `BbCalendar`'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`.
612
612
 
613
- - `BbCalendar` _(this component)_ — its own template binds: `header` → `div.bb-calendar__controls`, `arrow` → `BbBaseButton`, `month` → `BbBaseButton`, `year` → `BbBaseButton`, `day` → `div.bb-calendar__date`, `day-button` → `button.bb-calendar__date-button`
613
+ - `BbCalendar` _(this component)_ — its own template binds: `header` → `div.bb-calendar__controls`, `arrow` → `BbBaseButton`, `month` → `BbBaseButton`, `year` → `BbBaseButton`, `day` → `div.bb-calendar__date`, `dayButton` → `button.bb-calendar__date-button`
614
614
  - `BbBaseButton` _(public — [contract](./BbBaseButton.md))_ — its own pt parts (`BbBaseButton`): `root` → `RouterComponent`, `root` → `a`, `root` → `component`; also mounts `RouterComponent`
615
615
  - `CommonTimeSelector` _(internal — not importable, reach it through `BbCalendar`)_ — documented CSS variables: `--time-mark`; also mounts `BbBaseButton`
616
616
  - Also mounts `ScaleFade`, `Slide`, `CalendarMonthPanel`, `CalendarYearPanel`
@@ -670,7 +670,7 @@ map are in the [passthrough guide](./guides/passthrough.md).
670
670
 
671
671
  | Prop | Type | Default | Required | Description |
672
672
  | --- | --- | --- | --- | --- |
673
- | `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: `description`, `hint`, `icon`, `label`, `message`, `root`. States: `checked`, `disabled`, `errors`, `focus-visible`, `focused`, `indeterminate`, `readonly`, `warnings`. 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`. |
673
+ | `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: `description`, `hint`, `icon`, `label`, `message`, `root`. States: `checked`, `disabled`, `errors`, `focused`, `focusVisible`, `indeterminate`, `readonly`, `warnings`. 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`. |
674
674
  | `autofocus` | `Booleanish \| undefined` | | | Sets autofocus on page load. |
675
675
  | `checked` | `boolean \| undefined` | `undefined` | | Defines the input as checked. |
676
676
  | `description` | `string \| undefined` | | | Descriptive text displayed below the label and above the input. Unlike the hint it is always visible, and it is linked to the input via `aria-describedby` (after any `errors` / `warnings`, before the `hint`). |
@@ -721,7 +721,7 @@ States are listed in precedence order: when two are on at once and their entries
721
721
  | `warnings` | Component-wide: the toggle shows warnings and no errors. |
722
722
  | `errors` | Component-wide: the toggle shows errors — the glyph and the message line turn red. |
723
723
  | `focused` | Component-wide: the native input has focus — any focus, mouse included, like the `focused` slot prop. |
724
- | `focus-visible` | Component-wide: that focus is keyboard-visible — where a focus ring belongs. |
724
+ | `focusVisible` | Component-wide: that focus is keyboard-visible — where a focus ring belongs. |
725
725
 
726
726
  ## Events
727
727
 
@@ -24,7 +24,7 @@
24
24
  | `pt:list` | `span` | `OptionsContainer` _(internal)_ |
25
25
  | `pt:item` | `label` | `OptionsContainer` _(internal)_ |
26
26
  | `pt:label` | `span` | `OptionsContainer` _(internal)_ |
27
- | `pt:item-description` | `span` | `OptionsContainer` _(internal)_ |
27
+ | `pt:itemDescription` | `span` | `OptionsContainer` _(internal)_ |
28
28
 
29
29
  **CSS variables you can set through those parts** — declared deeper in the tree, so set one on the part that reads it (`pt:<part>="[--name:value]"`), never on `BbCheckboxGroup`'s root:
30
30
 
@@ -588,13 +588,13 @@ object form, a style and attributes — optionally only while a state is on.
588
588
  Parts: `root` (the fieldset), `legend` (the group's heading, after the `legend`
589
589
  prop), `description`, `message`, `hint` (the helper line — shown on focus, or
590
590
  always with `persistent-hint`), `item` — one option row —, `icon` — that row's glyph —, `label` — that
591
- option's label text, both as on a standalone control — and `item-description` — its
591
+ option's label text, both as on a standalone control — and `itemDescription` — its
592
592
  muted second line (`itemProps.description`), never the group's `description`.
593
- `item`, `icon`, `label` and `item-description` are broadcasts resolved per row. States of the
594
- whole group, on every part: `has-value` (something is chosen), `readonly`,
593
+ `item`, `icon`, `label` and `itemDescription` are broadcasts resolved per row. States of the
594
+ whole group, on every part: `hasValue` (something is chosen), `readonly`,
595
595
  `loading` (the items are being fetched), `disabled`, `warnings`, `errors`.
596
596
  States of one row, on the row parts only: `checked`, `focused` (that row's
597
- input has focus), `focus-visible` (that focus is keyboard-visible), and the
597
+ input has focus), `focusVisible` (that focus is keyboard-visible), and the
598
598
  row's own `disabled` — the states a standalone control has. A name outside
599
599
  that list is a type error and an ESLint error.
600
600
 
@@ -636,6 +636,13 @@ const cadence = ref<string[]>(['Daily']);
636
636
  </script>
637
637
  ```
638
638
 
639
+ A look that depends on the ITEM — a paid channel tinted differently, a
640
+ deprecated option muted — is a **per-item function** on a row part:
641
+ `:pt:item="({ item, checked }) => …"`, called with the raw item (typed as your
642
+ item) and every state as a boolean for that row, its result merged after
643
+ `pt:item:checked`. Row parts only (`item`, `icon`, `label`, `itemDescription`),
644
+ on the instance only — never in the plugin's global map or a scope.
645
+
639
646
  This is the old `:deep()` reach-in on the selected row's modifier class,
640
647
  spelled as a part and a state — your class, our promise. Classes append to
641
648
  ours, an attribute in `attrs` wins over ours. The full grammar, the merge rules
@@ -696,7 +703,7 @@ and the global map are in the [passthrough guide](./guides/passthrough.md).
696
703
 
697
704
  | Prop | Type | Default | Required | Description |
698
705
  | --- | --- | --- | --- | --- |
699
- | `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: `description`, `hint`, `icon`, `item`, `item-description`, `label`, `legend`, `list`, `message`, `root`. States: `disabled`, `errors`, `has-value`, `loading`, `readonly`, `warnings`, `checked`, `focus-visible`, `focused`. 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`. |
706
+ | `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: `description`, `hint`, `icon`, `item`, `itemDescription`, `label`, `legend`, `list`, `message`, `root`. States: `disabled`, `errors`, `hasValue`, `loading`, `readonly`, `warnings`, `checked`, `focused`, `focusVisible`. 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`. |
700
707
  | `autofocus` | `Booleanish \| undefined` | | | Sets autofocus on page load. |
701
708
  | `compact` | `boolean \| undefined` | `false` | | Displays the component in a compact version. |
702
709
  | `dependencies` | `unknown[] \| undefined` | | | Defines an array of dependencies that will trigger actions in the component upon change. |
@@ -747,22 +754,22 @@ and the global map are in the [passthrough guide](./guides/passthrough.md).
747
754
  | `hint` | The helper line (the `hint` prop), shown on focus, or always with `persistent-hint`. |
748
755
  | `list` | The node that lays the rows out (flex + wrap, gaps on `--gap` / `--row-gap`): `pt:list="grid grid-cols-3"` re-lays them, `pt:list="[--gap:8px]"` tightens them. Takes the group-wide states only. |
749
756
  | `item` | One option row — a broadcast, resolved per option with its own `checked` / `disabled` / focus. Takes a per-item function. |
750
- | `icon` | One row's drawn glyph — the default one: a consumer `icon` slot replaces it. |
751
- | `label` | One option's label text (the `label` slot's default). |
752
- | `item-description` | One option's muted second line, its description. |
757
+ | `icon` | One row's drawn glyph — the default one: a consumer `icon` slot replaces it. Takes a per-item function. |
758
+ | `label` | One option's label text (the `label` slot's default). Takes a per-item function. |
759
+ | `itemDescription` | One option's muted second line, its description. Takes a per-item function. |
753
760
 
754
761
  States are listed in precedence order: when two are on at once and their entries conflict, the later one wins.
755
762
 
756
763
  | State | When it is on |
757
764
  | --- | --- |
758
- | `has-value` | Component-wide: at least one option is chosen. |
759
- | `checked` | Per row, on `item`, `icon`, `label` and `item-description`: that option is chosen. Never on a field part. |
765
+ | `hasValue` | Component-wide: at least one option is chosen. |
766
+ | `checked` | Per row, on `item`, `icon`, `label` and `itemDescription`: that option is chosen. Never on a field part. |
760
767
  | `readonly` | Component-wide: the group is `readonly`. |
761
768
  | `disabled` | Component-wide while the group is `disabled`; also per row, on the row parts of an option that is disabled on its own. |
762
769
  | `warnings` | Component-wide: the group shows warnings and no errors. |
763
770
  | `errors` | Component-wide: the group shows errors. |
764
771
  | `focused` | Per row, on the row parts: that option's input has focus — any focus, mouse included. |
765
- | `focus-visible` | Per row, on the row parts: that option's focus is keyboard-visible — where a focus ring belongs. |
772
+ | `focusVisible` | Per row, on the row parts: that option's focus is keyboard-visible — where a focus ring belongs. |
766
773
  | `loading` | Component-wide: the items are being fetched. |
767
774
 
768
775
  ## Events
@@ -820,7 +827,7 @@ Set these on the element, or on a class you put on it, to retune this component
820
827
 
821
828
  - `BbCheckboxGroup` _(this component)_ — its own template binds: `icon` → `BbBaseCheckboxIcon`
822
829
  - `CommonField` _(internal — not importable, reach it through `BbCheckboxGroup`)_ — `BbCheckboxGroup`'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`
823
- - `OptionsContainer` _(internal — not importable, reach it through `BbCheckboxGroup`)_ — `BbCheckboxGroup`'s pt parts land here: `list` → `span`, `item` → `label`, `label` → `span`, `item-description` → `span`
830
+ - `OptionsContainer` _(internal — not importable, reach it through `BbCheckboxGroup`)_ — `BbCheckboxGroup`'s pt parts land here: `list` → `span`, `item` → `label`, `label` → `span`, `itemDescription` → `span`
824
831
  - Also mounts `BbBaseCheckboxIcon`
825
832
 
826
833
  ## See Also
@@ -506,7 +506,7 @@ the `BbTextInput` guide.
506
506
  `pt` reaches a named part of the control with a class list — or, in the
507
507
  object form, a style and attributes — optionally only while a state is on.
508
508
  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 `indicator` (the colour dot that opens the palette), `panel` (the palette surface — the popover's painted bubble on desktop, the sheet itself on a phone), `sheet` (the bottom sheet the color palette opens in on a phone — no node on desktop) and `swatch` (one palette swatch, after the `swatches` prop — a broadcast).
509
- States: `errors`, `warnings` (never beside errors), `loading`, `disabled`, `readonly`, `has-value` (written `pt:box:has-value`), on every part; plus `selected` on `swatch` only — the swatch matching the value (`pt:swatch:selected`). A name outside that list is a type error and an
509
+ States: `errors`, `warnings` (never beside errors), `loading`, `disabled`, `readonly`, `hasValue` (written `pt:box:has-value`), on every part; plus `selected` on `swatch` only — the swatch matching the value (`pt:swatch:selected`). A name outside that list is a type error and an
510
510
  ESLint error.
511
511
 
512
512
  The workspace appearance form above, restyled through those parts: mono on
@@ -664,7 +664,7 @@ of it. The full grammar, the merge rules and the global map are in the
664
664
 
665
665
  | Prop | Type | Default | Required | Description |
666
666
  | --- | --- | --- | --- | --- |
667
- | `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: `box`, `clear`, `description`, `hint`, `icon`, `indicator`, `input`, `label`, `message`, `panel`, `prefix`, `root`, `sheet`, `spinner`, `suffix`, `swatch`. States: `disabled`, `errors`, `has-value`, `loading`, `readonly`, `warnings`, `selected`. 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`. |
667
+ | `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: `box`, `clear`, `description`, `hint`, `icon`, `indicator`, `input`, `label`, `message`, `panel`, `prefix`, `root`, `sheet`, `spinner`, `suffix`, `swatch`. States: `disabled`, `errors`, `hasValue`, `loading`, `readonly`, `warnings`, `selected`. 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`. |
668
668
  | `adaptive` | `boolean \| undefined` | ``config.adaptive` (`true`)` | | When `true`, the color 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 `BbSelect`/`BbDatePickerInput`. When unset, falls back to … |
669
669
  | `alpha` | `boolean \| undefined` | `false` | | Enable the alpha channel. Shows an opacity slider and uses `#RRGGBBAA` hex8 format. |
670
670
  | `append:icon` | `string \| undefined` | | | Name of the icon to be added at the end of the input. |
@@ -726,7 +726,7 @@ States are listed in precedence order: when two are on at once and their entries
726
726
 
727
727
  | State | When it is on |
728
728
  | --- | --- |
729
- | `has-value` | Component-wide: the control holds a value, by its own rule (`0` counts on `BbNumberInput`, `''` on `BbColorInput`). |
729
+ | `hasValue` | Component-wide: the control holds a value, by its own rule (`0` counts on `BbNumberInput`, `''` on `BbColorInput`). |
730
730
  | `selected` | Per node, on `swatch` only: the swatch that matches the value. |
731
731
  | `readonly` | Component-wide: the control is `readonly` — shown, focusable, not editable. |
732
732
  | `disabled` | Component-wide: the control is `disabled`. |
@@ -299,18 +299,18 @@ desktop, the sheet itself on a phone — it also carries the sizing tokens, so
299
299
  `pt:panel="[--pad-x:2px]"` tightens the padding and the grid width follows), `sheet` (the
300
300
  bottom sheet on a phone only, applied after `panel`), `header` (the
301
301
  navigation bar), `arrow` (the previous / next buttons), `month` and `year`
302
- (the heading buttons), `column-header` (each weekday letter), `day` (one whole
303
- day cell) and `day-button` (the button inside it), `month-item` and
304
- `year-item` (one button of the month / year panel).
302
+ (the heading buttons), `columnHeader` (each weekday letter), `day` (one whole
303
+ day cell) and `dayButton` (the button inside it), `monthItem` and
304
+ `yearItem` (one button of the month / year panel).
305
305
 
306
306
  States: `open` follows the surface; `arrow` is `disabled` at a `min` / `max`
307
307
  bound; `month` and `year` are `active` while their panel is open. The cells
308
- resolve per node — on `day` and `day-button`: `selected`, `disabled`, `today`,
309
- `outside` (a day of the previous or next month), `range-start` / `range-end` /
310
- `in-range` (a committed range) and `highlighted` (the keyboard cursor). The
308
+ resolve per node — on `day` and `dayButton`: `selected`, `disabled`, `today`,
309
+ `outside` (a day of the previous or next month), `rangeStart` / `rangeEnd` /
310
+ `inRange` (a committed range) and `highlighted` (the keyboard cursor). The
311
311
  panel items carry the same set without `today` and `outside`.
312
312
 
313
- `day` is the whole cell and `day-button` the rounded mark inside it: a
313
+ `day` is the whole cell and `dayButton` the rounded mark inside it: a
314
314
  background on `pt:day` paints the full cell square, so restyle the mark on
315
315
  `pt:day-button`. The time rail is not a part. The calendar parts are
316
316
  `BbCalendar`'s — this component forwards them to the calendar it hosts, and
@@ -401,7 +401,7 @@ and digit typeahead; the time rail exposes labelled columns. Always pass a
401
401
 
402
402
  | Prop | Type | Default | Required | Description |
403
403
  | --- | --- | --- | --- | --- |
404
- | `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: `arrow`, `column-header`, `day`, `day-button`, `header`, `month`, `month-item`, `panel`, `root`, `sheet`, `year`, `year-item`. States: `active`, `disabled`, `highlighted`, `in-range`, `open`, `outside`, `range-end`, `range-start`, `selected`, `today`. 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`. |
404
+ | `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: `arrow`, `columnHeader`, `day`, `dayButton`, `header`, `month`, `monthItem`, `panel`, `root`, `sheet`, `year`, `yearItem`. States: `active`, `disabled`, `highlighted`, `inRange`, `open`, `outside`, `rangeEnd`, `rangeStart`, `selected`, `today`. 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`. |
405
405
  | `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 the `BbColorPalette` activator API. |
406
406
  | `activeSegment` | `BbCalendarSegment \| undefined` | | | Which end the time rail edits in range + `type="datetime"` (`v-model:active-segment`). Standalone use manages this internally; an embedding host (the date input) drives it from its focused field. Ignored outside range + datetime. |
407
407
  | `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`. |
@@ -443,11 +443,11 @@ and digit typeahead; the time rail exposes labelled columns. Always pass a
443
443
  | `arrow` | The previous / next buttons — a broadcast. |
444
444
  | `month` | The month heading button; it opens the month panel. |
445
445
  | `year` | The year heading button; it opens the year panel. |
446
- | `column-header` | Each weekday letter above the grid — a broadcast. |
447
- | `day` | One whole day cell — a broadcast resolved per day. A background here paints the full cell square; restyle the round mark on `day-button`. |
448
- | `day-button` | The button inside a day cell — the mark that shows selection. A broadcast resolved per day. |
449
- | `month-item` | One month button of the month panel (the home grid of `type="month"`) — a broadcast resolved per month. |
450
- | `year-item` | One year button of the year list — a broadcast resolved per year. |
446
+ | `columnHeader` | Each weekday letter above the grid — a broadcast. |
447
+ | `day` | One whole day cell — a broadcast resolved per day. A background here paints the full cell square; restyle the round mark on `dayButton`. |
448
+ | `dayButton` | The button inside a day cell — the mark that shows selection. A broadcast resolved per day. |
449
+ | `monthItem` | One month button of the month panel (the home grid of `type="month"`) — a broadcast resolved per month. |
450
+ | `yearItem` | One year button of the year list — a broadcast resolved per year. |
451
451
  | `panel` | The calendar surface you see — the popover's painted bubble on desktop, the sheet itself on a phone. It carries the sizing tokens: `pt:panel="[--cell:36px]"` widens the calendar, `[--pad-x:2px]` tightens. |
452
452
  | `sheet` | The bottom sheet on a phone only (the `BbOffCanvas` root). Applied after `panel`, so it wins a conflict there. |
453
453
 
@@ -455,12 +455,12 @@ States are listed in precedence order: when two are on at once and their entries
455
455
 
456
456
  | State | When it is on |
457
457
  | --- | --- |
458
- | `outside` | Per node, on `day` / `day-button`: a day of the previous or next month, shown to fill the grid. |
459
- | `today` | Per node, on `day` / `day-button`: today. |
460
- | `in-range` | Per node, on the cells (`day`, `day-button`, `month-item`, `year-item`): inside a committed range, between its ends. |
458
+ | `outside` | Per node, on `day` / `dayButton`: a day of the previous or next month, shown to fill the grid. |
459
+ | `today` | Per node, on `day` / `dayButton`: today. |
460
+ | `inRange` | Per node, on the cells (`day`, `dayButton`, `monthItem`, `yearItem`): inside a committed range, between its ends. |
461
461
  | `selected` | Per node, on the cells: a chosen day, month or year. |
462
- | `range-start` | Per node, on the cells: a committed range's first day, month or year. |
463
- | `range-end` | Per node, on the cells: a committed range's last day, month or year. |
462
+ | `rangeStart` | Per node, on the cells: a committed range's first day, month or year. |
463
+ | `rangeEnd` | Per node, on the cells: a committed range's last day, month or year. |
464
464
  | `disabled` | Component-wide while the picker is `disabled`. Also per node: on the cells, one outside `min` / `max` or refused by `selectable`; on `arrow`, at a bound or while the month / year panel is open. |
465
465
  | `active` | Per node, on `month` / `year`: its panel is open. |
466
466
  | `open` | Component-wide: the calendar is showing. |
@@ -523,7 +523,7 @@ Set these on the element, or on a class you put on it, to retune this component
523
523
  - Listed nodes are the ones `BbDatePicker`'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`.
524
524
 
525
525
  - `BbDatePicker` _(this component)_ — its own template binds: `panel` → `div`, `panel` → `CommonPopover`; hands `BbCalendar` the pt map ` passthrough.forward(DATE_PICKER_CALENDAR_PARTS, BB_CALENDAR_PT.states) ` (ours → theirs); hands `BbOffCanvas` the pt map `{ panel: 'root', sheet: 'root' }` (ours → theirs)
526
- - `BbCalendar` _(public — [contract](./BbCalendar.md))_ — its own pt parts (`BbCalendar`): `header` → `div.bb-calendar__controls`, `arrow` → `BbBaseButton`, `month` → `BbBaseButton`, `year` → `BbBaseButton`, `day` → `div.bb-calendar__date`, `day-button` → `button.bb-calendar__date-button`; documented CSS variables: `--cell`, `--day-slot-allowance`, `--unit-row`; also mounts `ScaleFade`, `Slide`, `CalendarMonthPanel`, `CalendarYearPanel`
526
+ - `BbCalendar` _(public — [contract](./BbCalendar.md))_ — its own pt parts (`BbCalendar`): `header` → `div.bb-calendar__controls`, `arrow` → `BbBaseButton`, `month` → `BbBaseButton`, `year` → `BbBaseButton`, `day` → `div.bb-calendar__date`, `dayButton` → `button.bb-calendar__date-button`; documented CSS variables: `--cell`, `--day-slot-allowance`, `--unit-row`; also mounts `ScaleFade`, `Slide`, `CalendarMonthPanel`, `CalendarYearPanel`
527
527
  - `BbBaseButton` _(public — [contract](./BbBaseButton.md))_ — its own pt parts (`BbBaseButton`): `root` → `RouterComponent`, `root` → `a`, `root` → `component`; also mounts `RouterComponent`
528
528
  - `CommonTimeSelector` _(internal — not importable, reach it through `BbCalendar`)_ — documented CSS variables: `--time-mark`; also mounts `BbBaseButton`
529
529
  - `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`, `--handle-w`, `--handle-h`, `--handle-bg`, `--close-size`
@@ -20,11 +20,11 @@
20
20
  | `pt:arrow` | `pt:arrow` of `BbDatePicker` | `BbDatePicker` ([contract](./BbDatePicker.md)) |
21
21
  | `pt:month` | `pt:month` of `BbDatePicker` | `BbDatePicker` ([contract](./BbDatePicker.md)) |
22
22
  | `pt:year` | `pt:year` of `BbDatePicker` | `BbDatePicker` ([contract](./BbDatePicker.md)) |
23
- | `pt:column-header` | `pt:column-header` of `BbDatePicker` | `BbDatePicker` ([contract](./BbDatePicker.md)) |
23
+ | `pt:columnHeader` | `pt:columnHeader` of `BbDatePicker` | `BbDatePicker` ([contract](./BbDatePicker.md)) |
24
24
  | `pt:day` | `pt:day` of `BbDatePicker` | `BbDatePicker` ([contract](./BbDatePicker.md)) |
25
- | `pt:day-button` | `pt:day-button` of `BbDatePicker` | `BbDatePicker` ([contract](./BbDatePicker.md)) |
26
- | `pt:month-item` | `pt:month-item` of `BbDatePicker` | `BbDatePicker` ([contract](./BbDatePicker.md)) |
27
- | `pt:year-item` | `pt:year-item` of `BbDatePicker` | `BbDatePicker` ([contract](./BbDatePicker.md)) |
25
+ | `pt:dayButton` | `pt:dayButton` of `BbDatePicker` | `BbDatePicker` ([contract](./BbDatePicker.md)) |
26
+ | `pt:monthItem` | `pt:monthItem` of `BbDatePicker` | `BbDatePicker` ([contract](./BbDatePicker.md)) |
27
+ | `pt:yearItem` | `pt:yearItem` of `BbDatePicker` | `BbDatePicker` ([contract](./BbDatePicker.md)) |
28
28
  | `pt:root` | `div.bb-field` | `CommonField` _(internal)_ |
29
29
  | `pt:label` | `component` | `CommonField` _(internal)_ |
30
30
  | `pt:description` | `span.bb-field__description` | `CommonField` _(internal)_ |
@@ -722,8 +722,8 @@ the `BbTextInput` guide.
722
722
 
723
723
  `pt` reaches a named part of the control with a class list — or, in the
724
724
  object form, a style and attributes — optionally only while a state is on.
725
- 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 calendar surface you see — the popover's painted bubble on desktop, the sheet itself on a phone; it carries the sizing tokens, so `pt:panel="[--pad-x:2px]"` tightens it), `sheet` (the bottom sheet on a phone only) and the calendar's own parts, forwarded to it: `header`, `arrow`, `month`, `year`, `column-header`, `day` (the whole cell), `day-button` (the mark inside it), `month-item` and `year-item` — the `BbDatePicker` guide describes each node. `input` is every segment field; the calendar trigger is chrome.
726
- States: `errors`, `warnings` (never beside errors), `loading`, `disabled`, `readonly`, `has-value` (written `pt:box:has-value`). Plus `open` (the calendar is showing), and the calendar's per-node states: `selected`, `disabled`, `today`, `outside`, `range-start` / `range-end` / `in-range` and `highlighted` on the cells, `active` on `month` / `year`. A name outside that list is a type error and an
725
+ 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 calendar surface you see — the popover's painted bubble on desktop, the sheet itself on a phone; it carries the sizing tokens, so `pt:panel="[--pad-x:2px]"` tightens it), `sheet` (the bottom sheet on a phone only) and the calendar's own parts, forwarded to it: `header`, `arrow`, `month`, `year`, `columnHeader`, `day` (the whole cell), `dayButton` (the mark inside it), `monthItem` and `yearItem` — the `BbDatePicker` guide describes each node. `input` is every segment field; the calendar trigger is chrome.
726
+ States: `errors`, `warnings` (never beside errors), `loading`, `disabled`, `readonly`, `hasValue` (written `pt:box:has-value`). Plus `open` (the calendar is showing), and the calendar's per-node states: `selected`, `disabled`, `today`, `outside`, `rangeStart` / `rangeEnd` / `inRange` and `highlighted` on the cells, `active` on `month` / `year`. A name outside that list is a type error and an
727
727
  ESLint error.
728
728
 
729
729
  The invoice due-date field above, restyled through those parts: a muted
@@ -857,7 +857,7 @@ label>')` matches nothing; query each segment by its own label instead. See
857
857
 
858
858
  | Prop | Type | Default | Required | Description |
859
859
  | --- | --- | --- | --- | --- |
860
- | `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: `activator`, `arrow`, `box`, `clear`, `column-header`, `day`, `day-button`, `description`, `header`, `hint`, `icon`, `input`, `label`, `message`, `month`, `month-item`, `panel`, `prefix`, `root`, `sheet`, `spinner`, `suffix`, `year`, `year-item`. States: `active`, `disabled`, `errors`, `has-value`, `highlighted`, `in-range`, `loading`, `open`, `outside`, `range-end`, `range-start`, `readonly`, `selected`, `today`, `warnings`. 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`. |
860
+ | `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: `activator`, `arrow`, `box`, `clear`, `columnHeader`, `day`, `dayButton`, `description`, `header`, `hint`, `icon`, `input`, `label`, `message`, `month`, `monthItem`, `panel`, `prefix`, `root`, `sheet`, `spinner`, `suffix`, `year`, `yearItem`. States: `active`, `disabled`, `errors`, `hasValue`, `highlighted`, `inRange`, `loading`, `open`, `outside`, `rangeEnd`, `rangeStart`, `readonly`, `selected`, `today`, `warnings`. 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`. |
861
861
  | `adaptive` | `boolean \| undefined` | ``config.adaptive` (`true`)` | | On mobile the calendar opens inside a bottom off-canvas sheet instead of a floating popover, mirroring the adaptive behaviour of `BbPopover`/`BbSelect`. When unset, falls back to the global `config.adaptive`. |
862
862
  | `ampm` | `boolean \| undefined` | `false` | | 12-hour display with an AM/PM segment (requires `type="datetime"`). Purely a field-composition concern: `modelValue` and the `time` model stay 24-hour regardless. Type `A`/`P` (or ArrowUp/Down) to set the meridiem. |
863
863
  | `append:icon` | `string \| undefined` | | | Name of the icon to be added at the end of the input. |
@@ -929,23 +929,23 @@ label>')` matches nothing; query each segment by its own label instead. See
929
929
  | `arrow` | The previous / next buttons — a broadcast. |
930
930
  | `month` | The month heading button; it opens the month panel. |
931
931
  | `year` | The year heading button; it opens the year panel. |
932
- | `column-header` | Each weekday letter above the grid — a broadcast. |
933
- | `day` | One whole day cell — a broadcast resolved per day. A background here paints the full cell square; restyle the round mark on `day-button`. |
934
- | `day-button` | The button inside a day cell — the mark that shows selection. A broadcast resolved per day. |
935
- | `month-item` | One month button of the month panel (the home grid of `type="month"`) — a broadcast resolved per month. |
936
- | `year-item` | One year button of the year list — a broadcast resolved per year. |
932
+ | `columnHeader` | Each weekday letter above the grid — a broadcast. |
933
+ | `day` | One whole day cell — a broadcast resolved per day. A background here paints the full cell square; restyle the round mark on `dayButton`. |
934
+ | `dayButton` | The button inside a day cell — the mark that shows selection. A broadcast resolved per day. |
935
+ | `monthItem` | One month button of the month panel (the home grid of `type="month"`) — a broadcast resolved per month. |
936
+ | `yearItem` | One year button of the year list — a broadcast resolved per year. |
937
937
 
938
938
  States are listed in precedence order: when two are on at once and their entries conflict, the later one wins.
939
939
 
940
940
  | State | When it is on |
941
941
  | --- | --- |
942
- | `has-value` | Component-wide: the control holds a value, by its own rule (`0` counts on `BbNumberInput`, `''` on `BbColorInput`). |
943
- | `outside` | Per node, on `day` / `day-button`: a day of the previous or next month, shown to fill the grid. |
944
- | `today` | Per node, on `day` / `day-button`: today. |
945
- | `in-range` | Per node, on the cells (`day`, `day-button`, `month-item`, `year-item`): inside a committed range, between its ends. |
942
+ | `hasValue` | Component-wide: the control holds a value, by its own rule (`0` counts on `BbNumberInput`, `''` on `BbColorInput`). |
943
+ | `outside` | Per node, on `day` / `dayButton`: a day of the previous or next month, shown to fill the grid. |
944
+ | `today` | Per node, on `day` / `dayButton`: today. |
945
+ | `inRange` | Per node, on the cells (`day`, `dayButton`, `monthItem`, `yearItem`): inside a committed range, between its ends. |
946
946
  | `selected` | Per node, on the cells: a chosen day, month or year. |
947
- | `range-start` | Per node, on the cells: a committed range's first day, month or year. |
948
- | `range-end` | Per node, on the cells: a committed range's last day, month or year. |
947
+ | `rangeStart` | Per node, on the cells: a committed range's first day, month or year. |
948
+ | `rangeEnd` | Per node, on the cells: a committed range's last day, month or year. |
949
949
  | `readonly` | Component-wide: the control is `readonly` — shown, focusable, not editable. |
950
950
  | `disabled` | Component-wide while the input is `disabled`. Also per node, on the calendar's cells: one outside `min` / `max` or refused by `selectable`; on `arrow`, at a bound or while the month / year panel is open. |
951
951
  | `warnings` | Component-wide: the control is in its warning state (`warnings` / `has-warnings`) and not in an error state — errors win, so the two are never on together. |
@@ -1010,9 +1010,9 @@ Set these on the element, or on a class you put on it, to retune this component
1010
1010
  - **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 `BbDatePickerInput`'s root, where the node's own declaration masks it (design-tokens guide, _Overriding one from a consumer app_, rule 0).
1011
1011
  - Listed nodes are the ones `BbDatePickerInput`'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`.
1012
1012
 
1013
- - `BbDatePickerInput` _(this component)_ — its own template binds: `controlAttrs` → `input.bb-segmented-field__field`, `input` → `input.bb-segmented-field__field`, `activator` → `button.bb-segmented-field__trigger-btn`, `suffix` → `span.bb-field-input__suffix`; hands `BbDatePicker` the pt map `{ panel: 'panel', sheet: 'sheet', header: 'header', arrow: 'arrow', month: 'month', year: 'year', 'column-header': 'column-header', day: 'day', 'day-button': 'day-button', 'month-item': 'month-item', 'year-item': 'year-item', }` (ours → theirs)
1013
+ - `BbDatePickerInput` _(this component)_ — its own template binds: `controlAttrs` → `input.bb-segmented-field__field`, `input` → `input.bb-segmented-field__field`, `activator` → `button.bb-segmented-field__trigger-btn`, `suffix` → `span.bb-field-input__suffix`; hands `BbDatePicker` the pt map `{ panel: 'panel', sheet: 'sheet', header: 'header', arrow: 'arrow', month: 'month', year: 'year', columnHeader: 'columnHeader', day: 'day', dayButton: 'dayButton', monthItem: 'monthItem', yearItem: 'yearItem', }` (ours → theirs)
1014
1014
  - `BbDatePicker` _(public — [contract](./BbDatePicker.md))_ — its own pt parts (`BbDatePicker`): `panel` → `div`, `panel` → `CommonPopover`; hands `BbCalendar` the pt map ` passthrough.forward(DATE_PICKER_CALENDAR_PARTS, BB_CALENDAR_PT.states) ` (ours → theirs); hands `BbOffCanvas` the pt map `{ panel: 'root', sheet: 'root' }` (ours → theirs); documented CSS variables: `--cell`, `--day-slot-allowance`, `--unit-row`; also mounts `CommonPopover`
1015
- - `BbCalendar` _(public — [contract](./BbCalendar.md))_ — its own pt parts (`BbCalendar`): `header` → `div.bb-calendar__controls`, `arrow` → `BbBaseButton`, `month` → `BbBaseButton`, `year` → `BbBaseButton`, `day` → `div.bb-calendar__date`, `day-button` → `button.bb-calendar__date-button`; documented CSS variables: `--cell`, `--day-slot-allowance`, `--unit-row`; also mounts `ScaleFade`, `Slide`, `CalendarMonthPanel`, `CalendarYearPanel`
1015
+ - `BbCalendar` _(public — [contract](./BbCalendar.md))_ — its own pt parts (`BbCalendar`): `header` → `div.bb-calendar__controls`, `arrow` → `BbBaseButton`, `month` → `BbBaseButton`, `year` → `BbBaseButton`, `day` → `div.bb-calendar__date`, `dayButton` → `button.bb-calendar__date-button`; documented CSS variables: `--cell`, `--day-slot-allowance`, `--unit-row`; also mounts `ScaleFade`, `Slide`, `CalendarMonthPanel`, `CalendarYearPanel`
1016
1016
  - `BbBaseButton` _(public — [contract](./BbBaseButton.md))_ — its own pt parts (`BbBaseButton`): `root` → `RouterComponent`, `root` → `a`, `root` → `component`; also mounts `RouterComponent`
1017
1017
  - `CommonTimeSelector` _(internal — not importable, reach it through `BbCalendar`)_ — documented CSS variables: `--time-mark`; also mounts `BbBaseButton`
1018
1018
  - `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`, `--handle-w`, `--handle-h`, `--handle-bg`, `--close-size`