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