bitboss-ui 3.0.0-beta.47 → 3.0.0-beta.49
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -7
- package/bin/bitboss-ui-mcp.mjs +15 -3
- package/bin/bitboss-ui.mjs +167 -14
- package/dist/ai/BbAccordion.md +1 -1
- package/dist/ai/BbAvatar.md +1 -1
- package/dist/ai/BbBreadcrumbs.md +65 -65
- package/dist/ai/BbButton.md +28 -8
- package/dist/ai/BbCheckbox.md +0 -2
- package/dist/ai/BbCheckboxGroup.md +13 -20
- package/dist/ai/BbCollapsible.md +1 -1
- package/dist/ai/BbColorPalette.md +1 -1
- package/dist/ai/BbConfirm.md +8 -0
- package/dist/ai/BbConfirmPortal.md +1 -1
- package/dist/ai/BbDatePickerInput.md +4 -2
- package/dist/ai/BbDialog.md +1 -8
- package/dist/ai/BbDropdown.md +231 -220
- package/dist/ai/BbDropdownButton.md +65 -65
- package/dist/ai/BbDropdownGroup.md +2 -2
- package/dist/ai/BbDropzone.md +10 -10
- package/dist/ai/BbForm.md +43 -52
- package/dist/ai/BbHoverCard.md +19 -7
- package/dist/ai/BbHoverCardPortal.md +1 -1
- package/dist/ai/BbNumberInput.md +88 -21
- package/dist/ai/BbPopover.md +47 -40
- package/dist/ai/BbPopoverPortal.md +1 -1
- package/dist/ai/BbProgress.md +48 -22
- package/dist/ai/BbRadioGroup.md +13 -19
- package/dist/ai/BbSelect.md +16 -36
- package/dist/ai/BbSelectPopover.md +14 -30
- package/dist/ai/BbSmoothHeight.md +0 -2
- package/dist/ai/BbSwitchGroup.md +13 -20
- package/dist/ai/BbTable.md +11 -10
- package/dist/ai/BbTabs.md +107 -106
- package/dist/ai/BbTabsList.md +2 -2
- package/dist/ai/BbTabsPanels.md +1 -1
- package/dist/ai/BbTabsRoot.md +3 -3
- package/dist/ai/BbTooltip.md +29 -13
- package/dist/ai/BbTree.md +14 -11
- package/dist/ai/CommonPopover.md +1 -1
- package/dist/ai/changelog.json +297 -6
- package/dist/ai/components.json +50 -45
- package/dist/ai/composables/useBbDropdownContext.md +16 -16
- package/dist/ai/composables/useBbFormField.md +5 -1
- package/dist/ai/composables/useBbTabsContext.md +14 -14
- package/dist/ai/guides/agent-contract.md +27 -27
- package/dist/ai/guides/ai-router.md +1 -1
- package/dist/ai/guides/component-picker.md +3 -3
- package/dist/ai/guides/fetch-items-playbook.md +1 -1
- package/dist/ai/guides/icons-policy.md +10 -10
- package/dist/ai/guides/inertia-helpers.md +120 -67
- package/dist/ai/guides/installation-and-plugin-setup.md +45 -15
- package/dist/ai/guides/migration/components/bb-breadcrumbs.md +3 -2
- package/dist/ai/guides/migration/components/bb-checkbox-group.md +16 -16
- package/dist/ai/guides/migration/components/bb-dropdown-button.md +9 -8
- package/dist/ai/guides/migration/components/bb-dropdown.md +15 -14
- package/dist/ai/guides/migration/components/bb-radio-group.md +2 -1
- package/dist/ai/guides/migration/components/bb-select-popover.md +6 -1
- package/dist/ai/guides/migration/components/bb-select.md +10 -2
- package/dist/ai/guides/migration/components/bb-switch-group.md +2 -1
- package/dist/ai/guides/migration/components/bb-tabs.md +9 -8
- package/dist/ai/guides/migration/components/bb-tooltip.md +1 -1
- package/dist/ai/guides/migration/v2-to-v3.md +143 -28
- package/dist/ai/guides/migration/v3-beta-css-classes.md +29 -27
- package/dist/ai/guides/migration/v3-beta-tooling.md +11 -0
- package/dist/ai/guides/options-items-playbook.md +30 -24
- package/dist/ai/guides/passthrough.md +4 -4
- package/dist/ai/guides/preset-components.md +18 -3
- package/dist/ai/guides/typescript-generic-components.md +1 -1
- package/dist/ai/guides/validated-forms.md +11 -22
- package/dist/ai/guides/validation-providers.md +4 -3
- package/dist/ai/helpers/inertia/manifest.json +636 -0
- package/dist/ai/helpers/inertia/types.ts +15 -0
- package/dist/ai/helpers/inertia/useAsyncFn.ts +110 -0
- package/dist/ai/helpers/inertia/useConfirmOnRouteLeave.ts +102 -0
- package/dist/ai/helpers/inertia/useDeleteCmd.ts +30 -0
- package/dist/ai/helpers/inertia/useHasChanged.ts +36 -0
- package/dist/ai/helpers/inertia/useIndexById.ts +23 -0
- package/dist/ai/helpers/inertia/useLazyProp.ts +148 -0
- package/dist/ai/helpers/inertia/useLazyPropGetter.ts +50 -0
- package/dist/ai/helpers/inertia/useLoading.ts +20 -0
- package/dist/ai/helpers/inertia/usePaginatedResponseContext.ts +88 -0
- package/dist/ai/helpers/inertia/usePromiseForm.ts +62 -0
- package/dist/ai/helpers/inertia/useProp.ts +63 -0
- package/dist/ai/helpers/inertia/useQuery.ts +19 -0
- package/dist/ai/helpers/inertia/useQueryObject.ts +116 -0
- package/dist/ai/helpers/inertia/useResourceContext.ts +69 -0
- package/dist/ai/helpers/inertia/useRouteQuery.ts +54 -0
- package/dist/ai/helpers/inertia/useScreenSizes.ts +23 -0
- package/dist/ai/helpers/inertia/useTableContext.ts +34 -0
- package/dist/ai/helpers/inertia/useTableSelectionContext.ts +48 -0
- package/dist/ai/helpers/inertia/useUntil.ts +33 -0
- package/dist/ai/helpers/inertia/utils.ts +24 -0
- package/dist/ai/index.md +6 -6
- package/dist/ai/manifest/components/BbAccordion.json +1 -1
- package/dist/ai/manifest/components/BbBreadcrumbs.json +10 -6
- package/dist/ai/manifest/components/BbBreadcrumbs.tree.json +1 -1
- package/dist/ai/manifest/components/BbButton.json +2 -1
- package/dist/ai/manifest/components/BbButton.tree.json +1 -1
- package/dist/ai/manifest/components/BbCheckboxGroup.json +2 -2
- package/dist/ai/manifest/components/BbCollapsible.json +1 -1
- package/dist/ai/manifest/components/BbColorPalette.json +1 -1
- package/dist/ai/manifest/components/BbConfirmPortal.json +5 -2
- package/dist/ai/manifest/components/BbDropdown.json +23 -20
- package/dist/ai/manifest/components/BbDropdown.tree.json +2 -2
- package/dist/ai/manifest/components/BbDropdownButton.json +22 -19
- package/dist/ai/manifest/components/BbDropdownButton.tree.json +1 -1
- package/dist/ai/manifest/components/BbDropdownGroup.json +2 -2
- package/dist/ai/manifest/components/BbForm.json +1 -0
- package/dist/ai/manifest/components/BbHoverCard.json +1 -1
- package/dist/ai/manifest/components/BbHoverCardPortal.json +2 -2
- package/dist/ai/manifest/components/BbNumberInput.json +6 -1
- package/dist/ai/manifest/components/BbNumberInput.tree.json +2 -1
- package/dist/ai/manifest/components/BbPopover.json +2 -1
- package/dist/ai/manifest/components/BbPopoverPortal.json +2 -2
- package/dist/ai/manifest/components/BbProgress.json +6 -6
- package/dist/ai/manifest/components/BbProgress.tree.json +1 -0
- package/dist/ai/manifest/components/BbRadioGroup.json +2 -2
- package/dist/ai/manifest/components/BbSelect.json +2 -2
- package/dist/ai/manifest/components/BbSelect.tree.json +2 -2
- package/dist/ai/manifest/components/BbSelectPopover.json +2 -2
- package/dist/ai/manifest/components/BbSelectPopover.tree.json +1 -1
- package/dist/ai/manifest/components/BbSwitchGroup.json +2 -2
- package/dist/ai/manifest/components/BbTabs.json +8 -7
- package/dist/ai/manifest/components/BbTabsList.json +3 -3
- package/dist/ai/manifest/components/BbTabsPanels.json +1 -1
- package/dist/ai/manifest/components/BbTabsRoot.json +6 -5
- package/dist/ai/manifest/components/BbTag.tree.json +1 -1
- package/dist/ai/manifest/components/BbTooltip.json +2 -2
- package/dist/ai/manifest/components/ChipsBox.tree.json +1 -1
- package/dist/ai/manifest/components/CommonPopover.json +1 -1
- package/dist/ai/manifest/index.json +2 -2
- package/dist/ai/manifest/meta.json +5 -0
- package/dist/ai/manifest/types.advanced.json +10 -9
- package/dist/ai/manifest/types.api.json +8 -5
- package/dist/ai/manifest/types.wrapper.json +1 -0
- package/dist/ai/recipes/inertia/approvals-inbox.md +16 -18
- package/dist/ai/recipes/inertia/inline-edit-workspace.md +23 -33
- package/dist/ai/recipes/inertia/layout-scaffold.md +16 -16
- package/dist/ai/recipes/inertia/onboarding.md +6 -10
- package/dist/ai/recipes/inertia/ownership-atlas.md +15 -18
- package/dist/ai/recipes/inertia/record-form.md +11 -11
- package/dist/ai/recipes/inertia/records-workspace.md +38 -41
- package/dist/ai/recipes/inertia/settings-workspace.md +26 -38
- package/dist/ai/recipes/inertia/upload-center.md +31 -39
- package/dist/ai/recipes/inertia/wizard-form.md +10 -19
- package/dist/ai/recipes/nuxt/approvals-inbox.md +7 -8
- package/dist/ai/recipes/nuxt/inline-edit-workspace.md +14 -24
- package/dist/ai/recipes/nuxt/layout-scaffold.md +16 -16
- package/dist/ai/recipes/nuxt/onboarding.md +2 -6
- package/dist/ai/recipes/nuxt/ownership-atlas.md +7 -9
- package/dist/ai/recipes/nuxt/record-form.md +5 -5
- package/dist/ai/recipes/nuxt/records-workspace.md +29 -31
- package/dist/ai/recipes/nuxt/settings-workspace.md +22 -34
- package/dist/ai/recipes/nuxt/upload-center.md +22 -29
- package/dist/ai/recipes/nuxt/wizard-form.md +3 -11
- package/dist/ai/recipes/vue/approvals-inbox.md +7 -8
- package/dist/ai/recipes/vue/inline-edit-workspace.md +14 -24
- package/dist/ai/recipes/vue/layout-scaffold.md +16 -16
- package/dist/ai/recipes/vue/onboarding.md +2 -6
- package/dist/ai/recipes/vue/ownership-atlas.md +7 -9
- package/dist/ai/recipes/vue/record-form.md +5 -5
- package/dist/ai/recipes/vue/records-workspace.md +29 -31
- package/dist/ai/recipes/vue/settings-workspace.md +22 -34
- package/dist/ai/recipes/vue/upload-center.md +22 -29
- package/dist/ai/recipes/vue/wizard-form.md +3 -11
- package/dist/ai/source/BbAccordion.md +1 -1
- package/dist/ai/source/BbAlert.md +3 -3
- package/dist/ai/source/BbBadge.md +14 -10
- package/dist/ai/source/BbBadgeButton.md +17 -12
- package/dist/ai/source/BbBaseButton.md +1 -1
- package/dist/ai/source/BbBaseRadioIcon.md +1 -0
- package/dist/ai/source/BbBaseSwitchIcon.md +1 -0
- package/dist/ai/source/BbBreadcrumbs.md +63 -42
- package/dist/ai/source/BbButton.md +84 -38
- package/dist/ai/source/BbCalendar.md +17 -16
- package/dist/ai/source/BbCheckbox.md +3 -2
- package/dist/ai/source/BbCheckboxGroup.md +11 -4
- package/dist/ai/source/BbCollapsible.md +2 -1
- package/dist/ai/source/BbColorInput.md +10 -9
- package/dist/ai/source/BbColorPalette.md +2 -1
- package/dist/ai/source/BbConfirm.md +18 -1
- package/dist/ai/source/BbConfirmPortal.md +20 -6
- package/dist/ai/source/BbDatePicker.md +2 -2
- package/dist/ai/source/BbDatePickerInput.md +47 -20
- package/dist/ai/source/BbDialog.md +5 -5
- package/dist/ai/source/BbDropdown.md +231 -158
- package/dist/ai/source/BbDropdownButton.md +19 -12
- package/dist/ai/source/BbDropdownGroup.md +127 -93
- package/dist/ai/source/BbForm.md +25 -1
- package/dist/ai/source/BbHoverCard.md +30 -3
- package/dist/ai/source/BbHoverCardPortal.md +18 -3
- package/dist/ai/source/BbIndicator.md +4 -0
- package/dist/ai/source/BbNumberInput.md +855 -19
- package/dist/ai/source/BbOffCanvas.md +27 -11
- package/dist/ai/source/BbPagination.md +3 -3
- package/dist/ai/source/BbPopover.md +185 -12
- package/dist/ai/source/BbPopoverPortal.md +30 -3
- package/dist/ai/source/BbProgress.md +82 -18
- package/dist/ai/source/BbRadioGroup.md +12 -5
- package/dist/ai/source/BbRating.md +11 -9
- package/dist/ai/source/BbSelect.md +16 -10
- package/dist/ai/source/BbSelectPopover.md +29 -23
- package/dist/ai/source/BbSlider.md +12 -6
- package/dist/ai/source/BbSwitch.md +3 -2
- package/dist/ai/source/BbSwitchGroup.md +5 -2
- package/dist/ai/source/BbTable.md +102 -18
- package/dist/ai/source/BbTabs.md +30 -24
- package/dist/ai/source/BbTabsList.md +29 -23
- package/dist/ai/source/BbTabsPanels.md +29 -23
- package/dist/ai/source/BbTabsRoot.md +28 -22
- package/dist/ai/source/BbTag.md +10 -9
- package/dist/ai/source/BbTextInput.md +5 -4
- package/dist/ai/source/BbTextarea.md +6 -5
- package/dist/ai/source/BbTimePicker.md +1 -1
- package/dist/ai/source/BbTimePickerInput.md +46 -9
- package/dist/ai/source/BbToast.md +10 -7
- package/dist/ai/source/BbToastPortal.md +10 -7
- package/dist/ai/source/BbTooltip.md +88 -11
- package/dist/ai/source/BbTree.md +21 -3
- package/dist/ai/source/CommonField.md +6 -4
- package/dist/ai/source/CommonFieldInput.md +15 -10
- package/dist/ai/source/CommonPopover.md +8 -1
- package/dist/ai/source/CommonTimeSelector.md +5 -4
- package/dist/components/BbBadge/BbBadgeButton.vue_vue_type_script_setup_true_lang.js +10 -8
- package/dist/components/BbBaseButton/BbBaseButton.vue_vue_type_script_setup_true_lang.js +8 -8
- package/dist/components/BbBreadcrumbs/BbBreadcrumbs.vue_vue_type_script_setup_true_lang.js +45 -45
- package/dist/components/BbBreadcrumbs/types.d.ts +25 -17
- package/dist/components/BbButton/BbButton.vue_vue_type_script_setup_true_lang.js +88 -70
- package/dist/components/BbButton/toggleRoving.d.ts +6 -0
- package/dist/components/BbButton/toggleRoving.js +45 -0
- package/dist/components/BbButton/types.d.ts +12 -4
- package/dist/components/BbButton/types.js +5 -1
- package/dist/components/BbCalendar/BbCalendar.vue_vue_type_script_setup_true_lang.js +178 -178
- package/dist/components/BbCalendar/CalendarMonthPanel.vue_vue_type_script_setup_true_lang.js +15 -15
- package/dist/components/BbCalendar/CalendarYearPanel.vue_vue_type_script_setup_true_lang.js +28 -28
- package/dist/components/BbCalendar/useCalendarGrid.js +141 -139
- package/dist/components/BbCalendar/useDayjsLocale.d.ts +38 -15
- package/dist/components/BbCalendar/useDayjsLocale.js +31 -30
- package/dist/components/BbCheckbox/BbCheckbox.vue_vue_type_script_setup_true_lang.js +48 -48
- package/dist/components/BbCheckboxGroup/BbCheckboxGroup.vue_vue_type_script_setup_true_lang.js +81 -80
- package/dist/components/BbCheckboxGroup/types.d.ts +6 -2
- package/dist/components/BbCollapsible/types.d.ts +2 -1
- package/dist/components/BbColorInput/BbColorInput.vue_vue_type_script_setup_true_lang.js +69 -69
- package/dist/components/BbColorPalette/types.d.ts +2 -1
- package/dist/components/BbConfirm/BbConfirmPortal.vue.d.ts +2 -5
- package/dist/components/BbConfirm/types.d.ts +15 -0
- package/dist/components/BbDatePickerInput/BbDatePickerInput.vue_vue_type_script_setup_true_lang.js +363 -349
- package/dist/components/BbDropdown/AdaptiveDropdown.vue_vue_type_script_setup_true_lang.js +91 -86
- package/dist/components/BbDropdown/BbDropdown.vue_vue_type_script_setup_true_lang.js +298 -289
- package/dist/components/BbDropdown/BbDropdownList.vue_vue_type_script_setup_true_lang.js +322 -356
- package/dist/components/BbDropdown/DropdownPipelineResolver.vue_vue_type_script_setup_true_lang.js +17 -15
- package/dist/components/BbDropdown/DropdownRow.vue.d.ts +40 -0
- package/dist/components/BbDropdown/DropdownRow.vue.js +5 -0
- package/dist/components/BbDropdown/DropdownRow.vue_vue_type_script_setup_true_lang.js +60 -0
- package/dist/components/BbDropdown/normalizeGroups.d.ts +8 -2
- package/dist/components/BbDropdown/normalizeGroups.js +60 -46
- package/dist/components/BbDropdown/types.d.ts +120 -88
- package/dist/components/BbDropdownButton/BbDropdownButton.vue_vue_type_script_setup_true_lang.js +11 -2
- package/dist/components/BbDropdownButton/types.d.ts +2 -2
- package/dist/components/BbForm/BbForm.vue.d.ts +9 -0
- package/dist/components/BbForm/BbForm.vue_vue_type_script_setup_true_lang.js +114 -105
- package/dist/components/BbForm/BbFormCustomField.js +1 -1
- package/dist/components/BbForm/bindFormField.js +2 -1
- package/dist/components/BbForm/formFields.d.ts +5 -0
- package/dist/components/BbHoverCard/BbHoverCard.vue_vue_type_script_setup_true_lang.js +145 -142
- package/dist/components/BbHoverCard/BbHoverCardPortal.vue.d.ts +2 -2
- package/dist/components/BbHoverCard/types.d.ts +14 -1
- package/dist/components/BbNumberInput/BbNumberInput.vue.d.ts +0 -1
- package/dist/components/BbNumberInput/BbNumberInput.vue_vue_type_script_setup_true_lang.js +452 -125
- package/dist/components/BbNumberInput/numberDisplay.d.ts +256 -0
- package/dist/components/BbNumberInput/numberDisplay.js +499 -0
- package/dist/components/BbNumberInput/types.d.ts +54 -1
- package/dist/components/BbNumberInput/warroom/corpus.d.ts +58 -0
- package/dist/components/BbNumberInput/warroom/currency-verify.rows.d.ts +28 -0
- package/dist/components/BbNumberInput/warroom/currency.rows.d.ts +2 -0
- package/dist/components/BbNumberInput/warroom/harness.d.ts +217 -0
- package/dist/components/BbNumberInput/warroom/oracle.d.ts +150 -0
- package/dist/components/BbPagination/BbPagination.vue_vue_type_script_setup_true_lang.js +7 -7
- package/dist/components/BbPopover/BbPopover.vue.d.ts +1 -0
- package/dist/components/BbPopover/BbPopover.vue_vue_type_script_setup_true_lang.js +207 -162
- package/dist/components/BbPopover/BbPopoverPortal.vue.d.ts +2 -2
- package/dist/components/BbPopover/types.d.ts +26 -1
- package/dist/components/BbProgress/BbProgress.vue_vue_type_script_setup_true_lang.js +15 -7
- package/dist/components/BbProgress/types.d.ts +23 -7
- package/dist/components/BbProgress/types.js +1 -1
- package/dist/components/BbRadioGroup/BbRadioGroup.vue_vue_type_script_setup_true_lang.js +102 -101
- package/dist/components/BbRadioGroup/types.d.ts +6 -2
- package/dist/components/BbRating/BbRating.vue_vue_type_script_setup_true_lang.js +63 -63
- package/dist/components/BbSelect/BbSelect.vue_vue_type_script_setup_true_lang.js +156 -154
- package/dist/components/BbSelect/types.d.ts +6 -2
- package/dist/components/BbSelectPopover/BbSelectPopover.vue_vue_type_script_setup_true_lang.js +2 -1
- package/dist/components/BbSelectPopover/types.d.ts +6 -2
- package/dist/components/BbSlider/BbSlider.vue_vue_type_script_setup_true_lang.js +153 -153
- package/dist/components/BbSwitch/BbSwitch.vue_vue_type_script_setup_true_lang.js +62 -62
- package/dist/components/BbSwitchGroup/BbSwitchGroup.vue_vue_type_script_setup_true_lang.js +131 -130
- package/dist/components/BbTable/BbTable.vue_vue_type_script_setup_true_lang.js +711 -676
- package/dist/components/BbTabs/BbTabs.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/BbTabs/BbTabsList.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/BbTabs/types.d.ts +28 -22
- package/dist/components/BbTag/BbTag.vue_vue_type_script_setup_true_lang.js +76 -76
- package/dist/components/BbTextInput/BbTextInput.vue_vue_type_script_setup_true_lang.js +58 -58
- package/dist/components/BbTextarea/BbTextarea.vue_vue_type_script_setup_true_lang.js +82 -82
- package/dist/components/BbTimePickerInput/BbTimePickerInput.vue_vue_type_script_setup_true_lang.js +246 -236
- package/dist/components/BbTooltip/BbTooltip.vue_vue_type_script_setup_true_lang.js +99 -86
- package/dist/components/BbTooltip/tooltipWarmup.d.ts +23 -0
- package/dist/components/BbTooltip/tooltipWarmup.js +7 -0
- package/dist/components/BbTooltip/types.d.ts +10 -3
- package/dist/components/BbTree/BbTree.vue_vue_type_script_setup_true_lang.js +29 -21
- package/dist/components/BbTree/BbTreeLevel.vue_vue_type_script_setup_true_lang.js +10 -7
- package/dist/components/CommonFieldInput/CommonFieldInput.vue_vue_type_script_setup_true_lang.js +37 -36
- package/dist/components/CommonPopover/types.d.ts +2 -1
- package/dist/components/CommonTimeSelector/CommonTimeSelector.vue_vue_type_script_setup_true_lang.js +9 -9
- package/dist/composables/formSubmitLock.d.ts +6 -0
- package/dist/composables/formSubmitLock.js +4 -0
- package/dist/composables/useBaseOptions.d.ts +7 -1
- package/dist/composables/useBaseOptions.js +32 -32
- package/dist/composables/useBbDropdownContext.d.ts +8 -8
- package/dist/composables/useBbFormField.d.ts +9 -0
- package/dist/composables/useBbFormField.js +5 -3
- package/dist/composables/useBbTabsContext.d.ts +10 -10
- package/dist/composables/useBbTabsContext.js +18 -18
- package/dist/composables/useFormBinding.d.ts +11 -0
- package/dist/composables/useFormBinding.js +15 -13
- package/dist/composables/useItemText.d.ts +5 -1
- package/dist/composables/useItemText.js +8 -3
- package/dist/composables/useItemValue.d.ts +5 -1
- package/dist/composables/useItemValue.js +8 -3
- package/dist/composables/useLocale.js +10 -9
- package/dist/deprecation/ai-deprecations.json.d.ts +130 -0
- package/dist/deprecation/ai-deprecations.json.js +1 -1
- package/dist/deprecation/removedProps.js +1 -1
- package/dist/directives/bbDropdown.js +1 -1
- package/dist/directives/directivePortal.d.ts +13 -7
- package/dist/directives/directivePortal.js +1 -4
- package/dist/i18n/index.d.ts +7 -12
- package/dist/i18n/locales/cs.json +11 -14
- package/dist/i18n/locales/da.json +13 -16
- package/dist/i18n/locales/de-CH.json +137 -0
- package/dist/i18n/locales/de.json +14 -17
- package/dist/i18n/locales/el.json +10 -13
- package/dist/i18n/locales/en-GB.json +137 -0
- package/dist/i18n/locales/en.json +8 -11
- package/dist/i18n/locales/es-MX.json +137 -0
- package/dist/i18n/locales/es.json +16 -19
- package/dist/i18n/locales/fi.json +8 -11
- package/dist/i18n/locales/fr.json +23 -26
- package/dist/i18n/locales/hu.json +8 -11
- package/dist/i18n/locales/it.json +12 -15
- package/dist/i18n/locales/ja.json +13 -16
- package/dist/i18n/locales/ko.json +10 -13
- package/dist/i18n/locales/nb.json +13 -16
- package/dist/i18n/locales/nl.json +21 -24
- package/dist/i18n/locales/pl.json +10 -13
- package/dist/i18n/locales/{pt.json → pt-BR.json} +19 -22
- package/dist/i18n/locales/pt-PT.json +137 -0
- package/dist/i18n/locales/ro.json +22 -25
- package/dist/i18n/locales/ru.json +11 -14
- package/dist/i18n/locales/sv.json +16 -19
- package/dist/i18n/locales/tr.json +14 -17
- package/dist/i18n/locales/uk.json +11 -14
- package/dist/i18n/locales/{zh-cn.json → zh-CN.json} +10 -13
- package/dist/i18n/locales/zh-HK.json +137 -0
- package/dist/i18n/locales/zh-TW.json +137 -0
- package/dist/i18n/regionHints.d.ts +16 -0
- package/dist/i18n/regionHints.js +49 -0
- package/dist/i18n/regions.d.ts +286 -0
- package/dist/i18n/regions.js +265 -0
- package/dist/index.d.ts +4 -4
- package/dist/index.js +4 -4
- package/dist/llms-full.txt +1914 -1714
- package/dist/llms-medium.txt +76 -46
- package/dist/llms.txt +7 -7
- package/dist/locale-blueprint.json +16 -13
- package/dist/styles.css +2 -2
- package/dist/types/passthrough.d.ts +1 -1
- package/dist/types/ptComponentMap.d.ts +2 -2
- package/dist/utilities/functions/slotKey.d.ts +2 -2
- package/dist/utils/versionCheck.js +1 -1
- package/dist/vite-plugin.d.ts +22 -19
- package/dist/vite.js +309 -297
- package/llms.txt +7 -7
- package/package.json +5 -3
- package/scripts/lib/agent-manifest.mjs +2 -1
- package/scripts/lib/eslint-disable.mjs +17 -4
- package/scripts/lib/eslint-plugin.d.ts +9 -1
- package/scripts/lib/eslint-plugin.mjs +256 -6
- package/scripts/lib/helper-canon.mjs +176 -0
- package/scripts/lib/helpers-add.mjs +1303 -0
- package/scripts/lib/local-components.mjs +33 -4
- package/scripts/lib/locale-check.mjs +165 -0
- package/scripts/lib/portal-names.mjs +458 -0
- package/scripts/lib/redundant-item-accessor.mjs +398 -0
- package/scripts/lib/renamed-item-field.mjs +343 -0
- package/scripts/lib/slot-key.mjs +2 -2
- package/scripts/lib/slot-renames.mjs +1 -1
- package/scripts/lib/unimported-components.mjs +5 -2
- package/scripts/lib/validate-bb-markup.mjs +123 -56
- package/dist/i18n/index.js +0 -27
package/dist/ai/BbBreadcrumbs.md
CHANGED
|
@@ -36,9 +36,9 @@ use `BbPagination`. Show at most one breadcrumb trail per view.
|
|
|
36
36
|
|
|
37
37
|
### Build the trail from `items`
|
|
38
38
|
|
|
39
|
-
Each item is `{
|
|
40
|
-
|
|
41
|
-
|
|
39
|
+
Each item is `{ label, value }` plus a navigation target. `label` is the
|
|
40
|
+
crumb's text; `value` is optional and, when set, must be unique (it names the
|
|
41
|
+
crumb's own slots). Navigation is always the item's job — give a crumb an `href` (or
|
|
42
42
|
`to`, or an `onClick`) and it renders as a real link; **never** wrap a crumb in
|
|
43
43
|
your own click-to-route handler. Leave the **last** item without a target: a
|
|
44
44
|
last crumb with no target is the current page, and the component marks it
|
|
@@ -51,10 +51,10 @@ it) never marks the parent current.
|
|
|
51
51
|
```vue
|
|
52
52
|
<BbBreadcrumbs
|
|
53
53
|
:items="[
|
|
54
|
-
{
|
|
55
|
-
{
|
|
56
|
-
{
|
|
57
|
-
{
|
|
54
|
+
{ value: 'dashboard', label: 'Dashboard', href: '#dashboard' },
|
|
55
|
+
{ value: 'billing', label: 'Billing', href: '#billing' },
|
|
56
|
+
{ value: 'invoices', label: 'Invoices', href: '#invoices' },
|
|
57
|
+
{ value: 'invoice', label: 'Invoice #1042' },
|
|
58
58
|
]"
|
|
59
59
|
/>
|
|
60
60
|
```
|
|
@@ -124,20 +124,20 @@ import type { BbBreadcrumbsItem } from 'bitboss-ui';
|
|
|
124
124
|
// crumb is a real link; the current page stays without a target.
|
|
125
125
|
const trail: BbBreadcrumbsItem[] = [
|
|
126
126
|
{
|
|
127
|
-
|
|
128
|
-
|
|
127
|
+
value: 'settings',
|
|
128
|
+
label: 'Settings',
|
|
129
129
|
href: '#settings',
|
|
130
130
|
'prepend:icon': 'lucide:settings',
|
|
131
131
|
},
|
|
132
132
|
{
|
|
133
|
-
|
|
134
|
-
|
|
133
|
+
value: 'team',
|
|
134
|
+
label: 'Team',
|
|
135
135
|
href: '#team',
|
|
136
136
|
'prepend:icon': 'lucide:users',
|
|
137
137
|
},
|
|
138
138
|
{
|
|
139
|
-
|
|
140
|
-
|
|
139
|
+
value: 'members',
|
|
140
|
+
label: 'Members',
|
|
141
141
|
'prepend:icon': 'lucide:user-round',
|
|
142
142
|
},
|
|
143
143
|
];
|
|
@@ -164,7 +164,7 @@ other crumb goes into the menu and the current page stays, its label truncated
|
|
|
164
164
|
with an ellipsis (the full text in a tooltip and to assistive tech). That is the
|
|
165
165
|
floor: in a very narrow toolbar the trail reads `… / Quarterly rev…`. If that is
|
|
166
166
|
too little, give the trail its own full-width row, or shorten the last label
|
|
167
|
-
(`
|
|
167
|
+
(`label` is yours).
|
|
168
168
|
|
|
169
169
|
**Overflow folds into an ellipsis menu**
|
|
170
170
|
|
|
@@ -172,12 +172,12 @@ too little, give the trail its own full-width row, or shorten the last label
|
|
|
172
172
|
<div class="max-w-xs">
|
|
173
173
|
<BbBreadcrumbs
|
|
174
174
|
:items="[
|
|
175
|
-
{
|
|
176
|
-
{
|
|
177
|
-
{
|
|
178
|
-
{
|
|
179
|
-
{
|
|
180
|
-
{
|
|
175
|
+
{ value: 'workspace', label: 'Workspace', href: '#workspace' },
|
|
176
|
+
{ value: 'engineering', label: 'Engineering', href: '#engineering' },
|
|
177
|
+
{ value: 'frontend', label: 'Frontend', href: '#frontend' },
|
|
178
|
+
{ value: 'design-system', label: 'Design System', href: '#design-system' },
|
|
179
|
+
{ value: 'components', label: 'Components', href: '#components' },
|
|
180
|
+
{ value: 'breadcrumbs', label: 'Breadcrumbs' },
|
|
181
181
|
]"
|
|
182
182
|
/>
|
|
183
183
|
</div>
|
|
@@ -250,8 +250,8 @@ When slot (or icon) content adds width the estimator cannot see, set
|
|
|
250
250
|
<BbBreadcrumbs
|
|
251
251
|
:offset-width="96"
|
|
252
252
|
:items="[
|
|
253
|
-
{
|
|
254
|
-
{
|
|
253
|
+
{ value: 'settings', label: 'Settings', href: '#settings' },
|
|
254
|
+
{ value: 'notifications', label: 'Notifications' },
|
|
255
255
|
]"
|
|
256
256
|
>
|
|
257
257
|
<template #prepend>
|
|
@@ -260,7 +260,7 @@ When slot (or icon) content adds width the estimator cannot see, set
|
|
|
260
260
|
<template #item:prepend="{ item }">
|
|
261
261
|
<BbIcon
|
|
262
262
|
class="mr-1"
|
|
263
|
-
:icon="item.
|
|
263
|
+
:icon="item.value === 'settings' ? 'lucide:settings' : 'lucide:bell'"
|
|
264
264
|
size="14"
|
|
265
265
|
/>
|
|
266
266
|
</template>
|
|
@@ -310,10 +310,10 @@ import type { BbBreadcrumbsItem } from 'bitboss-ui';
|
|
|
310
310
|
// File-view header: trail says where you are; compact `append` actions act on
|
|
311
311
|
// the file. Declare their width with `offset-width` so overflow stays honest.
|
|
312
312
|
const items: BbBreadcrumbsItem[] = [
|
|
313
|
-
{
|
|
314
|
-
{
|
|
315
|
-
{
|
|
316
|
-
{
|
|
313
|
+
{ value: 'repo', label: 'acme-ui', href: '#repo' },
|
|
314
|
+
{ value: 'src', label: 'src', href: '#src' },
|
|
315
|
+
{ value: 'components', label: 'components', href: '#components' },
|
|
316
|
+
{ value: 'button', label: 'Button.tsx' },
|
|
317
317
|
];
|
|
318
318
|
|
|
319
319
|
const copied = ref(false);
|
|
@@ -330,17 +330,17 @@ const onCopyPath = () => {
|
|
|
330
330
|
|
|
331
331
|
### Own one crumb's label with its named slot
|
|
332
332
|
|
|
333
|
-
Every item also gets a slot named after
|
|
334
|
-
default
|
|
335
|
-
richer content — a status dot on the current record, a badge on one level —
|
|
336
|
-
while the rest of the trail stays plain. A crumb's `
|
|
337
|
-
it has a slot of its own — a
|
|
338
|
-
slots and its
|
|
339
|
-
changes with translation; a slot name must not). The slot name is the
|
|
333
|
+
Every item with a `value` also gets a slot named after it, replacing that
|
|
334
|
+
crumb's default label (same scope as `item:prepend`). Use it when a single crumb
|
|
335
|
+
needs richer content — a status dot on the current record, a badge on one level —
|
|
336
|
+
while the rest of the trail stays plain. A crumb's `value` is optional unless
|
|
337
|
+
it has a slot of its own — a crumb without one renders with the generic `item:*`
|
|
338
|
+
slots and its label, and its slot name is never derived from the label (a label
|
|
339
|
+
changes with translation; a slot name must not). The slot name is the value through
|
|
340
340
|
`slotKey`, which is kebab-case — `'Order History'` → `#order-history`,
|
|
341
341
|
`'orderHistory'` → `#order-history`, `'order_history'` → `#order-history`; for
|
|
342
|
-
a
|
|
343
|
-
slotKey } from 'bitboss-ui'`). Because
|
|
342
|
+
a value with accents or other scripts write `#[slotKey('Qualità')]` (`import {
|
|
343
|
+
slotKey } from 'bitboss-ui'`). Because values become slot names, a value spelled
|
|
344
344
|
like a reserved slot (`prepend`, `append`, `divider`, `ellipsis`, `item`) is an
|
|
345
345
|
error: `bitboss-ui check` flags it when `items` is in the same file.
|
|
346
346
|
|
|
@@ -349,16 +349,16 @@ error: `bitboss-ui check` flags it when `items` is in the same file.
|
|
|
349
349
|
```vue
|
|
350
350
|
<BbBreadcrumbs
|
|
351
351
|
:items="[
|
|
352
|
-
{
|
|
353
|
-
{
|
|
352
|
+
{ value: 'deployments', label: 'Deployments', href: '#deployments' },
|
|
353
|
+
{ value: 'release', label: 'v2.4.0' },
|
|
354
354
|
]"
|
|
355
355
|
>
|
|
356
|
-
<template #release="{
|
|
356
|
+
<template #release="{ label }">
|
|
357
357
|
<span class="inline-flex items-center gap-1.5">
|
|
358
358
|
<span
|
|
359
359
|
class="size-2 rounded-full bg-(--bb-primary)"
|
|
360
360
|
></span>
|
|
361
|
-
{{
|
|
361
|
+
{{ label }}
|
|
362
362
|
</span>
|
|
363
363
|
</template>
|
|
364
364
|
</BbBreadcrumbs>
|
|
@@ -380,10 +380,10 @@ wider than `…`, pair it with `ellipsis-width`.
|
|
|
380
380
|
<BbBreadcrumbs
|
|
381
381
|
:ellipsis-width="40"
|
|
382
382
|
:items="[
|
|
383
|
-
{
|
|
384
|
-
{
|
|
385
|
-
{
|
|
386
|
-
{
|
|
383
|
+
{ value: 'library', label: 'Library', href: '#library' },
|
|
384
|
+
{ value: 'photos', label: 'Photos', href: '#photos' },
|
|
385
|
+
{ value: 'albums', label: 'Albums', href: '#albums' },
|
|
386
|
+
{ value: 'summer', label: 'Summer 2026' },
|
|
387
387
|
]"
|
|
388
388
|
>
|
|
389
389
|
<template #divider>
|
|
@@ -482,8 +482,8 @@ const items = computed<BbBreadcrumbsItem[]>(() =>
|
|
|
482
482
|
path.value.map((name, index) => {
|
|
483
483
|
const isCurrent = index === path.value.length - 1;
|
|
484
484
|
return {
|
|
485
|
-
|
|
486
|
-
|
|
485
|
+
value: `${index}-${name}`,
|
|
486
|
+
label: name,
|
|
487
487
|
'prepend:icon': 'lucide:folder',
|
|
488
488
|
...(isCurrent
|
|
489
489
|
? {}
|
|
@@ -507,9 +507,9 @@ active-class props are wired for you:
|
|
|
507
507
|
```vue
|
|
508
508
|
<BbBreadcrumbs
|
|
509
509
|
:items="[
|
|
510
|
-
{
|
|
511
|
-
{
|
|
512
|
-
{
|
|
510
|
+
{ value: 'home', label: 'Home', to: { name: 'index' } },
|
|
511
|
+
{ value: 'team', label: 'Team', to: '/team' },
|
|
512
|
+
{ value: 'member', label: 'Ada Lovelace' },
|
|
513
513
|
]"
|
|
514
514
|
/>
|
|
515
515
|
```
|
|
@@ -521,9 +521,9 @@ visit:
|
|
|
521
521
|
```vue
|
|
522
522
|
<BbBreadcrumbs
|
|
523
523
|
:items="[
|
|
524
|
-
{
|
|
525
|
-
{
|
|
526
|
-
{
|
|
524
|
+
{ value: 'dashboard', label: 'Dashboard', href: '/dashboard' },
|
|
525
|
+
{ value: 'orders', label: 'Orders', href: '/orders', preserveScroll: true },
|
|
526
|
+
{ value: 'order', label: 'Order #8842' },
|
|
527
527
|
]"
|
|
528
528
|
/>
|
|
529
529
|
```
|
|
@@ -597,20 +597,20 @@ import type { BbBreadcrumbsItem } from 'bitboss-ui';
|
|
|
597
597
|
|
|
598
598
|
const trail: BbBreadcrumbsItem[] = [
|
|
599
599
|
{
|
|
600
|
-
|
|
601
|
-
|
|
600
|
+
value: 'settings',
|
|
601
|
+
label: 'Settings',
|
|
602
602
|
href: '#settings',
|
|
603
603
|
'prepend:icon': 'lucide:settings',
|
|
604
604
|
},
|
|
605
605
|
{
|
|
606
|
-
|
|
607
|
-
|
|
606
|
+
value: 'team',
|
|
607
|
+
label: 'Team',
|
|
608
608
|
href: '#team',
|
|
609
609
|
'prepend:icon': 'lucide:users',
|
|
610
610
|
},
|
|
611
611
|
{
|
|
612
|
-
|
|
613
|
-
|
|
612
|
+
value: 'members',
|
|
613
|
+
label: 'Members',
|
|
614
614
|
'prepend:icon': 'lucide:user-round',
|
|
615
615
|
},
|
|
616
616
|
];
|
|
@@ -682,7 +682,7 @@ A `pt` value written in `<script>` (a constant, a preset, a wrapper's
|
|
|
682
682
|
when its URL is the page you are on. Do not link the page the user is
|
|
683
683
|
already on.
|
|
684
684
|
- The overflow button is a real `button` with a localized, count-aware label
|
|
685
|
-
("Show
|
|
685
|
+
("Show hidden breadcrumbs (N)"); its menu is a `BbDropdown` with full keyboard
|
|
686
686
|
support — nothing to add on your side.
|
|
687
687
|
- The dividers are decorative (`aria-hidden`); never encode meaning in them.
|
|
688
688
|
- `disabled` on the component (or an item) removes `href` and exposes
|
|
@@ -728,12 +728,12 @@ States are listed in precedence order: when two are on at once and their entries
|
|
|
728
728
|
- `append` — scope: `BbBreadcrumbsEdgeSlotProps` `{ disabled?: boolean }` — Content rendered after the breadcrumb list, in a dedicated append region.
|
|
729
729
|
- `divider` — scope: `Record<string, never>` — Replaces the default separator rendered between breadcrumb items.
|
|
730
730
|
- `ellipsis` — scope: `BbBreadcrumbsEllipsisSlotProps` `{ props: { ref: (reference: unknown) => void; }; disabled?: boolean; overflowCount: number; ellipsisWidth: number }` — Replaces the default `…` overflow button shown when items overflow.
|
|
731
|
-
- `item:append` — scope: `BbBreadcrumbsItemSlotProps` `{ disabled: boolean; index: number; item: Item;
|
|
732
|
-
- `item:prepend` — scope: `BbBreadcrumbsItemSlotProps` `{ disabled: boolean; index: number; item: Item;
|
|
731
|
+
- `item:append` — scope: `BbBreadcrumbsItemSlotProps` `{ disabled: boolean; index: number; item: Item; label?: string }` — Content rendered after **every** breadcrumb item's link/button. Generic fallback below a per-item `<value>:append` slot and above the item's `append:icon`.
|
|
732
|
+
- `item:prepend` — scope: `BbBreadcrumbsItemSlotProps` `{ disabled: boolean; index: number; item: Item; label?: string }` — Content rendered before **every** breadcrumb item's link/button, in the leading edge region. Generic fallback: a per-item `<value>:prepend` slot takes precedence, and the item's `prepend:icon` is used when neither slot is present.
|
|
733
733
|
- `prepend` — scope: `BbBreadcrumbsEdgeSlotProps` `{ disabled?: boolean }` — Content rendered before the breadcrumb list, in a dedicated prepend region.
|
|
734
|
-
- `#<
|
|
735
|
-
- `#<
|
|
736
|
-
- `#<
|
|
734
|
+
- `#<value>` (named from data) — scope: `BbBreadcrumbsItemSlotProps` — One crumb's label, by its `value` through `slotKey`; falls back to `item.label`. A crumb folded into the overflow menu follows BbDropdown's slot rules instead (the same `#<value>` names). Reserved names (their slot is one of this component's own, so an item value or column key spelled like them is an error): `append`, `divider`, `ellipsis`, `item`, `prepend`.
|
|
735
|
+
- `#<value>:prepend` (named from data) — scope: `BbBreadcrumbsItemSlotProps` — The glyph before one crumb's label; beats `item:prepend`, which beats its `prepend:icon`.
|
|
736
|
+
- `#<value>:append` (named from data) — scope: `BbBreadcrumbsItemSlotProps` — The glyph after one crumb's label; beats `item:append`, which beats its `append:icon`.
|
|
737
737
|
|
|
738
738
|
## Component tree
|
|
739
739
|
|
|
@@ -747,7 +747,7 @@ States are listed in precedence order: when two are on at once and their entries
|
|
|
747
747
|
- `BbBreadcrumbs` _(this component)_ — its own template binds: `item` → `li.bb-breadcrumbs__item`, `icon` → `BbIcon`, `text` → `span.bb-breadcrumbs__text`
|
|
748
748
|
- `BbBaseButton` _(public — [contract](./BbBaseButton.md))_ — its own pt parts (`BbBaseButton`): `root` → `RouterComponent`, `root` → `a`, `root` → `component`; also mounts `RouterComponent`
|
|
749
749
|
- `BbDropdown` _(public — [contract](./BbDropdown.md))_ — its own pt parts (`BbDropdown`): `panel` → `CommonPopover`, `root` → `CommonPopover`, `header` → `div.bb-dropdown__header`, `list` → `span.bb-dropdown__list`, `footer` → `div.bb-dropdown__footer`; documented CSS variables: `--menu-inset`; also mounts `CommonPopover`, `DropdownPipelineResolver`
|
|
750
|
-
- `BbDropdownList` _(internal — not importable, reach it through `BbDropdown`)_ — also mounts `
|
|
750
|
+
- `BbDropdownList` _(internal — not importable, reach it through `BbDropdown`)_ — also mounts `BbIcon`, `ErrorIcon`, `CommonPopover`, `BbDropdownList`
|
|
751
751
|
- `BbBadge` _(public — [contract](./BbBadge.md))_ — its own pt parts (`BbBadge`): `spinner` → `BbSpinner`, `icon` → `BbIcon`, `clear` → `button.bb-badge__clear`; documented CSS variables: `--bg`, `--fg`, `--bw`, `--ring-color`, `--ring-size`, `--min-size-md`, `--min-size`, `--elev`, `--r`, `--fs`, `--icon-size`, `--gap`, `--px`, `--clear-size`, `--bg-disabled`, `--fg-disabled`, `--border-disabled`, `--pad-left`; also mounts `BbIcon`, `BbSpinner`, `BadgeBodyContent`
|
|
752
752
|
- `AdaptiveDropdown` _(internal — not importable, reach it through `BbDropdown`)_ — hands `BbOffCanvas` the pt map `{ header: 'header', footer: 'footer', panel: 'root', sheet: 'root' }` (ours → theirs); also mounts `BbSmoothHeight`, `BbDropdownList`
|
|
753
753
|
- `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__content`, `footer` → `div.bb-offcanvas__footer`; documented CSS variables: `--stack-x`, `--stack-fill`, `--stack-transition-duration`, `--px`, `--handle-w`, `--handle-h`, `--handle-bg`, `--safe-top`, `--close-size`
|
package/dist/ai/BbButton.md
CHANGED
|
@@ -410,9 +410,15 @@ live example below uses this shape). The mistake above only becomes possible
|
|
|
410
410
|
once that loop is unrolled into separate elements with their own literal
|
|
411
411
|
strings.
|
|
412
412
|
|
|
413
|
-
Add `group` to fuse adjacent buttons into one visual segment control
|
|
414
|
-
|
|
415
|
-
|
|
413
|
+
Add `group` to fuse adjacent buttons into one visual segment control (shared
|
|
414
|
+
borders and radius between siblings). Each button keeps its own semantics: a
|
|
415
|
+
toggle still announces as a toggle button with its pressed state. Adjacent
|
|
416
|
+
`group` **toggles** are also one Tab stop: Tab lands on the pressed button (or
|
|
417
|
+
the one last focused, or the first), ArrowLeft / ArrowRight move between the
|
|
418
|
+
buttons (mirrored under `dir="rtl"`, wrapping at the ends), Home / End jump to
|
|
419
|
+
the first / last, and Space / Enter toggle. Disabled and loading buttons are
|
|
420
|
+
skipped. Any other element between two buttons splits them into two sets, and
|
|
421
|
+
`group` buttons without a `v-model` keep one Tab stop each.
|
|
416
422
|
|
|
417
423
|
**Exclusive toggle groups**
|
|
418
424
|
|
|
@@ -494,6 +500,11 @@ const activeView = ref<IssueView>('list');
|
|
|
494
500
|
</script>
|
|
495
501
|
```
|
|
496
502
|
|
|
503
|
+
A toggle that is on carries `aria-pressed="true"` and the class
|
|
504
|
+
`bb-button--pressed`. Restyle that state with `pt:root:pressed` (or
|
|
505
|
+
`pt:icon:pressed`, `pt:text:pressed`), not with a selector of your own: it is
|
|
506
|
+
the state's contract.
|
|
507
|
+
|
|
497
508
|
Listen to `update:modelValue` only if you need side effects; state itself is
|
|
498
509
|
handled. For form-ish multi-selection prefer `BbCheckboxGroup` /
|
|
499
510
|
`BbRadioGroup`; toggle buttons are for immediate, tool-bar-like state.
|
|
@@ -835,8 +846,11 @@ label span). Typography inherits from `root`, so reach for `text` only when a
|
|
|
835
846
|
class must apply to the label ALONE — `truncate` on a long label that must not
|
|
836
847
|
clip the icons beside it. That span also carries the margin the label slides by
|
|
837
848
|
while the spinner is in, so a margin of your own fights the slide. States:
|
|
838
|
-
`loading`, `disabled
|
|
839
|
-
error.
|
|
849
|
+
`loading`, `disabled`, `pressed` (a `v-model` toggle that is on). A name
|
|
850
|
+
outside that list is a type error and an ESLint error. There is no `active`
|
|
851
|
+
state: a pointer press is Tailwind's `active:` variant (`pt:root="active:scale-95"`).
|
|
852
|
+
There is no `current` state either: a link to the current route is
|
|
853
|
+
`active-class` / `exact-active-class` (see Active state above).
|
|
840
854
|
|
|
841
855
|
**pt: a part, a part while loading, the object form**
|
|
842
856
|
|
|
@@ -1043,7 +1057,10 @@ Gotchas (real behavior, verified against source):
|
|
|
1043
1057
|
attribute and drops yours. A hand-rolled toggle (`:aria-pressed` plus a
|
|
1044
1058
|
`variant` swap) therefore looks right and is invisible to assistive tech.
|
|
1045
1059
|
Use `v-model` — see [Toggle buttons](#toggle-buttons). Dev builds warn.
|
|
1046
|
-
- `group`
|
|
1060
|
+
- `group` adds no radio semantics: an exclusive set is still toggle buttons
|
|
1061
|
+
with `aria-pressed`. Adjacent `group` toggles share one Tab stop and move
|
|
1062
|
+
with the arrow keys (see [Toggle buttons](#toggle-buttons)); keep a set's
|
|
1063
|
+
buttons side by side in one parent, since anything between them splits it.
|
|
1047
1064
|
- Responsive `size` maps change height/font/gap per breakpoint; padding, icon
|
|
1048
1065
|
size and radius follow the `default` entry.
|
|
1049
1066
|
- Auto-loading tracks the promise **returned** from `@click`; a handler that
|
|
@@ -1072,6 +1089,8 @@ Anti-patterns:
|
|
|
1072
1089
|
report one as an error.
|
|
1073
1090
|
- Toggles expose `aria-pressed` (`true`/`false`) automatically — never add your
|
|
1074
1091
|
own.
|
|
1092
|
+
- A set of adjacent `group` toggles is one Tab stop (roving `tabindex`), with
|
|
1093
|
+
ArrowLeft / ArrowRight / Home / End inside it — the APG toolbar pattern.
|
|
1075
1094
|
- While loading: `aria-disabled="true"`, `tabindex="-1"`, and a localized
|
|
1076
1095
|
visually-hidden loading announcement.
|
|
1077
1096
|
- Disabled links render with `role="link"`, `aria-disabled="true"`, no `href`,
|
|
@@ -1090,7 +1109,7 @@ Anti-patterns:
|
|
|
1090
1109
|
|
|
1091
1110
|
| Prop | Type | Default | Required | Description |
|
|
1092
1111
|
| --- | --- | --- | --- | --- |
|
|
1093
|
-
| `pt:<part>`, `pt:<part>:<state>`, `pt` | `PtValue` | | | Passthrough — a class list, or `{ class, style, attrs }`, bound to one named part of the component; the state form applies only while that state is on. Parts: `icon`, `root`, `spinner`, `text`. States: `disabled`, `loading`. What each one is: _Passthrough parts and states_ below. `pt` is the object form with the same keys minus the prefix (`{ icon: '…', 'icon:loading': '…' }`). See `guides/passthrough.md`. In `<script>` a `pt` value is typed `BbButtonProps['pt']` (`PtValue` is not exported): § Typing `pt` in `<script>`. |
|
|
1112
|
+
| `pt:<part>`, `pt:<part>:<state>`, `pt` | `PtValue` | | | Passthrough — a class list, or `{ class, style, attrs }`, bound to one named part of the component; the state form applies only while that state is on. Parts: `icon`, `root`, `spinner`, `text`. States: `disabled`, `loading`, `pressed`. What each one is: _Passthrough parts and states_ below. `pt` is the object form with the same keys minus the prefix (`{ icon: '…', 'icon:loading': '…' }`). See `guides/passthrough.md`. In `<script>` a `pt` value is typed `BbButtonProps['pt']` (`PtValue` is not exported): § Typing `pt` in `<script>`. |
|
|
1094
1113
|
| `activeClass` | `string \| undefined` | | | Class to apply when the link is active. |
|
|
1095
1114
|
| `append:icon` | `string \| undefined` | | | Icon to be added on the right of the text. |
|
|
1096
1115
|
| `ariaCurrentValue` | `"page" \| "step" \| "location" \| "date" \| "time" \| "true" \| "false" \| undefined` | `'page'` | | Value passed to the attribute `aria-current` when the link is exact active. |
|
|
@@ -1107,7 +1126,7 @@ Anti-patterns:
|
|
|
1107
1126
|
| `except` | `string[] \| undefined` | | | Inertia: the inverse of `only` — properties to EXCLUDE from a partial reload. Pass one or the other, not both. |
|
|
1108
1127
|
| `external` | `boolean \| undefined` | `false` | | Forces an `href` link to render as a plain `<a>` (native navigation), bypassing Inertia/router interception — same intent as Nuxt's `external`. A native-anchor signal alongside `target` and `download`. |
|
|
1109
1128
|
| `falseValue` | `any` | `false` | | Value emitted when the toggle is deactivated. |
|
|
1110
|
-
| `group` | `boolean \| undefined` | `false` | | Identifies the button as part of a button group. |
|
|
1129
|
+
| `group` | `boolean \| undefined` | `false` | | Identifies the button as part of a button group: adjacent `group` buttons fuse into one segment (shared borders and radius). Adjacent `group` toggles (each with a `v-model`) are also one Tab stop, with ArrowLeft / ArrowRight / Home / End moving between them. |
|
|
1111
1130
|
| `headers` | `object \| undefined` | | | Additional HTTP headers forwarded to Inertia when navigating via `href` in an Inertia-enabled app. |
|
|
1112
1131
|
| `href` | `string \| undefined` | | | Returns the hyperlink's URL. Can be set, to change the URL. |
|
|
1113
1132
|
| `icon` | `string \| undefined` | | | Used when only an icon with no text should be displayed. |
|
|
@@ -1160,6 +1179,7 @@ States are listed in precedence order: when two are on at once and their entries
|
|
|
1160
1179
|
|
|
1161
1180
|
| State | When it is on |
|
|
1162
1181
|
| --- | --- |
|
|
1182
|
+
| `pressed` | Component-wide: a toggle button (`v-model`) is on — `aria-pressed="true"`, `--pressed` on the root. |
|
|
1163
1183
|
| `disabled` | Component-wide: the button is `disabled`. |
|
|
1164
1184
|
| `loading` | Component-wide: `loading` is on — the spinner shows and the button ignores the pointer. |
|
|
1165
1185
|
|
package/dist/ai/BbCheckbox.md
CHANGED
|
@@ -58,18 +58,14 @@ Reach elsewhere when the shape differs:
|
|
|
58
58
|
|
|
59
59
|
### Items are your domain objects
|
|
60
60
|
|
|
61
|
-
|
|
62
|
-
`
|
|
63
|
-
`
|
|
61
|
+
**`{ label, value }` and `{ text, value }` items work as they are; any other
|
|
62
|
+
shape needs `item-text` / `item-value`.** With neither prop an option reads its
|
|
63
|
+
own `label` (else its own `text`) and its own `value`, whatever it holds (`null`
|
|
64
|
+
included). An object with none of those fields falls back to
|
|
65
|
+
`JSON.stringify(item)` as text and the whole object as value.
|
|
64
66
|
|
|
65
67
|
```vue
|
|
66
|
-
<BbCheckboxGroup
|
|
67
|
-
v-model="plans"
|
|
68
|
-
legend="Plans"
|
|
69
|
-
:items="options"
|
|
70
|
-
item-text="label"
|
|
71
|
-
item-value="value"
|
|
72
|
-
/>
|
|
68
|
+
<BbCheckboxGroup v-model="plans" legend="Plans" :items="options" />
|
|
73
69
|
```
|
|
74
70
|
|
|
75
71
|
Pass backend rows straight to `items` and select the display text and stored
|
|
@@ -92,7 +88,6 @@ mapped (here, channel ids), which is what you send back to the server.
|
|
|
92
88
|
v-model="selected"
|
|
93
89
|
compact
|
|
94
90
|
hint="Choose one or more channels."
|
|
95
|
-
item-text="label"
|
|
96
91
|
item-value="id"
|
|
97
92
|
:items="channels"
|
|
98
93
|
legend="Channels"
|
|
@@ -141,7 +136,8 @@ Two items that resolve to the **same** `item-value` collapse to one option
|
|
|
141
136
|
|
|
142
137
|
#### Additional row fields: `item-props`
|
|
143
138
|
|
|
144
|
-
`item-text`
|
|
139
|
+
The option's text and value (from `item-text` / `item-value`, or the item's own
|
|
140
|
+
`label` and `value`) are its label and identity. Anything
|
|
145
141
|
**additional** about a row comes from `item-props` — for option groups that is
|
|
146
142
|
one field, `description`: a muted line **under** the option's label, beside the
|
|
147
143
|
control.
|
|
@@ -333,7 +329,6 @@ on the row, feed that field to the predicate.
|
|
|
333
329
|
v-model="selected"
|
|
334
330
|
compact
|
|
335
331
|
hint="SMS unlocks once a sender number is configured."
|
|
336
|
-
item-text="label"
|
|
337
332
|
item-value="id"
|
|
338
333
|
:items="channels"
|
|
339
334
|
legend="Channels"
|
|
@@ -665,7 +660,6 @@ border) — floating mode is not supported for checkbox groups.
|
|
|
665
660
|
? 'Select at least one contact method.'
|
|
666
661
|
: undefined
|
|
667
662
|
"
|
|
668
|
-
item-text="label"
|
|
669
663
|
item-value="id"
|
|
670
664
|
:items="options"
|
|
671
665
|
legend="Contact permissions"
|
|
@@ -731,7 +725,6 @@ Read-only, with no cleanup code.
|
|
|
731
725
|
<BbRadioGroup
|
|
732
726
|
v-model="role"
|
|
733
727
|
compact
|
|
734
|
-
item-text="label"
|
|
735
728
|
item-value="id"
|
|
736
729
|
:items="roles"
|
|
737
730
|
legend="Token role"
|
|
@@ -745,7 +738,6 @@ Read-only, with no cleanup code.
|
|
|
745
738
|
:deps-debounce-time="150"
|
|
746
739
|
enforce-coherence
|
|
747
740
|
hint="Scopes outside the selected role are removed automatically."
|
|
748
|
-
item-text="label"
|
|
749
741
|
item-value="id"
|
|
750
742
|
:items="loadScopes"
|
|
751
743
|
legend="Scopes"
|
|
@@ -947,8 +939,9 @@ for a preset that fits any row type (never `<any>`), not an imported
|
|
|
947
939
|
`disabled`.
|
|
948
940
|
- `readonly` still submits its values and stays focusable; use `disabled` only
|
|
949
941
|
for choices that genuinely don't apply.
|
|
950
|
-
- Don't pre-map
|
|
951
|
-
`item-text` / `item-value
|
|
942
|
+
- Don't pre-map domain rows into `{ label, value }` copies — pass raw rows and
|
|
943
|
+
resolve with `item-text` / `item-value` (a list that already is
|
|
944
|
+
`{ label, value }` needs neither).
|
|
952
945
|
- A native (non-JS) form post needs `name`: the group generates none, unlike
|
|
953
946
|
`BbRadioGroup`, where the name is what ties the options together. Independent
|
|
954
947
|
boxes need no tie, so with `v-model` alone leave it off.
|
|
@@ -1004,8 +997,8 @@ for a preset that fits any row type (never `<any>`), not an imported
|
|
|
1004
997
|
| `itemProps` | `BbOptionGroupItemProps<T> \| undefined` | | | ADDITIONAL row fields resolved from each item — never its text or value (those stay on `itemText` / `itemValue`). Option groups accept one field: - `description` — a muted line under the option label, beside the control; it may wrap. Either an object with a path or getter per field (`{ description: 'email' }`) or a function returning the fields (`(item) => ({ description: item.email })`). Without it no field renders — an item's own `description` is never read implicitly — and an empty value renders nothing for that item. The description is announced as the option's description, never part of its name. To disable individual options use `selectable`. |
|
|
1005
998
|
| `itemReverse` | `boolean \| undefined` | `false` | | Swaps each row's input and label from their natural order (input first), in every `item-layout`. `reverse` swaps the legend and the options instead. |
|
|
1006
999
|
| `items` | `T[] \| ((context: BbCheckboxGroupItemsContext) => T[] \| Promise<T[]>)` | | yes | The options: an array, or a provider function called with ONE context object and returning the rows, sync or async. The context carries: - `reason` — why this call happened: `'initial'` (the first load, on mount), `'dependencies'` (a `dependencies` entry or the `items` function changed; a retry arrives this way) or `'model'` (the model changed from outside and the options cannot resolve it). The group has no search field, so it never passes `query`; - `modelValue` — the `v-model` as-is; - `signal` — an `AbortSignal`, aborted when a newer call starts or the group is disposed; pass it to every request. A provider signals a failure by THROWING, never by returning `[]`: the rows are cleared, nothing is pruned, and `#empty` receives the `error` (`failed-text` is shown). Zero-argument providers keep working. Annotate the parameter `BbCheckboxGroupItemsContext` (`BbSwitchGroupItemsContext` on a switch group, the same shape). |
|
|
1007
|
-
| `itemText` | `ItemAccessor<T, string> \| undefined` | `JSON.stringify(item)
|
|
1008
|
-
| `itemValue` | `ItemAccessor<T> \| undefined` | `the whole item` | | Defines a path that returns a property of the object to use as value or a function that returns any value. |
|
|
1000
|
+
| `itemText` | `ItemAccessor<T, string> \| undefined` | `own `label`, else `text`, else `JSON.stringify(item)`` | | Defines a path that returns a property of the object to use as text or a function that returns a string. Unset: own `label`, else `text` (`{ label, value }` needs no accessor). |
|
|
1001
|
+
| `itemValue` | `ItemAccessor<T> \| undefined` | `own `value`, else the whole item` | | Defines a path that returns a property of the object to use as value or a function that returns any value. Unset: own `value`, even `null`. |
|
|
1009
1002
|
| `labelAlign` | `'top'` \| `'center'` \| `'bottom'` | | | Vertical position of the label block in a side-by-side row; not `labelPosition`, the horizontal one. Omitted, the label's first line meets the control's. |
|
|
1010
1003
|
| `layout` | `FieldLayout \| undefined` | | | How the label and the input sit together: `'vertical'`, `'horizontal'` (50/50), `'auto'`, `'label-fill'` (the label takes the free space, the input keeps its size), `'input-fill'` (the other way round), or a two-word ratio pattern like `'xx xxxxx'`. |
|
|
1011
1004
|
| `legend` | `string` | | yes | Text content of the legend. |
|
package/dist/ai/BbCollapsible.md
CHANGED
|
@@ -525,7 +525,7 @@ A `pt` value written in `<script>` (a constant, a preset, a wrapper's
|
|
|
525
525
|
| Prop | Type | Default | Required | Description |
|
|
526
526
|
| --- | --- | --- | --- | --- |
|
|
527
527
|
| `pt:<part>`, `pt:<part>:<state>`, `pt` | `PtValue` | | | Passthrough — a class list, or `{ class, style, attrs }`, bound to one named part of the component; the state form applies only while that state is on. Parts: `content`, `root`. States: `open`. What each one is: _Passthrough parts and states_ below. `pt` is the object form with the same keys minus the prefix (`{ icon: '…', 'icon:loading': '…' }`). See `guides/passthrough.md`. In `<script>` a `pt` value is typed `BbCollapsibleProps['pt']` (`PtValue` is not exported): § Typing `pt` in `<script>`. |
|
|
528
|
-
| `eager` | `boolean \| undefined` | `false` | |
|
|
528
|
+
| `eager` | `boolean \| undefined` | `false` | | Renders the content at mount, while closed, instead of on the first open. Closed content is `inert` and `aria-hidden` either way. |
|
|
529
529
|
| `modelValue` | `boolean \| undefined` | `false` | | Used by v-model to trigger opening / closing the collapsible. Optional, matching the runtime: `withDefaults` supplies `false`, so an omitted binding renders closed and Vue never warns. It was typed required while carrying that default, which made the manifest publish a row that was `required: true` AND `default: false` — a contradiction that read as a generator bug. |
|
|
530
530
|
| `tag` | `'div'` \| `'span'` | `"span"` | | Element rendered as the root, and mirrored by the inner animating element — so the pair is span-in-span or div-in-div, both valid. Keep the default inside phrasing content (a `<p>`); use `'div'` when the body is block content (paragraphs, lists, forms), which a `span` may not contain. |
|
|
531
531
|
| `transitionDuration` | `number \| undefined` | `250` | | How long the transition has to last in milliseconds |
|
|
@@ -760,7 +760,7 @@ A `pt` value written in `<script>` (a constant, a preset, a wrapper's
|
|
|
760
760
|
| `boundary` | `ElementOrComponentRefOrSelector \| undefined` | | | Constrains the popover within a bounding element. Accepts an HTMLElement, a Vue component ref, or a CSS selector string. |
|
|
761
761
|
| `disabled` | `boolean \| undefined` | `false` | | Disable all interaction (activator and palette). |
|
|
762
762
|
| `disableFlip` | `boolean \| undefined` | `false` | | Disables the automatic flip to the opposite side when the popover would overflow (flipping is on by default). |
|
|
763
|
-
| `eager` | `boolean \| undefined` | `false` | |
|
|
763
|
+
| `eager` | `boolean \| undefined` | `false` | | Renders the palette panel at mount instead of on the first open (the phone sheet's too). |
|
|
764
764
|
| `eyeDropper` | `boolean \| undefined` | `false` | | Show an eyedropper button inside the palette to sample any color on screen. Uses the native EyeDropper API — hidden automatically on unsupported browsers. |
|
|
765
765
|
| `label` | `string \| undefined` | | | Accessible label. The activator is named by it followed by the activator's own text, through `aria-labelledby`. Defaults to the locale string for "Open color picker" when omitted. |
|
|
766
766
|
| `modelValue` | `string \| null` | | yes | v-model: the current color as a `#RRGGBB` hex string (or `#RRGGBBAA` when `alpha` is enabled), or `null` when empty. |
|
package/dist/ai/BbConfirm.md
CHANGED
|
@@ -654,6 +654,14 @@ const removeMember = async () => {
|
|
|
654
654
|
When the portal owns its own action buttons, pass `actions: false` to hide the
|
|
655
655
|
standard footer and resolve from inside the slot with its `yes` / `no` helpers.
|
|
656
656
|
|
|
657
|
+
**Names are checked.** `bitboss-ui check` and the ESLint rule
|
|
658
|
+
`bitboss-ui/portal-names` (in `recommended`) read every literal
|
|
659
|
+
`confirm({ portal: 'name' })` in your scripts against the
|
|
660
|
+
`<BbConfirmPortal name>`s in your templates: a name no file declares fails,
|
|
661
|
+
with a did-you-mean, and `bitboss-ui/unused-portal` warns on a portal nothing
|
|
662
|
+
opens. A `portal` held in a variable, or `confirm(options)`, is never judged.
|
|
663
|
+
The slot's `props` is `any` per key, so `props.member.name` needs no cast.
|
|
664
|
+
|
|
657
665
|
### Size, fullscreen and focus
|
|
658
666
|
|
|
659
667
|
- `size` picks a maximum-width preset (`'xs'` … `'2xl'`, resolvable through
|
|
@@ -179,7 +179,9 @@ entirely, reach for `disableWriting` (below), not `range`.
|
|
|
179
179
|
The value is edited as three separate inputs — day, month, year — not one free
|
|
180
180
|
string. Their **order and separator follow `config.locale`**, read from the
|
|
181
181
|
locale's own format hint: `en` renders `MM/DD/YYYY`, `it` `DD/MM/YYYY`, `de`
|
|
182
|
-
`TT.MM.JJJJ`, `ja` `YYYY/MM/DD`.
|
|
182
|
+
`TT.MM.JJJJ`, `ja` `YYYY/MM/DD`. A region writes its own order with its
|
|
183
|
+
language's letters: `en-GB` `DD/MM/YYYY`, `fr-CA` `AAAA-MM-JJ`. Typing is
|
|
184
|
+
forgiving:
|
|
183
185
|
|
|
184
186
|
- digits **auto-advance** to the next segment when a segment fills (or can't
|
|
185
187
|
take another digit — e.g. `4` in a day segment becomes `04` and moves on);
|
|
@@ -214,7 +216,7 @@ to catch config mistakes early — always pass the `YYYY-MM-DD` shape.
|
|
|
214
216
|
For non-contiguous rules (no weekends, no holidays, only in-stock slots), pass a
|
|
215
217
|
`selectable` predicate: it receives each date string and returns `false` to
|
|
216
218
|
disable that day. The grid's week starts on the locale's day (Monday for
|
|
217
|
-
`it` or `
|
|
219
|
+
`it`, `de` or `en-GB`, Sunday for bare `en`, `pt` and `en-CA`); `firstDayOfWeek` pins it
|
|
218
220
|
(`0` = Sunday … `6` = Saturday) when the app's week differs from its
|
|
219
221
|
language's.
|
|
220
222
|
|
package/dist/ai/BbDialog.md
CHANGED
|
@@ -402,14 +402,7 @@ dismissed invite doesn't resurface half-typed:
|
|
|
402
402
|
placeholder="teammate@company.com"
|
|
403
403
|
type="email"
|
|
404
404
|
/>
|
|
405
|
-
<BbSelect
|
|
406
|
-
v-model="role"
|
|
407
|
-
compact
|
|
408
|
-
item-text="label"
|
|
409
|
-
item-value="value"
|
|
410
|
-
:items="roles"
|
|
411
|
-
label="Role"
|
|
412
|
-
/>
|
|
405
|
+
<BbSelect v-model="role" compact :items="roles" label="Role" />
|
|
413
406
|
<p class="m-0 text-xs text-(--bb-text-muted)">
|
|
414
407
|
They'll get an email with a link that expires in 7 days.
|
|
415
408
|
</p>
|