bitboss-ui 3.0.0-beta.4 → 3.0.0-beta.41
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 +317 -98
- package/bin/bitboss-ui-mcp.mjs +1566 -75
- package/bin/bitboss-ui.mjs +716 -72
- package/dist/ai/BbAccordion.md +178 -56
- package/dist/ai/BbAlert.md +140 -28
- package/dist/ai/BbAsterisk.md +61 -4
- package/dist/ai/BbAvatar.md +194 -53
- package/dist/ai/BbBadge.md +250 -50
- package/dist/ai/BbBadgeButton.md +74 -21
- package/dist/ai/BbBaseButton.md +132 -51
- package/dist/ai/BbBaseCheckboxIcon.md +118 -26
- package/dist/ai/BbBaseRadioIcon.md +115 -26
- package/dist/ai/BbBaseSwitchIcon.md +123 -28
- package/dist/ai/BbBreadcrumbs.md +221 -51
- package/dist/ai/BbButton.md +389 -107
- package/dist/ai/BbCalendar.md +667 -0
- package/dist/ai/BbCheckbox.md +242 -80
- package/dist/ai/BbCheckboxGroup.md +575 -66
- package/dist/ai/BbCollapsible.md +158 -39
- package/dist/ai/BbColorInput.md +322 -82
- package/dist/ai/BbColorPalette.md +261 -61
- package/dist/ai/BbConfirm.md +220 -51
- package/dist/ai/BbConfirmPortal.md +1 -1
- package/dist/ai/BbDatePicker.md +272 -37
- package/dist/ai/BbDatePickerInput.md +321 -92
- package/dist/ai/BbDialog.md +492 -87
- package/dist/ai/BbDropdown.md +1182 -104
- package/dist/ai/BbDropdownButton.md +239 -61
- package/dist/ai/BbDropdownGroup.md +5 -5
- package/dist/ai/BbDropzone.md +140 -36
- package/dist/ai/BbForm.md +1165 -40
- package/dist/ai/BbIcon.md +100 -33
- package/dist/ai/BbIndicator.md +79 -12
- package/dist/ai/BbNumberInput.md +257 -87
- package/dist/ai/BbOffCanvas.md +396 -91
- package/dist/ai/BbPagination.md +199 -32
- package/dist/ai/BbPopover.md +219 -54
- package/dist/ai/BbProgress.md +137 -71
- package/dist/ai/BbPtScope.md +136 -0
- package/dist/ai/BbRadio.md +234 -43
- package/dist/ai/BbRadioGroup.md +529 -91
- package/dist/ai/BbRating.md +243 -61
- package/dist/ai/BbSelect.md +690 -120
- package/dist/ai/BbSelectPopover.md +434 -122
- package/dist/ai/BbSlider.md +275 -79
- package/dist/ai/BbSmoothHeight.md +142 -34
- package/dist/ai/BbSpinner.md +179 -81
- package/dist/ai/BbSwitch.md +249 -63
- package/dist/ai/BbSwitchGroup.md +394 -65
- package/dist/ai/BbTable.md +1666 -222
- package/dist/ai/BbTabs.md +898 -178
- package/dist/ai/BbTabsList.md +81 -7
- package/dist/ai/BbTabsPanels.md +77 -0
- package/dist/ai/BbTabsRoot.md +16 -15
- package/dist/ai/BbTag.md +256 -76
- package/dist/ai/BbTextInput.md +480 -102
- package/dist/ai/BbTextarea.md +310 -96
- package/dist/ai/BbTimePicker.md +159 -24
- package/dist/ai/BbTimePickerInput.md +277 -46
- package/dist/ai/BbToast.md +286 -40
- package/dist/ai/BbToastPortal.md +3 -3
- package/dist/ai/BbTooltip.md +187 -34
- package/dist/ai/BbTree.md +260 -85
- package/dist/ai/ChipsBox.md +43 -2
- package/dist/ai/ClearableButton.md +12 -0
- package/dist/ai/CommaBox.md +2 -1
- package/dist/ai/CommonField.md +63 -0
- package/dist/ai/CommonFieldInput.md +90 -0
- package/dist/ai/CommonPopover.md +17 -12
- package/dist/ai/CommonTimeSelector.md +63 -0
- package/dist/ai/ErrorIcon.md +20 -0
- package/dist/ai/FlatListBox.md +41 -11
- package/dist/ai/GroupedListBox.md +42 -12
- package/dist/ai/ListBox.md +46 -11
- package/dist/ai/OptionsContainer.md +13 -10
- package/dist/ai/WarningIcon.md +20 -0
- package/dist/ai/changelog.json +4025 -141
- package/dist/ai/components.json +51872 -10136
- package/dist/ai/composables/useBbConfig.md +72 -11
- package/dist/ai/composables/useBbDropdownContext.md +168 -0
- package/dist/ai/composables/useBbFormContext.md +51 -24
- package/dist/ai/composables/useBbFormField.md +134 -0
- package/dist/ai/composables/useBbTableContext.md +41 -19
- package/dist/ai/composables/useConfirm.md +16 -8
- package/dist/ai/composables/useCountdown.md +1 -1
- package/dist/ai/composables/useId.md +10 -10
- package/dist/ai/composables/useMobile.md +17 -10
- package/dist/ai/composables/useToast.md +25 -19
- package/dist/ai/design-tokens.json +940 -0
- package/dist/ai/design-tokens.manifest.yaml +175 -0
- package/dist/ai/guides/agent-contract.md +168 -22
- package/dist/ai/guides/ai-router.md +79 -40
- package/dist/ai/guides/app-layout.md +8 -4
- package/dist/ai/guides/coherence-playbook.md +8 -8
- package/dist/ai/guides/component-picker.md +42 -34
- package/dist/ai/guides/design-language.md +274 -97
- package/dist/ai/guides/design-tokens.md +493 -105
- package/dist/ai/guides/fetch-items-playbook.md +22 -16
- package/dist/ai/guides/icons-policy.md +67 -35
- package/dist/ai/guides/inertia-helpers.md +4 -1
- package/dist/ai/guides/inline-edit-playbook.md +13 -6
- package/dist/ai/guides/installation-and-plugin-setup.md +817 -73
- package/dist/ai/guides/migration/components/bb-accordion.md +37 -0
- package/dist/ai/guides/migration/components/bb-alert.md +2 -2
- package/dist/ai/guides/migration/components/bb-avatar.md +13 -14
- package/dist/ai/guides/migration/components/bb-badge.md +5 -5
- package/dist/ai/guides/migration/components/bb-breadcrumbs.md +9 -8
- package/dist/ai/guides/migration/components/bb-button.md +80 -20
- package/dist/ai/guides/migration/components/bb-checkbox-group.md +116 -29
- package/dist/ai/guides/migration/components/bb-checkbox.md +53 -10
- package/dist/ai/guides/migration/components/bb-chip.md +6 -6
- package/dist/ai/guides/migration/components/bb-collapsible.md +5 -5
- package/dist/ai/guides/migration/components/bb-color-input.md +5 -5
- package/dist/ai/guides/migration/components/bb-color-palette.md +16 -9
- package/dist/ai/guides/migration/components/bb-date-picker-input.md +45 -35
- package/dist/ai/guides/migration/components/bb-dialog.md +69 -36
- package/dist/ai/guides/migration/components/bb-dropdown-button.md +7 -1
- package/dist/ai/guides/migration/components/bb-dropdown.md +31 -8
- package/dist/ai/guides/migration/components/bb-dropzone.md +8 -0
- package/dist/ai/guides/migration/components/bb-icon.md +7 -7
- package/dist/ai/guides/migration/components/bb-intersection.md +1 -1
- package/dist/ai/guides/migration/components/bb-offcanvas.md +29 -31
- package/dist/ai/guides/migration/components/bb-pagination.md +10 -0
- package/dist/ai/guides/migration/components/bb-popover.md +19 -11
- package/dist/ai/guides/migration/components/bb-radio-group.md +14 -0
- package/dist/ai/guides/migration/components/bb-rating.md +61 -24
- package/dist/ai/guides/migration/components/bb-select-popover.md +9 -1
- package/dist/ai/guides/migration/components/bb-select.md +21 -4
- package/dist/ai/guides/migration/components/bb-slider.md +14 -6
- package/dist/ai/guides/migration/components/bb-switch-group.md +14 -0
- package/dist/ai/guides/migration/components/bb-table.md +574 -33
- package/dist/ai/guides/migration/components/bb-tabs.md +91 -41
- package/dist/ai/guides/migration/components/bb-tag.md +9 -7
- package/dist/ai/guides/migration/components/bb-text-input.md +12 -12
- package/dist/ai/guides/migration/components/bb-toast.md +2 -2
- package/dist/ai/guides/migration/components/bb-tooltip.md +18 -0
- package/dist/ai/guides/migration/components/bb-tree.md +11 -9
- package/dist/ai/guides/migration/components/use-confirm.md +9 -1
- package/dist/ai/guides/migration/v2-to-v3.md +828 -240
- package/dist/ai/guides/migration/v3-beta-css-classes.md +751 -0
- package/dist/ai/guides/migration/v3-beta-tooling.md +119 -0
- package/dist/ai/guides/options-items-playbook.md +161 -12
- package/dist/ai/guides/page-shell.md +1 -1
- package/dist/ai/guides/passthrough.md +958 -0
- package/dist/ai/guides/preset-components.md +361 -0
- package/dist/ai/guides/ssr-prefill.md +127 -0
- package/dist/ai/guides/validated-forms.md +466 -55
- package/dist/ai/guides/validation-libraries.md +171 -0
- package/dist/ai/guides/validation-providers.md +113 -0
- package/dist/ai/index.md +45 -44
- package/dist/ai/recipes/inertia/approvals-inbox.md +26 -10
- package/dist/ai/recipes/inertia/command-palette.md +2 -2
- package/dist/ai/recipes/inertia/inline-edit-workspace.md +46 -30
- package/dist/ai/recipes/inertia/layout-scaffold.md +6 -2
- package/dist/ai/recipes/inertia/onboarding.md +30 -8
- package/dist/ai/recipes/inertia/ownership-atlas.md +72 -49
- package/dist/ai/recipes/inertia/record-form.md +53 -19
- package/dist/ai/recipes/inertia/records-workspace.md +201 -49
- package/dist/ai/recipes/inertia/settings-workspace.md +3809 -0
- package/dist/ai/recipes/inertia/upload-center.md +54 -43
- package/dist/ai/recipes/inertia/wizard-form.md +98 -14
- package/dist/ai/recipes/nuxt/approvals-inbox.md +26 -10
- package/dist/ai/recipes/nuxt/command-palette.md +2 -2
- package/dist/ai/recipes/nuxt/inline-edit-workspace.md +68 -52
- package/dist/ai/recipes/nuxt/layout-scaffold.md +6 -2
- package/dist/ai/recipes/nuxt/onboarding.md +30 -8
- package/dist/ai/recipes/nuxt/record-form.md +66 -22
- package/dist/ai/recipes/nuxt/records-workspace.md +199 -48
- package/dist/ai/recipes/nuxt/settings-workspace.md +3898 -0
- package/dist/ai/recipes/nuxt/upload-center.md +52 -41
- package/dist/ai/recipes/nuxt/wizard-form.md +98 -14
- package/dist/ai/recipes/vue/approvals-inbox.md +28 -12
- package/dist/ai/recipes/vue/command-palette.md +2 -2
- package/dist/ai/recipes/vue/inline-edit-workspace.md +69 -53
- package/dist/ai/recipes/vue/layout-scaffold.md +6 -2
- package/dist/ai/recipes/vue/onboarding.md +32 -8
- package/dist/ai/recipes/vue/record-form.md +81 -54
- package/dist/ai/recipes/vue/records-workspace.md +198 -49
- package/dist/ai/recipes/vue/settings-workspace.md +3836 -0
- package/dist/ai/recipes/vue/upload-center.md +53 -42
- package/dist/ai/recipes/vue/wizard-form.md +97 -14
- package/dist/ai/source/BbAccordion.md +90 -24
- package/dist/ai/source/BbAlert.md +209 -62
- package/dist/ai/source/BbAsterisk.md +54 -4
- package/dist/ai/source/BbAvatar.md +73 -16
- package/dist/ai/source/BbBadge.md +265 -97
- package/dist/ai/source/BbBadgeButton.md +218 -79
- package/dist/ai/source/BbBaseButton.md +108 -12
- package/dist/ai/source/BbBaseCheckboxIcon.md +151 -36
- package/dist/ai/source/BbBaseRadioIcon.md +121 -17
- package/dist/ai/source/BbBaseSwitchIcon.md +138 -28
- package/dist/ai/source/BbBreadcrumbs.md +363 -69
- package/dist/ai/source/BbButton.md +563 -174
- package/dist/ai/source/BbCalendar.md +1744 -0
- package/dist/ai/source/BbCheckbox.md +470 -68
- package/dist/ai/source/BbCheckboxGroup.md +976 -95
- package/dist/ai/source/BbCollapsible.md +96 -8
- package/dist/ai/source/BbColorInput.md +597 -67
- package/dist/ai/source/BbColorPalette.md +1284 -65
- package/dist/ai/source/BbConfirm.md +149 -7
- package/dist/ai/source/BbConfirmPortal.md +89 -3
- package/dist/ai/source/BbDatePicker.md +527 -381
- package/dist/ai/source/BbDatePickerInput.md +2015 -118
- package/dist/ai/source/BbDialog.md +531 -64
- package/dist/ai/source/BbDropdown.md +885 -175
- package/dist/ai/source/BbDropdownButton.md +377 -79
- package/dist/ai/source/BbDropdownGroup.md +687 -96
- package/dist/ai/source/BbDropzone.md +140 -31
- package/dist/ai/source/BbForm.md +875 -17
- package/dist/ai/source/BbIcon.md +130 -52
- package/dist/ai/source/BbIndicator.md +117 -60
- package/dist/ai/source/BbNumberInput.md +667 -84
- package/dist/ai/source/BbOffCanvas.md +1007 -261
- package/dist/ai/source/BbPagination.md +203 -31
- package/dist/ai/source/BbPopover.md +267 -90
- package/dist/ai/source/BbProgress.md +88 -26
- package/dist/ai/source/BbPtScope.md +54 -0
- package/dist/ai/source/BbRadio.md +388 -58
- package/dist/ai/source/BbRadioGroup.md +940 -109
- package/dist/ai/source/BbRating.md +736 -84
- package/dist/ai/source/BbSelect.md +1096 -96
- package/dist/ai/source/BbSelectPopover.md +807 -114
- package/dist/ai/source/BbSlider.md +1390 -98
- package/dist/ai/source/BbSmoothHeight.md +48 -2
- package/dist/ai/source/BbSpinner.md +62 -6
- package/dist/ai/source/BbSwitch.md +297 -60
- package/dist/ai/source/BbSwitchGroup.md +761 -83
- package/dist/ai/source/BbTable.md +6950 -1864
- package/dist/ai/source/BbTabs.md +368 -111
- package/dist/ai/source/BbTabsList.md +503 -146
- package/dist/ai/source/BbTabsPanels.md +625 -0
- package/dist/ai/source/BbTabsRoot.md +319 -100
- package/dist/ai/source/BbTag.md +796 -87
- package/dist/ai/source/BbTextInput.md +497 -68
- package/dist/ai/source/BbTextarea.md +550 -65
- package/dist/ai/source/BbTimePicker.md +395 -69
- package/dist/ai/source/BbTimePickerInput.md +1233 -106
- package/dist/ai/source/BbToast.md +250 -74
- package/dist/ai/source/BbToastPortal.md +210 -66
- package/dist/ai/source/BbTooltip.md +181 -30
- package/dist/ai/source/BbTree.md +76 -11
- package/dist/ai/source/ChipsBox.md +25 -5
- package/dist/ai/source/CommaBox.md +21 -6
- package/dist/ai/source/{BbBaseInputContainer.md → CommonField.md} +467 -250
- package/dist/ai/source/CommonFieldInput.md +848 -0
- package/dist/ai/source/CommonPopover.md +116 -30
- package/dist/ai/source/CommonTimeSelector.md +726 -0
- package/dist/ai/source/ErrorIcon.md +2 -2
- package/dist/ai/source/FlatListBox.md +188 -17
- package/dist/ai/source/GroupedListBox.md +236 -44
- package/dist/ai/source/GuidesComponent.md +14 -7
- package/dist/ai/source/ListBox.md +46 -8
- package/dist/ai/source/OptionsContainer.md +288 -60
- package/dist/ai/source/WarningIcon.md +2 -2
- package/dist/assets/css/reset.css_inline.js +1 -1
- package/dist/assets/svgs/star.svg_raw.js +4 -0
- package/dist/components/BbAccordion/BbAccordion.vue_vue_type_script_setup_true_lang.js +49 -32
- package/dist/components/BbAccordion/types.d.ts +35 -3
- package/dist/components/BbAccordion/types.js +11 -0
- package/dist/components/BbAlert/BbAlert.vue_vue_type_script_setup_true_lang.js +46 -30
- package/dist/components/BbAlert/types.d.ts +37 -3
- package/dist/components/BbAlert/types.js +13 -0
- package/dist/components/BbAsterisk/BbAsterisk.vue.d.ts +3 -1
- package/dist/components/BbAsterisk/BbAsterisk.vue_vue_type_script_setup_true_lang.js +23 -8
- package/dist/components/BbAsterisk/types.d.ts +18 -0
- package/dist/components/BbAsterisk/types.js +7 -0
- package/dist/components/BbAvatar/BbAvatar.vue.d.ts +1 -1
- package/dist/components/BbAvatar/BbAvatar.vue_vue_type_script_setup_true_lang.js +57 -44
- package/dist/components/BbAvatar/types.d.ts +23 -0
- package/dist/components/BbAvatar/types.js +7 -0
- package/dist/components/BbBadge/BadgeBodyContent.vue_vue_type_script_setup_true_lang.js +24 -18
- package/dist/components/BbBadge/BbBadge.vue_vue_type_script_setup_true_lang.js +96 -53
- package/dist/components/BbBadge/BbBadgeButton.vue_vue_type_script_setup_true_lang.js +27 -8
- package/dist/components/BbBadge/badgeButtonContext.d.ts +25 -8
- package/dist/components/BbBadge/types.d.ts +46 -3
- package/dist/components/BbBadge/types.js +13 -0
- package/dist/components/BbBaseButton/BbBaseButton.vue_vue_type_script_setup_true_lang.js +109 -96
- package/dist/components/BbBaseButton/RouterComponent.vue_vue_type_script_setup_true_lang.js +11 -11
- package/dist/components/BbBaseButton/types.d.ts +33 -3
- package/dist/components/BbBaseButton/types.js +9 -2
- package/dist/components/BbBaseCheckboxIcon/BbBaseCheckboxIcon.vue_vue_type_script_setup_true_lang.js +50 -18
- package/dist/components/BbBaseCheckboxIcon/types.d.ts +31 -2
- package/dist/components/BbBaseCheckboxIcon/types.js +8 -0
- package/dist/components/BbBaseRadioIcon/BbBaseRadioIcon.vue_vue_type_script_setup_true_lang.js +45 -15
- package/dist/components/BbBaseRadioIcon/types.d.ts +31 -2
- package/dist/components/BbBaseRadioIcon/types.js +8 -0
- package/dist/components/BbBaseSwitchIcon/BbBaseSwitchIcon.vue_vue_type_script_setup_true_lang.js +48 -16
- package/dist/components/BbBaseSwitchIcon/types.d.ts +31 -2
- package/dist/components/BbBaseSwitchIcon/types.js +8 -0
- package/dist/components/BbBreadcrumbs/BbBreadcrumbs.vue_vue_type_script_setup_true_lang.js +187 -132
- package/dist/components/BbBreadcrumbs/types.d.ts +45 -3
- package/dist/components/BbBreadcrumbs/types.js +12 -0
- package/dist/components/BbButton/BbButton.vue.d.ts +5 -0
- package/dist/components/BbButton/BbButton.vue_vue_type_script_setup_true_lang.js +107 -81
- package/dist/components/BbButton/types.d.ts +113 -2
- package/dist/components/BbButton/types.js +12 -0
- package/dist/components/BbCalendar/BbCalendar.vue.d.ts +34 -0
- package/dist/components/BbCalendar/BbCalendar.vue.js +6 -0
- package/dist/components/BbCalendar/BbCalendar.vue_vue_type_script_setup_true_lang.js +608 -0
- package/dist/components/BbCalendar/CalendarMonthPanel.vue.js +5 -0
- package/dist/components/BbCalendar/CalendarMonthPanel.vue_vue_type_script_setup_true_lang.js +124 -0
- package/dist/components/BbCalendar/CalendarYearPanel.vue.js +5 -0
- package/dist/components/BbCalendar/CalendarYearPanel.vue_vue_type_script_setup_true_lang.js +126 -0
- package/dist/components/BbCalendar/calendarHost.d.ts +29 -0
- package/dist/components/BbCalendar/calendarHost.js +10 -0
- package/dist/components/BbCalendar/types.d.ts +225 -0
- package/dist/components/BbCalendar/types.js +29 -0
- package/dist/components/{BbBaseDatePicker/useDatePickerContext.d.ts → BbCalendar/useCalendarContext.d.ts} +10 -7
- package/dist/components/BbCalendar/useCalendarContext.js +11 -0
- package/dist/components/BbCalendar/useCalendarGrid.d.ts +208 -0
- package/dist/components/BbCalendar/useCalendarGrid.js +274 -0
- package/dist/components/BbCalendar/useDayGrid.d.ts +79 -0
- package/dist/components/BbCalendar/useDayGrid.js +204 -0
- package/dist/components/BbCalendar/useToday.d.ts +23 -0
- package/dist/components/BbCalendar/useToday.js +21 -0
- package/dist/components/BbCheckbox/BbCheckbox.vue.d.ts +7 -7
- package/dist/components/BbCheckbox/BbCheckbox.vue_vue_type_script_setup_true_lang.js +214 -72
- package/dist/components/BbCheckbox/types.d.ts +180 -13
- package/dist/components/BbCheckbox/types.js +8 -0
- package/dist/components/BbCheckboxGroup/BbCheckboxGroup.vue.d.ts +15 -3
- package/dist/components/BbCheckboxGroup/BbCheckboxGroup.vue_vue_type_script_setup_true_lang.js +338 -90
- package/dist/components/BbCheckboxGroup/types.d.ts +195 -20
- package/dist/components/BbCheckboxGroup/types.js +10 -0
- package/dist/components/BbCollapsible/BbCollapsible.vue.d.ts +2 -1
- package/dist/components/BbCollapsible/BbCollapsible.vue_vue_type_script_setup_true_lang.js +41 -19
- package/dist/components/BbCollapsible/types.d.ts +44 -1
- package/dist/components/BbCollapsible/types.js +7 -0
- package/dist/components/BbColorInput/BbColorInput.vue.d.ts +17 -7
- package/dist/components/BbColorInput/BbColorInput.vue_vue_type_script_setup_true_lang.js +330 -86
- package/dist/components/BbColorInput/types.d.ts +230 -12
- package/dist/components/BbColorInput/types.js +24 -0
- package/dist/components/BbColorPalette/BbColorPalette.vue.d.ts +10 -2
- package/dist/components/BbColorPalette/BbColorPalette.vue_vue_type_script_setup_true_lang.js +515 -108
- package/dist/components/BbColorPalette/types.d.ts +76 -7
- package/dist/components/BbColorPalette/types.js +12 -0
- package/dist/components/BbConfirm/BbConfirm.vue.d.ts +2 -1
- package/dist/components/BbConfirm/BbConfirm.vue_vue_type_script_setup_true_lang.js +125 -76
- package/dist/components/BbConfirm/BbConfirmPortal.vue.d.ts +1 -0
- package/dist/components/BbConfirm/types.d.ts +49 -0
- package/dist/components/BbConfirm/types.js +17 -0
- package/dist/components/BbDatePicker/BbDatePicker.vue.d.ts +16 -10
- package/dist/components/BbDatePicker/BbDatePicker.vue_vue_type_script_setup_true_lang.js +320 -223
- package/dist/components/BbDatePicker/types.d.ts +111 -17
- package/dist/components/BbDatePicker/types.js +33 -0
- package/dist/components/BbDatePickerInput/BbDatePickerInput.vue.d.ts +16 -4
- package/dist/components/BbDatePickerInput/BbDatePickerInput.vue_vue_type_script_setup_true_lang.js +1172 -87
- package/dist/components/BbDatePickerInput/types.d.ts +224 -19
- package/dist/components/BbDatePickerInput/types.js +39 -0
- package/dist/components/BbDialog/BbDialog.vue.d.ts +3 -3
- package/dist/components/BbDialog/BbDialog.vue_vue_type_script_setup_true_lang.js +227 -136
- package/dist/components/BbDialog/types.d.ts +92 -3
- package/dist/components/BbDialog/types.js +16 -0
- package/dist/components/BbDialog/useDialogStack.d.ts +12 -0
- package/dist/components/BbDialog/useDialogStack.js +9 -2
- package/dist/components/BbDropdown/AdaptiveDropdown.vue.d.ts +2 -0
- package/dist/components/BbDropdown/AdaptiveDropdown.vue_vue_type_script_setup_true_lang.js +108 -96
- package/dist/components/BbDropdown/BbDropdown.vue.d.ts +10 -2
- package/dist/components/BbDropdown/BbDropdown.vue_vue_type_script_setup_true_lang.js +337 -268
- package/dist/components/BbDropdown/BbDropdownGroup.vue.d.ts +5 -1
- package/dist/components/BbDropdown/BbDropdownList.vue.d.ts +8 -2
- package/dist/components/BbDropdown/BbDropdownList.vue_vue_type_script_setup_true_lang.js +377 -293
- package/dist/components/BbDropdown/DropdownPipelineResolver.vue_vue_type_script_setup_true_lang.js +129 -118
- package/dist/components/BbDropdown/normalizeGroups.js +55 -31
- package/dist/components/BbDropdown/types.d.ts +288 -30
- package/dist/components/BbDropdown/types.js +21 -2
- package/dist/components/BbDropdown/useDropdownContext.d.ts +10 -4
- package/dist/components/BbDropdown/useDropdownGroupRegistry.d.ts +1 -0
- package/dist/components/BbDropdownButton/BbDropdownButton.vue.d.ts +18 -3
- package/dist/components/BbDropdownButton/BbDropdownButton.vue_vue_type_script_setup_true_lang.js +172 -40
- package/dist/components/BbDropdownButton/types.d.ts +137 -8
- package/dist/components/BbDropdownButton/types.js +35 -0
- package/dist/components/BbDropzone/BbDropzone.vue.d.ts +2 -2
- package/dist/components/BbDropzone/BbDropzone.vue_vue_type_script_setup_true_lang.js +186 -144
- package/dist/components/BbDropzone/types.d.ts +38 -4
- package/dist/components/BbDropzone/types.js +16 -0
- package/dist/components/BbForm/BbForm.vue.d.ts +94 -0
- package/dist/{validated → components/BbForm}/BbForm.vue.js +1 -1
- package/dist/components/BbForm/BbForm.vue_vue_type_script_setup_true_lang.js +317 -0
- package/dist/components/BbForm/BbFormCustomField.d.ts +14 -0
- package/dist/components/BbForm/BbFormCustomField.js +43 -0
- package/dist/components/BbForm/bindFormField.d.ts +16 -0
- package/dist/components/BbForm/bindFormField.js +85 -0
- package/dist/components/BbForm/formFields.d.ts +64 -0
- package/dist/components/BbForm/formFields.js +11 -0
- package/dist/components/BbForm/formSchema.d.ts +56 -0
- package/dist/components/BbForm/formSchema.js +196 -0
- package/dist/components/BbForm/standardSchema.d.ts +59 -0
- package/dist/components/BbIcon/BbIcon.vue_vue_type_script_setup_true_lang.js +58 -48
- package/dist/components/BbIcon/iconCache.d.ts +63 -0
- package/dist/components/BbIcon/iconCache.js +35 -0
- package/dist/components/BbIcon/types.d.ts +22 -2
- package/dist/components/BbIcon/types.js +7 -0
- package/dist/components/BbIndicator/BbIndicator.vue_vue_type_script_setup_true_lang.js +34 -21
- package/dist/components/BbIndicator/types.d.ts +24 -0
- package/dist/components/BbIndicator/types.js +7 -0
- package/dist/components/BbNumberInput/BbNumberInput.vue.d.ts +12 -8
- package/dist/components/BbNumberInput/BbNumberInput.vue_vue_type_script_setup_true_lang.js +308 -85
- package/dist/components/BbNumberInput/types.d.ts +201 -18
- package/dist/components/BbNumberInput/types.js +8 -0
- package/dist/components/BbOffCanvas/BbOffCanvas.vue.d.ts +3 -3
- package/dist/components/BbOffCanvas/BbOffCanvas.vue_vue_type_script_setup_true_lang.js +311 -210
- package/dist/components/BbOffCanvas/types.d.ts +79 -6
- package/dist/components/BbOffCanvas/types.js +15 -0
- package/dist/components/BbPagination/BbPagination.vue.d.ts +2 -2
- package/dist/components/BbPagination/BbPagination.vue_vue_type_script_setup_true_lang.js +125 -90
- package/dist/components/BbPagination/types.d.ts +38 -0
- package/dist/components/BbPagination/types.js +13 -0
- package/dist/components/BbPopover/BbPopover.vue.d.ts +4 -4
- package/dist/components/BbPopover/BbPopover.vue_vue_type_script_setup_true_lang.js +219 -179
- package/dist/components/BbPopover/types.d.ts +51 -5
- package/dist/components/BbPopover/types.js +14 -0
- package/dist/components/BbProgress/BbProgress.vue_vue_type_script_setup_true_lang.js +29 -16
- package/dist/components/BbProgress/types.d.ts +25 -0
- package/dist/components/BbProgress/types.js +7 -0
- package/dist/components/BbPtScope/BbPtScope.vue.d.ts +12 -0
- package/dist/components/BbPtScope/BbPtScope.vue.js +5 -0
- package/dist/components/BbPtScope/BbPtScope.vue_vue_type_script_setup_true_lang.js +13 -0
- package/dist/components/BbPtScope/types.d.ts +15 -0
- package/dist/components/BbRadio/BbRadio.vue.d.ts +7 -7
- package/dist/components/BbRadio/BbRadio.vue_vue_type_script_setup_true_lang.js +172 -59
- package/dist/components/BbRadio/types.d.ts +152 -13
- package/dist/components/BbRadio/types.js +8 -0
- package/dist/components/BbRadioGroup/BbRadioGroup.vue.d.ts +14 -2
- package/dist/components/BbRadioGroup/BbRadioGroup.vue_vue_type_script_setup_true_lang.js +319 -92
- package/dist/components/BbRadioGroup/types.d.ts +198 -22
- package/dist/components/BbRadioGroup/types.js +10 -0
- package/dist/components/BbRating/BbRating.vue.d.ts +10 -8
- package/dist/components/BbRating/BbRating.vue_vue_type_script_setup_true_lang.js +259 -78
- package/dist/components/BbRating/types.d.ts +174 -13
- package/dist/components/BbRating/types.js +21 -0
- package/dist/components/BbSelect/BbSelect.vue.d.ts +17 -3
- package/dist/components/BbSelect/BbSelect.vue_vue_type_script_setup_true_lang.js +553 -83
- package/dist/components/BbSelect/types.d.ts +235 -20
- package/dist/components/BbSelect/types.js +41 -0
- package/dist/components/BbSelectPopover/BbSelectPopover.vue.d.ts +15 -1
- package/dist/components/BbSelectPopover/BbSelectPopover.vue_vue_type_script_setup_true_lang.js +541 -391
- package/dist/components/BbSelectPopover/types.d.ts +124 -8
- package/dist/components/BbSelectPopover/types.js +24 -0
- package/dist/components/BbSlider/BbSlider.vue.d.ts +13 -8
- package/dist/components/BbSlider/BbSlider.vue_vue_type_script_setup_true_lang.js +472 -96
- package/dist/components/BbSlider/types.d.ts +202 -13
- package/dist/components/BbSlider/types.js +26 -0
- package/dist/components/BbSmoothHeight/BbSmoothHeight.vue.d.ts +1 -1
- package/dist/components/BbSmoothHeight/BbSmoothHeight.vue_vue_type_script_setup_true_lang.js +60 -48
- package/dist/components/BbSmoothHeight/types.d.ts +19 -0
- package/dist/components/BbSmoothHeight/types.js +7 -0
- package/dist/components/BbSpinner/BbSpinner.vue_vue_type_script_setup_true_lang.js +27 -14
- package/dist/components/BbSpinner/types.d.ts +22 -1
- package/dist/components/BbSpinner/types.js +7 -0
- package/dist/components/BbSwitch/BbSwitch.vue.d.ts +7 -7
- package/dist/components/BbSwitch/BbSwitch.vue_vue_type_script_setup_true_lang.js +220 -78
- package/dist/components/BbSwitch/types.d.ts +25 -10
- package/dist/components/BbSwitch/types.js +5 -0
- package/dist/components/BbSwitchGroup/BbSwitchGroup.vue.d.ts +14 -2
- package/dist/components/BbSwitchGroup/BbSwitchGroup.vue_vue_type_script_setup_true_lang.js +338 -90
- package/dist/components/BbSwitchGroup/types.d.ts +30 -7
- package/dist/components/BbSwitchGroup/types.js +5 -0
- package/dist/components/BbTable/BbTable.vue.d.ts +27 -6
- package/dist/components/BbTable/BbTable.vue_vue_type_script_setup_true_lang.js +2013 -685
- package/dist/components/BbTable/BbTableDataRow.d.ts +196 -0
- package/dist/components/BbTable/BbTableDataRow.js +151 -0
- package/dist/components/BbTable/BbTableExpandRow.d.ts +84 -0
- package/dist/components/BbTable/BbTableExpandRow.js +62 -0
- package/dist/components/BbTable/BbTableSelectToggle.d.ts +120 -0
- package/dist/components/BbTable/BbTableSelectToggle.js +122 -0
- package/dist/components/BbTable/gridWidgets.d.ts +30 -0
- package/dist/components/BbTable/gridWidgets.js +14 -0
- package/dist/components/BbTable/types.d.ts +473 -123
- package/dist/components/BbTable/types.js +31 -0
- package/dist/components/BbTable/utils.d.ts +145 -4
- package/dist/components/BbTable/utils.js +154 -37
- package/dist/components/BbTabs/BbTabs.vue.d.ts +3 -1
- package/dist/components/BbTabs/BbTabs.vue_vue_type_script_setup_true_lang.js +62 -26
- package/dist/components/BbTabs/BbTabsList.vue.d.ts +3 -10
- package/dist/components/BbTabs/BbTabsList.vue_vue_type_script_setup_true_lang.js +143 -81
- package/dist/components/BbTabs/BbTabsPanels.vue.d.ts +12 -0
- package/dist/components/{BbBaseSwitch/BbBaseSwitch.vue.js → BbTabs/BbTabsPanels.vue.js} +2 -2
- package/dist/components/BbTabs/BbTabsPanels.vue_vue_type_script_setup_true_lang.js +59 -0
- package/dist/components/BbTabs/BbTabsRoot.vue.d.ts +3 -1
- package/dist/components/BbTabs/BbTabsRoot.vue_vue_type_script_setup_true_lang.js +2 -1
- package/dist/components/BbTabs/types.d.ts +183 -23
- package/dist/components/BbTabs/types.js +34 -0
- package/dist/components/BbTag/BbTag.vue.d.ts +13 -10
- package/dist/components/BbTag/BbTag.vue_vue_type_script_setup_true_lang.js +383 -92
- package/dist/components/BbTag/types.d.ts +139 -14
- package/dist/components/BbTag/types.js +22 -0
- package/dist/components/BbTextInput/BbTextInput.vue.d.ts +10 -8
- package/dist/components/BbTextInput/BbTextInput.vue_vue_type_script_setup_true_lang.js +257 -84
- package/dist/components/BbTextInput/types.d.ts +168 -13
- package/dist/components/BbTextInput/types.js +8 -0
- package/dist/components/BbTextarea/BbTextarea.vue.d.ts +7 -7
- package/dist/components/BbTextarea/BbTextarea.vue_vue_type_script_setup_true_lang.js +291 -94
- package/dist/components/BbTextarea/types.d.ts +158 -14
- package/dist/components/BbTextarea/types.js +8 -0
- package/dist/components/BbTimePicker/BbTimePicker.vue.d.ts +12 -4
- package/dist/components/BbTimePicker/BbTimePicker.vue_vue_type_script_setup_true_lang.js +199 -122
- package/dist/components/BbTimePicker/types.d.ts +94 -7
- package/dist/components/BbTimePicker/types.js +18 -0
- package/dist/components/BbTimePickerInput/BbTimePickerInput.vue.d.ts +14 -4
- package/dist/components/BbTimePickerInput/BbTimePickerInput.vue_vue_type_script_setup_true_lang.js +749 -86
- package/dist/components/BbTimePickerInput/types.d.ts +171 -22
- package/dist/components/BbTimePickerInput/types.js +25 -0
- package/dist/components/BbToast/BbToast.vue_vue_type_script_setup_true_lang.js +63 -25
- package/dist/components/BbToast/BbToastMessage.vue.d.ts +4 -1
- package/dist/components/BbToast/BbToastMessage.vue_vue_type_script_setup_true_lang.js +79 -76
- package/dist/components/BbToast/BbToastPortal.vue.d.ts +1 -0
- package/dist/components/BbToast/BbToastRegion.vue.d.ts +4 -1
- package/dist/components/BbToast/BbToastRegion.vue_vue_type_script_setup_true_lang.js +72 -64
- package/dist/components/BbToast/types.d.ts +54 -1
- package/dist/components/BbToast/types.js +28 -0
- package/dist/components/BbTooltip/BbTooltip.vue_vue_type_script_setup_true_lang.js +104 -87
- package/dist/components/BbTooltip/types.d.ts +40 -2
- package/dist/components/BbTooltip/types.js +7 -0
- package/dist/components/BbTree/BbTree.vue.d.ts +15 -3
- package/dist/components/BbTree/BbTree.vue_vue_type_script_setup_true_lang.js +51 -29
- package/dist/components/BbTree/BbTreeLevel.vue.d.ts +1 -1
- package/dist/components/BbTree/BbTreeLevel.vue_vue_type_script_setup_true_lang.js +17 -16
- package/dist/components/BbTree/context.d.ts +9 -1
- package/dist/components/BbTree/types.d.ts +40 -5
- package/dist/components/BbTree/types.js +7 -0
- package/dist/components/ChipsBox/ChipsBox.vue_vue_type_script_setup_true_lang.js +46 -44
- package/dist/components/ChipsBox/types.d.ts +7 -0
- package/dist/components/ClearableButton/ClearableButton.vue_vue_type_script_setup_true_lang.js +5 -5
- package/dist/components/CommaBox/CommaBox.vue_vue_type_script_setup_true_lang.js +11 -7
- package/dist/components/CommaBox/types.d.ts +7 -0
- package/dist/components/{BbBaseInputContainer/BbBaseInputContainer.vue.d.ts → CommonField/CommonField.vue.d.ts} +5 -5
- package/dist/components/{BbBaseRadio/BbBaseRadio.vue.js → CommonField/CommonField.vue.js} +2 -2
- package/dist/components/CommonField/CommonField.vue_vue_type_script_setup_true_lang.js +189 -0
- package/dist/components/CommonField/messageHeightMatrix.d.ts +2 -0
- package/dist/components/{BbBaseInputContainer → CommonField}/types.d.ts +52 -16
- package/dist/components/{CommonInputWrapper/CommonInputWrapper.vue.d.ts → CommonFieldInput/CommonFieldInput.vue.d.ts} +5 -4
- package/dist/components/{BbBaseRadioGroup/BbBaseRadioGroup.vue.js → CommonFieldInput/CommonFieldInput.vue.js} +2 -2
- package/dist/components/CommonFieldInput/CommonFieldInput.vue_vue_type_script_setup_true_lang.js +120 -0
- package/dist/components/CommonFieldInput/boxBorderMatrix.d.ts +10 -0
- package/dist/components/{CommonInputWrapper → CommonFieldInput}/types.d.ts +27 -8
- package/dist/components/CommonPopover/CommonPopover.vue.d.ts +11 -2
- package/dist/components/CommonPopover/CommonPopover.vue_vue_type_script_setup_true_lang.js +76 -63
- package/dist/components/CommonPopover/types.d.ts +27 -8
- package/dist/components/{BbBaseDatePickerInput/BbBaseDatePickerTimeSelector.vue.d.ts → CommonTimeSelector/CommonTimeSelector.vue.d.ts} +21 -2
- package/dist/components/{BbBaseColorPalette/BbBaseColorPalette.vue.js → CommonTimeSelector/CommonTimeSelector.vue.js} +2 -2
- package/dist/components/CommonTimeSelector/CommonTimeSelector.vue_vue_type_script_setup_true_lang.js +232 -0
- package/dist/components/CommonTimeSelector/types.d.ts +6 -0
- package/dist/components/FlatListBox/FlatListBox.vue.d.ts +5 -1
- package/dist/components/FlatListBox/FlatListBox.vue_vue_type_script_setup_true_lang.js +165 -95
- package/dist/components/FlatListBox/types.d.ts +24 -2
- package/dist/components/GroupedListBox/GroupedListBox.vue.d.ts +5 -1
- package/dist/components/GroupedListBox/GroupedListBox.vue_vue_type_script_setup_true_lang.js +217 -134
- package/dist/components/GroupedListBox/types.d.ts +24 -2
- package/dist/components/ListBox/ListBox.vue.d.ts +5 -1
- package/dist/components/ListBox/ListBox.vue_vue_type_script_setup_true_lang.js +95 -69
- package/dist/components/ListBox/types.d.ts +24 -2
- package/dist/components/OptionsContainer/OptionsContainer.vue.d.ts +1 -1
- package/dist/components/OptionsContainer/OptionsContainer.vue_vue_type_script_setup_true_lang.js +109 -37
- package/dist/components/OptionsContainer/types.d.ts +53 -9
- package/dist/components/Transitions/ScaleFade.vue_vue_type_script_setup_true_lang.js +8 -8
- package/dist/components/Transitions/Slide.vue.js +1 -1
- package/dist/composables/useBaseOptions.d.ts +12 -1
- package/dist/composables/useBaseOptions.js +77 -37
- package/dist/composables/useBbConfig.d.ts +27 -6
- package/dist/composables/useBbConfig.js +8 -2
- package/dist/composables/useBbDropdownContext.d.ts +5 -0
- package/dist/composables/useBbFormContext.d.ts +131 -8
- package/dist/composables/useBbFormContext.js +49 -30
- package/dist/composables/useBbFormField.d.ts +40 -0
- package/dist/composables/useBbFormField.js +39 -0
- package/dist/composables/useBbTableContext.d.ts +45 -1
- package/dist/composables/useBbTableContext.js +93 -87
- package/dist/composables/useBbTabsContext.d.ts +15 -9
- package/dist/composables/useBbTabsContext.js +121 -90
- package/dist/composables/useClosingInert.d.ts +4 -4
- package/dist/composables/useCoarsePointer.js +7 -10
- package/dist/composables/useCoherence.js +1 -1
- package/dist/composables/useConfig.d.ts +59 -0
- package/dist/composables/useConfig.js +15 -0
- package/dist/composables/useConfirm.d.ts +39 -7
- package/dist/composables/useConfirm.js +50 -41
- package/dist/composables/useEscapeStackEntry.d.ts +13 -0
- package/dist/composables/useEscapeStackEntry.js +16 -0
- package/dist/composables/useFormBinding.d.ts +116 -0
- package/dist/composables/useFormBinding.js +34 -0
- package/dist/composables/useHydrated.d.ts +18 -0
- package/dist/composables/useHydrated.js +13 -7
- package/dist/composables/useId.d.ts +4 -3
- package/dist/composables/useId.js +1 -7
- package/dist/composables/useItemsGetter.d.ts +11 -0
- package/dist/composables/useItemsGetter.js +44 -18
- package/dist/composables/useKeyboardInset.d.ts +28 -0
- package/dist/composables/useKeyboardInset.js +32 -0
- package/dist/composables/useLocale.js +10 -7
- package/dist/composables/useMobile.js +7 -10
- package/dist/composables/usePassthrough.d.ts +228 -0
- package/dist/composables/usePassthrough.js +247 -0
- package/dist/composables/usePrefill.d.ts +22 -2
- package/dist/composables/usePrefill.js +35 -19
- package/dist/composables/useSafeAreaInternal.js +1 -1
- package/dist/composables/useSegmentedFields.d.ts +2 -2
- package/dist/composables/useSsrState.d.ts +20 -0
- package/dist/composables/useSsrState.js +13 -0
- package/dist/composables/useTableWidthContext.d.ts +24 -4
- package/dist/composables/useTableWidthContext.js +31 -28
- package/dist/composables/useToast.d.ts +18 -1
- package/dist/composables/useToast.js +31 -18
- package/dist/composables/useToggleInput.d.ts +44 -0
- package/dist/composables/useToggleInput.js +39 -0
- package/dist/composables/useViewportWidth.d.ts +5 -25
- package/dist/composables/useViewportWidth.js +14 -7
- package/dist/deprecation/ai-deprecations.json.d.ts +1977 -289
- package/dist/deprecation/ai-deprecations.json.js +1 -1
- package/dist/deprecation/removedProps.js +9 -4
- package/dist/directives/bbDropdown.d.ts +15 -4
- package/dist/directives/bbDropdown.js +31 -9
- package/dist/directives/bbTooltip.d.ts +6 -0
- package/dist/directives/createPopoverDirective.d.ts +62 -0
- package/dist/directives/createPopoverDirective.js +92 -37
- package/dist/i18n/index.d.ts +10 -16
- package/dist/i18n/locales/cs.json +9 -5
- package/dist/i18n/locales/da.json +9 -5
- package/dist/i18n/locales/de.json +9 -5
- package/dist/i18n/locales/el.json +9 -5
- package/dist/i18n/locales/en.json +9 -5
- package/dist/i18n/locales/es.json +9 -5
- package/dist/i18n/locales/fi.json +9 -5
- package/dist/i18n/locales/fr.json +9 -5
- package/dist/i18n/locales/hu.json +9 -5
- package/dist/i18n/locales/it.json +9 -5
- package/dist/i18n/locales/ja.json +9 -5
- package/dist/i18n/locales/ko.json +9 -5
- package/dist/i18n/locales/nb.json +9 -5
- package/dist/i18n/locales/nl.json +9 -5
- package/dist/i18n/locales/pl.json +9 -5
- package/dist/i18n/locales/pt.json +9 -5
- package/dist/i18n/locales/ro.json +9 -5
- package/dist/i18n/locales/ru.json +9 -5
- package/dist/i18n/locales/sv.json +9 -5
- package/dist/i18n/locales/tr.json +9 -5
- package/dist/i18n/locales/uk.json +9 -5
- package/dist/i18n/locales/zh-cn.json +9 -5
- package/dist/icon-scan.d.ts +276 -0
- package/dist/icon-scan.js +485 -0
- package/dist/icons-whitelist.d.ts +5 -4
- package/dist/index.d.ts +40 -21
- package/dist/index.js +78 -71
- package/dist/llms-full.txt +61164 -27972
- package/dist/llms-medium.txt +1482 -366
- package/dist/llms.txt +32 -15
- package/dist/locale-blueprint.json +9 -5
- package/dist/nuxt-auto-imports.d.ts +76 -0
- package/dist/nuxt-auto-imports.js +32 -0
- package/dist/nuxt-module.d.ts +30 -15
- package/dist/nuxt.js +35 -9
- package/dist/passthrough-deduper.js +5 -0
- package/dist/plugin.d.ts +10 -1
- package/dist/plugin.js +29 -19
- package/dist/project-dts.d.ts +84 -0
- package/dist/project-dts.js +170 -0
- package/dist/reset.css +1 -1
- package/dist/runtime/nuxt-plugin.js +34 -21
- package/dist/styles.css +3 -2
- package/dist/types/AlertVariant.d.ts +10 -1
- package/dist/types/BadgeVariant.d.ts +16 -5
- package/dist/types/ButtonVariant.d.ts +12 -1
- package/dist/types/ColumnName.d.ts +30 -3
- package/dist/types/CommonProps.d.ts +2 -2
- package/dist/types/Config.d.ts +94 -1
- package/dist/types/ConfirmVariant.d.ts +8 -1
- package/dist/types/DropdownItemVariant.d.ts +8 -1
- package/dist/types/FieldLayout.d.ts +32 -0
- package/dist/types/IndicatorVariant.d.ts +11 -1
- package/dist/types/InputVariant.d.ts +30 -0
- package/dist/types/ItemProps.d.ts +50 -0
- package/dist/types/Option.d.ts +6 -0
- package/dist/types/PtScope.d.ts +15 -0
- package/dist/types/RegistryKey.d.ts +10 -0
- package/dist/types/TabsVariant.d.ts +25 -0
- package/dist/types/ToastVariant.d.ts +12 -2
- package/dist/types/TooltipVariant.d.ts +8 -1
- package/dist/types/passthrough.d.ts +362 -0
- package/dist/types/passthrough.js +78 -0
- package/dist/types/ptComponentMap.d.ts +62 -0
- package/dist/utilities/functions/hasVnodeListener.d.ts +16 -0
- package/dist/utilities/functions/hasVnodeListener.js +12 -0
- package/dist/utilities/functions/isImeComposing.d.ts +7 -0
- package/dist/utilities/functions/isImeComposing.js +4 -0
- package/dist/utilities/functions/itemProps.d.ts +46 -0
- package/dist/utilities/functions/itemProps.js +47 -0
- package/dist/utilities/functions/slotKey.d.ts +13 -8
- package/dist/utilities/functions/slotKey.js +78 -2
- package/dist/utilities/functions/snapToStep.js +2 -1
- package/dist/utilities/functions/toggleInput.d.ts +98 -0
- package/dist/utilities/functions/toggleInput.js +56 -0
- package/dist/utilities/functions/warnRemovedAttrs.d.ts +27 -1
- package/dist/utilities/functions/warnRemovedAttrs.js +75 -14
- package/dist/utilities/misc/listboxMetrics.d.ts +9 -3
- package/dist/utilities/misc/listboxMetrics.js +5 -2
- package/dist/utilities/misc/ssrStateInjectionKey.d.ts +42 -0
- package/dist/utilities/misc/ssrStateInjectionKey.js +4 -0
- package/dist/utils/cssLayers.d.ts +91 -0
- package/dist/utils/cssLayers.js +43 -0
- package/dist/utils/injectLibraryStyles.d.ts +3 -1
- package/dist/utils/injectLibraryStyles.js +24 -23
- package/dist/utils/overlayEscapeStack.d.ts +10 -0
- package/dist/utils/overlayEscapeStack.js +5 -3
- package/dist/utils/passthrough.d.ts +67 -0
- package/dist/utils/passthrough.js +100 -0
- package/dist/utils/passthroughDeduper.d.ts +2 -0
- package/dist/utils/ptScope.d.ts +8 -0
- package/dist/utils/ptScope.js +4 -0
- package/dist/utils/versionCheck.d.ts +19 -0
- package/dist/utils/versionCheck.js +18 -0
- package/dist/vite-plugin.d.ts +301 -53
- package/dist/vite.js +547 -375
- package/llms.txt +33 -16
- package/package.json +49 -27
- package/scripts/lib/check-fix.mjs +129 -0
- package/scripts/lib/component-attr-targets.ts +123 -0
- package/scripts/lib/component-tree.ts +648 -0
- package/scripts/lib/css-class-check.mjs +326 -0
- package/scripts/lib/css-class-surface.mjs +292 -0
- package/scripts/lib/css-color-resolve.mjs +172 -0
- package/scripts/lib/css-local-check.mjs +267 -0
- package/scripts/lib/design-token-manifest.mjs +499 -0
- package/scripts/lib/doc-sections.mjs +248 -0
- package/scripts/lib/ensure-manifest.mjs +28 -5
- package/scripts/lib/eslint-disable.mjs +141 -0
- package/scripts/lib/eslint-plugin.d.ts +64 -1
- package/scripts/lib/eslint-plugin.mjs +1285 -30
- package/scripts/lib/hand-imported-styles.mjs +326 -0
- package/scripts/lib/hand-roll-hints.mjs +50 -6
- package/scripts/lib/html-attributes.mjs +353 -0
- package/scripts/lib/local-components.mjs +177 -0
- package/scripts/lib/mcp-config.mjs +87 -58
- package/scripts/lib/migrate-fix.mjs +62 -3
- package/scripts/lib/project-variant-dts.mjs +122 -0
- package/scripts/lib/public-type-exports.mjs +273 -0
- package/scripts/lib/slot-key.mjs +147 -0
- package/scripts/lib/slot-renames.mjs +46 -0
- package/scripts/lib/squashed-slot-words.mjs +133 -0
- package/scripts/lib/validate-bb-markup.mjs +2213 -76
- package/scripts/lib/wrapper-props.mjs +188 -0
- package/dist/ai/BbBaseCheckbox.md +0 -49
- package/dist/ai/BbBaseCheckboxGroup.md +0 -64
- package/dist/ai/BbBaseColorInput.md +0 -65
- package/dist/ai/BbBaseColorPalette.md +0 -39
- package/dist/ai/BbBaseDatePicker.md +0 -43
- package/dist/ai/BbBaseDatePickerInput.md +0 -73
- package/dist/ai/BbBaseInputContainer.md +0 -48
- package/dist/ai/BbBaseNumberInput.md +0 -71
- package/dist/ai/BbBaseRadio.md +0 -46
- package/dist/ai/BbBaseRadioGroup.md +0 -64
- package/dist/ai/BbBaseRating.md +0 -52
- package/dist/ai/BbBaseSelect.md +0 -88
- package/dist/ai/BbBaseSlider.md +0 -56
- package/dist/ai/BbBaseSwitch.md +0 -49
- package/dist/ai/BbBaseSwitchGroup.md +0 -64
- package/dist/ai/BbBaseTag.md +0 -68
- package/dist/ai/BbBaseTextInput.md +0 -75
- package/dist/ai/BbBaseTextarea.md +0 -62
- package/dist/ai/BbBaseTimePickerInput.md +0 -62
- package/dist/ai/BbTabsPanes.md +0 -27
- package/dist/ai/CommonInputWrapper.md +0 -42
- package/dist/ai/source/BbBaseCheckbox.md +0 -461
- package/dist/ai/source/BbBaseCheckboxGroup.md +0 -554
- package/dist/ai/source/BbBaseColorInput.md +0 -431
- package/dist/ai/source/BbBaseColorPalette.md +0 -942
- package/dist/ai/source/BbBaseDatePicker.md +0 -1448
- package/dist/ai/source/BbBaseDatePickerInput.md +0 -1940
- package/dist/ai/source/BbBaseNumberInput.md +0 -617
- package/dist/ai/source/BbBaseRadio.md +0 -381
- package/dist/ai/source/BbBaseRadioGroup.md +0 -539
- package/dist/ai/source/BbBaseRating.md +0 -607
- package/dist/ai/source/BbBaseSelect.md +0 -945
- package/dist/ai/source/BbBaseSlider.md +0 -1144
- package/dist/ai/source/BbBaseSwitch.md +0 -246
- package/dist/ai/source/BbBaseSwitchGroup.md +0 -302
- package/dist/ai/source/BbBaseTag.md +0 -694
- package/dist/ai/source/BbBaseTextInput.md +0 -511
- package/dist/ai/source/BbBaseTextarea.md +0 -504
- package/dist/ai/source/BbBaseTimePickerInput.md +0 -1037
- package/dist/ai/source/BbTabsPanes.md +0 -377
- package/dist/ai/source/CommonInputWrapper.md +0 -584
- package/dist/alert-variants.d.ts +0 -19
- package/dist/assets/svgs/sort.svg_raw.js +0 -4
- package/dist/badge-variants.d.ts +0 -19
- package/dist/button-variants.d.ts +0 -21
- package/dist/components/BbBadge/BadgeAppendIcon.vue.d.ts +0 -3
- package/dist/components/BbBadge/BadgeAppendIcon.vue.js +0 -5
- package/dist/components/BbBadge/BadgeAppendIcon.vue_vue_type_script_setup_true_lang.js +0 -22
- package/dist/components/BbBaseCheckbox/BbBaseCheckbox.vue.d.ts +0 -40
- package/dist/components/BbBaseCheckbox/BbBaseCheckbox.vue.js +0 -6
- package/dist/components/BbBaseCheckbox/BbBaseCheckbox.vue_vue_type_script_setup_true_lang.js +0 -145
- package/dist/components/BbBaseCheckbox/types.d.ts +0 -224
- package/dist/components/BbBaseCheckboxGroup/BbBaseCheckboxGroup.vue.d.ts +0 -19
- package/dist/components/BbBaseCheckboxGroup/BbBaseCheckboxGroup.vue.js +0 -6
- package/dist/components/BbBaseCheckboxGroup/BbBaseCheckboxGroup.vue_vue_type_script_setup_true_lang.js +0 -190
- package/dist/components/BbBaseCheckboxGroup/types.d.ts +0 -257
- package/dist/components/BbBaseColorInput/BbBaseColorInput.vue.d.ts +0 -43
- package/dist/components/BbBaseColorInput/BbBaseColorInput.vue.js +0 -6
- package/dist/components/BbBaseColorInput/BbBaseColorInput.vue_vue_type_script_setup_true_lang.js +0 -184
- package/dist/components/BbBaseColorInput/types.d.ts +0 -219
- package/dist/components/BbBaseColorPalette/BbBaseColorPalette.vue.d.ts +0 -13
- package/dist/components/BbBaseColorPalette/BbBaseColorPalette.vue_vue_type_script_setup_true_lang.js +0 -395
- package/dist/components/BbBaseColorPalette/types.d.ts +0 -40
- package/dist/components/BbBaseDatePicker/BbBaseDatePicker.vue.d.ts +0 -20
- package/dist/components/BbBaseDatePicker/BbBaseDatePicker.vue.js +0 -6
- package/dist/components/BbBaseDatePicker/BbBaseDatePicker.vue_vue_type_script_setup_true_lang.js +0 -407
- package/dist/components/BbBaseDatePicker/BbBaseDatePickerInputDaySelector.vue.d.ts +0 -47
- package/dist/components/BbBaseDatePicker/BbBaseDatePickerInputDaySelector.vue.js +0 -5
- package/dist/components/BbBaseDatePicker/BbBaseDatePickerInputDaySelector.vue_vue_type_script_setup_true_lang.js +0 -318
- package/dist/components/BbBaseDatePicker/BbBaseDatePickerMonthSelector.vue.js +0 -5
- package/dist/components/BbBaseDatePicker/BbBaseDatePickerMonthSelector.vue_vue_type_script_setup_true_lang.js +0 -115
- package/dist/components/BbBaseDatePicker/BbBaseDatePickerYearSelector.vue.js +0 -5
- package/dist/components/BbBaseDatePicker/BbBaseDatePickerYearSelector.vue_vue_type_script_setup_true_lang.js +0 -116
- package/dist/components/BbBaseDatePicker/types.d.ts +0 -108
- package/dist/components/BbBaseDatePicker/useDatePickerContext.js +0 -11
- package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerInput.vue.d.ts +0 -31
- package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerInput.vue.js +0 -6
- package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerInput.vue_vue_type_script_setup_true_lang.js +0 -737
- package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerTimeSelector.vue.js +0 -6
- package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerTimeSelector.vue_vue_type_script_setup_true_lang.js +0 -204
- package/dist/components/BbBaseDatePickerInput/types.d.ts +0 -325
- package/dist/components/BbBaseInputContainer/BbBaseInputContainer.vue.js +0 -6
- package/dist/components/BbBaseInputContainer/BbBaseInputContainer.vue_vue_type_script_setup_true_lang.js +0 -190
- package/dist/components/BbBaseNumberInput/BbBaseNumberInput.vue.d.ts +0 -52
- package/dist/components/BbBaseNumberInput/BbBaseNumberInput.vue.js +0 -6
- package/dist/components/BbBaseNumberInput/BbBaseNumberInput.vue_vue_type_script_setup_true_lang.js +0 -215
- package/dist/components/BbBaseNumberInput/types.d.ts +0 -211
- package/dist/components/BbBaseRadio/BbBaseRadio.vue.d.ts +0 -33
- package/dist/components/BbBaseRadio/BbBaseRadio.vue_vue_type_script_setup_true_lang.js +0 -113
- package/dist/components/BbBaseRadio/types.d.ts +0 -179
- package/dist/components/BbBaseRadioGroup/BbBaseRadioGroup.vue.d.ts +0 -19
- package/dist/components/BbBaseRadioGroup/BbBaseRadioGroup.vue_vue_type_script_setup_true_lang.js +0 -179
- package/dist/components/BbBaseRadioGroup/types.d.ts +0 -223
- package/dist/components/BbBaseRating/BbBaseRating.vue.d.ts +0 -38
- package/dist/components/BbBaseRating/BbBaseRating.vue.js +0 -6
- package/dist/components/BbBaseRating/BbBaseRating.vue_vue_type_script_setup_true_lang.js +0 -192
- package/dist/components/BbBaseRating/types.d.ts +0 -176
- package/dist/components/BbBaseSelect/BbBaseSelect.vue.d.ts +0 -19
- package/dist/components/BbBaseSelect/BbBaseSelect.vue.js +0 -6
- package/dist/components/BbBaseSelect/BbBaseSelect.vue_vue_type_script_setup_true_lang.js +0 -311
- package/dist/components/BbBaseSelect/types.d.ts +0 -297
- package/dist/components/BbBaseSlider/BbBaseSlider.vue.d.ts +0 -35
- package/dist/components/BbBaseSlider/BbBaseSlider.vue.js +0 -6
- package/dist/components/BbBaseSlider/BbBaseSlider.vue_vue_type_script_setup_true_lang.js +0 -340
- package/dist/components/BbBaseSlider/types.d.ts +0 -200
- package/dist/components/BbBaseSwitch/BbBaseSwitch.vue.d.ts +0 -35
- package/dist/components/BbBaseSwitch/BbBaseSwitch.vue_vue_type_script_setup_true_lang.js +0 -146
- package/dist/components/BbBaseSwitch/types.d.ts +0 -10
- package/dist/components/BbBaseSwitchGroup/BbBaseSwitchGroup.vue.d.ts +0 -19
- package/dist/components/BbBaseSwitchGroup/BbBaseSwitchGroup.vue.js +0 -6
- package/dist/components/BbBaseSwitchGroup/BbBaseSwitchGroup.vue_vue_type_script_setup_true_lang.js +0 -190
- package/dist/components/BbBaseSwitchGroup/types.d.ts +0 -8
- package/dist/components/BbBaseTag/BbBaseTag.vue.d.ts +0 -50
- package/dist/components/BbBaseTag/BbBaseTag.vue.js +0 -6
- package/dist/components/BbBaseTag/BbBaseTag.vue_vue_type_script_setup_true_lang.js +0 -266
- package/dist/components/BbBaseTag/types.d.ts +0 -160
- package/dist/components/BbBaseTextInput/BbBaseTextInput.vue.d.ts +0 -45
- package/dist/components/BbBaseTextInput/BbBaseTextInput.vue.js +0 -6
- package/dist/components/BbBaseTextInput/BbBaseTextInput.vue_vue_type_script_setup_true_lang.js +0 -200
- package/dist/components/BbBaseTextInput/types.d.ts +0 -209
- package/dist/components/BbBaseTextarea/BbBaseTextarea.vue.d.ts +0 -39
- package/dist/components/BbBaseTextarea/BbBaseTextarea.vue.js +0 -6
- package/dist/components/BbBaseTextarea/BbBaseTextarea.vue_vue_type_script_setup_true_lang.js +0 -187
- package/dist/components/BbBaseTextarea/types.d.ts +0 -170
- package/dist/components/BbBaseTimePickerInput/BbBaseTimePickerInput.vue.d.ts +0 -27
- package/dist/components/BbBaseTimePickerInput/BbBaseTimePickerInput.vue.js +0 -6
- package/dist/components/BbBaseTimePickerInput/BbBaseTimePickerInput.vue_vue_type_script_setup_true_lang.js +0 -519
- package/dist/components/BbBaseTimePickerInput/types.d.ts +0 -151
- package/dist/components/BbTabs/BbTabsPanes.vue.d.ts +0 -16
- package/dist/components/BbTabs/BbTabsPanes.vue.js +0 -6
- package/dist/components/BbTabs/BbTabsPanes.vue_vue_type_script_setup_true_lang.js +0 -35
- package/dist/components/CommonInputWrapper/CommonInputWrapper.vue.js +0 -6
- package/dist/components/CommonInputWrapper/CommonInputWrapper.vue_vue_type_script_setup_true_lang.js +0 -107
- package/dist/confirm-variants.d.ts +0 -17
- package/dist/dropdown-item-variants.d.ts +0 -17
- package/dist/indicator-variants.d.ts +0 -20
- package/dist/locale-registry.d.ts +0 -37
- package/dist/toast-variants.d.ts +0 -20
- package/dist/tooltip-variants.d.ts +0 -17
- package/dist/types/InputDirection.d.ts +0 -15
- package/dist/validated/BbCheckbox.vue.d.ts +0 -29
- package/dist/validated/BbCheckbox.vue.js +0 -5
- package/dist/validated/BbCheckbox.vue_vue_type_script_setup_true_lang.js +0 -75
- package/dist/validated/BbCheckboxGroup.vue.d.ts +0 -34
- package/dist/validated/BbCheckboxGroup.vue.js +0 -5
- package/dist/validated/BbCheckboxGroup.vue_vue_type_script_setup_true_lang.js +0 -82
- package/dist/validated/BbColorInput.vue.d.ts +0 -37
- package/dist/validated/BbColorInput.vue.js +0 -5
- package/dist/validated/BbColorInput.vue_vue_type_script_setup_true_lang.js +0 -75
- package/dist/validated/BbDatePickerInput.vue.d.ts +0 -41
- package/dist/validated/BbDatePickerInput.vue.js +0 -5
- package/dist/validated/BbDatePickerInput.vue_vue_type_script_setup_true_lang.js +0 -90
- package/dist/validated/BbDropzone.vue.d.ts +0 -24
- package/dist/validated/BbDropzone.vue.js +0 -5
- package/dist/validated/BbDropzone.vue_vue_type_script_setup_true_lang.js +0 -45
- package/dist/validated/BbForm.vue.d.ts +0 -28
- package/dist/validated/BbForm.vue_vue_type_script_setup_true_lang.js +0 -42
- package/dist/validated/BbNumberInput.vue.d.ts +0 -36
- package/dist/validated/BbNumberInput.vue.js +0 -5
- package/dist/validated/BbNumberInput.vue_vue_type_script_setup_true_lang.js +0 -72
- package/dist/validated/BbRadioGroup.vue.d.ts +0 -34
- package/dist/validated/BbRadioGroup.vue.js +0 -5
- package/dist/validated/BbRadioGroup.vue_vue_type_script_setup_true_lang.js +0 -78
- package/dist/validated/BbRating.vue.d.ts +0 -30
- package/dist/validated/BbRating.vue.js +0 -5
- package/dist/validated/BbRating.vue_vue_type_script_setup_true_lang.js +0 -63
- package/dist/validated/BbSelect.vue.d.ts +0 -46
- package/dist/validated/BbSelect.vue.js +0 -5
- package/dist/validated/BbSelect.vue_vue_type_script_setup_true_lang.js +0 -109
- package/dist/validated/BbSlider.vue.d.ts +0 -36
- package/dist/validated/BbSlider.vue.js +0 -5
- package/dist/validated/BbSlider.vue_vue_type_script_setup_true_lang.js +0 -69
- package/dist/validated/BbSwitch.vue.d.ts +0 -29
- package/dist/validated/BbSwitch.vue.js +0 -5
- package/dist/validated/BbSwitch.vue_vue_type_script_setup_true_lang.js +0 -75
- package/dist/validated/BbSwitchGroup.vue.d.ts +0 -34
- package/dist/validated/BbSwitchGroup.vue.js +0 -5
- package/dist/validated/BbSwitchGroup.vue_vue_type_script_setup_true_lang.js +0 -82
- package/dist/validated/BbTag.vue.d.ts +0 -36
- package/dist/validated/BbTag.vue.js +0 -5
- package/dist/validated/BbTag.vue_vue_type_script_setup_true_lang.js +0 -72
- package/dist/validated/BbTextInput.vue.d.ts +0 -36
- package/dist/validated/BbTextInput.vue.js +0 -5
- package/dist/validated/BbTextInput.vue_vue_type_script_setup_true_lang.js +0 -72
- package/dist/validated/BbTextarea.vue.d.ts +0 -36
- package/dist/validated/BbTextarea.vue.js +0 -5
- package/dist/validated/BbTextarea.vue_vue_type_script_setup_true_lang.js +0 -70
- package/dist/validated/BbTimePickerInput.vue.d.ts +0 -37
- package/dist/validated/BbTimePickerInput.vue.js +0 -5
- package/dist/validated/BbTimePickerInput.vue_vue_type_script_setup_true_lang.js +0 -81
- package/dist/validated/index.d.ts +0 -43
- package/dist/validated/useValidatedField.d.ts +0 -93
- package/dist/validated/useValidatedField.js +0 -51
- package/dist/validated.js +0 -21
- /package/dist/components/{BbBaseDatePicker/BbBaseDatePickerMonthSelector.vue.d.ts → BbCalendar/CalendarMonthPanel.vue.d.ts} +0 -0
- /package/dist/components/{BbBaseDatePicker/BbBaseDatePickerYearSelector.vue.d.ts → BbCalendar/CalendarYearPanel.vue.d.ts} +0 -0
- /package/dist/{components/BbBaseDatePicker/typeahead.d.ts → composables/useTypeahead.d.ts} +0 -0
- /package/dist/{components/BbBaseDatePicker/typeahead.js → composables/useTypeahead.js} +0 -0
package/bin/bitboss-ui.mjs
CHANGED
|
@@ -11,8 +11,10 @@
|
|
|
11
11
|
* - .github/copilot-instructions.md fragment (GitHub Copilot)
|
|
12
12
|
* - .claude/skills/bitboss-ui/SKILL.md (Claude Code)
|
|
13
13
|
* - .windsurf/rules/bitboss-ui.md (Windsurf)
|
|
14
|
-
*
|
|
15
|
-
*
|
|
14
|
+
* Also registers the `bitboss-ui mcp` server for Claude Code,
|
|
15
|
+
* Cursor and VS Code and installs its optional peers
|
|
16
|
+
* (`@modelcontextprotocol/sdk`, `zod`) with the project's package
|
|
17
|
+
* manager; pass --no-mcp to skip both.
|
|
16
18
|
* check Validate Bb* markup in .vue/.md files against the installed
|
|
17
19
|
* components.json manifest (unknown props, removed props, bad
|
|
18
20
|
* v-models, unknown `<template #slot>` names, `href`/`to`/
|
|
@@ -22,38 +24,81 @@
|
|
|
22
24
|
* `bitboss-ui.allowComponents`) exempts an app-owned component
|
|
23
25
|
* whose name happens to start with `Bb`.
|
|
24
26
|
*
|
|
27
|
+
* `--manifest <path>` judges against ANOTHER version's
|
|
28
|
+
* components.json instead of the installed one — answers "what
|
|
29
|
+
* breaks if I upgrade" BEFORE upgrading. A path, not a version:
|
|
30
|
+
* no network call inside a CI validator.
|
|
31
|
+
*
|
|
25
32
|
* SCOPE: `check` knows the INSTALLED v3 API and nothing about v2.
|
|
26
33
|
* "was removed from X" is a recorded v2→v3 break; "is not in X's
|
|
27
34
|
* API" only says the prop is not a v3 prop of that component —
|
|
28
35
|
* it may never have been one anywhere. `printFindingLegend` says
|
|
29
36
|
* so in the output, because two migrating fleets each spent real
|
|
30
37
|
* time discovering it the hard way.
|
|
38
|
+
* changelog Breaking changes between two releases — `--since <version>`
|
|
39
|
+
* answers "what breaks if I bump", without MCP. Reads the
|
|
40
|
+
* installed `dist/ai/changelog.json`.
|
|
31
41
|
* mcp Start a stdio MCP server exposing the dist/ai knowledge base
|
|
32
|
-
* (search_components, get_component,
|
|
33
|
-
*
|
|
42
|
+
* (search_docs, search_components, get_component, get_composable,
|
|
43
|
+
* list_tokens, list_guides, get_guide, list_changes, list_recipes,
|
|
44
|
+
* get_recipe, validate) to MCP-capable agent harnesses.
|
|
34
45
|
*
|
|
35
46
|
* Plain ESM JavaScript on purpose: shipped as-is in the package, no build.
|
|
36
47
|
*/
|
|
37
48
|
|
|
49
|
+
import { spawnSync } from 'node:child_process';
|
|
50
|
+
// `globSync` is read off the namespace, not imported by name: it only exists
|
|
51
|
+
// from Node 22, and a named import of a missing builtin export is a
|
|
52
|
+
// SyntaxError at load time, which killed every command on Node 20 (Sail
|
|
53
|
+
// images still ship it). Only quoted glob arguments need it (Q46.4).
|
|
54
|
+
import * as fs from 'node:fs';
|
|
38
55
|
import {
|
|
39
56
|
existsSync,
|
|
40
|
-
globSync,
|
|
41
57
|
mkdirSync,
|
|
42
58
|
readdirSync,
|
|
43
59
|
readFileSync,
|
|
44
60
|
statSync,
|
|
45
61
|
writeFileSync,
|
|
46
62
|
} from 'node:fs';
|
|
47
|
-
import {
|
|
48
|
-
|
|
49
|
-
|
|
63
|
+
import {
|
|
64
|
+
findHandRollHints,
|
|
65
|
+
loadKnownTokens,
|
|
66
|
+
} from '../scripts/lib/hand-roll-hints.mjs';
|
|
67
|
+
import {
|
|
68
|
+
disabledChecker,
|
|
69
|
+
ruleForFinding,
|
|
70
|
+
} from '../scripts/lib/eslint-disable.mjs';
|
|
71
|
+
import {
|
|
72
|
+
localBbImports,
|
|
73
|
+
localBbWarning,
|
|
74
|
+
projectLocalBbComponents,
|
|
75
|
+
} from '../scripts/lib/local-components.mjs';
|
|
76
|
+
import { applyBitbossFixes } from '../scripts/lib/check-fix.mjs';
|
|
77
|
+
import { cssClassFindings } from '../scripts/lib/css-class-check.mjs';
|
|
78
|
+
import {
|
|
79
|
+
cssLocalFindings,
|
|
80
|
+
libraryTokens,
|
|
81
|
+
localReads,
|
|
82
|
+
} from '../scripts/lib/css-local-check.mjs';
|
|
83
|
+
import {
|
|
84
|
+
HAND_IMPORTED_STYLES_EXTENSIONS,
|
|
85
|
+
handImportedStylesFindings,
|
|
86
|
+
} from '../scripts/lib/hand-imported-styles.mjs';
|
|
87
|
+
import { syncProjectVariantDts } from '../scripts/lib/project-variant-dts.mjs';
|
|
88
|
+
import { dirname, isAbsolute, join, relative, resolve } from 'node:path';
|
|
89
|
+
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
50
90
|
import { parseArgs } from 'node:util';
|
|
51
91
|
import {
|
|
92
|
+
detectPackageManager,
|
|
93
|
+
devInstallCommand,
|
|
52
94
|
ensureMcpConfigs,
|
|
53
95
|
missingMcpPeers,
|
|
96
|
+
MCP_BIN_PATH,
|
|
97
|
+
MCP_PEERS,
|
|
54
98
|
} from '../scripts/lib/mcp-config.mjs';
|
|
55
99
|
import {
|
|
56
100
|
loadManifest,
|
|
101
|
+
registeredRuleNames,
|
|
57
102
|
validateMarkdown,
|
|
58
103
|
validateVueSnippet,
|
|
59
104
|
} from '../scripts/lib/validate-bb-markup.mjs';
|
|
@@ -83,23 +128,33 @@ function coreRules(version) {
|
|
|
83
128
|
|
|
84
129
|
1. **Start at the AI Router**: \`${ROUTER}\` — which file to open next (do not dump the full catalogue into context).
|
|
85
130
|
2. **Obey the agent contract**: \`${CONTRACT}\`.
|
|
86
|
-
3. **Prefer \`Bb*\` consumer components**; never use entries marked "Reference Only - Internal" unless the user explicitly asks for internals. (\`BbBaseButton\`
|
|
131
|
+
3. **Prefer \`Bb*\` consumer components**; never use entries marked "Reference Only - Internal" unless the user explicitly asks for internals. (\`BbBaseButton\` and the \`BbBase*Icon\` glyphs are consumer API; the \`Common*\` building blocks are not.)
|
|
87
132
|
4. **Never invent prop/event/slot names** — open \`${KNOWLEDGE_BASE}/<ComponentName>.md\` (Usage & Guidelines first) or validate against \`${KNOWLEDGE_BASE}/components.json\`.
|
|
88
133
|
5. **Icons**: discover names first; never invent them (\`${KNOWLEDGE_BASE}/guides/icons-policy.md\`).
|
|
89
134
|
6. **Item-driven components**: declarative \`items\` / \`item-text\` / \`item-value\`, \`dependencies\`, \`enforce-coherence\` — no manual watchers for coherence.
|
|
90
135
|
7. **Whole pages**: one recipe under \`${KNOWLEDGE_BASE}/recipes/{vue|nuxt|inertia}/\` (see the router table).
|
|
91
|
-
8. **CSS near components**: \`${KNOWLEDGE_BASE}/guides/design-language.md\`
|
|
92
|
-
9. **
|
|
93
|
-
10. **
|
|
136
|
+
8. **CSS near components**: \`${KNOWLEDGE_BASE}/guides/design-language.md\`. Paint as data is \`${KNOWLEDGE_BASE}/design-tokens.json\` and \`design-tokens.manifest.yaml\` (DESIGN.md-shaped). Grep \`--bb-*\`, not \`--color-*\` or \`--radius-*\`. A repo-root DESIGN.md is not this library. Two token tiers, and reaching for the wrong one is why apps end up re-skinning by class: \`--bb-*\` is the small GLOBAL theme tier (brand knobs, no numeric ramp — there is no \`--bb-primary-800\`), while each component declares its own **unprefixed** \`--*\` tokens for its look (\`.bb-table { --cell-h: 32px }\`). A missing \`--bb-*\` name is not a gap in the library — it means the knob you want is a component token. Set it on the element that DECLARES it (grep \`${KNOWLEDGE_BASE}/source/<ComponentName>.md\`); a value set further out is masked, not inherited. Prefer tokens, variants and \`pt\`; CSS on \`.bb-*__*\` internals is allowed for fine-tuning but unsupported: it can break on upgrade. \`.bb-common-*\` / \`.bb-field*\` internals: expect it to break. (\`.bb-base-button\` and the three \`.bb-base-*-icon\` glyph classes are consumer API — a supported hook, not an internal.) An override on an internal is a signal to check for a \`pt\` part or request one. A Tailwind utility on a \`Bb*\` component that does nothing is rule 9, not a library bug. One primary action per view region.
|
|
137
|
+
9. **Tailwind v4 app: turn on cascade layers when you set bitboss-ui up**, not later when a class "doesn't work". In the build plugin: \`import { bitbossUi, TAILWIND_V4_LAYERS } from 'bitboss-ui/vite'\` and \`bitbossUi({ cssLayers: TAILWIND_V4_LAYERS })\` (Nuxt: \`bitboss: { cssLayers: TAILWIND_V4_LAYERS }\`, same import). Tailwind v4 emits layered CSS; without this the library's CSS is unlayered and beats every utility you put on a \`Bb*\` component or a \`pt:*\` part, whatever the specificity. With it, your utilities win. You still need the runtime plugin (\`app.use(bitbossUiPlugin)\`; Nuxt does it for you): it is what injects the sheet, into that layer. **Do not also \`@import 'bitboss-ui/styles.css'\`**: a hand import adds a second, unlayered copy and undoes the setting. Tailwind v3 or plain CSS: leave it unset. Details: \`${KNOWLEDGE_BASE}/guides/installation-and-plugin-setup.md\` § Cascade layers.
|
|
138
|
+
10. **Set a \`font-family\` on \`body\`** (components inherit it; there is no font token), e.g. \`body { font-family: system-ui, sans-serif; }\`. Without one the whole app renders in the browser's default serif.
|
|
139
|
+
11. **Variants are yours to add**: the shipped \`variant\` names are a floor, not a ceiling. When the design needs a colour the library doesn't ship (soft status badges, a brand button tone), **register the name** in the build plugin's \`badgeVariants\`/\`buttonVariants\`/\`alertVariants\`/… and **style \`.bb-badge--<name>\`** (etc.) in a project stylesheet loaded after \`bitboss-ui/styles.css\`. Do both halves — a registered name with no CSS ships an unstyled pill, and CSS with no registration fails \`vue-tsc\`. After registering, run \`npx bitboss-ui check\`: it writes the project's \`bitboss-ui.d.ts\` so the new name type-checks before Vite has run. Never write an unregistered name, and never downgrade the design to a neutral shipped variant to avoid registering. Canonical palette + snippet: \`${KNOWLEDGE_BASE}/guides/design-language.md\` § Getting soft semantic badges.
|
|
140
|
+
12. **Never name your own components \`Bb…\`** — that prefix is bitboss-ui's. Use your app's prefix (\`App…\`, \`Acme…\`). \`check\` leaves an app's own \`Bb*\` component alone but warns: a future bitboss-ui component could take the name.
|
|
141
|
+
13. **Set \`locale\` explicitly** in the build plugin (\`bitbossUi({ locale: 'it' })\` / nuxt \`bitboss: { locale: 'it' }\`) for any app that is not English: the built-in strings default to English (\`'en'\`, since 3.0.0-beta.41; it was \`'it'\`).
|
|
142
|
+
14. **After writing bitboss-ui markup**, run \`npx bitboss-ui check\` — validates \`Bb*\` usage against the installed \`components.json\` and catches invented/removed props before review.
|
|
94
143
|
|
|
95
144
|
After upgrading bitboss-ui, re-run: \`npx bitboss-ui ai-init\``;
|
|
96
145
|
}
|
|
97
146
|
|
|
147
|
+
// A blank line after the start marker and before the end marker: an HTML
|
|
148
|
+
// comment butting against a heading or a paragraph is not Prettier-stable
|
|
149
|
+
// markdown, and a consumer running `prettier --check` on their AGENTS.md
|
|
150
|
+
// (as our own fixture does in CI) would fail on text we wrote.
|
|
98
151
|
function agentsFragment(version) {
|
|
99
152
|
return `${START_MARKER}
|
|
153
|
+
|
|
100
154
|
## bitboss-ui (v${version})
|
|
101
155
|
|
|
102
156
|
${coreRules(version)}
|
|
157
|
+
|
|
103
158
|
${END_MARKER}`;
|
|
104
159
|
}
|
|
105
160
|
|
|
@@ -190,7 +245,7 @@ function tryWrite(label, fn) {
|
|
|
190
245
|
}
|
|
191
246
|
}
|
|
192
247
|
|
|
193
|
-
function aiInit({ mcp =
|
|
248
|
+
function aiInit({ mcp = true } = {}) {
|
|
194
249
|
const projectRoot = process.cwd();
|
|
195
250
|
const version = packageVersion();
|
|
196
251
|
|
|
@@ -239,11 +294,7 @@ function aiInit({ mcp = false } = {}) {
|
|
|
239
294
|
];
|
|
240
295
|
|
|
241
296
|
if (mcp) {
|
|
242
|
-
|
|
243
|
-
// (home-dir) config.
|
|
244
|
-
for (const result of ensureMcpConfigs(projectRoot, {
|
|
245
|
-
includeWindsurf: true,
|
|
246
|
-
})) {
|
|
297
|
+
for (const result of ensureMcpConfigs(projectRoot)) {
|
|
247
298
|
const suffix = result.reason ? ` (${result.reason})` : '';
|
|
248
299
|
results.push({
|
|
249
300
|
path: `${result.path} [${result.label}]${suffix}`,
|
|
@@ -252,18 +303,34 @@ function aiInit({ mcp = false } = {}) {
|
|
|
252
303
|
}
|
|
253
304
|
|
|
254
305
|
// The harness launches the server on demand, long after this command
|
|
255
|
-
// ran —
|
|
256
|
-
//
|
|
306
|
+
// ran — a missing peer would surface inside an agent as a server that
|
|
307
|
+
// never starts. They are optional peers (~12 MB only the server loads),
|
|
308
|
+
// so installing the library never adds them; registering the server is
|
|
309
|
+
// the moment the project opts in, so install them here.
|
|
257
310
|
const missing = missingMcpPeers(projectRoot);
|
|
258
311
|
if (missing.length > 0) {
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
} not installed:\n` +
|
|
263
|
-
`\n npm i -D ${missing.join(' ')}\n\n` +
|
|
264
|
-
' Optional peers, not dependencies — ~12 MB that only the MCP\n' +
|
|
265
|
-
' server uses. The harness entries above are written either way.'
|
|
312
|
+
const [cmd, ...args] = devInstallCommand(
|
|
313
|
+
detectPackageManager(projectRoot),
|
|
314
|
+
missing
|
|
266
315
|
);
|
|
316
|
+
const printed = [cmd, ...args].join(' ');
|
|
317
|
+
console.log(`[bitboss-ui] installing the MCP server's peers: ${printed}`);
|
|
318
|
+
const installed = spawnSync(cmd, args, {
|
|
319
|
+
cwd: projectRoot,
|
|
320
|
+
stdio: 'inherit',
|
|
321
|
+
// npm/pnpm/yarn are .cmd shims on Windows, which only a shell runs.
|
|
322
|
+
shell: process.platform === 'win32',
|
|
323
|
+
});
|
|
324
|
+
if (installed.status === 0) {
|
|
325
|
+
results.push({ path: missing.join(', '), action: 'installed' });
|
|
326
|
+
} else {
|
|
327
|
+
console.warn(
|
|
328
|
+
`[bitboss-ui] could not install ${missing.join(' and ')} — run it yourself:\n` +
|
|
329
|
+
`\n ${printed}\n\n` +
|
|
330
|
+
' The harness entries are written either way; the server starts\n' +
|
|
331
|
+
' once the peers are installed.'
|
|
332
|
+
);
|
|
333
|
+
}
|
|
267
334
|
}
|
|
268
335
|
}
|
|
269
336
|
|
|
@@ -276,11 +343,11 @@ function aiInit({ mcp = false } = {}) {
|
|
|
276
343
|
);
|
|
277
344
|
if (mcp) {
|
|
278
345
|
console.log(
|
|
279
|
-
'MCP: registered the bitboss-ui server for Claude Code (.mcp.json), Cursor (.cursor/mcp.json)
|
|
346
|
+
'MCP: registered the bitboss-ui server for Claude Code (.mcp.json), Cursor (.cursor/mcp.json) and VS Code/Copilot (.vscode/mcp.json) — restart your harness to pick it up. `--no-mcp` skips this.'
|
|
280
347
|
);
|
|
281
348
|
} else {
|
|
282
349
|
console.log(
|
|
283
|
-
'
|
|
350
|
+
'MCP: skipped (--no-mcp). Re-run without it to let agents query the knowledge base through the bitboss-ui MCP server instead of reading files.'
|
|
284
351
|
);
|
|
285
352
|
}
|
|
286
353
|
console.log('Re-run after upgrading bitboss-ui to refresh the pointers.');
|
|
@@ -348,7 +415,7 @@ function inSkippedDir(relPath) {
|
|
|
348
415
|
* `recursive: true` readdir) is what keeps a multi-thousand-file `vendor/`
|
|
349
416
|
* tree from being walked at all.
|
|
350
417
|
*/
|
|
351
|
-
function collectCheckFiles(dir, relBase = dir) {
|
|
418
|
+
function collectCheckFiles(dir, relBase = dir, extensions = CHECK_EXTENSIONS) {
|
|
352
419
|
let entries;
|
|
353
420
|
try {
|
|
354
421
|
entries = readdirSync(dir, { withFileTypes: true });
|
|
@@ -361,11 +428,11 @@ function collectCheckFiles(dir, relBase = dir) {
|
|
|
361
428
|
if (entry.isDirectory()) {
|
|
362
429
|
if (isSkippedSegment(entry.name)) continue;
|
|
363
430
|
if (isSkippedSubpath(relative(relBase, full))) continue;
|
|
364
|
-
out.push(...collectCheckFiles(full, relBase));
|
|
431
|
+
out.push(...collectCheckFiles(full, relBase, extensions));
|
|
365
432
|
continue;
|
|
366
433
|
}
|
|
367
434
|
if (!entry.isFile()) continue;
|
|
368
|
-
if (!
|
|
435
|
+
if (!extensions.some((ext) => entry.name.endsWith(ext))) continue;
|
|
369
436
|
out.push(full);
|
|
370
437
|
}
|
|
371
438
|
return out;
|
|
@@ -401,7 +468,13 @@ function resolveCheckFiles(cwd, patterns) {
|
|
|
401
468
|
continue;
|
|
402
469
|
}
|
|
403
470
|
}
|
|
404
|
-
|
|
471
|
+
if (typeof fs.globSync !== 'function') {
|
|
472
|
+
console.error(
|
|
473
|
+
`[bitboss-ui] quoted glob patterns need Node >= 22 (this is ${process.version}): "${pattern}". Pass the directory, or leave the pattern unquoted so the shell expands it.`
|
|
474
|
+
);
|
|
475
|
+
process.exit(1);
|
|
476
|
+
}
|
|
477
|
+
const dirents = fs.globSync(pattern, {
|
|
405
478
|
cwd,
|
|
406
479
|
withFileTypes: true,
|
|
407
480
|
// Pruning is a traversal shortcut; the inSkippedDir filter below is
|
|
@@ -507,7 +580,12 @@ function printFindingLegend(findings) {
|
|
|
507
580
|
const rows = [];
|
|
508
581
|
if (kinds.has('removed-prop'))
|
|
509
582
|
rows.push(
|
|
510
|
-
' "was removed from X" a v2→v3
|
|
583
|
+
' "was removed from X" a recorded break (v2→v3, or a v3 beta rename). X really\n' +
|
|
584
|
+
' / "was renamed on X" had this prop or pt key; `check --fix` rewrites the renames.'
|
|
585
|
+
);
|
|
586
|
+
if (kinds.has('renamed-slot'))
|
|
587
|
+
rows.push(
|
|
588
|
+
' "slot … was renamed" a recorded slot rename; `check --fix` rewrites it.'
|
|
511
589
|
);
|
|
512
590
|
if (kinds.has('unknown-prop'))
|
|
513
591
|
rows.push(
|
|
@@ -519,6 +597,29 @@ function printFindingLegend(findings) {
|
|
|
519
597
|
' "restoring" anything: the second case needs deleting,\n' +
|
|
520
598
|
' not porting.'
|
|
521
599
|
);
|
|
600
|
+
// A type written as a tag is its own category: the name IS ours, so neither
|
|
601
|
+
// "check the spelling" nor the allowlist applies, and a reader who skims the
|
|
602
|
+
// message alone would reach for one of them.
|
|
603
|
+
if (
|
|
604
|
+
findings.some((f) => / is a type export, not a component$/.test(f.message))
|
|
605
|
+
)
|
|
606
|
+
rows.push(
|
|
607
|
+
' "is a type export" a real export, but a TYPE — it types a prop, it does not\n' +
|
|
608
|
+
' render. Import it (`import type { … }`) and pass the\n' +
|
|
609
|
+
' value; never allowlist it, which would only silence\n' +
|
|
610
|
+
' every other check on that tag.'
|
|
611
|
+
);
|
|
612
|
+
if (findings.some((f) => f.fallthrough))
|
|
613
|
+
rows.push(
|
|
614
|
+
' ⚠ (vs ✗) markup that is not a typo and may work today: an\n' +
|
|
615
|
+
' undeclared listener Vue binds to the root ELEMENT,\n' +
|
|
616
|
+
' so whether it fires depends on what that root is —\n' +
|
|
617
|
+
" an internal detail, on the component's schedule or\n" +
|
|
618
|
+
" the element's. `<BbDialog @close>` runs (that root is\n" +
|
|
619
|
+
' a native <dialog>); `<BbAlert @close>` does not.\n' +
|
|
620
|
+
' Still reported, because neither is the contract. In\n' +
|
|
621
|
+
' ESLint this is `no-unknown-event`, a warning.'
|
|
622
|
+
);
|
|
522
623
|
if (rows.length === 0) return;
|
|
523
624
|
console.error('\nReading these findings:');
|
|
524
625
|
for (const row of rows) console.error(row);
|
|
@@ -532,18 +633,203 @@ function printFindingLegend(findings) {
|
|
|
532
633
|
* v-models, and `<template #slot>` names) in `.vue` and `.md` files against
|
|
533
634
|
* the installed components.json manifest.
|
|
534
635
|
*/
|
|
535
|
-
|
|
636
|
+
/**
|
|
637
|
+
* The version a components.json describes. `loadManifest` returns the indexed
|
|
638
|
+
* component map, not the envelope, so read the field straight off the file.
|
|
639
|
+
*/
|
|
640
|
+
/**
|
|
641
|
+
* `changelog [--since <v>] [--until <v>] [--json]` — what breaks between two
|
|
642
|
+
* releases, for anyone not driving the MCP server (a human at a terminal, CI,
|
|
643
|
+
* or an agent whose harness has no MCP). Same data and same range rules as the
|
|
644
|
+
* `list_changes` tool; this is the transport-free path to it.
|
|
645
|
+
*/
|
|
646
|
+
function changelogCommand({ since, until, json: jsonMode }) {
|
|
647
|
+
const path = join(PACKAGE_ROOT, 'dist', 'ai', 'changelog.json');
|
|
648
|
+
if (!existsSync(path)) {
|
|
649
|
+
console.error(
|
|
650
|
+
`[bitboss-ui] changelog: not found at ${path} — reinstall bitboss-ui (or run \`npm run build\` when working in the library repo).`
|
|
651
|
+
);
|
|
652
|
+
process.exit(1);
|
|
653
|
+
}
|
|
654
|
+
const doc = JSON.parse(readFileSync(path, 'utf-8'));
|
|
655
|
+
const releases = doc.releases ?? [];
|
|
656
|
+
|
|
657
|
+
for (const [label, value] of [
|
|
658
|
+
['--since', since],
|
|
659
|
+
['--until', until],
|
|
660
|
+
]) {
|
|
661
|
+
if (value != null && !releases.includes(value)) {
|
|
662
|
+
// A tagged-but-never-published version (beta.34): say where its
|
|
663
|
+
// changes went instead of "unknown", which reads like a typo.
|
|
664
|
+
const unpublished = (doc.unpublished ?? []).includes(value);
|
|
665
|
+
const next = releases.find((r) => compareReleaseVersions(r, value) > 0);
|
|
666
|
+
console.error(
|
|
667
|
+
(unpublished
|
|
668
|
+
? `[bitboss-ui] changelog: ${label} ${value} was never published to npm; its changes shipped in ${next ?? 'the next release'}.\n`
|
|
669
|
+
: `[bitboss-ui] changelog: unknown ${label} version '${value}'.\n`) +
|
|
670
|
+
`Known releases: ${releases.join(', ')}`
|
|
671
|
+
);
|
|
672
|
+
process.exit(1);
|
|
673
|
+
}
|
|
674
|
+
}
|
|
675
|
+
|
|
676
|
+
const ranged = since != null || until != null;
|
|
677
|
+
const rows = (doc.breaking ?? []).filter((entry) => {
|
|
678
|
+
if (!ranged) return true;
|
|
679
|
+
const at = entry.firstReleasedIn;
|
|
680
|
+
if (at == null) return until == null;
|
|
681
|
+
if (since != null && compareReleaseVersions(at, since) <= 0) return false;
|
|
682
|
+
if (until != null && compareReleaseVersions(at, until) > 0) return false;
|
|
683
|
+
return true;
|
|
684
|
+
});
|
|
685
|
+
|
|
686
|
+
if (jsonMode) {
|
|
687
|
+
console.log(
|
|
688
|
+
JSON.stringify(
|
|
689
|
+
{
|
|
690
|
+
version: doc.version,
|
|
691
|
+
since: since ?? null,
|
|
692
|
+
until: until ?? doc.version,
|
|
693
|
+
count: rows.length,
|
|
694
|
+
breaking: rows,
|
|
695
|
+
guide: doc.guide,
|
|
696
|
+
},
|
|
697
|
+
null,
|
|
698
|
+
2
|
|
699
|
+
)
|
|
700
|
+
);
|
|
701
|
+
return;
|
|
702
|
+
}
|
|
703
|
+
|
|
704
|
+
const range = ranged
|
|
705
|
+
? `${since ?? 'the start of v3'} → ${until ?? doc.version}`
|
|
706
|
+
: `the whole v2 → v3 upgrade`;
|
|
707
|
+
if (rows.length === 0) {
|
|
708
|
+
// "Nothing breaks" and "I could not tell you" must not look alike.
|
|
709
|
+
console.log(
|
|
710
|
+
`[bitboss-ui] changelog: no BREAKING changes in ${range}.\n` +
|
|
711
|
+
' Features and fixes are deliberately not tracked here, so this\n' +
|
|
712
|
+
' means nothing breaks — not that nothing changed.'
|
|
713
|
+
);
|
|
714
|
+
return;
|
|
715
|
+
}
|
|
716
|
+
console.log(
|
|
717
|
+
`[bitboss-ui] changelog: ${rows.length} breaking change(s), ${range}\n`
|
|
718
|
+
);
|
|
719
|
+
for (const entry of rows) {
|
|
720
|
+
const at = entry.firstReleasedIn ?? 'unreleased';
|
|
721
|
+
if (entry.kind === 'rename') {
|
|
722
|
+
// `surface` says what kind of name it is (Q51.19); a slot reads `#…`.
|
|
723
|
+
const spell = (name) => (entry.surface === 'slot' ? `#${name}` : name);
|
|
724
|
+
const surface =
|
|
725
|
+
entry.surface && entry.surface !== 'prop' ? `${entry.surface} ` : '';
|
|
726
|
+
console.log(
|
|
727
|
+
` [${at}] ${entry.components.join(', ')}: ${surface}\`${spell(entry.from)}\` → ` +
|
|
728
|
+
(entry.to == null ? 'removed' : `\`${spell(entry.to)}\``) +
|
|
729
|
+
(entry.note ? ` (${entry.note})` : '')
|
|
730
|
+
);
|
|
731
|
+
} else {
|
|
732
|
+
console.log(` [${at}] ${entry.description}`);
|
|
733
|
+
}
|
|
734
|
+
if (entry.guide) console.log(` ${entry.guide}`);
|
|
735
|
+
}
|
|
736
|
+
console.log(`\nFull migration guide: ${doc.guide}`);
|
|
737
|
+
}
|
|
738
|
+
|
|
739
|
+
/** Numeric, prerelease-aware ordering; the twin of the MCP server's copy. */
|
|
740
|
+
function compareReleaseVersions(a, b) {
|
|
741
|
+
const parse = (v) => {
|
|
742
|
+
const [core, pre = ''] = String(v).split('-');
|
|
743
|
+
const nums = core.split('.').map((n) => Number.parseInt(n, 10) || 0);
|
|
744
|
+
const [tag = '', n = ''] = pre.split('.');
|
|
745
|
+
return { nums, tag, n: Number.parseInt(n, 10) || 0 };
|
|
746
|
+
};
|
|
747
|
+
const x = parse(a);
|
|
748
|
+
const y = parse(b);
|
|
749
|
+
for (let i = 0; i < 3; i += 1) {
|
|
750
|
+
if ((x.nums[i] ?? 0) !== (y.nums[i] ?? 0))
|
|
751
|
+
return (x.nums[i] ?? 0) - (y.nums[i] ?? 0);
|
|
752
|
+
}
|
|
753
|
+
if (!x.tag && y.tag) return 1;
|
|
754
|
+
if (x.tag && !y.tag) return -1;
|
|
755
|
+
if (x.tag !== y.tag) return x.tag < y.tag ? -1 : 1;
|
|
756
|
+
return x.n - y.n;
|
|
757
|
+
}
|
|
758
|
+
|
|
759
|
+
function manifestVersionOf(manifestPath) {
|
|
760
|
+
try {
|
|
761
|
+
return JSON.parse(readFileSync(manifestPath, 'utf-8')).version ?? 'unknown';
|
|
762
|
+
} catch {
|
|
763
|
+
return 'unknown';
|
|
764
|
+
}
|
|
765
|
+
}
|
|
766
|
+
|
|
767
|
+
async function checkCommand(
|
|
768
|
+
globs,
|
|
769
|
+
{
|
|
770
|
+
json: jsonMode,
|
|
771
|
+
allowEmpty,
|
|
772
|
+
allowComponents,
|
|
773
|
+
manifest: manifestOverride,
|
|
774
|
+
fix,
|
|
775
|
+
}
|
|
776
|
+
) {
|
|
536
777
|
const projectRoot = process.cwd();
|
|
537
778
|
|
|
538
|
-
|
|
779
|
+
/*
|
|
780
|
+
* `--manifest` answers the question `check` could not: "which of my files
|
|
781
|
+
* break in the version I am about to move to?" (reported 2026-09-09). By
|
|
782
|
+
* default the manifest is the INSTALLED one, so the only way to see an
|
|
783
|
+
* upgrade's damage was to perform the upgrade first — exactly backwards for
|
|
784
|
+
* the one moment the answer is worth having.
|
|
785
|
+
*
|
|
786
|
+
* Deliberately a PATH, not a version: fetching a version would put a network
|
|
787
|
+
* call inside a validator that consumers run in CI, with a registry outage
|
|
788
|
+
* as a new failure mode. Getting the file is one documented command
|
|
789
|
+
* (`npm pack bitboss-ui@<version>`, or the public CDN copy), and pointing at
|
|
790
|
+
* it keeps this offline and reproducible.
|
|
791
|
+
*/
|
|
792
|
+
const installedManifest = join(PACKAGE_ROOT, 'dist', 'ai', 'components.json');
|
|
793
|
+
const manifestPath = manifestOverride
|
|
794
|
+
? resolve(projectRoot, manifestOverride)
|
|
795
|
+
: installedManifest;
|
|
539
796
|
if (!existsSync(manifestPath)) {
|
|
540
797
|
console.error(
|
|
541
|
-
|
|
798
|
+
manifestOverride
|
|
799
|
+
? `[bitboss-ui] --manifest: no file at ${manifestPath}.\n` +
|
|
800
|
+
'Point it at a components.json from the version you are moving to:\n' +
|
|
801
|
+
' npm pack bitboss-ui@<version> && tar -xzf bitboss-ui-<version>.tgz\n' +
|
|
802
|
+
' npx bitboss-ui check --manifest package/dist/ai/components.json'
|
|
803
|
+
: `[bitboss-ui] Manifest not found at ${manifestPath} — reinstall bitboss-ui (or run \`npm run build\` when working in the library repo).`
|
|
542
804
|
);
|
|
543
805
|
process.exit(1);
|
|
544
806
|
}
|
|
545
807
|
const manifest = loadManifest(manifestPath);
|
|
546
808
|
|
|
809
|
+
/*
|
|
810
|
+
* Q53.23: write the project's `bitboss-ui.d.ts` from the build config, the
|
|
811
|
+
* file the Vite plugin writes when Vite starts. Agents run `vue-tsc` before
|
|
812
|
+
* any dev start, so a name registered in `badgeVariants` was a type error
|
|
813
|
+
* (and an `as any`) until then. Same generator as the plugin; a config it
|
|
814
|
+
* cannot read is left alone. Not under `--manifest` (an upgrade preview
|
|
815
|
+
* must not touch the project).
|
|
816
|
+
*/
|
|
817
|
+
if (!manifestOverride) {
|
|
818
|
+
try {
|
|
819
|
+
const projectDts = await import(
|
|
820
|
+
pathToFileURL(join(PACKAGE_ROOT, 'dist', 'project-dts.js')).href
|
|
821
|
+
);
|
|
822
|
+
const synced = syncProjectVariantDts(projectRoot, projectDts);
|
|
823
|
+
if (synced.status === 'written' && !jsonMode)
|
|
824
|
+
console.log(
|
|
825
|
+
`[bitboss-ui] Wrote ${synced.path} from your build config: registered variant names now type-check. Commit it.`
|
|
826
|
+
);
|
|
827
|
+
} catch {
|
|
828
|
+
// No built `dist/project-dts.js` (the library repo before a build):
|
|
829
|
+
// nothing to write with, and nothing for `check` to fail over.
|
|
830
|
+
}
|
|
831
|
+
}
|
|
832
|
+
|
|
547
833
|
/*
|
|
548
834
|
* Every `--bb-*` the INSTALLED package declares, read from the stylesheet
|
|
549
835
|
* the consumer actually ships. Read from disk rather than hardcoded so this
|
|
@@ -551,34 +837,123 @@ function checkCommand(globs, { json: jsonMode, allowEmpty, allowComponents }) {
|
|
|
551
837
|
* Absent stylesheet → an empty set → the unknown-token hint stays silent,
|
|
552
838
|
* which is the right failure: no data, no accusation.
|
|
553
839
|
*/
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
)
|
|
563
|
-
: new Set();
|
|
840
|
+
// Under `--manifest`, take the sheet from beside THAT manifest
|
|
841
|
+
// (`<pkg>/dist/ai/components.json` → `<pkg>/dist/styles.css`). Reading the
|
|
842
|
+
// installed sheet while judging props against another version would mix two
|
|
843
|
+
// releases in one verdict — the exact confusion this flag exists to end.
|
|
844
|
+
const stylesPath = manifestOverride
|
|
845
|
+
? join(dirname(dirname(manifestPath)), 'styles.css')
|
|
846
|
+
: join(PACKAGE_ROOT, 'dist', 'styles.css');
|
|
847
|
+
const knownTokens = loadKnownTokens(stylesPath);
|
|
564
848
|
const files = resolveCheckFiles(projectRoot, globs);
|
|
565
849
|
|
|
566
850
|
// CHK-ALLOWCOMPONENTS: `Bb` is a naming convention, not proof of ownership.
|
|
567
851
|
// An app component called `BbRichEditor` is not invalid library markup, and
|
|
568
852
|
// before this the only way to silence it was to rename the component.
|
|
569
|
-
const
|
|
853
|
+
const explicitlyAllowed = new Set([
|
|
570
854
|
...configuredAllowComponents(projectRoot),
|
|
571
855
|
...allowComponents,
|
|
572
|
-
];
|
|
573
|
-
|
|
856
|
+
]);
|
|
857
|
+
// Q53.18: the app's own `Bb*` components (`.vue` files in its `components`
|
|
858
|
+
// dirs, Nuxt path-prefix names included) are skipped with zero config;
|
|
859
|
+
// imports from the app's own paths are handled per file by the validator.
|
|
860
|
+
const projectLocal = projectLocalBbComponents(projectRoot);
|
|
861
|
+
const allowedComponents = [...explicitlyAllowed, ...projectLocal.keys()];
|
|
862
|
+
|
|
863
|
+
// Q46.8: `--fix` applies the ESLint plugin's fixes (the registered v2→v3
|
|
864
|
+
// migrations) with ONLY the bitboss rules, then the check below reports
|
|
865
|
+
// what is left, so one command migrates and verifies.
|
|
866
|
+
if (fix) {
|
|
867
|
+
const outcome = await applyBitbossFixes({
|
|
868
|
+
projectRoot,
|
|
869
|
+
files,
|
|
870
|
+
manifestPath: manifestOverride ? manifestPath : undefined,
|
|
871
|
+
allowComponents: allowedComponents,
|
|
872
|
+
});
|
|
873
|
+
if ('error' in outcome) {
|
|
874
|
+
console.error(`[bitboss-ui] ${outcome.error}`);
|
|
875
|
+
process.exit(1);
|
|
876
|
+
}
|
|
877
|
+
const log = jsonMode ? console.error : console.log;
|
|
878
|
+
log(
|
|
879
|
+
outcome.fixed.length
|
|
880
|
+
? `[bitboss-ui] check --fix: fixed ${outcome.fixed.length} file(s):\n${outcome.fixed
|
|
881
|
+
.map((file) => ` ${relative(projectRoot, file)}`)
|
|
882
|
+
.join('\n')}`
|
|
883
|
+
: '[bitboss-ui] check --fix: nothing to fix.'
|
|
884
|
+
);
|
|
885
|
+
if (outcome.skipped?.length)
|
|
886
|
+
log(
|
|
887
|
+
`[bitboss-ui] check --fix: ESLint ignored ${outcome.skipped.length} file(s), not fixed:\n${outcome.skipped
|
|
888
|
+
.map((file) => ` ${relative(projectRoot, file)}`)
|
|
889
|
+
.join('\n')}`
|
|
890
|
+
);
|
|
891
|
+
}
|
|
892
|
+
// Q46.6: every `var(--x)` the project reads, from a whole-project sweep
|
|
893
|
+
// (explicit paths included): a local or token the app reads itself is its
|
|
894
|
+
// own, never "set and unread".
|
|
895
|
+
const projectReads = new Set();
|
|
896
|
+
for (const path of collectCheckFiles(
|
|
897
|
+
projectRoot,
|
|
898
|
+
projectRoot,
|
|
899
|
+
HAND_IMPORTED_STYLES_EXTENSIONS
|
|
900
|
+
))
|
|
901
|
+
try {
|
|
902
|
+
for (const name of localReads(readFileSync(path, 'utf-8')))
|
|
903
|
+
projectReads.add(name);
|
|
904
|
+
} catch {
|
|
905
|
+
/* unreadable: its reads are unknown, which only means fewer passes */
|
|
906
|
+
}
|
|
907
|
+
// The tokens of the sheet `check` judges against (the installed one, or
|
|
908
|
+
// the one beside `--manifest`) — read AND declared names both count.
|
|
909
|
+
if (manifest.localSurface && existsSync(stylesPath))
|
|
910
|
+
manifest.localSurface.knownTokens = libraryTokens([
|
|
911
|
+
readFileSync(stylesPath, 'utf-8'),
|
|
912
|
+
...[join(dirname(stylesPath), 'reset.css')]
|
|
913
|
+
.filter((path) => existsSync(path))
|
|
914
|
+
.map((path) => readFileSync(path, 'utf-8')),
|
|
915
|
+
]);
|
|
916
|
+
// Q54.2: the rules the project registers with `defineRule`, from the same
|
|
917
|
+
// whole-project sweep, so a string rule nobody registered is caught.
|
|
918
|
+
const registeredRules = { names: new Set(), dynamic: false };
|
|
919
|
+
for (const path of collectCheckFiles(projectRoot, projectRoot, [
|
|
920
|
+
'.ts',
|
|
921
|
+
'.js',
|
|
922
|
+
'.mjs',
|
|
923
|
+
'.cjs',
|
|
924
|
+
'.vue',
|
|
925
|
+
]))
|
|
926
|
+
try {
|
|
927
|
+
const found = registeredRuleNames(readFileSync(path, 'utf-8'));
|
|
928
|
+
for (const name of found.names) registeredRules.names.add(name);
|
|
929
|
+
if (found.dynamic) registeredRules.dynamic = true;
|
|
930
|
+
} catch {
|
|
931
|
+
/* unreadable: fewer names, which only means more caution below */
|
|
932
|
+
registeredRules.dynamic = true;
|
|
933
|
+
}
|
|
934
|
+
const validateOptions = {
|
|
935
|
+
allowComponents: allowedComponents,
|
|
936
|
+
projectReads,
|
|
937
|
+
registeredRules,
|
|
938
|
+
};
|
|
574
939
|
|
|
575
940
|
const findings = [];
|
|
941
|
+
let suppressed = 0;
|
|
942
|
+
/** One warning per local `Bb*` component, unless allowlisted (Q53.18). */
|
|
943
|
+
const warnedLocal = new Set();
|
|
944
|
+
const warnLocal = (name, file, line) => {
|
|
945
|
+
if (explicitlyAllowed.has(name) || warnedLocal.has(name)) return;
|
|
946
|
+
warnedLocal.add(name);
|
|
947
|
+
warnings.push(localBbWarning(name, file, line));
|
|
948
|
+
};
|
|
576
949
|
/*
|
|
577
950
|
* Advisory only — see scripts/lib/hand-roll-hints.mjs. Hints never touch the
|
|
578
951
|
* exit code, so a guess can never fail a consumer's build. `--no-hints`
|
|
579
952
|
* silences them for anyone who finds them noisy.
|
|
580
953
|
*/
|
|
581
954
|
const hints = [];
|
|
955
|
+
/** Findings graded `severity: 'warning'` — printed, never fatal. */
|
|
956
|
+
const warnings = [];
|
|
582
957
|
const wantHints = !process.argv.includes('--no-hints');
|
|
583
958
|
for (const file of files) {
|
|
584
959
|
const relPath = relative(projectRoot, file);
|
|
@@ -586,8 +961,26 @@ function checkCommand(globs, { json: jsonMode, allowEmpty, allowComponents }) {
|
|
|
586
961
|
const { findings: fileFindings } = file.endsWith('.md')
|
|
587
962
|
? validateMarkdown(content, manifest, validateOptions)
|
|
588
963
|
: validateVueSnippet(content, manifest, validateOptions);
|
|
964
|
+
// Q46.9: a finding the author silenced for ESLint (`eslint-disable*`,
|
|
965
|
+
// usually with a reason) is silenced here too, or `check` cannot gate
|
|
966
|
+
// CI next to a lint step that passes. `.md` lines are fence-relative,
|
|
967
|
+
// and docs carry no directives, so only `.vue` files are filtered.
|
|
968
|
+
const isDisabled = file.endsWith('.vue')
|
|
969
|
+
? disabledChecker(content)
|
|
970
|
+
: () => false;
|
|
971
|
+
if (file.endsWith('.vue'))
|
|
972
|
+
for (const [name, line] of localBbImports(content))
|
|
973
|
+
warnLocal(name, relPath, line);
|
|
589
974
|
for (const finding of fileFindings) {
|
|
590
|
-
|
|
975
|
+
if (isDisabled(finding.line, ruleForFinding(finding))) {
|
|
976
|
+
suppressed++;
|
|
977
|
+
continue;
|
|
978
|
+
}
|
|
979
|
+
// A `severity: 'warning'` finding (Q53.15 C9b: a slot spelled the
|
|
980
|
+
// pre-reset way) is shown and suppressible, but never fails the run.
|
|
981
|
+
if (finding.severity === 'warning')
|
|
982
|
+
warnings.push({ file: relPath, ...finding });
|
|
983
|
+
else findings.push({ file: relPath, ...finding });
|
|
591
984
|
}
|
|
592
985
|
// .md files are documentation ABOUT components; a round <img> in a doc
|
|
593
986
|
// example is illustrative, not a hand-roll.
|
|
@@ -598,6 +991,61 @@ function checkCommand(globs, { json: jsonMode, allowEmpty, allowComponents }) {
|
|
|
598
991
|
}
|
|
599
992
|
}
|
|
600
993
|
|
|
994
|
+
for (const [name, file] of projectLocal) warnLocal(name, file);
|
|
995
|
+
|
|
996
|
+
// Q25: a hand import of `bitboss-ui/styles.css` while the runtime plugin
|
|
997
|
+
// injects it. Project-level — the answer needs the build config — so it
|
|
998
|
+
// reads the style and script files too; with explicit paths, only those.
|
|
999
|
+
const styleScan = globs.length
|
|
1000
|
+
? files
|
|
1001
|
+
: collectCheckFiles(
|
|
1002
|
+
projectRoot,
|
|
1003
|
+
projectRoot,
|
|
1004
|
+
HAND_IMPORTED_STYLES_EXTENSIONS
|
|
1005
|
+
);
|
|
1006
|
+
findings.push(
|
|
1007
|
+
...handImportedStylesFindings(
|
|
1008
|
+
projectRoot,
|
|
1009
|
+
styleScan.map((path) => ({ path, relPath: relative(projectRoot, path) }))
|
|
1010
|
+
)
|
|
1011
|
+
);
|
|
1012
|
+
// Q46.5: `.bb-*` selectors in the app's stylesheets (the `.vue` `<style>`
|
|
1013
|
+
// blocks are read by the validator above).
|
|
1014
|
+
for (const path of styleScan) {
|
|
1015
|
+
if (!/\.(?:css|scss|sass|less|pcss|postcss|styl)$/.test(path)) continue;
|
|
1016
|
+
const relPath = relative(projectRoot, path);
|
|
1017
|
+
const content = readFileSync(path, 'utf-8');
|
|
1018
|
+
for (const finding of [
|
|
1019
|
+
...cssClassFindings(content, manifest.cssSurface, { stylesheet: true }),
|
|
1020
|
+
// Q46.6: custom properties set where nothing reads them.
|
|
1021
|
+
...cssLocalFindings(content, manifest.cssSurface, manifest.localSurface, {
|
|
1022
|
+
stylesheet: true,
|
|
1023
|
+
projectReads,
|
|
1024
|
+
}),
|
|
1025
|
+
])
|
|
1026
|
+
findings.push({ file: relPath, ...finding });
|
|
1027
|
+
}
|
|
1028
|
+
|
|
1029
|
+
/** One line, so a silenced finding is never invisible. */
|
|
1030
|
+
const printSuppressed = () => {
|
|
1031
|
+
if (suppressed === 0) return;
|
|
1032
|
+
console.log(
|
|
1033
|
+
`[bitboss-ui] ${suppressed} finding(s) silenced by eslint-disable comments.`
|
|
1034
|
+
);
|
|
1035
|
+
};
|
|
1036
|
+
|
|
1037
|
+
/** Warning block, printed on success and on failure alike. Never fatal. */
|
|
1038
|
+
const printWarnings = () => {
|
|
1039
|
+
if (warnings.length === 0) return;
|
|
1040
|
+
console.log(
|
|
1041
|
+
`\n[bitboss-ui] ${warnings.length} warning(s) — not fatal, but likely wrong:`
|
|
1042
|
+
);
|
|
1043
|
+
for (const warning of warnings) {
|
|
1044
|
+
const at = warning.line != null ? `:${warning.line}` : '';
|
|
1045
|
+
console.log(` ⚠ ${warning.file}${at} ${warning.message}`);
|
|
1046
|
+
}
|
|
1047
|
+
};
|
|
1048
|
+
|
|
601
1049
|
/** Advisory block, printed on success and on failure alike. Never fatal. */
|
|
602
1050
|
const printHints = () => {
|
|
603
1051
|
if (hints.length === 0) return;
|
|
@@ -613,9 +1061,39 @@ function checkCommand(globs, { json: jsonMode, allowEmpty, allowComponents }) {
|
|
|
613
1061
|
);
|
|
614
1062
|
};
|
|
615
1063
|
|
|
1064
|
+
/*
|
|
1065
|
+
* Which API the verdict is against. Silent when it is the installed one —
|
|
1066
|
+
* that is the assumption, and a banner on every run trains people to skip
|
|
1067
|
+
* it. Loud under `--manifest`, because "12 findings" means something
|
|
1068
|
+
* completely different when it describes a version you have not installed
|
|
1069
|
+
* yet, and a scrollback with no marker is indistinguishable from a normal
|
|
1070
|
+
* run.
|
|
1071
|
+
*/
|
|
1072
|
+
const judgedAgainst = manifestOverride
|
|
1073
|
+
? manifestVersionOf(manifestPath)
|
|
1074
|
+
: packageVersion();
|
|
1075
|
+
if (manifestOverride && !jsonMode) {
|
|
1076
|
+
console.log(
|
|
1077
|
+
`[bitboss-ui] check: judging against bitboss-ui ${judgedAgainst} (--manifest), NOT the installed ${packageVersion()}.\n` +
|
|
1078
|
+
' Findings describe the version you are moving TO.'
|
|
1079
|
+
);
|
|
1080
|
+
}
|
|
1081
|
+
|
|
616
1082
|
if (jsonMode) {
|
|
617
1083
|
console.log(
|
|
618
|
-
JSON.stringify(
|
|
1084
|
+
JSON.stringify(
|
|
1085
|
+
{
|
|
1086
|
+
findings,
|
|
1087
|
+
warnings,
|
|
1088
|
+
hints,
|
|
1089
|
+
suppressed,
|
|
1090
|
+
files: files.length,
|
|
1091
|
+
manifestVersion: judgedAgainst,
|
|
1092
|
+
installedVersion: packageVersion(),
|
|
1093
|
+
},
|
|
1094
|
+
null,
|
|
1095
|
+
2
|
|
1096
|
+
)
|
|
619
1097
|
);
|
|
620
1098
|
if (findings.length > 0) process.exit(1);
|
|
621
1099
|
if (files.length === 0 && globs.length > 0 && !allowEmpty) process.exit(1);
|
|
@@ -646,10 +1124,14 @@ function checkCommand(globs, { json: jsonMode, allowEmpty, allowComponents }) {
|
|
|
646
1124
|
console.log(
|
|
647
1125
|
`[bitboss-ui] check OK — ${summarizeFileCounts(files)} file(s), zero unknown Bb* props/v-models/slots/nav-attrs.`
|
|
648
1126
|
);
|
|
1127
|
+
printSuppressed();
|
|
1128
|
+
printWarnings();
|
|
649
1129
|
printHints();
|
|
650
1130
|
return;
|
|
651
1131
|
}
|
|
652
1132
|
|
|
1133
|
+
printSuppressed();
|
|
1134
|
+
printWarnings();
|
|
653
1135
|
const fileCount = new Set(findings.map((f) => f.file)).size;
|
|
654
1136
|
console.error(
|
|
655
1137
|
`[bitboss-ui] check FAILED — ${findings.length} finding(s) across ${fileCount} file(s):`
|
|
@@ -668,8 +1150,13 @@ function checkCommand(globs, { json: jsonMode, allowEmpty, allowComponents }) {
|
|
|
668
1150
|
// were indistinguishable, so every automated fix had to re-parse the
|
|
669
1151
|
// file to place them. The line comes straight off the template AST.
|
|
670
1152
|
const at = finding.line != null ? `line ${finding.line}: ` : '';
|
|
1153
|
+
// A `fallthrough` finding is not a typo and may be doing something
|
|
1154
|
+
// today — a native listener reaching the root element. It still counts,
|
|
1155
|
+
// but marking it `✗` alongside a genuinely broken prop is what let one
|
|
1156
|
+
// migration report read a live `<BbDialog @close>` as dead code.
|
|
1157
|
+
const mark = finding.fallthrough ? '⚠' : '✗';
|
|
671
1158
|
console.error(
|
|
672
|
-
`
|
|
1159
|
+
` ${mark} ${at}${where ? `[${where.trim()}] ` : ''}${finding.message}`
|
|
673
1160
|
);
|
|
674
1161
|
if (finding.hint) console.error(` hint: ${finding.hint}`);
|
|
675
1162
|
}
|
|
@@ -688,16 +1175,18 @@ Usage:
|
|
|
688
1175
|
npx bitboss-ui <command>
|
|
689
1176
|
|
|
690
1177
|
Commands:
|
|
691
|
-
ai-init [--update] [--mcp]
|
|
1178
|
+
ai-init [--update] [--no-mcp]
|
|
692
1179
|
Inject AI-agent knowledge-base pointers into the current
|
|
693
1180
|
project (AGENTS.md, Cursor rules, Copilot instructions,
|
|
694
|
-
Claude skill, Windsurf rules)
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
1181
|
+
Claude skill, Windsurf rules), register the bitboss-ui MCP
|
|
1182
|
+
server for Claude Code (.mcp.json), Cursor
|
|
1183
|
+
(.cursor/mcp.json) and VS Code/Copilot (.vscode/mcp.json) —
|
|
1184
|
+
merges, never overwrites other servers — and install its
|
|
1185
|
+
optional peers with the project's package manager.
|
|
1186
|
+
\`--no-mcp\` skips the server and the install. Idempotent —
|
|
1187
|
+
safe to re-run after upgrades.
|
|
699
1188
|
check [glob…] [--json] [--allow-empty] [--allow-component <Name>]
|
|
700
|
-
[--no-hints]
|
|
1189
|
+
[--no-hints] [--manifest <path>] [--fix]
|
|
701
1190
|
Validate \`Bb*\` markup in .vue/.md files against the
|
|
702
1191
|
installed components.json manifest (unknown/removed props,
|
|
703
1192
|
bad v-models, unknown \`<template #slot>\` names,
|
|
@@ -710,6 +1199,36 @@ Commands:
|
|
|
710
1199
|
nothing (a typo'd CI path validates zero files silently) —
|
|
711
1200
|
pass \`--allow-empty\` when an empty match is expected.
|
|
712
1201
|
|
|
1202
|
+
It also writes your project's \`bitboss-ui.d.ts\` (the
|
|
1203
|
+
file the Vite plugin writes on start) from the variant
|
|
1204
|
+
options in vite.config / nuxt.config, so a newly
|
|
1205
|
+
registered variant name type-checks before Vite runs.
|
|
1206
|
+
Left alone when the options are not inline literals, and
|
|
1207
|
+
under \`--manifest\`.
|
|
1208
|
+
|
|
1209
|
+
\`--fix\` first applies the ESLint plugin's fixes (the
|
|
1210
|
+
registered v2→v3 renames, polarity flips and value
|
|
1211
|
+
remaps) to the matched .vue files with ONLY the
|
|
1212
|
+
bitboss-ui rules — your own ESLint config is not used —
|
|
1213
|
+
then reports what is left. Needs \`eslint\` and
|
|
1214
|
+
\`vue-eslint-parser\` in the project.
|
|
1215
|
+
|
|
1216
|
+
Honours ESLint disable comments in .vue files: a finding
|
|
1217
|
+
silenced for the matching \`bitboss-ui/*\` rule (or by a
|
|
1218
|
+
bare \`eslint-disable\`) is not reported, only counted:
|
|
1219
|
+
<!-- eslint-disable-next-line bitboss-ui/require-table-slot-prop -- why -->
|
|
1220
|
+
|
|
1221
|
+
\`--manifest <path>\` judges against another version's
|
|
1222
|
+
components.json instead of the installed one — the answer
|
|
1223
|
+
to "which of my files break if I upgrade", BEFORE you
|
|
1224
|
+
upgrade. The banner names both versions so a findings list
|
|
1225
|
+
is never mistaken for one about your current install.
|
|
1226
|
+
npm pack bitboss-ui@3.0.0-beta.21
|
|
1227
|
+
tar -xzf bitboss-ui-3.0.0-beta.21.tgz
|
|
1228
|
+
npx bitboss-ui check --manifest package/dist/ai/components.json
|
|
1229
|
+
A path, not a version, on purpose: fetching one would put
|
|
1230
|
+
a registry call inside a validator people run in CI.
|
|
1231
|
+
|
|
713
1232
|
\`--allow-component <Name>\` (repeatable) exempts a
|
|
714
1233
|
component your APP owns whose name starts with \`Bb\` —
|
|
715
1234
|
the prefix is a convention, not proof of provenance.
|
|
@@ -719,20 +1238,101 @@ Commands:
|
|
|
719
1238
|
Same option name as the ESLint rules' \`allowComponents\`,
|
|
720
1239
|
so both gates configure alike.
|
|
721
1240
|
|
|
722
|
-
\`--json\` prints \`{ findings: [...],
|
|
1241
|
+
\`--json\` prints \`{ findings: [...], warnings: [...], hints: [...],
|
|
1242
|
+
suppressed, files, manifestVersion, installedVersion }\`.
|
|
723
1243
|
Each finding: \`{ file, line, component, attr, kind,
|
|
724
1244
|
message, hint?, to? }\` (plus \`fenceIndex\`/\`fenceInfo\`
|
|
725
1245
|
inside a markdown fence; \`line\` is absolute in the file).
|
|
726
|
-
\`kind\` is one of: \`removed-prop\` (a
|
|
727
|
-
|
|
1246
|
+
\`kind\` is one of: \`removed-prop\` (a recorded break on a
|
|
1247
|
+
prop or a \`pt\` key, v2→v3 or a v3 beta; \`to\` is the new
|
|
1248
|
+
name when there is one and \`--fix\` writes it, else the
|
|
1249
|
+
message says what to do), \`unknown-prop\` (not a v3 prop of that component;
|
|
728
1250
|
may never have been one — see the legend the text output
|
|
729
|
-
prints), \`unknown-
|
|
1251
|
+
prints), \`unknown-component\` (a \`Bb*\` tag the
|
|
1252
|
+
manifest doesn't have; \`attr\` is the tag),
|
|
1253
|
+
\`unknown-model\`, \`unknown-event\`, \`unknown-slot\`,
|
|
1254
|
+
\`unknown-pt-key\` (a key of the \`pt\` object form that
|
|
1255
|
+
matches no part / state; \`to\` when the part was renamed),
|
|
730
1256
|
\`no-default-slot\`, \`inert-nav-attr\`,
|
|
731
|
-
\`
|
|
732
|
-
|
|
1257
|
+
\`nameless-control\` (an icon-only BbButton or BbBadge,
|
|
1258
|
+
or a BbProgress, with no accessible name),
|
|
1259
|
+
\`removed-css-local\` (a component CSS local the
|
|
1260
|
+
library removed, e.g. \`--day-slot-allowance\`),
|
|
1261
|
+
\`private-import\` (an import from inside the package's
|
|
1262
|
+
\`dist/\`), \`not-exported-type\` (a \`Pt*\` pt type
|
|
1263
|
+
imported from bitboss-ui: type pt through
|
|
1264
|
+
\`<Component>Props['pt']\` instead),
|
|
1265
|
+
\`missing-key\` / \`duplicate-row-text\` (a
|
|
1266
|
+
BbDropdown row or group that needs a \`key\`: selectable,
|
|
1267
|
+
or identical keyless text in one group),
|
|
1268
|
+
\`unknown-variant\` (a variant name from another
|
|
1269
|
+
library, e.g. \`danger\` on BbAlert / BbBadge; the
|
|
1270
|
+
message names ours),
|
|
1271
|
+
\`duplicate-field-identity\` (two validated fields in
|
|
1272
|
+
one \`BbForm\` on the same path: the same \`name\`,
|
|
1273
|
+
or the same label with no \`name\`),
|
|
1274
|
+
\`rules-ignored-by-schema\` (a validated field's
|
|
1275
|
+
\`rules\` inside a \`BbForm\` that has a \`schema\`:
|
|
1276
|
+
vee-validate reads only the schema),
|
|
1277
|
+
\`row-without-name\` (a form control in a \`v-for\`
|
|
1278
|
+
inside a \`BbForm\` with a bound label and no \`name\`),
|
|
1279
|
+
\`retired-entrypoint\` (an import from
|
|
1280
|
+
\`bitboss-ui/validated\`, retired: everything is in
|
|
1281
|
+
\`bitboss-ui\`; \`--fix\` rewrites it in .vue files),
|
|
1282
|
+
\`unregistered-rule\` (a string rule no
|
|
1283
|
+
\`defineRule\` in the project registers; silent when
|
|
1284
|
+
the project registers rules in a loop),
|
|
1285
|
+
\`wrapper-drops-props\` (a wrapper whose
|
|
1286
|
+
\`defineProps\` declares a \`Bb*Props\` type, bare,
|
|
1287
|
+
\`Omit\` or \`Pick\`, and never binds or reads some
|
|
1288
|
+
of those props: a caller's value is dropped),
|
|
1289
|
+
\`renamed-slot\` (a slot the library renamed;
|
|
1290
|
+
\`--fix\` rewrites it), \`missing-partner-prop\`,
|
|
1291
|
+
\`partner-prop\`,
|
|
1292
|
+
\`validated-only-prop\`, \`object-items-without-text\`
|
|
1293
|
+
(object \`items\` with no \`item-text\`; reads only
|
|
1294
|
+
an inline array, or a \`const\` array, \`ref([…])\` or
|
|
1295
|
+
\`reactive([…])\` in the same file's
|
|
1296
|
+
\`<script setup>\`), \`reserved-key\` (a key
|
|
1297
|
+
whose slot name is one of the component's own slots,
|
|
1298
|
+
e.g. a BbTable column keyed \`actions\`; read from the
|
|
1299
|
+
manifest, same-file keys only), \`hand-imported-styles\`
|
|
1300
|
+
(\`bitboss-ui/styles.css\` imported in CSS, a script or
|
|
1301
|
+
Nuxt's \`css\` while \`injectStyles\` is on: delete it;
|
|
1302
|
+
read only when vite.config / nuxt.config says so),
|
|
1303
|
+
\`unknown-class\` (a selector on a \`.bb-*\` class the
|
|
1304
|
+
library does not render, in a stylesheet or a
|
|
1305
|
+
\`<style>\` block; \`suggestion\` is the nearest real
|
|
1306
|
+
one), \`renamed-class\` (a class the library renamed;
|
|
1307
|
+
\`to\` is its successor). Your own classes are never
|
|
1308
|
+
read, nor a \`bb-*\` class the same file adds itself
|
|
1309
|
+
(\`class\`, \`:class\`, \`pt:*\`), \`inert-token\` (a
|
|
1310
|
+
\`--bb-*\` SET that the library neither declares nor
|
|
1311
|
+
reads; \`suggestion\` = the nearest token),
|
|
1312
|
+
\`inert-local\` (a local set on a \`.bb-*\` block whose
|
|
1313
|
+
component, and what it mounts, never reads it; \`to\`
|
|
1314
|
+
when it was renamed). A local on your own ancestor
|
|
1315
|
+
element, or one your CSS reads, is never judged.
|
|
1316
|
+
\`warnings[]\` (never fail the run) use the same shape with
|
|
1317
|
+
\`severity: "warning"\`: \`likely-squashed-slot\` (a slot
|
|
1318
|
+
name that looks like a camelCase key squashed, e.g.
|
|
1319
|
+
\`#createdat\`), \`local-bb-component\` (your own
|
|
1320
|
+
component uses the \`Bb\` prefix; rename it).
|
|
1321
|
+
changelog [--since <version>] [--until <version>] [--json]
|
|
1322
|
+
Breaking changes between two releases — "what breaks if I
|
|
1323
|
+
bump". \`--since\` is the version you are ON, and is
|
|
1324
|
+
exclusive. With no range, every break in the v2 → v3
|
|
1325
|
+
upgrade. Only BREAKING changes are tracked, so an empty
|
|
1326
|
+
result means nothing breaks, not that nothing changed.
|
|
1327
|
+
npx bitboss-ui changelog --since 3.0.0-beta.20
|
|
1328
|
+
Pair it with \`check --manifest\` to turn the list into the
|
|
1329
|
+
files in YOUR app that break.
|
|
1330
|
+
|
|
733
1331
|
mcp Start a stdio MCP server exposing the dist/ai knowledge
|
|
734
|
-
base (search_components, get_component,
|
|
735
|
-
|
|
1332
|
+
base (search_docs, search_components, get_component,
|
|
1333
|
+
get_composable, list_tokens, list_guides, get_guide,
|
|
1334
|
+
list_changes, list_recipes, get_recipe, validate) to
|
|
1335
|
+
MCP-capable agent harnesses.
|
|
736
1336
|
help Show this help.
|
|
737
1337
|
`);
|
|
738
1338
|
}
|
|
@@ -763,9 +1363,11 @@ switch (command) {
|
|
|
763
1363
|
case 'ai-init': {
|
|
764
1364
|
const { values } = parseCommandArgs(command, commandArgs, {
|
|
765
1365
|
update: { type: 'boolean' },
|
|
766
|
-
|
|
1366
|
+
// The MCP server is registered by default: people ran ai-init, got
|
|
1367
|
+
// the pointers, and never learned the server existed.
|
|
1368
|
+
'no-mcp': { type: 'boolean' },
|
|
767
1369
|
});
|
|
768
|
-
aiInit({ mcp: values
|
|
1370
|
+
aiInit({ mcp: !values['no-mcp'] });
|
|
769
1371
|
break;
|
|
770
1372
|
}
|
|
771
1373
|
case 'check': {
|
|
@@ -776,16 +1378,33 @@ switch (command) {
|
|
|
776
1378
|
json: { type: 'boolean' },
|
|
777
1379
|
'allow-empty': { type: 'boolean' },
|
|
778
1380
|
'allow-component': { type: 'string', multiple: true },
|
|
1381
|
+
fix: { type: 'boolean' },
|
|
1382
|
+
manifest: { type: 'string' },
|
|
779
1383
|
// Accepted and ignored here — read straight off argv inside
|
|
780
1384
|
// checkCommand, but parseArgs is strict, so it must be declared.
|
|
781
1385
|
'no-hints': { type: 'boolean' },
|
|
782
1386
|
},
|
|
783
1387
|
{ allowPositionals: true }
|
|
784
1388
|
);
|
|
785
|
-
checkCommand(positionals, {
|
|
1389
|
+
await checkCommand(positionals, {
|
|
1390
|
+
fix: values.fix ?? false,
|
|
786
1391
|
json: values.json ?? false,
|
|
787
1392
|
allowEmpty: values['allow-empty'] ?? false,
|
|
788
1393
|
allowComponents: values['allow-component'] ?? [],
|
|
1394
|
+
manifest: values.manifest,
|
|
1395
|
+
});
|
|
1396
|
+
break;
|
|
1397
|
+
}
|
|
1398
|
+
case 'changelog': {
|
|
1399
|
+
const { values } = parseCommandArgs(command, commandArgs, {
|
|
1400
|
+
since: { type: 'string' },
|
|
1401
|
+
until: { type: 'string' },
|
|
1402
|
+
json: { type: 'boolean' },
|
|
1403
|
+
});
|
|
1404
|
+
changelogCommand({
|
|
1405
|
+
since: values.since,
|
|
1406
|
+
until: values.until,
|
|
1407
|
+
json: values.json ?? false,
|
|
789
1408
|
});
|
|
790
1409
|
break;
|
|
791
1410
|
}
|
|
@@ -802,9 +1421,34 @@ switch (command) {
|
|
|
802
1421
|
({ main } = await import('./bitboss-ui-mcp.mjs'));
|
|
803
1422
|
} catch (error) {
|
|
804
1423
|
if (error?.code !== 'ERR_MODULE_NOT_FOUND') throw error;
|
|
1424
|
+
// Running from an npx cache is a DIFFERENT failure wearing the same
|
|
1425
|
+
// error: the peers resolve relative to the package we were launched
|
|
1426
|
+
// from, so a cached copy can never see the project's node_modules no
|
|
1427
|
+
// matter what is installed there. Telling that user to install peers
|
|
1428
|
+
// they already have is what sent a consumer down a dead end
|
|
1429
|
+
// (2026-09-09). `ai-init` now writes the local binary instead
|
|
1430
|
+
// of `npx`, so the fix is to rewrite the config.
|
|
1431
|
+
const fromNpxCache = /[/\\]_npx[/\\]/.test(
|
|
1432
|
+
fileURLToPath(import.meta.url)
|
|
1433
|
+
);
|
|
1434
|
+
const projectHasPeers = missingMcpPeers(process.cwd()).length === 0;
|
|
1435
|
+
if (fromNpxCache && projectHasPeers) {
|
|
1436
|
+
console.error(
|
|
1437
|
+
'bitboss-ui mcp was launched through `npx`, which runs it from the npx cache —\n' +
|
|
1438
|
+
'its optional peers resolve there, not in your project, so the server cannot start\n' +
|
|
1439
|
+
`even though this project has them installed (${MCP_PEERS.join(', ')}).\n\n` +
|
|
1440
|
+
'Fix the harness config to invoke the installed binary:\n\n' +
|
|
1441
|
+
' npx bitboss-ui ai-init\n\n' +
|
|
1442
|
+
`which writes \`node ${MCP_BIN_PATH} mcp\`. To run it right now:\n\n` +
|
|
1443
|
+
` node ${MCP_BIN_PATH} mcp\n\n` +
|
|
1444
|
+
`Resolution failed with: ${error.message}`
|
|
1445
|
+
);
|
|
1446
|
+
process.exitCode = 1;
|
|
1447
|
+
break;
|
|
1448
|
+
}
|
|
805
1449
|
console.error(
|
|
806
1450
|
'bitboss-ui mcp needs two optional peer dependencies that are not installed:\n' +
|
|
807
|
-
|
|
1451
|
+
`\n npm i -D ${MCP_PEERS.join(' ')}\n\n` +
|
|
808
1452
|
'They are optional because they are ~12 MB and only this subcommand uses them.\n' +
|
|
809
1453
|
`Resolution failed with: ${error.message}`
|
|
810
1454
|
);
|