bitboss-ui 3.0.0-beta.48 → 3.0.0-beta.49
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -7
- package/bin/bitboss-ui-mcp.mjs +15 -3
- package/bin/bitboss-ui.mjs +115 -13
- package/dist/ai/BbAvatar.md +1 -1
- package/dist/ai/BbBreadcrumbs.md +65 -65
- package/dist/ai/BbButton.md +16 -5
- package/dist/ai/BbCheckbox.md +0 -2
- package/dist/ai/BbCheckboxGroup.md +13 -20
- package/dist/ai/BbDatePickerInput.md +4 -2
- package/dist/ai/BbDialog.md +1 -8
- package/dist/ai/BbDropdown.md +231 -220
- package/dist/ai/BbDropdownButton.md +65 -65
- package/dist/ai/BbDropdownGroup.md +2 -2
- package/dist/ai/BbDropzone.md +10 -10
- package/dist/ai/BbForm.md +43 -52
- package/dist/ai/BbHoverCard.md +4 -2
- package/dist/ai/BbNumberInput.md +88 -21
- package/dist/ai/BbPopover.md +29 -23
- package/dist/ai/BbProgress.md +48 -22
- package/dist/ai/BbRadioGroup.md +13 -19
- package/dist/ai/BbSelect.md +16 -36
- package/dist/ai/BbSelectPopover.md +14 -30
- package/dist/ai/BbSmoothHeight.md +0 -2
- package/dist/ai/BbSwitchGroup.md +13 -20
- package/dist/ai/BbTable.md +11 -10
- package/dist/ai/BbTabs.md +106 -105
- package/dist/ai/BbTabsList.md +2 -2
- package/dist/ai/BbTabsPanels.md +1 -1
- package/dist/ai/BbTabsRoot.md +2 -2
- package/dist/ai/BbTooltip.md +24 -10
- package/dist/ai/BbTree.md +14 -11
- package/dist/ai/changelog.json +256 -5
- package/dist/ai/components.json +36 -34
- package/dist/ai/composables/useBbDropdownContext.md +16 -16
- package/dist/ai/composables/useBbFormField.md +5 -1
- package/dist/ai/composables/useBbTabsContext.md +14 -14
- package/dist/ai/guides/agent-contract.md +27 -27
- package/dist/ai/guides/ai-router.md +1 -1
- package/dist/ai/guides/component-picker.md +3 -3
- package/dist/ai/guides/fetch-items-playbook.md +1 -1
- package/dist/ai/guides/icons-policy.md +10 -10
- package/dist/ai/guides/inertia-helpers.md +120 -67
- package/dist/ai/guides/installation-and-plugin-setup.md +43 -15
- package/dist/ai/guides/migration/components/bb-breadcrumbs.md +3 -2
- package/dist/ai/guides/migration/components/bb-checkbox-group.md +16 -16
- package/dist/ai/guides/migration/components/bb-dropdown-button.md +9 -8
- package/dist/ai/guides/migration/components/bb-dropdown.md +15 -14
- package/dist/ai/guides/migration/components/bb-radio-group.md +2 -1
- package/dist/ai/guides/migration/components/bb-select-popover.md +6 -1
- package/dist/ai/guides/migration/components/bb-select.md +10 -2
- package/dist/ai/guides/migration/components/bb-switch-group.md +2 -1
- package/dist/ai/guides/migration/components/bb-tabs.md +9 -8
- package/dist/ai/guides/migration/components/bb-tooltip.md +1 -1
- package/dist/ai/guides/migration/v2-to-v3.md +114 -17
- package/dist/ai/guides/migration/v3-beta-tooling.md +11 -0
- package/dist/ai/guides/options-items-playbook.md +30 -24
- package/dist/ai/guides/passthrough.md +2 -2
- package/dist/ai/guides/preset-components.md +18 -3
- package/dist/ai/guides/typescript-generic-components.md +1 -1
- package/dist/ai/guides/validated-forms.md +11 -22
- package/dist/ai/guides/validation-providers.md +4 -3
- package/dist/ai/helpers/inertia/manifest.json +636 -0
- package/dist/ai/helpers/inertia/types.ts +15 -0
- package/dist/ai/helpers/inertia/useAsyncFn.ts +110 -0
- package/dist/ai/helpers/inertia/useConfirmOnRouteLeave.ts +102 -0
- package/dist/ai/helpers/inertia/useDeleteCmd.ts +30 -0
- package/dist/ai/helpers/inertia/useHasChanged.ts +36 -0
- package/dist/ai/helpers/inertia/useIndexById.ts +23 -0
- package/dist/ai/helpers/inertia/useLazyProp.ts +148 -0
- package/dist/ai/helpers/inertia/useLazyPropGetter.ts +50 -0
- package/dist/ai/helpers/inertia/useLoading.ts +20 -0
- package/dist/ai/helpers/inertia/usePaginatedResponseContext.ts +88 -0
- package/dist/ai/helpers/inertia/usePromiseForm.ts +62 -0
- package/dist/ai/helpers/inertia/useProp.ts +63 -0
- package/dist/ai/helpers/inertia/useQuery.ts +19 -0
- package/dist/ai/helpers/inertia/useQueryObject.ts +116 -0
- package/dist/ai/helpers/inertia/useResourceContext.ts +69 -0
- package/dist/ai/helpers/inertia/useRouteQuery.ts +54 -0
- package/dist/ai/helpers/inertia/useScreenSizes.ts +23 -0
- package/dist/ai/helpers/inertia/useTableContext.ts +34 -0
- package/dist/ai/helpers/inertia/useTableSelectionContext.ts +48 -0
- package/dist/ai/helpers/inertia/useUntil.ts +33 -0
- package/dist/ai/helpers/inertia/utils.ts +24 -0
- package/dist/ai/index.md +6 -6
- package/dist/ai/manifest/components/BbBreadcrumbs.json +10 -6
- package/dist/ai/manifest/components/BbBreadcrumbs.tree.json +1 -1
- package/dist/ai/manifest/components/BbButton.json +1 -1
- package/dist/ai/manifest/components/BbCheckboxGroup.json +2 -2
- package/dist/ai/manifest/components/BbDropdown.json +23 -20
- package/dist/ai/manifest/components/BbDropdown.tree.json +2 -2
- package/dist/ai/manifest/components/BbDropdownButton.json +22 -19
- package/dist/ai/manifest/components/BbDropdownButton.tree.json +1 -1
- package/dist/ai/manifest/components/BbDropdownGroup.json +2 -2
- package/dist/ai/manifest/components/BbForm.json +1 -0
- package/dist/ai/manifest/components/BbNumberInput.json +6 -1
- package/dist/ai/manifest/components/BbNumberInput.tree.json +2 -1
- package/dist/ai/manifest/components/BbPopover.json +1 -0
- package/dist/ai/manifest/components/BbProgress.json +6 -6
- package/dist/ai/manifest/components/BbProgress.tree.json +1 -0
- package/dist/ai/manifest/components/BbRadioGroup.json +2 -2
- package/dist/ai/manifest/components/BbSelect.json +2 -2
- package/dist/ai/manifest/components/BbSelectPopover.json +2 -2
- package/dist/ai/manifest/components/BbSwitchGroup.json +2 -2
- package/dist/ai/manifest/components/BbTabs.json +7 -6
- package/dist/ai/manifest/components/BbTabsList.json +3 -3
- package/dist/ai/manifest/components/BbTabsPanels.json +1 -1
- package/dist/ai/manifest/components/BbTabsRoot.json +5 -4
- package/dist/ai/manifest/components/BbTooltip.json +1 -1
- package/dist/ai/manifest/index.json +2 -2
- package/dist/ai/manifest/meta.json +2 -0
- package/dist/ai/manifest/types.advanced.json +10 -9
- package/dist/ai/manifest/types.api.json +5 -4
- package/dist/ai/recipes/inertia/approvals-inbox.md +16 -18
- package/dist/ai/recipes/inertia/inline-edit-workspace.md +23 -33
- package/dist/ai/recipes/inertia/layout-scaffold.md +16 -16
- package/dist/ai/recipes/inertia/onboarding.md +6 -10
- package/dist/ai/recipes/inertia/ownership-atlas.md +15 -18
- package/dist/ai/recipes/inertia/record-form.md +11 -11
- package/dist/ai/recipes/inertia/records-workspace.md +38 -41
- package/dist/ai/recipes/inertia/settings-workspace.md +26 -38
- package/dist/ai/recipes/inertia/upload-center.md +31 -39
- package/dist/ai/recipes/inertia/wizard-form.md +10 -19
- package/dist/ai/recipes/nuxt/approvals-inbox.md +7 -8
- package/dist/ai/recipes/nuxt/inline-edit-workspace.md +14 -24
- package/dist/ai/recipes/nuxt/layout-scaffold.md +16 -16
- package/dist/ai/recipes/nuxt/onboarding.md +2 -6
- package/dist/ai/recipes/nuxt/ownership-atlas.md +7 -9
- package/dist/ai/recipes/nuxt/record-form.md +5 -5
- package/dist/ai/recipes/nuxt/records-workspace.md +29 -31
- package/dist/ai/recipes/nuxt/settings-workspace.md +22 -34
- package/dist/ai/recipes/nuxt/upload-center.md +22 -29
- package/dist/ai/recipes/nuxt/wizard-form.md +3 -11
- package/dist/ai/recipes/vue/approvals-inbox.md +7 -8
- package/dist/ai/recipes/vue/inline-edit-workspace.md +14 -24
- package/dist/ai/recipes/vue/layout-scaffold.md +16 -16
- package/dist/ai/recipes/vue/onboarding.md +2 -6
- package/dist/ai/recipes/vue/ownership-atlas.md +7 -9
- package/dist/ai/recipes/vue/record-form.md +5 -5
- package/dist/ai/recipes/vue/records-workspace.md +29 -31
- package/dist/ai/recipes/vue/settings-workspace.md +22 -34
- package/dist/ai/recipes/vue/upload-center.md +22 -29
- package/dist/ai/recipes/vue/wizard-form.md +3 -11
- package/dist/ai/source/BbAccordion.md +1 -1
- package/dist/ai/source/BbAlert.md +3 -3
- package/dist/ai/source/BbBadge.md +2 -2
- package/dist/ai/source/BbBadgeButton.md +5 -4
- package/dist/ai/source/BbBaseButton.md +1 -1
- package/dist/ai/source/BbBaseRadioIcon.md +1 -0
- package/dist/ai/source/BbBaseSwitchIcon.md +1 -0
- package/dist/ai/source/BbBreadcrumbs.md +63 -42
- package/dist/ai/source/BbButton.md +71 -33
- package/dist/ai/source/BbCalendar.md +17 -16
- package/dist/ai/source/BbCheckbox.md +3 -2
- package/dist/ai/source/BbCheckboxGroup.md +11 -4
- package/dist/ai/source/BbColorInput.md +10 -9
- package/dist/ai/source/BbConfirm.md +1 -1
- package/dist/ai/source/BbConfirmPortal.md +1 -1
- package/dist/ai/source/BbDatePicker.md +2 -2
- package/dist/ai/source/BbDatePickerInput.md +47 -20
- package/dist/ai/source/BbDialog.md +5 -5
- package/dist/ai/source/BbDropdown.md +230 -158
- package/dist/ai/source/BbDropdownButton.md +19 -12
- package/dist/ai/source/BbDropdownGroup.md +126 -93
- package/dist/ai/source/BbForm.md +25 -1
- package/dist/ai/source/BbIndicator.md +4 -0
- package/dist/ai/source/BbNumberInput.md +855 -19
- package/dist/ai/source/BbOffCanvas.md +27 -11
- package/dist/ai/source/BbPagination.md +3 -3
- package/dist/ai/source/BbPopover.md +152 -8
- package/dist/ai/source/BbPopoverPortal.md +11 -0
- package/dist/ai/source/BbProgress.md +82 -18
- package/dist/ai/source/BbRadioGroup.md +12 -5
- package/dist/ai/source/BbRating.md +11 -9
- package/dist/ai/source/BbSelect.md +16 -10
- package/dist/ai/source/BbSelectPopover.md +29 -23
- package/dist/ai/source/BbSlider.md +12 -6
- package/dist/ai/source/BbSwitch.md +3 -2
- package/dist/ai/source/BbSwitchGroup.md +5 -2
- package/dist/ai/source/BbTable.md +102 -18
- package/dist/ai/source/BbTabs.md +27 -23
- package/dist/ai/source/BbTabsList.md +26 -22
- package/dist/ai/source/BbTabsPanels.md +26 -22
- package/dist/ai/source/BbTabsRoot.md +25 -21
- package/dist/ai/source/BbTag.md +10 -9
- package/dist/ai/source/BbTextInput.md +5 -4
- package/dist/ai/source/BbTextarea.md +6 -5
- package/dist/ai/source/BbTimePicker.md +1 -1
- package/dist/ai/source/BbTimePickerInput.md +46 -9
- package/dist/ai/source/BbToast.md +10 -7
- package/dist/ai/source/BbToastPortal.md +10 -7
- package/dist/ai/source/BbTooltip.md +54 -8
- package/dist/ai/source/BbTree.md +21 -3
- package/dist/ai/source/CommonField.md +6 -4
- package/dist/ai/source/CommonFieldInput.md +15 -10
- package/dist/ai/source/CommonPopover.md +6 -0
- package/dist/ai/source/CommonTimeSelector.md +5 -4
- package/dist/components/BbBadge/BbBadgeButton.vue_vue_type_script_setup_true_lang.js +10 -8
- package/dist/components/BbBaseButton/BbBaseButton.vue_vue_type_script_setup_true_lang.js +8 -8
- package/dist/components/BbBreadcrumbs/BbBreadcrumbs.vue_vue_type_script_setup_true_lang.js +45 -45
- package/dist/components/BbBreadcrumbs/types.d.ts +25 -17
- package/dist/components/BbButton/BbButton.vue_vue_type_script_setup_true_lang.js +84 -71
- package/dist/components/BbButton/toggleRoving.d.ts +6 -0
- package/dist/components/BbButton/toggleRoving.js +45 -0
- package/dist/components/BbButton/types.d.ts +4 -1
- package/dist/components/BbCalendar/BbCalendar.vue_vue_type_script_setup_true_lang.js +178 -178
- package/dist/components/BbCalendar/CalendarMonthPanel.vue_vue_type_script_setup_true_lang.js +15 -15
- package/dist/components/BbCalendar/CalendarYearPanel.vue_vue_type_script_setup_true_lang.js +28 -28
- package/dist/components/BbCalendar/useCalendarGrid.js +141 -139
- package/dist/components/BbCalendar/useDayjsLocale.d.ts +38 -15
- package/dist/components/BbCalendar/useDayjsLocale.js +31 -30
- package/dist/components/BbCheckbox/BbCheckbox.vue_vue_type_script_setup_true_lang.js +48 -48
- package/dist/components/BbCheckboxGroup/BbCheckboxGroup.vue_vue_type_script_setup_true_lang.js +81 -80
- package/dist/components/BbCheckboxGroup/types.d.ts +6 -2
- package/dist/components/BbColorInput/BbColorInput.vue_vue_type_script_setup_true_lang.js +69 -69
- package/dist/components/BbDatePickerInput/BbDatePickerInput.vue_vue_type_script_setup_true_lang.js +363 -349
- package/dist/components/BbDropdown/AdaptiveDropdown.vue_vue_type_script_setup_true_lang.js +91 -86
- package/dist/components/BbDropdown/BbDropdown.vue_vue_type_script_setup_true_lang.js +298 -289
- package/dist/components/BbDropdown/BbDropdownList.vue_vue_type_script_setup_true_lang.js +322 -356
- package/dist/components/BbDropdown/DropdownPipelineResolver.vue_vue_type_script_setup_true_lang.js +17 -15
- package/dist/components/BbDropdown/DropdownRow.vue.d.ts +40 -0
- package/dist/components/BbDropdown/DropdownRow.vue.js +5 -0
- package/dist/components/BbDropdown/DropdownRow.vue_vue_type_script_setup_true_lang.js +60 -0
- package/dist/components/BbDropdown/normalizeGroups.d.ts +8 -2
- package/dist/components/BbDropdown/normalizeGroups.js +60 -46
- package/dist/components/BbDropdown/types.d.ts +119 -88
- package/dist/components/BbDropdownButton/BbDropdownButton.vue_vue_type_script_setup_true_lang.js +11 -2
- package/dist/components/BbDropdownButton/types.d.ts +2 -2
- package/dist/components/BbForm/BbForm.vue.d.ts +9 -0
- package/dist/components/BbForm/BbForm.vue_vue_type_script_setup_true_lang.js +114 -105
- package/dist/components/BbForm/BbFormCustomField.js +1 -1
- package/dist/components/BbForm/bindFormField.js +2 -1
- package/dist/components/BbForm/formFields.d.ts +5 -0
- package/dist/components/BbNumberInput/BbNumberInput.vue.d.ts +0 -1
- package/dist/components/BbNumberInput/BbNumberInput.vue_vue_type_script_setup_true_lang.js +452 -125
- package/dist/components/BbNumberInput/numberDisplay.d.ts +256 -0
- package/dist/components/BbNumberInput/numberDisplay.js +499 -0
- package/dist/components/BbNumberInput/types.d.ts +54 -1
- package/dist/components/BbNumberInput/warroom/corpus.d.ts +58 -0
- package/dist/components/BbNumberInput/warroom/currency-verify.rows.d.ts +28 -0
- package/dist/components/BbNumberInput/warroom/currency.rows.d.ts +2 -0
- package/dist/components/BbNumberInput/warroom/harness.d.ts +217 -0
- package/dist/components/BbNumberInput/warroom/oracle.d.ts +150 -0
- package/dist/components/BbPagination/BbPagination.vue_vue_type_script_setup_true_lang.js +7 -7
- package/dist/components/BbPopover/BbPopover.vue.d.ts +1 -0
- package/dist/components/BbPopover/BbPopover.vue_vue_type_script_setup_true_lang.js +207 -164
- package/dist/components/BbPopover/types.d.ts +11 -0
- package/dist/components/BbProgress/BbProgress.vue_vue_type_script_setup_true_lang.js +15 -7
- package/dist/components/BbProgress/types.d.ts +23 -7
- package/dist/components/BbProgress/types.js +1 -1
- package/dist/components/BbRadioGroup/BbRadioGroup.vue_vue_type_script_setup_true_lang.js +102 -101
- package/dist/components/BbRadioGroup/types.d.ts +6 -2
- package/dist/components/BbRating/BbRating.vue_vue_type_script_setup_true_lang.js +63 -63
- package/dist/components/BbSelect/BbSelect.vue_vue_type_script_setup_true_lang.js +156 -154
- package/dist/components/BbSelect/types.d.ts +6 -2
- package/dist/components/BbSelectPopover/BbSelectPopover.vue_vue_type_script_setup_true_lang.js +2 -1
- package/dist/components/BbSelectPopover/types.d.ts +6 -2
- package/dist/components/BbSlider/BbSlider.vue_vue_type_script_setup_true_lang.js +153 -153
- package/dist/components/BbSwitch/BbSwitch.vue_vue_type_script_setup_true_lang.js +62 -62
- package/dist/components/BbSwitchGroup/BbSwitchGroup.vue_vue_type_script_setup_true_lang.js +131 -130
- package/dist/components/BbTable/BbTable.vue_vue_type_script_setup_true_lang.js +711 -676
- package/dist/components/BbTabs/BbTabs.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/BbTabs/BbTabsList.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/BbTabs/types.d.ts +25 -21
- package/dist/components/BbTag/BbTag.vue_vue_type_script_setup_true_lang.js +76 -76
- package/dist/components/BbTextInput/BbTextInput.vue_vue_type_script_setup_true_lang.js +58 -58
- package/dist/components/BbTextarea/BbTextarea.vue_vue_type_script_setup_true_lang.js +82 -82
- package/dist/components/BbTimePickerInput/BbTimePickerInput.vue_vue_type_script_setup_true_lang.js +246 -236
- package/dist/components/BbTooltip/BbTooltip.vue_vue_type_script_setup_true_lang.js +102 -97
- package/dist/components/BbTooltip/tooltipWarmup.d.ts +23 -0
- package/dist/components/BbTooltip/tooltipWarmup.js +7 -0
- package/dist/components/BbTooltip/types.d.ts +7 -2
- package/dist/components/BbTree/BbTree.vue_vue_type_script_setup_true_lang.js +29 -21
- package/dist/components/BbTree/BbTreeLevel.vue_vue_type_script_setup_true_lang.js +10 -7
- package/dist/components/CommonFieldInput/CommonFieldInput.vue_vue_type_script_setup_true_lang.js +37 -36
- package/dist/components/CommonTimeSelector/CommonTimeSelector.vue_vue_type_script_setup_true_lang.js +9 -9
- package/dist/composables/formSubmitLock.d.ts +6 -0
- package/dist/composables/formSubmitLock.js +4 -0
- package/dist/composables/useBaseOptions.d.ts +7 -1
- package/dist/composables/useBaseOptions.js +32 -32
- package/dist/composables/useBbDropdownContext.d.ts +8 -8
- package/dist/composables/useBbFormField.d.ts +9 -0
- package/dist/composables/useBbFormField.js +5 -3
- package/dist/composables/useBbTabsContext.d.ts +10 -10
- package/dist/composables/useBbTabsContext.js +18 -18
- package/dist/composables/useFormBinding.d.ts +11 -0
- package/dist/composables/useFormBinding.js +15 -13
- package/dist/composables/useItemText.d.ts +5 -1
- package/dist/composables/useItemText.js +8 -3
- package/dist/composables/useItemValue.d.ts +5 -1
- package/dist/composables/useItemValue.js +8 -3
- package/dist/composables/useLocale.js +10 -9
- package/dist/deprecation/ai-deprecations.json.d.ts +130 -0
- package/dist/deprecation/ai-deprecations.json.js +1 -1
- package/dist/deprecation/removedProps.js +1 -1
- package/dist/directives/bbDropdown.js +1 -1
- package/dist/i18n/index.d.ts +7 -12
- package/dist/i18n/locales/cs.json +11 -14
- package/dist/i18n/locales/da.json +13 -16
- package/dist/i18n/locales/de-CH.json +137 -0
- package/dist/i18n/locales/de.json +14 -17
- package/dist/i18n/locales/el.json +10 -13
- package/dist/i18n/locales/en-GB.json +137 -0
- package/dist/i18n/locales/en.json +8 -11
- package/dist/i18n/locales/es-MX.json +137 -0
- package/dist/i18n/locales/es.json +16 -19
- package/dist/i18n/locales/fi.json +8 -11
- package/dist/i18n/locales/fr.json +23 -26
- package/dist/i18n/locales/hu.json +8 -11
- package/dist/i18n/locales/it.json +12 -15
- package/dist/i18n/locales/ja.json +13 -16
- package/dist/i18n/locales/ko.json +10 -13
- package/dist/i18n/locales/nb.json +13 -16
- package/dist/i18n/locales/nl.json +21 -24
- package/dist/i18n/locales/pl.json +10 -13
- package/dist/i18n/locales/{pt.json → pt-BR.json} +19 -22
- package/dist/i18n/locales/pt-PT.json +137 -0
- package/dist/i18n/locales/ro.json +22 -25
- package/dist/i18n/locales/ru.json +11 -14
- package/dist/i18n/locales/sv.json +16 -19
- package/dist/i18n/locales/tr.json +14 -17
- package/dist/i18n/locales/uk.json +11 -14
- package/dist/i18n/locales/{zh-cn.json → zh-CN.json} +10 -13
- package/dist/i18n/locales/zh-HK.json +137 -0
- package/dist/i18n/locales/zh-TW.json +137 -0
- package/dist/i18n/regionHints.d.ts +16 -0
- package/dist/i18n/regionHints.js +49 -0
- package/dist/i18n/regions.d.ts +286 -0
- package/dist/i18n/regions.js +265 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +4 -4
- package/dist/llms-full.txt +1785 -1637
- package/dist/llms-medium.txt +74 -46
- package/dist/llms.txt +7 -7
- package/dist/locale-blueprint.json +16 -13
- package/dist/styles.css +2 -2
- package/dist/types/ptComponentMap.d.ts +1 -1
- package/dist/utilities/functions/slotKey.d.ts +2 -2
- package/dist/utils/versionCheck.js +1 -1
- package/dist/vite-plugin.d.ts +22 -19
- package/dist/vite.js +309 -297
- package/llms.txt +7 -7
- package/package.json +5 -3
- package/scripts/lib/agent-manifest.mjs +2 -1
- package/scripts/lib/eslint-disable.mjs +12 -4
- package/scripts/lib/eslint-plugin.d.ts +5 -1
- package/scripts/lib/eslint-plugin.mjs +187 -6
- package/scripts/lib/helper-canon.mjs +176 -0
- package/scripts/lib/helpers-add.mjs +1303 -0
- package/scripts/lib/local-components.mjs +33 -4
- package/scripts/lib/locale-check.mjs +165 -0
- package/scripts/lib/redundant-item-accessor.mjs +398 -0
- package/scripts/lib/renamed-item-field.mjs +343 -0
- package/scripts/lib/slot-key.mjs +2 -2
- package/scripts/lib/slot-renames.mjs +1 -1
- package/scripts/lib/validate-bb-markup.mjs +123 -56
- package/dist/i18n/index.js +0 -27
|
@@ -9,9 +9,9 @@ import { BbDropdownGroupItemsContext } from '../../types/ItemsProvider';
|
|
|
9
9
|
export type { DropdownItemVariantType };
|
|
10
10
|
export type DropdownTrigger = 'click' | 'contextMenu';
|
|
11
11
|
/**
|
|
12
|
-
* Props shared between {@link InternalItem} and {@link InternalGroup}
|
|
13
|
-
*
|
|
14
|
-
*
|
|
12
|
+
* Props shared between {@link InternalItem} and {@link InternalGroup}: optional
|
|
13
|
+
* icons, a variant, a click handler and `meta`. A row is identified by its
|
|
14
|
+
* `value`, a group by its `id`.
|
|
15
15
|
*/
|
|
16
16
|
type DropdownEntryBase = {
|
|
17
17
|
/**
|
|
@@ -20,25 +20,11 @@ type DropdownEntryBase = {
|
|
|
20
20
|
* group (the check is), or when an append slot fills the region.
|
|
21
21
|
*/
|
|
22
22
|
'append:icon'?: IconType;
|
|
23
|
-
/**
|
|
24
|
-
* Key used to identify the entry. REQUIRED when anything outside the menu
|
|
25
|
-
* reads it: a row in a `selectable` group (the v-model holds it), a row or
|
|
26
|
-
* group with its own slot (`#<key>` is named by it), a group bound by a
|
|
27
|
-
* `<BbDropdownGroup id>` or selectable. Optional on a plain action row (it
|
|
28
|
-
* runs its `onClick`) and a layout-only group: the dropdown then derives an
|
|
29
|
-
* internal identity from the text that nothing outside ever sees. A keyless
|
|
30
|
-
* row in a selectable group renders but can't be selected. Load-bearing
|
|
31
|
-
* identifiers are written, never derived — `bitboss-ui check` flags a
|
|
32
|
-
* missing required key where the items are in the same file.
|
|
33
|
-
*/
|
|
34
|
-
key?: string;
|
|
35
|
-
/** @internal Set by the dropdown on a row it derived a key for (Q53.17). */
|
|
36
|
-
keyless?: true;
|
|
37
23
|
/**
|
|
38
24
|
* Your own data for this entry, carried untouched to its slots (as
|
|
39
25
|
* `item.meta`) and to per-item `pt` functions. The dropdown never reads it
|
|
40
26
|
* and never puts it on the DOM. Typically the record the entry stands for,
|
|
41
|
-
* e.g. `{
|
|
27
|
+
* e.g. `{ value: clinic.id, label: clinic.name, meta: clinic }`; a fetched
|
|
42
28
|
* group sets it through `itemProps` (`(clinic) => ({ meta: clinic })`).
|
|
43
29
|
*/
|
|
44
30
|
meta?: any;
|
|
@@ -56,10 +42,10 @@ type DropdownEntryBase = {
|
|
|
56
42
|
};
|
|
57
43
|
/**
|
|
58
44
|
* The `itemProps` fields of a fetched (pipeline) dropdown group: everything a
|
|
59
|
-
* hand-written row accepts except its identity and structure (`
|
|
60
|
-
* `items`, `group`) and `disabled`. See {@link InternalGroup.itemProps}.
|
|
45
|
+
* hand-written row accepts except its identity and structure (`value`,
|
|
46
|
+
* `label`, `items`, `group`) and `disabled`. See {@link InternalGroup.itemProps}.
|
|
61
47
|
*/
|
|
62
|
-
export type DropdownItemFields = Omit<BbBaseButtonProps, 'block' | 'tag' | 'type' | 'text' | 'disabled'> &
|
|
48
|
+
export type DropdownItemFields = Omit<BbBaseButtonProps, 'block' | 'tag' | 'type' | 'text' | 'disabled'> & DropdownEntryBase & {
|
|
63
49
|
/** Muted second line under the row text. */
|
|
64
50
|
description: string;
|
|
65
51
|
};
|
|
@@ -99,11 +85,41 @@ type SubmenuExclusive = {
|
|
|
99
85
|
} | {
|
|
100
86
|
items?: undefined;
|
|
101
87
|
};
|
|
102
|
-
export type InternalItem = Omit<BbBaseButtonProps, 'block' | 'tag' | 'type'> & SubmenuExclusive & DropdownEntryBase & {
|
|
103
|
-
/**
|
|
104
|
-
|
|
88
|
+
export type InternalItem = Omit<BbBaseButtonProps, 'block' | 'tag' | 'type' | 'text'> & SubmenuExclusive & DropdownEntryBase & {
|
|
89
|
+
/** The row's text. */
|
|
90
|
+
label: string;
|
|
91
|
+
/**
|
|
92
|
+
* The row's identity, any type: what `v-model` holds when its group is
|
|
93
|
+
* `selectable` (compared by `hash()`, like `BbSelect` options, so `null`
|
|
94
|
+
* and objects are values too: a `value: null` row is the group's "None"),
|
|
95
|
+
* the name of its own slots (`#<value>`, a string or number value
|
|
96
|
+
* through `slotKey`; any other type gets the shared slots only) and the
|
|
97
|
+
* seed of its submenu's id.
|
|
98
|
+
*
|
|
99
|
+
* REQUIRED when anything outside the menu reads it: a row in a
|
|
100
|
+
* `selectable` group, a row with its own slot. Optional on a plain
|
|
101
|
+
* action row (it runs its `onClick`): the dropdown then derives an
|
|
102
|
+
* internal identity from the label that nothing outside ever sees. A row
|
|
103
|
+
* without a `value` in a selectable group renders disabled. Load-bearing
|
|
104
|
+
* identifiers are written, never derived — `bitboss-ui check` flags a
|
|
105
|
+
* missing required `value` where the items are in the same file.
|
|
106
|
+
*/
|
|
107
|
+
value?: unknown;
|
|
108
|
+
/** Rows have no `key` (that is `value`). Guards against the old shape. */
|
|
109
|
+
key?: never;
|
|
110
|
+
/** Rows have no `text` (that is `label`). Guards against the old shape. */
|
|
111
|
+
text?: never;
|
|
112
|
+
/** @internal Set by the dropdown on a row it derived an identity for (Q53.17). */
|
|
113
|
+
keyless?: true;
|
|
105
114
|
/**
|
|
106
|
-
*
|
|
115
|
+
* @internal The row's selection key, set by the dropdown: `hash(value)`,
|
|
116
|
+
* or the identity it derived for a row without a `value`.
|
|
117
|
+
*/
|
|
118
|
+
rowKey?: string;
|
|
119
|
+
/** @internal The row's readable DOM token, set by the dropdown (submenu ids). */
|
|
120
|
+
domKey?: string;
|
|
121
|
+
/**
|
|
122
|
+
* Muted descriptive line rendered below `label`. The row grows to fit it,
|
|
107
123
|
* while icons/check/chevron stay aligned with the title line.
|
|
108
124
|
*/
|
|
109
125
|
description?: string;
|
|
@@ -129,7 +145,7 @@ export type InternalItem = Omit<BbBaseButtonProps, 'block' | 'tag' | 'type'> & S
|
|
|
129
145
|
* async items load (`'loading'`), when it resolved empty (`'empty'`), or
|
|
130
146
|
* when its latest load FAILED (`'failed'`: the footer under whatever rows a
|
|
131
147
|
* `stash` keeps listed, Q61.15). Rendered as a non-interactive row that
|
|
132
|
-
* shows `
|
|
148
|
+
* shows `label` or, when provided, the dropdown's `loading` / `empty` slot.
|
|
133
149
|
* Internal — set by `BbDropdownGroup`.
|
|
134
150
|
*/
|
|
135
151
|
placeholder?: 'loading' | 'empty' | 'failed';
|
|
@@ -149,8 +165,8 @@ export type InternalItem = Omit<BbBaseButtonProps, 'block' | 'tag' | 'type'> & S
|
|
|
149
165
|
/**
|
|
150
166
|
* Optional slot token used to resolve per-item named slots. Primarily set
|
|
151
167
|
* by the pipeline resolver so slot names can be derived from the resolved
|
|
152
|
-
* `itemValue` (readable), while `
|
|
153
|
-
* Internal.
|
|
168
|
+
* `itemValue` (readable), while `rowKey` remains the hash-based selection
|
|
169
|
+
* id. Internal.
|
|
154
170
|
*/
|
|
155
171
|
slotKey?: string;
|
|
156
172
|
};
|
|
@@ -187,6 +203,18 @@ export type DropdownGroupItemsGetter = ((context: BbDropdownGroupItemsContext) =
|
|
|
187
203
|
query: string;
|
|
188
204
|
}) => any[] | Promise<any[]>);
|
|
189
205
|
export type InternalGroup = DropdownEntryBase & {
|
|
206
|
+
/**
|
|
207
|
+
* The group's identity: REQUIRED on a `selectable` group (its picks are
|
|
208
|
+
* stored under it, and `useBbDropdownContext` keys the group by it), on a
|
|
209
|
+
* group bound by a `<BbDropdownGroup id>` (the same word) and on a group
|
|
210
|
+
* with its own slots (`#<id>:item`, `#<id>`). Optional on a layout-only
|
|
211
|
+
* group; a selectable group without one renders as a plain group.
|
|
212
|
+
*/
|
|
213
|
+
id?: string;
|
|
214
|
+
/** Groups have no `key` (that is `id`). Guards against the old shape. */
|
|
215
|
+
key?: never;
|
|
216
|
+
/** Groups have no `value`; their rows do. */
|
|
217
|
+
value?: never;
|
|
190
218
|
/** Pipeline groups only. Re-run the async getter when any of these change. */
|
|
191
219
|
dependencies?: unknown[];
|
|
192
220
|
/** Pipeline groups only. Debounce (ms) for `dependencies`-driven re-fetch. */
|
|
@@ -222,17 +250,19 @@ export type InternalGroup = DropdownEntryBase & {
|
|
|
222
250
|
*/
|
|
223
251
|
items: Array<InternalItem | InternalItem[]> | any[] | DropdownGroupItemsGetter;
|
|
224
252
|
/**
|
|
225
|
-
* Pipeline groups only. Path/getter producing each item's display text
|
|
226
|
-
*
|
|
253
|
+
* Pipeline groups only. Path/getter producing each item's display text
|
|
254
|
+
* (a string item is its own text).
|
|
227
255
|
*
|
|
228
|
-
*
|
|
256
|
+
* Unset: own `label`, else `text` (`{ label, value }` needs no accessor).
|
|
257
|
+
*
|
|
258
|
+
* @defaultValue own `label`, else `text`, else `JSON.stringify(item)`
|
|
229
259
|
*/
|
|
230
260
|
itemText?: string | ((item: any) => string);
|
|
231
261
|
/**
|
|
232
262
|
* Pipeline groups only. The ADDITIONAL fields of each fetched row — never its
|
|
233
263
|
* text or value, which stay on `itemText` / `itemValue`. A fetched row takes
|
|
234
264
|
* every field a hand-written row accepts except its identity and structure
|
|
235
|
-
* (`
|
|
265
|
+
* (`value`, `label`, `items`, `group`) and `disabled`: `description`, the icons,
|
|
236
266
|
* `variant`, `onClick`, `href` / `to` and the rest of the link and Inertia
|
|
237
267
|
* options.
|
|
238
268
|
*
|
|
@@ -243,17 +273,18 @@ export type InternalGroup = DropdownEntryBase & {
|
|
|
243
273
|
* the handler: `onClick: (user) => () => open(user)`.
|
|
244
274
|
*
|
|
245
275
|
* Nothing is read off the raw item implicitly — without `itemProps` a row
|
|
246
|
-
* has only its
|
|
276
|
+
* has only its label. An empty value means the field is absent. To disable
|
|
247
277
|
* individual rows use a `selectable` predicate on the group; fetched groups
|
|
248
278
|
* are for selection (see plans/ITEM-DESCRIPTION.md v2.4).
|
|
249
279
|
*/
|
|
250
280
|
itemProps?: BbDropdownItemProps;
|
|
251
281
|
/**
|
|
252
282
|
* Pipeline groups only. Path/getter producing each item's value — what
|
|
253
|
-
* `v-model` surfaces; its hash is the internal selection key.
|
|
254
|
-
*
|
|
283
|
+
* `v-model` surfaces; its hash is the internal selection key.
|
|
284
|
+
*
|
|
285
|
+
* Unset: own `value`, even `null`.
|
|
255
286
|
*
|
|
256
|
-
* @defaultValue the whole item
|
|
287
|
+
* @defaultValue own `value`, else the whole item
|
|
257
288
|
*/
|
|
258
289
|
itemValue?: string | ((item: any) => any);
|
|
259
290
|
/** Pipeline groups only. Placeholder row text while async items load. */
|
|
@@ -344,7 +375,7 @@ export type InternalGroup = DropdownEntryBase & {
|
|
|
344
375
|
*/
|
|
345
376
|
selectable?: boolean | ((item: any) => boolean);
|
|
346
377
|
/**
|
|
347
|
-
* Searchable pipeline groups only. Accumulate the items behind *selected*
|
|
378
|
+
* Searchable pipeline groups only. Accumulate the items behind *selected* values
|
|
348
379
|
* so they stay resolvable across searches. Without it, selecting an item in one
|
|
349
380
|
* search and then searching for something else leaves the earlier selection
|
|
350
381
|
* unresolvable (its value/text is gone from the current results) — which in a
|
|
@@ -384,7 +415,7 @@ export declare const groupItemsAsArray: (items: InternalGroup["items"] | undefin
|
|
|
384
415
|
* - an array of items — rendered as an anonymous divider-separated group;
|
|
385
416
|
* - a {@link InternalGroup} object — a titled / selectable section.
|
|
386
417
|
*
|
|
387
|
-
* The shapes can be mixed, e.g. `[item, [item, item], {
|
|
418
|
+
* The shapes can be mixed, e.g. `[item, [item, item], { id, label, items }]`.
|
|
388
419
|
*/
|
|
389
420
|
export type Item = InternalItem | InternalGroup | Item[];
|
|
390
421
|
/** Unwraps the item type out of the (possibly nested) {@link Items} shape. */
|
|
@@ -413,11 +444,13 @@ export declare const isGroup: (entry: Item) => entry is InternalGroup;
|
|
|
413
444
|
* defaults are resolved here. Produced by `normalizeGroups`.
|
|
414
445
|
*/
|
|
415
446
|
/**
|
|
416
|
-
* A row after normalization: its `
|
|
417
|
-
* the dropdown derived for
|
|
447
|
+
* A row after normalization: its `rowKey` is always set — `hash(value)`, or an
|
|
448
|
+
* identity the dropdown derived for an action row without a `value`
|
|
449
|
+
* (`keyless`, Q53.17).
|
|
418
450
|
*/
|
|
419
451
|
export type KeyedItem = InternalItem & {
|
|
420
|
-
|
|
452
|
+
rowKey: string;
|
|
453
|
+
domKey: string;
|
|
421
454
|
};
|
|
422
455
|
export type NormalizedGroup = {
|
|
423
456
|
'append:icon'?: IconType;
|
|
@@ -425,11 +458,11 @@ export type NormalizedGroup = {
|
|
|
425
458
|
clearable?: boolean;
|
|
426
459
|
/** Whether a divider is rendered before this group. */
|
|
427
460
|
divider: boolean;
|
|
428
|
-
/** Keys matched against each raw item when searching (empty ⇒ match
|
|
461
|
+
/** Keys matched against each raw item when searching (empty ⇒ match the label). */
|
|
429
462
|
filterBy?: string[];
|
|
430
463
|
items: KeyedItem[];
|
|
431
|
-
/** Group
|
|
432
|
-
|
|
464
|
+
/** Group id (when it originated from a {@link InternalGroup} object). */
|
|
465
|
+
id?: string;
|
|
433
466
|
/** Fixed max-height (px number or CSS length) of this group's item region. */
|
|
434
467
|
maxHeight?: number | string;
|
|
435
468
|
/** The group's own `meta`, untouched. */
|
|
@@ -442,7 +475,7 @@ export type NormalizedGroup = {
|
|
|
442
475
|
/** Placeholder for this group's search field. */
|
|
443
476
|
searchPlaceholder?: string;
|
|
444
477
|
selectable: boolean;
|
|
445
|
-
/** Selected
|
|
478
|
+
/** Selected row keys (`rowKey`; injected by `BbDropdown`; empty for non-selectable groups). */
|
|
446
479
|
selected: string[];
|
|
447
480
|
/** The group's label. Loose/anonymous groups have none. */
|
|
448
481
|
label?: string;
|
|
@@ -464,7 +497,7 @@ export type MappedItem = InternalItem & {
|
|
|
464
497
|
* Passthrough parts of `BbDropdown` (plans/passthrough/BbDropdown.md). Groups,
|
|
465
498
|
* headings and dividers are not parts.
|
|
466
499
|
*
|
|
467
|
-
* Per-item functions: on the instance, an entry part (`item`, `itemText`, `itemIcon`, `itemDescription`) also accepts `({ item, selected, … }) => PtValue | false | null | undefined` — `item` is the menu entry (an `Item`: its `
|
|
500
|
+
* Per-item functions: on the instance, an entry part (`item`, `itemText`, `itemIcon`, `itemDescription`) also accepts `({ item, selected, … }) => PtValue | false | null | undefined` — `item` is the menu entry (an `Item`: its `label`, `value`, `description`, whatever else you put on it), and every state a boolean beside it, on for it (`selected`, `disabled`, …) — in the `pt` object or the `:pt:<part>` attribute, never on a `<part>:<state>` key and never in the global map or a scope (they ship as JSON). Its result is merged last, after every state entry, through the same deduper; a falsy result leaves the entry as it was. See the passthrough guide, _Per-item functions_.
|
|
468
501
|
*
|
|
469
502
|
* @part root - The floating element — an invisible positioning wrapper; a
|
|
470
503
|
* `class` on the component lands here. No node on the phone sheet: style
|
|
@@ -484,13 +517,13 @@ export type MappedItem = InternalItem & {
|
|
|
484
517
|
* headings and dividers are not parts.
|
|
485
518
|
* @part item - One menu entry, submenus included — a broadcast resolved per
|
|
486
519
|
* entry. Also takes a per-item function, called with the entry.
|
|
487
|
-
* @part itemText - An entry's label (its `
|
|
488
|
-
* entry's states. A per-entry `#<
|
|
520
|
+
* @part itemText - An entry's label (its `label`) — resolved with that
|
|
521
|
+
* entry's states. A per-entry `#<value>` slot replaces it. Also takes a
|
|
489
522
|
* per-item function.
|
|
490
523
|
* @part itemIcon - An entry's prepend / append icons — resolved with that
|
|
491
524
|
* entry's states. Also takes a per-item function.
|
|
492
525
|
* @part itemDescription - An entry's muted second line (its `description`) —
|
|
493
|
-
* resolved with that entry's states. A per-entry `#<
|
|
526
|
+
* resolved with that entry's states. A per-entry `#<value>` slot replaces it.
|
|
494
527
|
* Also takes a per-item function.
|
|
495
528
|
*/
|
|
496
529
|
export type BbDropdownPtPart = 'root' | 'panel' | 'sheet' | 'header' | 'footer' | 'input' | 'list' | 'item' | 'itemText' | 'itemIcon' | 'itemDescription';
|
|
@@ -574,7 +607,8 @@ export type BbDropdownProps = {
|
|
|
574
607
|
disabled?: boolean;
|
|
575
608
|
/**
|
|
576
609
|
* Renders the menu panel at mount instead of on the first open (the phone
|
|
577
|
-
* sheet's too).
|
|
610
|
+
* sheet's too), and keeps its rows after a close. Without it the rows mount
|
|
611
|
+
* on each open and go once the menu has closed.
|
|
578
612
|
*/
|
|
579
613
|
eager?: boolean;
|
|
580
614
|
/**
|
|
@@ -700,8 +734,8 @@ export type BbDropdownEvents = {
|
|
|
700
734
|
/**
|
|
701
735
|
* The user selected a row in a selectable group, at the click — also when a
|
|
702
736
|
* controlled companion's app then refuses the value. The payload is the
|
|
703
|
-
*
|
|
704
|
-
*
|
|
737
|
+
* row's value (its `item-value` for pipeline groups, else its `value`) —
|
|
738
|
+
* symmetric with `BbTable`'s `item:selected`.
|
|
705
739
|
*/
|
|
706
740
|
(e: 'item:selected', value: any): void;
|
|
707
741
|
/**
|
|
@@ -743,11 +777,11 @@ export type BbDropdownEdgeSlotProps = {
|
|
|
743
777
|
};
|
|
744
778
|
/**
|
|
745
779
|
* The group a slot renders in, as item slots see it. Anonymous groups (loose
|
|
746
|
-
* items, plain arrays) have no `
|
|
780
|
+
* items, plain arrays) have no `id` and no `label`.
|
|
747
781
|
*/
|
|
748
782
|
export type BbDropdownSlotGroup = {
|
|
749
|
-
/** The group's
|
|
750
|
-
|
|
783
|
+
/** The group's id, when it was declared as a group object. */
|
|
784
|
+
id?: string;
|
|
751
785
|
/** The group's label, when it has one (also when `hideLabel` hides it). */
|
|
752
786
|
label?: string;
|
|
753
787
|
/** The group's own `meta`. */
|
|
@@ -794,13 +828,13 @@ export type BbDropdownItemSlotProps = {
|
|
|
794
828
|
placement: BbDropdownProps['placement'];
|
|
795
829
|
/** Whether the item currently sits in a selectable group and is selected. */
|
|
796
830
|
selected: boolean;
|
|
797
|
-
/** The
|
|
798
|
-
|
|
831
|
+
/** The row's label (on a group's title line, the group's label). */
|
|
832
|
+
label: InternalItem['label'];
|
|
799
833
|
};
|
|
800
834
|
/** Props exposed by the `loading` and `empty` placeholder slots. */
|
|
801
835
|
export type BbDropdownPlaceholderSlotProps = {
|
|
802
|
-
/**
|
|
803
|
-
|
|
836
|
+
/** Id of the group this placeholder belongs to. */
|
|
837
|
+
groupId?: string;
|
|
804
838
|
/** Resolved placeholder text (group `loadingText`/`emptyText`/`failedText` → dropdown default). */
|
|
805
839
|
text: string;
|
|
806
840
|
/**
|
|
@@ -811,23 +845,24 @@ export type BbDropdownPlaceholderSlotProps = {
|
|
|
811
845
|
error?: unknown;
|
|
812
846
|
};
|
|
813
847
|
/**
|
|
814
|
-
* Besides the fixed slots, every
|
|
815
|
-
* through `slotKey` (`'practice-switcher'` →
|
|
816
|
-
*
|
|
817
|
-
*
|
|
818
|
-
* the `prepend
|
|
819
|
-
*
|
|
820
|
-
*
|
|
848
|
+
* Besides the fixed slots, every row gets named slots from its `value` (a
|
|
849
|
+
* string or number) run through `slotKey` (`'practice-switcher'` →
|
|
850
|
+
* `practice-switcher`, `'Delete file'` → `delete-file`), and every group from
|
|
851
|
+
* its `id`. The most specific slot a row has wins: its own, then its group's,
|
|
852
|
+
* then the shared `item:prepend` / `item:append`. Each edge has ONE occupant: a
|
|
853
|
+
* slot replaces the `prepend:icon` / `append:icon`. On the trailing edge the
|
|
854
|
+
* selected row's check beats every slot, a row's own `#<value>:append` beats
|
|
855
|
+
* the submenu chevron, and the chevron beats the group-wide and shared slots.
|
|
821
856
|
*
|
|
822
|
-
* @dynamicSlot `<
|
|
823
|
-
* @dynamicSlot `<
|
|
824
|
-
* @dynamicSlot `<
|
|
825
|
-
* @dynamicSlot `<
|
|
826
|
-
* @dynamicSlot `<
|
|
827
|
-
* @dynamicSlot `<
|
|
828
|
-
* @dynamicSlot `<
|
|
829
|
-
* @dynamicSlot `<
|
|
830
|
-
* @dynamicSlot `<
|
|
857
|
+
* @dynamicSlot `<value>` {BbDropdownItemSlotProps} - One row's content (label and description), by its value; in a fetched group, by its resolved `itemValue`.
|
|
858
|
+
* @dynamicSlot `<value>:prepend` {BbDropdownItemSlotProps} - One row's leading region; replaces its `prepend:icon`.
|
|
859
|
+
* @dynamicSlot `<value>:append` {BbDropdownItemSlotProps} - One row's trailing region; replaces its `append:icon` and its submenu chevron. The check takes its place on the selected row.
|
|
860
|
+
* @dynamicSlot `<groupId>:item` {BbDropdownItemSlotProps} - The content of every row of that group, and no other; a row's own `#<value>` still wins.
|
|
861
|
+
* @dynamicSlot `<groupId>:item:prepend` {BbDropdownItemSlotProps} - The leading region of every row of that group — e.g. an avatar per record, drawn from `item.meta`, while other rows keep their `prepend:icon`.
|
|
862
|
+
* @dynamicSlot `<groupId>:item:append` {BbDropdownItemSlotProps} - The trailing region of every row of that group; replaces their `append:icon`. The check takes its place on the selected row.
|
|
863
|
+
* @dynamicSlot `<groupId>` {BbDropdownItemSlotProps} - That group's title line (the group is passed as `item`, `groupTitle` is `true`).
|
|
864
|
+
* @dynamicSlot `<groupId>:prepend` {BbDropdownItemSlotProps} - The leading region of that group's title line.
|
|
865
|
+
* @dynamicSlot `<groupId>:append` {BbDropdownItemSlotProps} - The trailing region of that group's title line.
|
|
831
866
|
*/
|
|
832
867
|
export type BbDropdownSlots = {
|
|
833
868
|
/**
|
|
@@ -874,17 +909,13 @@ export type BbDropdownSlots = {
|
|
|
874
909
|
footer?: (props: BbDropdownEdgeSlotProps) => any;
|
|
875
910
|
} & Record<string, (props: BbDropdownItemSlotProps) => any>;
|
|
876
911
|
/**
|
|
877
|
-
* `v-model` value of `<BbDropdownGroup
|
|
878
|
-
*
|
|
879
|
-
*
|
|
880
|
-
*
|
|
881
|
-
*
|
|
882
|
-
* - **Pipeline group** (`items` getter + `item-text`/`item-value` in
|
|
883
|
-
* `BbDropdown.items`): the model mirrors the selected *values* produced by
|
|
884
|
-
* `item-value` (the whole object by default) — `T | null` (single) or `T[]`
|
|
885
|
-
* (multiple).
|
|
912
|
+
* `v-model` value of `<BbDropdownGroup>`: the selected rows' values — a
|
|
913
|
+
* hand-written row's `value`, or what `item-value` produces in a pipeline group
|
|
914
|
+
* (its own `value`, else the whole item). `T | null` (single) or `T[]`
|
|
915
|
+
* (multiple). A single group whose model is `null` shows its `value: null` row
|
|
916
|
+
* (the "None" row) checked, when it has one.
|
|
886
917
|
*/
|
|
887
|
-
export type BbDropdownGroupModel<T = any> = T[] | T |
|
|
918
|
+
export type BbDropdownGroupModel<T = any> = T[] | T | null;
|
|
888
919
|
/**
|
|
889
920
|
* Props of the `<BbDropdownGroup>` companion. Intentionally minimal: the group
|
|
890
921
|
* itself (items, `item-text`/`item-value`, `max`, `multiple`, async getter, …)
|
|
@@ -893,7 +924,7 @@ export type BbDropdownGroupModel<T = any> = T[] | T | string[] | string | null;
|
|
|
893
924
|
*/
|
|
894
925
|
export type BbDropdownGroupProps = {
|
|
895
926
|
/**
|
|
896
|
-
* Identifier of the group to bind to — must match the `
|
|
927
|
+
* Identifier of the group to bind to — must match the `id` of a group
|
|
897
928
|
* declared in the host `BbDropdown`'s `items`.
|
|
898
929
|
*/
|
|
899
930
|
id: string;
|
|
@@ -907,8 +938,8 @@ export type BbDropdownGroupEvents = {
|
|
|
907
938
|
(e: 'update:modelValue', value: BbDropdownGroupModel): void;
|
|
908
939
|
/**
|
|
909
940
|
* The user picked a row, at the click, a pick you then refuse included —
|
|
910
|
-
* with the
|
|
911
|
-
*
|
|
941
|
+
* with the row's value (its `item-value` for pipeline groups, else its
|
|
942
|
+
* `value`), symmetric with `BbTable`. Your own `v-model` changes fire none.
|
|
912
943
|
*/
|
|
913
944
|
(e: 'item:selected', value: any): void;
|
|
914
945
|
/** The user unpicked a row (or a single pick replaced it), with its resolved value. */
|
package/dist/components/BbDropdownButton/BbDropdownButton.vue_vue_type_script_setup_true_lang.js
CHANGED
|
@@ -151,13 +151,22 @@ var M = /*@__PURE__*/ v({
|
|
|
151
151
|
e && Array.isArray(t) && t.length > 0 && Z.throw("BbDropdownButton: items[0] is the main button's action; it can't open a submenu — move the submenu item after it", TypeError);
|
|
152
152
|
}, { immediate: !0 });
|
|
153
153
|
let Q = /* @__PURE__ */ new Set([
|
|
154
|
-
"
|
|
154
|
+
"value",
|
|
155
|
+
"label",
|
|
156
|
+
"meta",
|
|
157
|
+
"description",
|
|
155
158
|
"items",
|
|
156
159
|
"group",
|
|
157
160
|
"variant",
|
|
158
161
|
"prepend:icon",
|
|
159
162
|
"append:icon"
|
|
160
|
-
]), $ = f(() =>
|
|
163
|
+
]), $ = f(() => {
|
|
164
|
+
let e = X.value[0];
|
|
165
|
+
return {
|
|
166
|
+
...Object.fromEntries(Object.entries(e ?? {}).filter(([e]) => !Q.has(e))),
|
|
167
|
+
text: e?.label
|
|
168
|
+
};
|
|
169
|
+
});
|
|
161
170
|
return (e, t) => (S(), h("span", b({
|
|
162
171
|
ref: "root-el",
|
|
163
172
|
class: ["bb-dropdown-button", { "bb-dropdown-button--block": e.block }]
|
|
@@ -190,8 +190,8 @@ export type BbDropdownButtonItemSlotProps = {
|
|
|
190
190
|
open: boolean;
|
|
191
191
|
/** The current placement of the dropdown panel. */
|
|
192
192
|
placement: BbDropdownProps['placement'];
|
|
193
|
-
/** The
|
|
194
|
-
|
|
193
|
+
/** The row's label. */
|
|
194
|
+
label: MappedItem['label'];
|
|
195
195
|
};
|
|
196
196
|
/**
|
|
197
197
|
* Every slot is forwarded to the menu, so the per-entry slots are BbDropdown's
|
|
@@ -69,6 +69,15 @@ declare const __VLS_export: <S extends BbFormSchema = BbFormSchema>(__VLS_props:
|
|
|
69
69
|
* drops once the user edits the field, call `setErrors` instead.
|
|
70
70
|
*/
|
|
71
71
|
fieldErrors?: Record<string, unknown> | null;
|
|
72
|
+
/**
|
|
73
|
+
* Keep the fields editable while a save runs. By default, while a
|
|
74
|
+
* `@submit` that returned a promise is pending, every field joined to the
|
|
75
|
+
* form is read-only (never disabled: values stay readable and focusable)
|
|
76
|
+
* and every `type="submit"` BbButton inside the form shows its spinner;
|
|
77
|
+
* both end when the promise settles. A `@submit` that returns nothing
|
|
78
|
+
* never locks.
|
|
79
|
+
*/
|
|
80
|
+
disableSubmitLock?: boolean;
|
|
72
81
|
} & {
|
|
73
82
|
onSubmit?: ((values: BbFormSubmitValues<S>) => any) | undefined;
|
|
74
83
|
onInvalid?: ((payload: BbFormInvalidPayload) => any) | undefined;
|