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
|
@@ -6,98 +6,192 @@
|
|
|
6
6
|
|
|
7
7
|
```vue
|
|
8
8
|
<template>
|
|
9
|
-
<
|
|
9
|
+
<CommonField
|
|
10
10
|
:id="id"
|
|
11
11
|
class="bb-number-input"
|
|
12
12
|
:clearable="isClearable"
|
|
13
13
|
:compact="compact"
|
|
14
14
|
:description="description"
|
|
15
|
-
:direction="direction"
|
|
16
15
|
:disabled="disabled"
|
|
17
|
-
:errors="
|
|
16
|
+
:errors="fieldErrors"
|
|
18
17
|
:has-errors="hasErrors"
|
|
19
18
|
:has-value="hasValue"
|
|
20
|
-
:has-
|
|
19
|
+
:has-warnings="hasWarnings"
|
|
21
20
|
:hide-label="hideLabel"
|
|
22
21
|
:hint="hint"
|
|
23
22
|
:label="label"
|
|
24
23
|
:label-mode="resolvedLabelMode"
|
|
25
24
|
:label-position="labelPosition"
|
|
25
|
+
:layout="layout"
|
|
26
26
|
:loading="loading"
|
|
27
|
-
:model-value="modelValue"
|
|
28
27
|
:name="name"
|
|
28
|
+
:passthrough="passthrough"
|
|
29
29
|
:readonly="readonly"
|
|
30
30
|
:reverse="reverse"
|
|
31
|
+
:show-asterisk="showAsterisk"
|
|
31
32
|
:show-hint="showHint"
|
|
32
33
|
:warnings="warnings"
|
|
34
|
+
v-bind="passthrough.forwardAttrs"
|
|
33
35
|
>
|
|
34
36
|
<template #label="data"><slot name="label" v-bind="data"></slot></template>
|
|
35
|
-
<template
|
|
36
|
-
|
|
37
|
-
|
|
37
|
+
<template v-if="$slots.description" #description="data"
|
|
38
|
+
><slot name="description" v-bind="data"></slot
|
|
39
|
+
></template>
|
|
40
|
+
<template
|
|
41
|
+
#input="{
|
|
42
|
+
id: fieldId,
|
|
43
|
+
hasErrors: fieldHasErrors,
|
|
44
|
+
hasWarnings: fieldHasWarnings,
|
|
45
|
+
ariaDescribedby,
|
|
46
|
+
ariaLabelledby,
|
|
47
|
+
}"
|
|
48
|
+
>
|
|
49
|
+
<CommonFieldInput
|
|
38
50
|
:append:icon="props['append:icon']"
|
|
39
|
-
:aria-describedby="ariaDescribedby"
|
|
40
|
-
:autocomplete="autocomplete"
|
|
41
|
-
:autofocus="autofocus"
|
|
42
51
|
:clearable="clearable"
|
|
43
52
|
:compact="compact"
|
|
44
53
|
:disabled="disabled"
|
|
45
|
-
:has-errors="
|
|
46
|
-
:has-
|
|
54
|
+
:has-errors="fieldHasErrors"
|
|
55
|
+
:has-value="hasValue"
|
|
56
|
+
:has-warnings="fieldHasWarnings"
|
|
47
57
|
:loading="loading"
|
|
48
|
-
:
|
|
49
|
-
:max-precision="maxPrecision"
|
|
50
|
-
:min="min"
|
|
51
|
-
:model-value="modelValue"
|
|
52
|
-
:name="name"
|
|
53
|
-
:placeholder="placeholder"
|
|
58
|
+
:passthrough="passthrough"
|
|
54
59
|
:prepend:icon="props['prepend:icon']"
|
|
55
60
|
:readonly="readonly"
|
|
56
|
-
:
|
|
57
|
-
:
|
|
58
|
-
|
|
61
|
+
:reserve-append-space="clearable"
|
|
62
|
+
:variant="variant"
|
|
63
|
+
@click:clear="emit('update:modelValue', null)"
|
|
59
64
|
>
|
|
60
|
-
<template #
|
|
61
|
-
><slot
|
|
65
|
+
<template #prepend:outer
|
|
66
|
+
><slot
|
|
67
|
+
:decrease="decrease"
|
|
68
|
+
:increase="increase"
|
|
69
|
+
name="prepend:outer"
|
|
70
|
+
></slot
|
|
71
|
+
></template>
|
|
72
|
+
<template #prepend
|
|
73
|
+
><slot :decrease="decrease" :increase="increase" name="prepend"
|
|
62
74
|
/></template>
|
|
63
|
-
<template
|
|
64
|
-
|
|
65
|
-
><slot name="prefix" v-bind="data"
|
|
75
|
+
<template v-if="$slots.prefix" #prefix
|
|
76
|
+
><slot :decrease="decrease" :increase="increase" name="prefix"
|
|
66
77
|
/></template>
|
|
67
|
-
|
|
68
|
-
|
|
78
|
+
<!-- eslint-disable vue/attributes-order -- `pt` binds LAST so a consumer listener runs after ours (PASSTHROUGH.md T17) -->
|
|
79
|
+
<input
|
|
80
|
+
:id="fieldId"
|
|
81
|
+
ref="input"
|
|
82
|
+
:aria-describedby="ariaDescribedby"
|
|
83
|
+
:aria-disabled="disabled || undefined"
|
|
84
|
+
:aria-invalid="fieldHasErrors || undefined"
|
|
85
|
+
:aria-labelledby="ariaLabelledby"
|
|
86
|
+
:aria-readonly="readonly || undefined"
|
|
87
|
+
:aria-valuemax="max !== Number.MAX_SAFE_INTEGER ? max : undefined"
|
|
88
|
+
:aria-valuemin="min !== Number.MIN_SAFE_INTEGER ? min : undefined"
|
|
89
|
+
:aria-valuenow="isNotNil(fieldModel) ? fieldModel : undefined"
|
|
90
|
+
:autocomplete="autocomplete"
|
|
91
|
+
:autofocus="autofocus"
|
|
92
|
+
class="bb-number-input__input"
|
|
93
|
+
:disabled="disabled"
|
|
94
|
+
inputmode="decimal"
|
|
95
|
+
:name="name"
|
|
96
|
+
:placeholder="placeholder"
|
|
97
|
+
:readonly="readonly"
|
|
98
|
+
:required="fieldRequired"
|
|
99
|
+
role="spinbutton"
|
|
100
|
+
size="1"
|
|
101
|
+
type="text"
|
|
102
|
+
@input.stop="onInput"
|
|
103
|
+
v-bind="mergeProps(passthrough.controlAttrs, inputBindings)"
|
|
104
|
+
/>
|
|
105
|
+
<!-- eslint-enable vue/attributes-order -->
|
|
106
|
+
<template #append
|
|
107
|
+
><slot :decrease="decrease" :increase="increase" name="append"
|
|
69
108
|
/></template>
|
|
70
|
-
<template v-if="$slots.suffix" #suffix
|
|
71
|
-
><slot
|
|
109
|
+
<template v-if="$slots.suffix" #suffix
|
|
110
|
+
><slot :decrease="decrease" :increase="increase" name="suffix"
|
|
72
111
|
/></template>
|
|
73
|
-
<template #
|
|
74
|
-
><slot
|
|
75
|
-
|
|
76
|
-
|
|
112
|
+
<template #append:outer
|
|
113
|
+
><slot
|
|
114
|
+
:decrease="decrease"
|
|
115
|
+
:increase="increase"
|
|
116
|
+
name="append:outer"
|
|
117
|
+
></slot
|
|
118
|
+
></template>
|
|
119
|
+
</CommonFieldInput>
|
|
77
120
|
</template>
|
|
78
|
-
</
|
|
121
|
+
</CommonField>
|
|
79
122
|
</template>
|
|
80
123
|
|
|
81
124
|
<script setup lang="ts">
|
|
82
|
-
import
|
|
83
|
-
import
|
|
84
|
-
|
|
85
|
-
|
|
125
|
+
import { removedPropsFor } from '@/deprecation/removedProps';
|
|
126
|
+
import { warnRemovedAttrs } from '@/utilities/functions/warnRemovedAttrs';
|
|
127
|
+
/**
|
|
128
|
+
* BbNumberInput
|
|
129
|
+
*
|
|
130
|
+
* Numeric text input with resilient sanitization and editing ergonomics.
|
|
131
|
+
*
|
|
132
|
+
* Key behaviors:
|
|
133
|
+
* - Accepts free-form keyboard input and normalizes progressively.
|
|
134
|
+
* - Preserves intermediate states users type while composing a number
|
|
135
|
+
* (for example ".", "-.", "12.").
|
|
136
|
+
* - Emits `null` for empty/invalid input and `number` for finite values.
|
|
137
|
+
* - Clamps output to `max` while typing and to `min` on blur; limits
|
|
138
|
+
* decimals via `maxPrecision`.
|
|
139
|
+
* - Supports keyboard stepping with ArrowUp/ArrowDown.
|
|
140
|
+
* - Hands `increase()` / `decrease()` to every slot for step controls.
|
|
141
|
+
*/
|
|
142
|
+
import { computed, mergeProps, onMounted, ref, useAttrs, watch } from 'vue';
|
|
143
|
+
import CommonField from '../CommonField/CommonField.vue';
|
|
144
|
+
import CommonFieldInput from '../CommonFieldInput/CommonFieldInput.vue';
|
|
145
|
+
import { useConfig } from '@/composables/useConfig';
|
|
146
|
+
import { useFormBinding } from '@/composables/useFormBinding';
|
|
147
|
+
import {
|
|
148
|
+
formControlPtActive,
|
|
149
|
+
TEXT_CONTROL_NATIVE_ATTRS,
|
|
150
|
+
usePassthrough,
|
|
151
|
+
} from '@/composables/usePassthrough';
|
|
152
|
+
import { clamp } from '@/utilities/functions/clamp';
|
|
153
|
+
import { clampPrecision } from '@/utilities/functions/clampPrecision';
|
|
154
|
+
import { isNil } from '@/utilities/functions/isNil';
|
|
86
155
|
import { isNotNil } from '@/utilities/functions/isNotNil';
|
|
87
|
-
import
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
156
|
+
import {
|
|
157
|
+
BB_NUMBER_INPUT_PT,
|
|
158
|
+
type BbNumberInputProps,
|
|
159
|
+
type BbNumberInputEvents,
|
|
160
|
+
type BbNumberInputSlots,
|
|
91
161
|
} from './types';
|
|
92
|
-
export type { BbNumberInputProps, BbNumberInputEvents, BbNumberInputSlots };
|
|
93
162
|
|
|
94
|
-
|
|
95
|
-
|
|
163
|
+
defineOptions({ inheritAttrs: false });
|
|
164
|
+
// `min` / `max` / `step` / `maxPrecision` drive the clamp and step math and
|
|
165
|
+
// `aria-valuemin` / `aria-valuemax` (the SAFE_INTEGER sentinels stay silent),
|
|
166
|
+
// so they are defaulted here, before anything reads them.
|
|
167
|
+
const declaredProps = withDefaults(defineProps<BbNumberInputProps>(), {
|
|
168
|
+
autocomplete: 'off',
|
|
169
|
+
max: Number.MAX_SAFE_INTEGER,
|
|
170
|
+
maxPrecision: 8,
|
|
171
|
+
min: Number.MIN_SAFE_INTEGER,
|
|
172
|
+
step: 1,
|
|
96
173
|
});
|
|
97
174
|
|
|
98
|
-
const
|
|
99
|
-
|
|
175
|
+
const declaredEmit = defineEmits<BbNumberInputEvents>();
|
|
100
176
|
defineSlots<BbNumberInputSlots>();
|
|
177
|
+
// Inside a BbForm the field joins it (Q54.4): `props` / `emit` are bound.
|
|
178
|
+
const {
|
|
179
|
+
props,
|
|
180
|
+
emit,
|
|
181
|
+
showAsterisk,
|
|
182
|
+
errors: fieldErrors,
|
|
183
|
+
required: fieldRequired,
|
|
184
|
+
model: fieldModel,
|
|
185
|
+
} = useFormBinding(declaredProps, declaredEmit, {
|
|
186
|
+
componentName: 'BbNumberInput',
|
|
187
|
+
identifierFallback: () => declaredProps.label,
|
|
188
|
+
emptyValue: () => null,
|
|
189
|
+
leaveOn: 'blur',
|
|
190
|
+
});
|
|
191
|
+
if (process.env.NODE_ENV !== 'production')
|
|
192
|
+
warnRemovedAttrs('BbNumberInput', removedPropsFor('BbNumberInput'));
|
|
193
|
+
const config = useConfig();
|
|
194
|
+
export type { BbNumberInputProps, BbNumberInputEvents, BbNumberInputSlots };
|
|
101
195
|
|
|
102
196
|
const active = ref(false);
|
|
103
197
|
const showHint = computed(() => props.persistentHint || active.value);
|
|
@@ -110,11 +204,246 @@ const resolvedLabelMode = computed(
|
|
|
110
204
|
);
|
|
111
205
|
|
|
112
206
|
/**
|
|
113
|
-
*
|
|
207
|
+
* Passthrough (plans/passthrough/BbNumberInput.md). The frame binds `root` /
|
|
208
|
+
* `label` / `description` / `message` / `hint`, the box row binds `box` /
|
|
209
|
+
* `icon` / `spinner` / `prefix` / `suffix` / `clear`, and `input` lands on the
|
|
210
|
+
* native control below. `hasValue` follows this control's own notion of a
|
|
211
|
+
* value.
|
|
212
|
+
*/
|
|
213
|
+
const passthrough = usePassthrough({
|
|
214
|
+
component: 'BbNumberInput',
|
|
215
|
+
attrs: useAttrs(),
|
|
216
|
+
controlAttrs: TEXT_CONTROL_NATIVE_ATTRS,
|
|
217
|
+
props,
|
|
218
|
+
parts: BB_NUMBER_INPUT_PT.parts,
|
|
219
|
+
states: BB_NUMBER_INPUT_PT.states,
|
|
220
|
+
active: formControlPtActive(props, () => hasValue.value),
|
|
221
|
+
});
|
|
222
|
+
|
|
223
|
+
const input = ref<HTMLInputElement | null>(null);
|
|
224
|
+
|
|
225
|
+
/**
|
|
226
|
+
* Applies precision and range guards to finalized numeric values. While the
|
|
227
|
+
* user types, only `max` applies (`withMin: false`): the digits of 15 pass
|
|
228
|
+
* through 1, and snapping that to a `min` of 10 would turn "15" into "105".
|
|
229
|
+
* `min` applies on blur.
|
|
230
|
+
*/
|
|
231
|
+
const normalizeNumericValue = (value: number, withMin = true): number => {
|
|
232
|
+
const precisionAligned = Number(
|
|
233
|
+
clampPrecision(value.toString(), props.maxPrecision)
|
|
234
|
+
);
|
|
235
|
+
return clamp(precisionAligned, withMin ? props.min : -Infinity, props.max);
|
|
236
|
+
};
|
|
237
|
+
|
|
238
|
+
/**
|
|
239
|
+
* On blur, raises a value typed below `min` to `min`, in the field and in the
|
|
240
|
+
* model.
|
|
241
|
+
*/
|
|
242
|
+
const applyMinOnBlur = () => {
|
|
243
|
+
if (!input.value?.value) return;
|
|
244
|
+
const typed = Number(makeValidNumberString(input.value.value));
|
|
245
|
+
if (!Number.isFinite(typed) || typed >= props.min) return;
|
|
246
|
+
input.value.value = props.min.toString();
|
|
247
|
+
emit('update:modelValue', props.min);
|
|
248
|
+
};
|
|
249
|
+
|
|
250
|
+
/**
|
|
251
|
+
* Resolves the next stepped value relative to the current model.
|
|
252
|
+
*/
|
|
253
|
+
const nextStep = (value: number) => {
|
|
254
|
+
const base = Number(props.modelValue || 0);
|
|
255
|
+
return normalizeNumericValue(base + value);
|
|
256
|
+
};
|
|
257
|
+
|
|
258
|
+
/**
|
|
259
|
+
* Decrements value by `step` and emits both semantic and model events.
|
|
260
|
+
*/
|
|
261
|
+
const decrease = () => {
|
|
262
|
+
if (props.disabled || props.readonly) return;
|
|
263
|
+
const valueToEmit = nextStep(props.step * -1);
|
|
264
|
+
emit('decrease', valueToEmit);
|
|
265
|
+
emit('update:modelValue', valueToEmit);
|
|
266
|
+
};
|
|
267
|
+
|
|
268
|
+
/**
|
|
269
|
+
* Increments value by `step` and emits both semantic and model events.
|
|
270
|
+
*/
|
|
271
|
+
const increase = () => {
|
|
272
|
+
if (props.disabled || props.readonly) return;
|
|
273
|
+
const valueToEmit = nextStep(props.step);
|
|
274
|
+
emit('increase', valueToEmit);
|
|
275
|
+
emit('update:modelValue', valueToEmit);
|
|
276
|
+
};
|
|
277
|
+
|
|
278
|
+
/**
|
|
279
|
+
* Input normalization pipeline.
|
|
280
|
+
*
|
|
281
|
+
* Order matters:
|
|
282
|
+
* 1) Limit total length to guard against very large pasted payloads.
|
|
283
|
+
* 2) Normalize decimal separator (comma -> period).
|
|
284
|
+
* 3) Strip unsupported characters and duplicate separators/signs.
|
|
285
|
+
* 4) Keep transient but valid-in-progress states (like "." -> "0.").
|
|
286
|
+
* 5) Clamp parsable values to `min`/`max`.
|
|
287
|
+
* 6) Emit normalized numeric model value.
|
|
288
|
+
* 7) Sync visible input and preserve caret position when transformed.
|
|
289
|
+
*/
|
|
290
|
+
const onInput = (event: Event) => {
|
|
291
|
+
if (!input.value) return;
|
|
292
|
+
if (event.target instanceof HTMLInputElement) {
|
|
293
|
+
const value = event.target.value;
|
|
294
|
+
const selectionStart = event.target.selectionStart;
|
|
295
|
+
const selectionEnd = event.target.selectionEnd;
|
|
296
|
+
emit('input', event);
|
|
297
|
+
|
|
298
|
+
let nextInputValue = value;
|
|
299
|
+
nextInputValue = limitLength(nextInputValue);
|
|
300
|
+
nextInputValue = replaceCommaWithPeriod(nextInputValue);
|
|
301
|
+
nextInputValue = removeUnwantedSymbols(nextInputValue);
|
|
302
|
+
nextInputValue = defaultPad(nextInputValue);
|
|
303
|
+
if (isParsableString(nextInputValue)) {
|
|
304
|
+
nextInputValue = clampValue(nextInputValue);
|
|
305
|
+
}
|
|
306
|
+
let valueToEmit: null | number = null;
|
|
307
|
+
if (nextInputValue) {
|
|
308
|
+
const validString = makeValidNumberString(nextInputValue);
|
|
309
|
+
const parsedValue = Number(validString);
|
|
310
|
+
if (Number.isFinite(parsedValue)) {
|
|
311
|
+
valueToEmit = normalizeNumericValue(parsedValue, false);
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
emit('update:modelValue', valueToEmit);
|
|
315
|
+
const clamped = clampPrecision(nextInputValue, props.maxPrecision);
|
|
316
|
+
if (input.value.value !== clamped) {
|
|
317
|
+
input.value.value = clamped;
|
|
318
|
+
if (selectionStart !== null && selectionEnd !== null) {
|
|
319
|
+
const delta = clamped.length - value.length;
|
|
320
|
+
const nextStart = Math.max(0, selectionStart + delta);
|
|
321
|
+
const nextEnd = Math.max(0, selectionEnd + delta);
|
|
322
|
+
input.value.setSelectionRange(nextStart, nextEnd);
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
};
|
|
327
|
+
|
|
328
|
+
/**
|
|
329
|
+
* Handles keyboard step controls while still propagating keydown events.
|
|
330
|
+
*/
|
|
331
|
+
const onKeydown = (event: KeyboardEvent) => {
|
|
332
|
+
if (event.key === 'ArrowUp') {
|
|
333
|
+
event.preventDefault();
|
|
334
|
+
increase();
|
|
335
|
+
} else if (event.key === 'ArrowDown') {
|
|
336
|
+
event.preventDefault();
|
|
337
|
+
decrease();
|
|
338
|
+
}
|
|
339
|
+
};
|
|
340
|
+
|
|
341
|
+
/**
|
|
342
|
+
* Normalises the decimal separator to a period and drops grouping separators,
|
|
343
|
+
* so a pasted or typed European number is not read a thousand times smaller
|
|
344
|
+
* (`1.234,56` used to become 1.23456):
|
|
345
|
+
* - both `.` and `,` present: the LAST one is the decimal, the rest group
|
|
346
|
+
* (`1.234,56` → 1234.56, `1,234.56` → 1234.56);
|
|
347
|
+
* - one kind repeated: it groups (`1.234.567` → 1234567);
|
|
348
|
+
* - one separator: it is the decimal, comma or period (`1,5` → 1.5).
|
|
349
|
+
*/
|
|
350
|
+
const replaceCommaWithPeriod = (value: string): string => {
|
|
351
|
+
const lastComma = value.lastIndexOf(',');
|
|
352
|
+
const lastPeriod = value.lastIndexOf('.');
|
|
353
|
+
const count = (ch: string) => value.split(ch).length - 1;
|
|
354
|
+
if (lastComma !== -1 && lastPeriod !== -1) {
|
|
355
|
+
const decimal = lastComma > lastPeriod ? lastComma : lastPeriod;
|
|
356
|
+
return [...value]
|
|
357
|
+
.map((ch, i) =>
|
|
358
|
+
ch === ',' || ch === '.' ? (i === decimal ? '.' : '') : ch
|
|
359
|
+
)
|
|
360
|
+
.join('');
|
|
361
|
+
}
|
|
362
|
+
const separator = lastComma !== -1 ? ',' : '.';
|
|
363
|
+
if (count(separator) > 1) return value.replaceAll(separator, '');
|
|
364
|
+
return value.replace(',', '.');
|
|
365
|
+
};
|
|
366
|
+
|
|
367
|
+
/**
|
|
368
|
+
* Keeps only the first sign/decimal separator and drops other characters.
|
|
369
|
+
*/
|
|
370
|
+
const removeUnwantedSymbols = (value: string): string => {
|
|
371
|
+
if (!value.length) return '';
|
|
372
|
+
const noDashes = value[0] + value.slice(1).replaceAll('-', '');
|
|
373
|
+
const onlyOnePeriod = [...noDashes]
|
|
374
|
+
.reduce((acc: string[], curr: string) => {
|
|
375
|
+
if (curr === '.' && acc.includes('.')) return acc;
|
|
376
|
+
acc.push(curr);
|
|
377
|
+
return acc;
|
|
378
|
+
}, [])
|
|
379
|
+
.join('');
|
|
380
|
+
const onlyNumbers = onlyOnePeriod.replaceAll(/[^\d.-]/g, '');
|
|
381
|
+
return onlyNumbers;
|
|
382
|
+
};
|
|
383
|
+
|
|
384
|
+
/**
|
|
385
|
+
* Converts edge typing states into valid progressive forms.
|
|
386
|
+
*/
|
|
387
|
+
const defaultPad = (value: string): string => {
|
|
388
|
+
if (value.startsWith('.') && value.length === 1) return `0.`;
|
|
389
|
+
if (value.startsWith('-.') && value.length === 2) return `-0.`;
|
|
390
|
+
return value;
|
|
391
|
+
};
|
|
392
|
+
|
|
393
|
+
/**
|
|
394
|
+
* Restricts raw input length before deeper parsing/sanitization.
|
|
395
|
+
*/
|
|
396
|
+
const limitLength = (value: string): string => {
|
|
397
|
+
return value.slice(0, 20);
|
|
398
|
+
};
|
|
399
|
+
|
|
400
|
+
/**
|
|
401
|
+
* Applies the `max` boundary to parsable input strings (`min` waits for
|
|
402
|
+
* blur, see `normalizeNumericValue`).
|
|
403
|
+
*/
|
|
404
|
+
const clampValue = (value: string): string => {
|
|
405
|
+
const parsed = Number(value);
|
|
406
|
+
const clamped = clamp(parsed, -Infinity, props.max);
|
|
407
|
+
const canonical = clamped.toString();
|
|
408
|
+
// Below 1e-6 `toString()` goes exponential ("1e-7"); an unclamped value
|
|
409
|
+
// keeps the typed decimal so the next keystroke extends it.
|
|
410
|
+
if (clamped === parsed && canonical.includes('e')) return value;
|
|
411
|
+
return canonical;
|
|
412
|
+
};
|
|
413
|
+
|
|
414
|
+
/**
|
|
415
|
+
* Distinguishes fully parsable values from in-progress user input.
|
|
416
|
+
*/
|
|
417
|
+
const isParsableString = (value: string): boolean => {
|
|
418
|
+
if (value.length === 0) return false;
|
|
419
|
+
if (value.endsWith('.')) return false;
|
|
420
|
+
if (value.endsWith('-')) return false;
|
|
421
|
+
if (value.endsWith('-0')) return false;
|
|
422
|
+
if (/\.\d*0+$/.test(value)) return false;
|
|
423
|
+
return true;
|
|
424
|
+
};
|
|
425
|
+
|
|
426
|
+
/**
|
|
427
|
+
* Produces a canonical decimal representation before Number parsing.
|
|
428
|
+
*/
|
|
429
|
+
const makeValidNumberString = (value: string): string => {
|
|
430
|
+
let [first, second] = value.split('.');
|
|
431
|
+
first = first || '0';
|
|
432
|
+
if (!second) return first;
|
|
433
|
+
second = second?.slice(0, props.maxPrecision) || '0';
|
|
434
|
+
const unified = `${first}.${second}`;
|
|
435
|
+
return unified;
|
|
436
|
+
};
|
|
437
|
+
|
|
438
|
+
/**
|
|
439
|
+
* Native DOM events re-emitted as component events; `focus` / `blur` also
|
|
440
|
+
* drive the hint. Keydown is intercepted first for step shortcuts; `input` is
|
|
441
|
+
* bound separately (`@input.stop`).
|
|
114
442
|
*/
|
|
115
443
|
const eventListeners = {
|
|
116
444
|
onBlur: (event: FocusEvent) => {
|
|
117
445
|
active.value = false;
|
|
446
|
+
applyMinOnBlur();
|
|
118
447
|
emit('blur', event);
|
|
119
448
|
},
|
|
120
449
|
onChange: (event: Event) => emit('change', event),
|
|
@@ -122,21 +451,77 @@ const eventListeners = {
|
|
|
122
451
|
onCompositionend: (event: CompositionEvent) => emit('compositionend', event),
|
|
123
452
|
onCompositionstart: (event: CompositionEvent) =>
|
|
124
453
|
emit('compositionstart', event),
|
|
125
|
-
onDecrease: (event: number) => emit('decrease', event),
|
|
126
454
|
onFocus: (event: FocusEvent) => {
|
|
127
455
|
active.value = true;
|
|
128
456
|
emit('focus', event);
|
|
129
457
|
},
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
458
|
+
onKeydown: (event: KeyboardEvent) => {
|
|
459
|
+
onKeydown(event);
|
|
460
|
+
emit('keydown', event);
|
|
461
|
+
},
|
|
133
462
|
onKeyup: (event: KeyboardEvent) => emit('keyup', event),
|
|
134
463
|
onMousedown: (event: MouseEvent) => emit('mousedown', event),
|
|
135
464
|
onMouseup: (event: MouseEvent) => emit('mouseup', event),
|
|
136
465
|
onPaste: (event: ClipboardEvent) => emit('paste', event),
|
|
137
|
-
'onUpdate:modelValue': (value: number | null) =>
|
|
138
|
-
emit('update:modelValue', value),
|
|
139
466
|
};
|
|
467
|
+
|
|
468
|
+
/**
|
|
469
|
+
* The native control's whole `v-bind`: the listeners, then `pt:input` LAST —
|
|
470
|
+
* one object, because two `v-bind`s on one element are a duplicate attribute.
|
|
471
|
+
* `mergeProps` keeps the contract: a class appends, an attribute wins, a
|
|
472
|
+
* listener concatenates after ours.
|
|
473
|
+
*/
|
|
474
|
+
const inputBindings = computed(() =>
|
|
475
|
+
passthrough.input
|
|
476
|
+
? mergeProps(eventListeners, passthrough.input)
|
|
477
|
+
: eventListeners
|
|
478
|
+
);
|
|
479
|
+
|
|
480
|
+
/**
|
|
481
|
+
* Synchronizes rendered input value with external model updates.
|
|
482
|
+
*
|
|
483
|
+
* It intentionally avoids overriding in-progress non-parsable user states,
|
|
484
|
+
* such as when the field currently contains "-0." while typing.
|
|
485
|
+
*/
|
|
486
|
+
const alignInputValue = (value: string | number | null) => {
|
|
487
|
+
if (isNil(input.value)) return;
|
|
488
|
+
|
|
489
|
+
const currentValue = input.value.value;
|
|
490
|
+
// This is triggered while the user is writing numbers like -0.75. Only while
|
|
491
|
+
// they are: once the field lost focus an in-progress shape like "1.50" is
|
|
492
|
+
// just a display, and must not lock out the next external write.
|
|
493
|
+
if (
|
|
494
|
+
!isNil(value) &&
|
|
495
|
+
document.activeElement === input.value &&
|
|
496
|
+
!isParsableString(currentValue) &&
|
|
497
|
+
currentValue.length > 0
|
|
498
|
+
) {
|
|
499
|
+
return;
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
let nextValue = value;
|
|
503
|
+
if (isNil(nextValue)) {
|
|
504
|
+
nextValue = '';
|
|
505
|
+
}
|
|
506
|
+
input.value.value = nextValue?.toString() || '';
|
|
507
|
+
};
|
|
508
|
+
|
|
509
|
+
/**
|
|
510
|
+
* Keeps the raw DOM value in sync with v-model changes.
|
|
511
|
+
*/
|
|
512
|
+
watch(
|
|
513
|
+
() => props.modelValue,
|
|
514
|
+
(value) => {
|
|
515
|
+
alignInputValue(value);
|
|
516
|
+
}
|
|
517
|
+
);
|
|
518
|
+
|
|
519
|
+
/**
|
|
520
|
+
* Ensures initial value is painted once the native input ref exists.
|
|
521
|
+
*/
|
|
522
|
+
onMounted(() => {
|
|
523
|
+
alignInputValue(props.modelValue);
|
|
524
|
+
});
|
|
140
525
|
</script>
|
|
141
526
|
|
|
142
527
|
<style lang="postcss">
|
|
@@ -147,15 +532,56 @@ const eventListeners = {
|
|
|
147
532
|
## Types
|
|
148
533
|
|
|
149
534
|
```ts
|
|
535
|
+
import type { InputVariantType } from '@/types/InputVariant';
|
|
150
536
|
import type { HTMLAttributes, InputHTMLAttributes } from 'vue';
|
|
151
|
-
import type {
|
|
537
|
+
import type { FieldLayout } from '@/types/FieldLayout';
|
|
152
538
|
import type { IconType } from '@/types/Icon';
|
|
153
|
-
import
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
539
|
+
import {
|
|
540
|
+
FORM_CONTROL_PT_STATES,
|
|
541
|
+
TEXT_CONTROL_PT_PARTS,
|
|
542
|
+
type FormControlPtState,
|
|
543
|
+
type PtMap,
|
|
544
|
+
type PtValue,
|
|
545
|
+
type TextControlPtPart,
|
|
546
|
+
} from '@/types/passthrough';
|
|
547
|
+
import type { FormFieldProps } from '@/composables/useFormBinding';
|
|
157
548
|
|
|
549
|
+
/**
|
|
550
|
+
* Passthrough parts of `BbNumberInput` (plans/passthrough/BbNumberInput.md) — the form-control
|
|
551
|
+
* family vocabulary: `root` (the container), `label`, `description`, `message`, `hint`
|
|
552
|
+
* (the errors / warnings region), `box` (the bordered box), `input` (the
|
|
553
|
+
* native control), `icon` (the prepend + append content icons — a broadcast;
|
|
554
|
+
* the clear button and the error / warning glyphs are chrome), `spinner`
|
|
555
|
+
* (the spinner shown while `loading`),
|
|
556
|
+
* `prefix`, `suffix`.
|
|
557
|
+
*/
|
|
558
|
+
export type BbNumberInputPtPart = TextControlPtPart;
|
|
559
|
+
/** Passthrough states of `BbNumberInput`: the family's six, true while the matching `--` modifier is on. */
|
|
560
|
+
export type BbNumberInputPtState = FormControlPtState;
|
|
561
|
+
/** The runtime lists the resolver is wired with — kept next to the types so the two cannot drift. */
|
|
562
|
+
export const BB_NUMBER_INPUT_PT = {
|
|
563
|
+
parts: TEXT_CONTROL_PT_PARTS,
|
|
564
|
+
states: FORM_CONTROL_PT_STATES,
|
|
565
|
+
} as const satisfies {
|
|
566
|
+
parts: readonly BbNumberInputPtPart[];
|
|
567
|
+
states: readonly BbNumberInputPtState[];
|
|
568
|
+
};
|
|
569
|
+
|
|
570
|
+
// The passthrough props are a mapped type written INLINE with this
|
|
571
|
+
// component's own unions (Vue's SFC type resolver does not substitute a
|
|
572
|
+
// generic alias's type parameters — plans/PASSTHROUGH.md T20); the test
|
|
573
|
+
// asserts the resolved prop names.
|
|
574
|
+
// eslint-disable-next-line @typescript-eslint/consistent-indexed-object-style
|
|
158
575
|
export type BbNumberInputProps = {
|
|
576
|
+
[K in
|
|
577
|
+
| `pt:${BbNumberInputPtPart}`
|
|
578
|
+
| `pt:${BbNumberInputPtPart}:${BbNumberInputPtState}`]?: PtValue;
|
|
579
|
+
} & {
|
|
580
|
+
/**
|
|
581
|
+
* Passthrough, object form: `{ box: '…', 'box:errors': '…' }` — the same
|
|
582
|
+
* keys as the `pt:*` attributes without the prefix. See the `pt:<part>` row.
|
|
583
|
+
*/
|
|
584
|
+
pt?: PtMap<BbNumberInputPtPart, BbNumberInputPtState>;
|
|
159
585
|
/**
|
|
160
586
|
* Name of the icon to be added at the end of the input.
|
|
161
587
|
*/
|
|
@@ -163,6 +589,8 @@ export type BbNumberInputProps = {
|
|
|
163
589
|
'append:icon'?: IconType;
|
|
164
590
|
/**
|
|
165
591
|
* Guides the browser as to the type of information expected in the field.
|
|
592
|
+
*
|
|
593
|
+
* @defaultValue `'off'`
|
|
166
594
|
*/
|
|
167
595
|
autocomplete?: InputHTMLAttributes['autocomplete'];
|
|
168
596
|
|
|
@@ -177,10 +605,32 @@ export type BbNumberInputProps = {
|
|
|
177
605
|
clearable?: boolean;
|
|
178
606
|
|
|
179
607
|
/**
|
|
180
|
-
*
|
|
608
|
+
* Compact density. Swaps `--bb-input-h`, `--bb-input-py` and
|
|
609
|
+
* `--bb-label-spacing-y` for their `-compact` twins on the field, so a
|
|
610
|
+
* `--bb-input-h` you set on the component is ignored while `compact` is on:
|
|
611
|
+
* size a compact field with `--bb-input-h-compact` (and
|
|
612
|
+
* `--bb-input-py-compact`) instead.
|
|
181
613
|
*/
|
|
182
614
|
compact?: boolean;
|
|
183
615
|
|
|
616
|
+
/**
|
|
617
|
+
* Visual variant of the field box — the same names and tokens as the
|
|
618
|
+
* `BbButton` variants. Colours only: height, padding and border width are
|
|
619
|
+
* identical across variants, so a form never reflows when one changes.
|
|
620
|
+
* `'ghost'` has no border in any state (errors and warnings show through
|
|
621
|
+
* the icon and the messages); every variant keeps the focus ring.
|
|
622
|
+
* Register extra names with the plugin's `inputVariants` option.
|
|
623
|
+
*
|
|
624
|
+
* `'none'` is a blank starting point: the field keeps its structure and
|
|
625
|
+
* behaviour but takes no look, so your own classes don't fight a built-in
|
|
626
|
+
* one. You then own hover, focus, disabled and the error / warning states.
|
|
627
|
+
* Fine for a one-off; keep inline styling short, and register a real
|
|
628
|
+
* variant (`inputVariants`) when the look recurs.
|
|
629
|
+
*
|
|
630
|
+
* @defaultValue `'outline'`
|
|
631
|
+
*/
|
|
632
|
+
variant?: InputVariantType;
|
|
633
|
+
|
|
184
634
|
/**
|
|
185
635
|
* Descriptive text displayed below the label and above the input. Unlike the hint it is always
|
|
186
636
|
* visible, and it is linked to the input via `aria-describedby` (after any
|
|
@@ -189,9 +639,12 @@ export type BbNumberInputProps = {
|
|
|
189
639
|
description?: string;
|
|
190
640
|
|
|
191
641
|
/**
|
|
192
|
-
*
|
|
642
|
+
* How the label and the input sit together: `'vertical'`, `'horizontal'` (50/50),
|
|
643
|
+
* `'auto'`, `'label-fill'` (the label takes the free space, the input keeps
|
|
644
|
+
* its size), `'input-fill'` (the other way round), or a two-word ratio
|
|
645
|
+
* pattern like `'xx xxxxx'`.
|
|
193
646
|
*/
|
|
194
|
-
|
|
647
|
+
layout?: FieldLayout;
|
|
195
648
|
|
|
196
649
|
/**
|
|
197
650
|
* Disables the component.
|
|
@@ -226,7 +679,7 @@ export type BbNumberInputProps = {
|
|
|
226
679
|
* Define if the component should be in a warning state.
|
|
227
680
|
* Same chrome as errors with `--bb-warn`; errors take priority.
|
|
228
681
|
*/
|
|
229
|
-
|
|
682
|
+
hasWarnings?: boolean;
|
|
230
683
|
|
|
231
684
|
/**
|
|
232
685
|
* Visually hides the label of the input while maintaining accessibility.
|
|
@@ -239,7 +692,8 @@ export type BbNumberInputProps = {
|
|
|
239
692
|
hint?: string;
|
|
240
693
|
|
|
241
694
|
/**
|
|
242
|
-
* The
|
|
695
|
+
* The `id` of the native control; the label's `for` and the description
|
|
696
|
+
* and message ids derive from it. Generated when omitted.
|
|
243
697
|
*/
|
|
244
698
|
id?: HTMLAttributes['id'];
|
|
245
699
|
|
|
@@ -265,16 +719,23 @@ export type BbNumberInputProps = {
|
|
|
265
719
|
|
|
266
720
|
/**
|
|
267
721
|
* Maximum value cap.
|
|
722
|
+
*
|
|
723
|
+
* @defaultValue `Number.MAX_SAFE_INTEGER`
|
|
268
724
|
*/
|
|
269
725
|
max?: number;
|
|
270
726
|
|
|
271
727
|
/**
|
|
272
728
|
* Maximum precision of the number.
|
|
729
|
+
*
|
|
730
|
+
* @defaultValue `8`
|
|
273
731
|
*/
|
|
274
732
|
maxPrecision?: number;
|
|
275
733
|
|
|
276
734
|
/**
|
|
277
|
-
* Minimum value cap.
|
|
735
|
+
* Minimum value cap. Applied on blur, not while typing, so a value above a
|
|
736
|
+
* `min` greater than 1 can be typed digit by digit.
|
|
737
|
+
*
|
|
738
|
+
* @defaultValue `Number.MIN_SAFE_INTEGER`
|
|
278
739
|
*/
|
|
279
740
|
min?: number;
|
|
280
741
|
|
|
@@ -283,7 +744,7 @@ export type BbNumberInputProps = {
|
|
|
283
744
|
*
|
|
284
745
|
* @defaultValue `null`
|
|
285
746
|
*/
|
|
286
|
-
modelValue
|
|
747
|
+
modelValue?: number | string | null;
|
|
287
748
|
|
|
288
749
|
/**
|
|
289
750
|
* Defines the name of the input.
|
|
@@ -322,18 +783,98 @@ export type BbNumberInputProps = {
|
|
|
322
783
|
reverse?: boolean;
|
|
323
784
|
|
|
324
785
|
/**
|
|
325
|
-
* Incremental unit used
|
|
786
|
+
* Incremental unit used by ArrowUp / ArrowDown and by the `increase` and `decrease` functions the slots receive.
|
|
326
787
|
* It is NOT applied to manual input as a step of 5 would prevent the user from inserting a value like `115` because of rounding down.
|
|
788
|
+
*
|
|
789
|
+
* @defaultValue `1`
|
|
327
790
|
*/
|
|
328
791
|
step?: number;
|
|
792
|
+
} & FormFieldProps<number | string | null>;
|
|
793
|
+
|
|
794
|
+
export type BbNumberInputEvents = {
|
|
795
|
+
/**
|
|
796
|
+
* Emitted when the native input loses focus.
|
|
797
|
+
* Forwards the original DOM `FocusEvent`.
|
|
798
|
+
*/
|
|
799
|
+
(e: 'blur', event: FocusEvent): void;
|
|
800
|
+
/**
|
|
801
|
+
* Emitted when the native input fires a change event.
|
|
802
|
+
* Forwards the original DOM `Event`.
|
|
803
|
+
*/
|
|
804
|
+
(e: 'change', event: Event): void;
|
|
805
|
+
/**
|
|
806
|
+
* Emitted when the input receives a click interaction.
|
|
807
|
+
* Forwards the original DOM `MouseEvent`.
|
|
808
|
+
*/
|
|
809
|
+
(e: 'click', event: MouseEvent): void;
|
|
810
|
+
/**
|
|
811
|
+
* Emitted when a composition session ends (e.g. CJK IME confirmed).
|
|
812
|
+
* Forwards the original DOM `CompositionEvent`.
|
|
813
|
+
*/
|
|
814
|
+
(e: 'compositionend', event: CompositionEvent): void;
|
|
815
|
+
/**
|
|
816
|
+
* Emitted when a composition session starts (e.g. CJK IME begins).
|
|
817
|
+
* Forwards the original DOM `CompositionEvent`.
|
|
818
|
+
*/
|
|
819
|
+
(e: 'compositionstart', event: CompositionEvent): void;
|
|
820
|
+
/**
|
|
821
|
+
* Emitted by the `decrease` helper with the clamped value after decrementing by one `step`.
|
|
822
|
+
*/
|
|
823
|
+
(e: 'decrease', value: number): void;
|
|
824
|
+
/**
|
|
825
|
+
* Emitted when the native input gains focus.
|
|
826
|
+
* Forwards the original DOM `FocusEvent`.
|
|
827
|
+
*/
|
|
828
|
+
(e: 'focus', event: FocusEvent): void;
|
|
829
|
+
/**
|
|
830
|
+
* Emitted by the `increase` helper with the clamped value after incrementing by one `step`.
|
|
831
|
+
*/
|
|
832
|
+
(e: 'increase', value: number): void;
|
|
833
|
+
/**
|
|
834
|
+
* Emitted on native input events from the number input.
|
|
835
|
+
* Forwards the original DOM `Event`.
|
|
836
|
+
*/
|
|
837
|
+
(e: 'input', event: Event): void;
|
|
838
|
+
/**
|
|
839
|
+
* Emitted for keyboard interaction on the input.
|
|
840
|
+
* Forwards the original DOM `KeyboardEvent`.
|
|
841
|
+
*/
|
|
842
|
+
(e: 'keydown', event: KeyboardEvent): void;
|
|
843
|
+
/**
|
|
844
|
+
* Emitted when a key is released over the input.
|
|
845
|
+
* Forwards the original DOM `KeyboardEvent`.
|
|
846
|
+
*/
|
|
847
|
+
(e: 'keyup', event: KeyboardEvent): void;
|
|
848
|
+
/**
|
|
849
|
+
* Emitted when a pointing device button is pressed over the input.
|
|
850
|
+
* Forwards the original DOM `MouseEvent`.
|
|
851
|
+
*/
|
|
852
|
+
(e: 'mousedown', event: MouseEvent): void;
|
|
853
|
+
/**
|
|
854
|
+
* Emitted when a pointing device button is released over the input.
|
|
855
|
+
* Forwards the original DOM `MouseEvent`.
|
|
856
|
+
*/
|
|
857
|
+
(e: 'mouseup', event: MouseEvent): void;
|
|
858
|
+
/**
|
|
859
|
+
* Emitted when content is pasted into the input.
|
|
860
|
+
* Forwards the original DOM `ClipboardEvent`.
|
|
861
|
+
*/
|
|
862
|
+
(e: 'paste', event: ClipboardEvent): void;
|
|
863
|
+
/**
|
|
864
|
+
* Emitted on any value change with the parsed number or `null` when the field is empty.
|
|
865
|
+
*/
|
|
866
|
+
(e: 'update:modelValue', value: number | null): void;
|
|
329
867
|
};
|
|
330
868
|
|
|
331
|
-
/**
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
*/
|
|
336
|
-
|
|
869
|
+
/** Props exposed by the `description` slot. */
|
|
870
|
+
export type BbNumberInputDescriptionSlotProps = {
|
|
871
|
+
/** The `description` prop value (empty when only the slot is provided). */
|
|
872
|
+
text: string;
|
|
873
|
+
/** Whether the field is in an error state. */
|
|
874
|
+
hasErrors: boolean;
|
|
875
|
+
/** Whether the field is in a warning state (suppressed when errors win). */
|
|
876
|
+
hasWarnings: boolean;
|
|
877
|
+
};
|
|
337
878
|
|
|
338
879
|
/** Props exposed by the `label` slot. */
|
|
339
880
|
export type BbNumberInputLabelSlotProps = {
|
|
@@ -342,25 +883,67 @@ export type BbNumberInputLabelSlotProps = {
|
|
|
342
883
|
/** Whether the input is in an error state. */
|
|
343
884
|
hasErrors: boolean;
|
|
344
885
|
/** Whether the input is in a warning state (suppressed when errors win). */
|
|
345
|
-
|
|
886
|
+
hasWarnings: boolean;
|
|
346
887
|
};
|
|
347
888
|
|
|
348
|
-
|
|
889
|
+
/**
|
|
890
|
+
* Props every slot of `BbNumberInput` receives (`prefix`, `suffix`, `append`,
|
|
891
|
+
* `append:outer`, `prepend`, `prepend:outer`): the step helpers.
|
|
892
|
+
*/
|
|
893
|
+
export type BbNumberInputStepSlotProps = {
|
|
894
|
+
/**
|
|
895
|
+
* Increments the value by one `step`.
|
|
896
|
+
*/
|
|
897
|
+
increase: () => void;
|
|
898
|
+
/**
|
|
899
|
+
* Decrements the value by one `step`.
|
|
900
|
+
*/
|
|
901
|
+
decrease: () => void;
|
|
902
|
+
};
|
|
903
|
+
|
|
904
|
+
export type BbNumberInputSlots = {
|
|
905
|
+
/**
|
|
906
|
+
* Inline content rendered at the start of the input field area, before the typed number.
|
|
907
|
+
*/
|
|
908
|
+
prefix?: (props: BbNumberInputStepSlotProps) => any;
|
|
909
|
+
/**
|
|
910
|
+
* Content rendered after the number input, at the end of the inner container.
|
|
911
|
+
* Typically used to place increment/decrement buttons next to the input.
|
|
912
|
+
*/
|
|
913
|
+
append?: (props: BbNumberInputStepSlotProps) => any;
|
|
914
|
+
/**
|
|
915
|
+
* Content rendered after the entire input control, outside the input chrome.
|
|
916
|
+
*/
|
|
917
|
+
'append:outer'?: (props: BbNumberInputStepSlotProps) => any;
|
|
918
|
+
/**
|
|
919
|
+
* Content rendered before the number input, at the start of the inner container.
|
|
920
|
+
*/
|
|
921
|
+
prepend?: (props: BbNumberInputStepSlotProps) => any;
|
|
922
|
+
/**
|
|
923
|
+
* Content rendered before the entire input control, outside the input chrome.
|
|
924
|
+
*/
|
|
925
|
+
'prepend:outer'?: (props: BbNumberInputStepSlotProps) => any;
|
|
926
|
+
/**
|
|
927
|
+
* Inline content rendered at the end of the input field area, after the typed number.
|
|
928
|
+
*/
|
|
929
|
+
suffix?: (props: BbNumberInputStepSlotProps) => any;
|
|
349
930
|
/**
|
|
350
931
|
* Replaces the default label text rendered above the number input.
|
|
351
932
|
*/
|
|
352
933
|
label?: (props: BbNumberInputLabelSlotProps) => any;
|
|
934
|
+
/**
|
|
935
|
+
* Replaces the description text. Provided alone (no `description` prop) it still
|
|
936
|
+
* renders the description region and wires it into `aria-describedby`.
|
|
937
|
+
*/
|
|
938
|
+
description?: (props: BbNumberInputDescriptionSlotProps) => any;
|
|
353
939
|
};
|
|
354
940
|
```
|
|
355
941
|
|
|
356
942
|
## Styles
|
|
357
943
|
|
|
358
944
|
```css
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
width: 100%;
|
|
364
|
-
}
|
|
365
|
-
}
|
|
945
|
+
/* BbNumberInput has no rules of its own: the frame, the box row and the native
|
|
946
|
+
input are styled by the shared field chrome (CommonField / CommonFieldInput),
|
|
947
|
+
and the box row fills the control column through the shared
|
|
948
|
+
`.bb-field__input-wrapper > .bb-field-input` rule. */
|
|
366
949
|
```
|