bitboss-ui 3.0.0-beta.47 → 3.0.0-beta.49
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -7
- package/bin/bitboss-ui-mcp.mjs +15 -3
- package/bin/bitboss-ui.mjs +167 -14
- package/dist/ai/BbAccordion.md +1 -1
- package/dist/ai/BbAvatar.md +1 -1
- package/dist/ai/BbBreadcrumbs.md +65 -65
- package/dist/ai/BbButton.md +28 -8
- package/dist/ai/BbCheckbox.md +0 -2
- package/dist/ai/BbCheckboxGroup.md +13 -20
- package/dist/ai/BbCollapsible.md +1 -1
- package/dist/ai/BbColorPalette.md +1 -1
- package/dist/ai/BbConfirm.md +8 -0
- package/dist/ai/BbConfirmPortal.md +1 -1
- package/dist/ai/BbDatePickerInput.md +4 -2
- package/dist/ai/BbDialog.md +1 -8
- package/dist/ai/BbDropdown.md +231 -220
- package/dist/ai/BbDropdownButton.md +65 -65
- package/dist/ai/BbDropdownGroup.md +2 -2
- package/dist/ai/BbDropzone.md +10 -10
- package/dist/ai/BbForm.md +43 -52
- package/dist/ai/BbHoverCard.md +19 -7
- package/dist/ai/BbHoverCardPortal.md +1 -1
- package/dist/ai/BbNumberInput.md +88 -21
- package/dist/ai/BbPopover.md +47 -40
- package/dist/ai/BbPopoverPortal.md +1 -1
- package/dist/ai/BbProgress.md +48 -22
- package/dist/ai/BbRadioGroup.md +13 -19
- package/dist/ai/BbSelect.md +16 -36
- package/dist/ai/BbSelectPopover.md +14 -30
- package/dist/ai/BbSmoothHeight.md +0 -2
- package/dist/ai/BbSwitchGroup.md +13 -20
- package/dist/ai/BbTable.md +11 -10
- package/dist/ai/BbTabs.md +107 -106
- package/dist/ai/BbTabsList.md +2 -2
- package/dist/ai/BbTabsPanels.md +1 -1
- package/dist/ai/BbTabsRoot.md +3 -3
- package/dist/ai/BbTooltip.md +29 -13
- package/dist/ai/BbTree.md +14 -11
- package/dist/ai/CommonPopover.md +1 -1
- package/dist/ai/changelog.json +297 -6
- package/dist/ai/components.json +50 -45
- package/dist/ai/composables/useBbDropdownContext.md +16 -16
- package/dist/ai/composables/useBbFormField.md +5 -1
- package/dist/ai/composables/useBbTabsContext.md +14 -14
- package/dist/ai/guides/agent-contract.md +27 -27
- package/dist/ai/guides/ai-router.md +1 -1
- package/dist/ai/guides/component-picker.md +3 -3
- package/dist/ai/guides/fetch-items-playbook.md +1 -1
- package/dist/ai/guides/icons-policy.md +10 -10
- package/dist/ai/guides/inertia-helpers.md +120 -67
- package/dist/ai/guides/installation-and-plugin-setup.md +45 -15
- package/dist/ai/guides/migration/components/bb-breadcrumbs.md +3 -2
- package/dist/ai/guides/migration/components/bb-checkbox-group.md +16 -16
- package/dist/ai/guides/migration/components/bb-dropdown-button.md +9 -8
- package/dist/ai/guides/migration/components/bb-dropdown.md +15 -14
- package/dist/ai/guides/migration/components/bb-radio-group.md +2 -1
- package/dist/ai/guides/migration/components/bb-select-popover.md +6 -1
- package/dist/ai/guides/migration/components/bb-select.md +10 -2
- package/dist/ai/guides/migration/components/bb-switch-group.md +2 -1
- package/dist/ai/guides/migration/components/bb-tabs.md +9 -8
- package/dist/ai/guides/migration/components/bb-tooltip.md +1 -1
- package/dist/ai/guides/migration/v2-to-v3.md +143 -28
- package/dist/ai/guides/migration/v3-beta-css-classes.md +29 -27
- package/dist/ai/guides/migration/v3-beta-tooling.md +11 -0
- package/dist/ai/guides/options-items-playbook.md +30 -24
- package/dist/ai/guides/passthrough.md +4 -4
- package/dist/ai/guides/preset-components.md +18 -3
- package/dist/ai/guides/typescript-generic-components.md +1 -1
- package/dist/ai/guides/validated-forms.md +11 -22
- package/dist/ai/guides/validation-providers.md +4 -3
- package/dist/ai/helpers/inertia/manifest.json +636 -0
- package/dist/ai/helpers/inertia/types.ts +15 -0
- package/dist/ai/helpers/inertia/useAsyncFn.ts +110 -0
- package/dist/ai/helpers/inertia/useConfirmOnRouteLeave.ts +102 -0
- package/dist/ai/helpers/inertia/useDeleteCmd.ts +30 -0
- package/dist/ai/helpers/inertia/useHasChanged.ts +36 -0
- package/dist/ai/helpers/inertia/useIndexById.ts +23 -0
- package/dist/ai/helpers/inertia/useLazyProp.ts +148 -0
- package/dist/ai/helpers/inertia/useLazyPropGetter.ts +50 -0
- package/dist/ai/helpers/inertia/useLoading.ts +20 -0
- package/dist/ai/helpers/inertia/usePaginatedResponseContext.ts +88 -0
- package/dist/ai/helpers/inertia/usePromiseForm.ts +62 -0
- package/dist/ai/helpers/inertia/useProp.ts +63 -0
- package/dist/ai/helpers/inertia/useQuery.ts +19 -0
- package/dist/ai/helpers/inertia/useQueryObject.ts +116 -0
- package/dist/ai/helpers/inertia/useResourceContext.ts +69 -0
- package/dist/ai/helpers/inertia/useRouteQuery.ts +54 -0
- package/dist/ai/helpers/inertia/useScreenSizes.ts +23 -0
- package/dist/ai/helpers/inertia/useTableContext.ts +34 -0
- package/dist/ai/helpers/inertia/useTableSelectionContext.ts +48 -0
- package/dist/ai/helpers/inertia/useUntil.ts +33 -0
- package/dist/ai/helpers/inertia/utils.ts +24 -0
- package/dist/ai/index.md +6 -6
- package/dist/ai/manifest/components/BbAccordion.json +1 -1
- package/dist/ai/manifest/components/BbBreadcrumbs.json +10 -6
- package/dist/ai/manifest/components/BbBreadcrumbs.tree.json +1 -1
- package/dist/ai/manifest/components/BbButton.json +2 -1
- package/dist/ai/manifest/components/BbButton.tree.json +1 -1
- package/dist/ai/manifest/components/BbCheckboxGroup.json +2 -2
- package/dist/ai/manifest/components/BbCollapsible.json +1 -1
- package/dist/ai/manifest/components/BbColorPalette.json +1 -1
- package/dist/ai/manifest/components/BbConfirmPortal.json +5 -2
- package/dist/ai/manifest/components/BbDropdown.json +23 -20
- package/dist/ai/manifest/components/BbDropdown.tree.json +2 -2
- package/dist/ai/manifest/components/BbDropdownButton.json +22 -19
- package/dist/ai/manifest/components/BbDropdownButton.tree.json +1 -1
- package/dist/ai/manifest/components/BbDropdownGroup.json +2 -2
- package/dist/ai/manifest/components/BbForm.json +1 -0
- package/dist/ai/manifest/components/BbHoverCard.json +1 -1
- package/dist/ai/manifest/components/BbHoverCardPortal.json +2 -2
- package/dist/ai/manifest/components/BbNumberInput.json +6 -1
- package/dist/ai/manifest/components/BbNumberInput.tree.json +2 -1
- package/dist/ai/manifest/components/BbPopover.json +2 -1
- package/dist/ai/manifest/components/BbPopoverPortal.json +2 -2
- package/dist/ai/manifest/components/BbProgress.json +6 -6
- package/dist/ai/manifest/components/BbProgress.tree.json +1 -0
- package/dist/ai/manifest/components/BbRadioGroup.json +2 -2
- package/dist/ai/manifest/components/BbSelect.json +2 -2
- package/dist/ai/manifest/components/BbSelect.tree.json +2 -2
- package/dist/ai/manifest/components/BbSelectPopover.json +2 -2
- package/dist/ai/manifest/components/BbSelectPopover.tree.json +1 -1
- package/dist/ai/manifest/components/BbSwitchGroup.json +2 -2
- package/dist/ai/manifest/components/BbTabs.json +8 -7
- package/dist/ai/manifest/components/BbTabsList.json +3 -3
- package/dist/ai/manifest/components/BbTabsPanels.json +1 -1
- package/dist/ai/manifest/components/BbTabsRoot.json +6 -5
- package/dist/ai/manifest/components/BbTag.tree.json +1 -1
- package/dist/ai/manifest/components/BbTooltip.json +2 -2
- package/dist/ai/manifest/components/ChipsBox.tree.json +1 -1
- package/dist/ai/manifest/components/CommonPopover.json +1 -1
- package/dist/ai/manifest/index.json +2 -2
- package/dist/ai/manifest/meta.json +5 -0
- package/dist/ai/manifest/types.advanced.json +10 -9
- package/dist/ai/manifest/types.api.json +8 -5
- package/dist/ai/manifest/types.wrapper.json +1 -0
- package/dist/ai/recipes/inertia/approvals-inbox.md +16 -18
- package/dist/ai/recipes/inertia/inline-edit-workspace.md +23 -33
- package/dist/ai/recipes/inertia/layout-scaffold.md +16 -16
- package/dist/ai/recipes/inertia/onboarding.md +6 -10
- package/dist/ai/recipes/inertia/ownership-atlas.md +15 -18
- package/dist/ai/recipes/inertia/record-form.md +11 -11
- package/dist/ai/recipes/inertia/records-workspace.md +38 -41
- package/dist/ai/recipes/inertia/settings-workspace.md +26 -38
- package/dist/ai/recipes/inertia/upload-center.md +31 -39
- package/dist/ai/recipes/inertia/wizard-form.md +10 -19
- package/dist/ai/recipes/nuxt/approvals-inbox.md +7 -8
- package/dist/ai/recipes/nuxt/inline-edit-workspace.md +14 -24
- package/dist/ai/recipes/nuxt/layout-scaffold.md +16 -16
- package/dist/ai/recipes/nuxt/onboarding.md +2 -6
- package/dist/ai/recipes/nuxt/ownership-atlas.md +7 -9
- package/dist/ai/recipes/nuxt/record-form.md +5 -5
- package/dist/ai/recipes/nuxt/records-workspace.md +29 -31
- package/dist/ai/recipes/nuxt/settings-workspace.md +22 -34
- package/dist/ai/recipes/nuxt/upload-center.md +22 -29
- package/dist/ai/recipes/nuxt/wizard-form.md +3 -11
- package/dist/ai/recipes/vue/approvals-inbox.md +7 -8
- package/dist/ai/recipes/vue/inline-edit-workspace.md +14 -24
- package/dist/ai/recipes/vue/layout-scaffold.md +16 -16
- package/dist/ai/recipes/vue/onboarding.md +2 -6
- package/dist/ai/recipes/vue/ownership-atlas.md +7 -9
- package/dist/ai/recipes/vue/record-form.md +5 -5
- package/dist/ai/recipes/vue/records-workspace.md +29 -31
- package/dist/ai/recipes/vue/settings-workspace.md +22 -34
- package/dist/ai/recipes/vue/upload-center.md +22 -29
- package/dist/ai/recipes/vue/wizard-form.md +3 -11
- package/dist/ai/source/BbAccordion.md +1 -1
- package/dist/ai/source/BbAlert.md +3 -3
- package/dist/ai/source/BbBadge.md +14 -10
- package/dist/ai/source/BbBadgeButton.md +17 -12
- package/dist/ai/source/BbBaseButton.md +1 -1
- package/dist/ai/source/BbBaseRadioIcon.md +1 -0
- package/dist/ai/source/BbBaseSwitchIcon.md +1 -0
- package/dist/ai/source/BbBreadcrumbs.md +63 -42
- package/dist/ai/source/BbButton.md +84 -38
- package/dist/ai/source/BbCalendar.md +17 -16
- package/dist/ai/source/BbCheckbox.md +3 -2
- package/dist/ai/source/BbCheckboxGroup.md +11 -4
- package/dist/ai/source/BbCollapsible.md +2 -1
- package/dist/ai/source/BbColorInput.md +10 -9
- package/dist/ai/source/BbColorPalette.md +2 -1
- package/dist/ai/source/BbConfirm.md +18 -1
- package/dist/ai/source/BbConfirmPortal.md +20 -6
- package/dist/ai/source/BbDatePicker.md +2 -2
- package/dist/ai/source/BbDatePickerInput.md +47 -20
- package/dist/ai/source/BbDialog.md +5 -5
- package/dist/ai/source/BbDropdown.md +231 -158
- package/dist/ai/source/BbDropdownButton.md +19 -12
- package/dist/ai/source/BbDropdownGroup.md +127 -93
- package/dist/ai/source/BbForm.md +25 -1
- package/dist/ai/source/BbHoverCard.md +30 -3
- package/dist/ai/source/BbHoverCardPortal.md +18 -3
- package/dist/ai/source/BbIndicator.md +4 -0
- package/dist/ai/source/BbNumberInput.md +855 -19
- package/dist/ai/source/BbOffCanvas.md +27 -11
- package/dist/ai/source/BbPagination.md +3 -3
- package/dist/ai/source/BbPopover.md +185 -12
- package/dist/ai/source/BbPopoverPortal.md +30 -3
- package/dist/ai/source/BbProgress.md +82 -18
- package/dist/ai/source/BbRadioGroup.md +12 -5
- package/dist/ai/source/BbRating.md +11 -9
- package/dist/ai/source/BbSelect.md +16 -10
- package/dist/ai/source/BbSelectPopover.md +29 -23
- package/dist/ai/source/BbSlider.md +12 -6
- package/dist/ai/source/BbSwitch.md +3 -2
- package/dist/ai/source/BbSwitchGroup.md +5 -2
- package/dist/ai/source/BbTable.md +102 -18
- package/dist/ai/source/BbTabs.md +30 -24
- package/dist/ai/source/BbTabsList.md +29 -23
- package/dist/ai/source/BbTabsPanels.md +29 -23
- package/dist/ai/source/BbTabsRoot.md +28 -22
- package/dist/ai/source/BbTag.md +10 -9
- package/dist/ai/source/BbTextInput.md +5 -4
- package/dist/ai/source/BbTextarea.md +6 -5
- package/dist/ai/source/BbTimePicker.md +1 -1
- package/dist/ai/source/BbTimePickerInput.md +46 -9
- package/dist/ai/source/BbToast.md +10 -7
- package/dist/ai/source/BbToastPortal.md +10 -7
- package/dist/ai/source/BbTooltip.md +88 -11
- package/dist/ai/source/BbTree.md +21 -3
- package/dist/ai/source/CommonField.md +6 -4
- package/dist/ai/source/CommonFieldInput.md +15 -10
- package/dist/ai/source/CommonPopover.md +8 -1
- package/dist/ai/source/CommonTimeSelector.md +5 -4
- package/dist/components/BbBadge/BbBadgeButton.vue_vue_type_script_setup_true_lang.js +10 -8
- package/dist/components/BbBaseButton/BbBaseButton.vue_vue_type_script_setup_true_lang.js +8 -8
- package/dist/components/BbBreadcrumbs/BbBreadcrumbs.vue_vue_type_script_setup_true_lang.js +45 -45
- package/dist/components/BbBreadcrumbs/types.d.ts +25 -17
- package/dist/components/BbButton/BbButton.vue_vue_type_script_setup_true_lang.js +88 -70
- package/dist/components/BbButton/toggleRoving.d.ts +6 -0
- package/dist/components/BbButton/toggleRoving.js +45 -0
- package/dist/components/BbButton/types.d.ts +12 -4
- package/dist/components/BbButton/types.js +5 -1
- package/dist/components/BbCalendar/BbCalendar.vue_vue_type_script_setup_true_lang.js +178 -178
- package/dist/components/BbCalendar/CalendarMonthPanel.vue_vue_type_script_setup_true_lang.js +15 -15
- package/dist/components/BbCalendar/CalendarYearPanel.vue_vue_type_script_setup_true_lang.js +28 -28
- package/dist/components/BbCalendar/useCalendarGrid.js +141 -139
- package/dist/components/BbCalendar/useDayjsLocale.d.ts +38 -15
- package/dist/components/BbCalendar/useDayjsLocale.js +31 -30
- package/dist/components/BbCheckbox/BbCheckbox.vue_vue_type_script_setup_true_lang.js +48 -48
- package/dist/components/BbCheckboxGroup/BbCheckboxGroup.vue_vue_type_script_setup_true_lang.js +81 -80
- package/dist/components/BbCheckboxGroup/types.d.ts +6 -2
- package/dist/components/BbCollapsible/types.d.ts +2 -1
- package/dist/components/BbColorInput/BbColorInput.vue_vue_type_script_setup_true_lang.js +69 -69
- package/dist/components/BbColorPalette/types.d.ts +2 -1
- package/dist/components/BbConfirm/BbConfirmPortal.vue.d.ts +2 -5
- package/dist/components/BbConfirm/types.d.ts +15 -0
- package/dist/components/BbDatePickerInput/BbDatePickerInput.vue_vue_type_script_setup_true_lang.js +363 -349
- package/dist/components/BbDropdown/AdaptiveDropdown.vue_vue_type_script_setup_true_lang.js +91 -86
- package/dist/components/BbDropdown/BbDropdown.vue_vue_type_script_setup_true_lang.js +298 -289
- package/dist/components/BbDropdown/BbDropdownList.vue_vue_type_script_setup_true_lang.js +322 -356
- package/dist/components/BbDropdown/DropdownPipelineResolver.vue_vue_type_script_setup_true_lang.js +17 -15
- package/dist/components/BbDropdown/DropdownRow.vue.d.ts +40 -0
- package/dist/components/BbDropdown/DropdownRow.vue.js +5 -0
- package/dist/components/BbDropdown/DropdownRow.vue_vue_type_script_setup_true_lang.js +60 -0
- package/dist/components/BbDropdown/normalizeGroups.d.ts +8 -2
- package/dist/components/BbDropdown/normalizeGroups.js +60 -46
- package/dist/components/BbDropdown/types.d.ts +120 -88
- package/dist/components/BbDropdownButton/BbDropdownButton.vue_vue_type_script_setup_true_lang.js +11 -2
- package/dist/components/BbDropdownButton/types.d.ts +2 -2
- package/dist/components/BbForm/BbForm.vue.d.ts +9 -0
- package/dist/components/BbForm/BbForm.vue_vue_type_script_setup_true_lang.js +114 -105
- package/dist/components/BbForm/BbFormCustomField.js +1 -1
- package/dist/components/BbForm/bindFormField.js +2 -1
- package/dist/components/BbForm/formFields.d.ts +5 -0
- package/dist/components/BbHoverCard/BbHoverCard.vue_vue_type_script_setup_true_lang.js +145 -142
- package/dist/components/BbHoverCard/BbHoverCardPortal.vue.d.ts +2 -2
- package/dist/components/BbHoverCard/types.d.ts +14 -1
- package/dist/components/BbNumberInput/BbNumberInput.vue.d.ts +0 -1
- package/dist/components/BbNumberInput/BbNumberInput.vue_vue_type_script_setup_true_lang.js +452 -125
- package/dist/components/BbNumberInput/numberDisplay.d.ts +256 -0
- package/dist/components/BbNumberInput/numberDisplay.js +499 -0
- package/dist/components/BbNumberInput/types.d.ts +54 -1
- package/dist/components/BbNumberInput/warroom/corpus.d.ts +58 -0
- package/dist/components/BbNumberInput/warroom/currency-verify.rows.d.ts +28 -0
- package/dist/components/BbNumberInput/warroom/currency.rows.d.ts +2 -0
- package/dist/components/BbNumberInput/warroom/harness.d.ts +217 -0
- package/dist/components/BbNumberInput/warroom/oracle.d.ts +150 -0
- package/dist/components/BbPagination/BbPagination.vue_vue_type_script_setup_true_lang.js +7 -7
- package/dist/components/BbPopover/BbPopover.vue.d.ts +1 -0
- package/dist/components/BbPopover/BbPopover.vue_vue_type_script_setup_true_lang.js +207 -162
- package/dist/components/BbPopover/BbPopoverPortal.vue.d.ts +2 -2
- package/dist/components/BbPopover/types.d.ts +26 -1
- package/dist/components/BbProgress/BbProgress.vue_vue_type_script_setup_true_lang.js +15 -7
- package/dist/components/BbProgress/types.d.ts +23 -7
- package/dist/components/BbProgress/types.js +1 -1
- package/dist/components/BbRadioGroup/BbRadioGroup.vue_vue_type_script_setup_true_lang.js +102 -101
- package/dist/components/BbRadioGroup/types.d.ts +6 -2
- package/dist/components/BbRating/BbRating.vue_vue_type_script_setup_true_lang.js +63 -63
- package/dist/components/BbSelect/BbSelect.vue_vue_type_script_setup_true_lang.js +156 -154
- package/dist/components/BbSelect/types.d.ts +6 -2
- package/dist/components/BbSelectPopover/BbSelectPopover.vue_vue_type_script_setup_true_lang.js +2 -1
- package/dist/components/BbSelectPopover/types.d.ts +6 -2
- package/dist/components/BbSlider/BbSlider.vue_vue_type_script_setup_true_lang.js +153 -153
- package/dist/components/BbSwitch/BbSwitch.vue_vue_type_script_setup_true_lang.js +62 -62
- package/dist/components/BbSwitchGroup/BbSwitchGroup.vue_vue_type_script_setup_true_lang.js +131 -130
- package/dist/components/BbTable/BbTable.vue_vue_type_script_setup_true_lang.js +711 -676
- package/dist/components/BbTabs/BbTabs.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/BbTabs/BbTabsList.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/BbTabs/types.d.ts +28 -22
- package/dist/components/BbTag/BbTag.vue_vue_type_script_setup_true_lang.js +76 -76
- package/dist/components/BbTextInput/BbTextInput.vue_vue_type_script_setup_true_lang.js +58 -58
- package/dist/components/BbTextarea/BbTextarea.vue_vue_type_script_setup_true_lang.js +82 -82
- package/dist/components/BbTimePickerInput/BbTimePickerInput.vue_vue_type_script_setup_true_lang.js +246 -236
- package/dist/components/BbTooltip/BbTooltip.vue_vue_type_script_setup_true_lang.js +99 -86
- package/dist/components/BbTooltip/tooltipWarmup.d.ts +23 -0
- package/dist/components/BbTooltip/tooltipWarmup.js +7 -0
- package/dist/components/BbTooltip/types.d.ts +10 -3
- package/dist/components/BbTree/BbTree.vue_vue_type_script_setup_true_lang.js +29 -21
- package/dist/components/BbTree/BbTreeLevel.vue_vue_type_script_setup_true_lang.js +10 -7
- package/dist/components/CommonFieldInput/CommonFieldInput.vue_vue_type_script_setup_true_lang.js +37 -36
- package/dist/components/CommonPopover/types.d.ts +2 -1
- package/dist/components/CommonTimeSelector/CommonTimeSelector.vue_vue_type_script_setup_true_lang.js +9 -9
- package/dist/composables/formSubmitLock.d.ts +6 -0
- package/dist/composables/formSubmitLock.js +4 -0
- package/dist/composables/useBaseOptions.d.ts +7 -1
- package/dist/composables/useBaseOptions.js +32 -32
- package/dist/composables/useBbDropdownContext.d.ts +8 -8
- package/dist/composables/useBbFormField.d.ts +9 -0
- package/dist/composables/useBbFormField.js +5 -3
- package/dist/composables/useBbTabsContext.d.ts +10 -10
- package/dist/composables/useBbTabsContext.js +18 -18
- package/dist/composables/useFormBinding.d.ts +11 -0
- package/dist/composables/useFormBinding.js +15 -13
- package/dist/composables/useItemText.d.ts +5 -1
- package/dist/composables/useItemText.js +8 -3
- package/dist/composables/useItemValue.d.ts +5 -1
- package/dist/composables/useItemValue.js +8 -3
- package/dist/composables/useLocale.js +10 -9
- package/dist/deprecation/ai-deprecations.json.d.ts +130 -0
- package/dist/deprecation/ai-deprecations.json.js +1 -1
- package/dist/deprecation/removedProps.js +1 -1
- package/dist/directives/bbDropdown.js +1 -1
- package/dist/directives/directivePortal.d.ts +13 -7
- package/dist/directives/directivePortal.js +1 -4
- package/dist/i18n/index.d.ts +7 -12
- package/dist/i18n/locales/cs.json +11 -14
- package/dist/i18n/locales/da.json +13 -16
- package/dist/i18n/locales/de-CH.json +137 -0
- package/dist/i18n/locales/de.json +14 -17
- package/dist/i18n/locales/el.json +10 -13
- package/dist/i18n/locales/en-GB.json +137 -0
- package/dist/i18n/locales/en.json +8 -11
- package/dist/i18n/locales/es-MX.json +137 -0
- package/dist/i18n/locales/es.json +16 -19
- package/dist/i18n/locales/fi.json +8 -11
- package/dist/i18n/locales/fr.json +23 -26
- package/dist/i18n/locales/hu.json +8 -11
- package/dist/i18n/locales/it.json +12 -15
- package/dist/i18n/locales/ja.json +13 -16
- package/dist/i18n/locales/ko.json +10 -13
- package/dist/i18n/locales/nb.json +13 -16
- package/dist/i18n/locales/nl.json +21 -24
- package/dist/i18n/locales/pl.json +10 -13
- package/dist/i18n/locales/{pt.json → pt-BR.json} +19 -22
- package/dist/i18n/locales/pt-PT.json +137 -0
- package/dist/i18n/locales/ro.json +22 -25
- package/dist/i18n/locales/ru.json +11 -14
- package/dist/i18n/locales/sv.json +16 -19
- package/dist/i18n/locales/tr.json +14 -17
- package/dist/i18n/locales/uk.json +11 -14
- package/dist/i18n/locales/{zh-cn.json → zh-CN.json} +10 -13
- package/dist/i18n/locales/zh-HK.json +137 -0
- package/dist/i18n/locales/zh-TW.json +137 -0
- package/dist/i18n/regionHints.d.ts +16 -0
- package/dist/i18n/regionHints.js +49 -0
- package/dist/i18n/regions.d.ts +286 -0
- package/dist/i18n/regions.js +265 -0
- package/dist/index.d.ts +4 -4
- package/dist/index.js +4 -4
- package/dist/llms-full.txt +1914 -1714
- package/dist/llms-medium.txt +76 -46
- package/dist/llms.txt +7 -7
- package/dist/locale-blueprint.json +16 -13
- package/dist/styles.css +2 -2
- package/dist/types/passthrough.d.ts +1 -1
- package/dist/types/ptComponentMap.d.ts +2 -2
- package/dist/utilities/functions/slotKey.d.ts +2 -2
- package/dist/utils/versionCheck.js +1 -1
- package/dist/vite-plugin.d.ts +22 -19
- package/dist/vite.js +309 -297
- package/llms.txt +7 -7
- package/package.json +5 -3
- package/scripts/lib/agent-manifest.mjs +2 -1
- package/scripts/lib/eslint-disable.mjs +17 -4
- package/scripts/lib/eslint-plugin.d.ts +9 -1
- package/scripts/lib/eslint-plugin.mjs +256 -6
- package/scripts/lib/helper-canon.mjs +176 -0
- package/scripts/lib/helpers-add.mjs +1303 -0
- package/scripts/lib/local-components.mjs +33 -4
- package/scripts/lib/locale-check.mjs +165 -0
- package/scripts/lib/portal-names.mjs +458 -0
- package/scripts/lib/redundant-item-accessor.mjs +398 -0
- package/scripts/lib/renamed-item-field.mjs +343 -0
- package/scripts/lib/slot-key.mjs +2 -2
- package/scripts/lib/slot-renames.mjs +1 -1
- package/scripts/lib/unimported-components.mjs +5 -2
- package/scripts/lib/validate-bb-markup.mjs +123 -56
- package/dist/i18n/index.js +0 -27
|
@@ -21,6 +21,8 @@ import {
|
|
|
21
21
|
} from './items-provider-context.mjs';
|
|
22
22
|
import { reactiveVModelFindings } from './reactive-v-model.mjs';
|
|
23
23
|
import { textNullValueFindings } from './text-null-value.mjs';
|
|
24
|
+
import { redundantItemAccessorFindings } from './redundant-item-accessor.mjs';
|
|
25
|
+
import { renamedItemFieldFindings } from './renamed-item-field.mjs';
|
|
24
26
|
import { unimportedFindings } from './unimported-components.mjs';
|
|
25
27
|
import {
|
|
26
28
|
classRenamesFrom,
|
|
@@ -472,7 +474,7 @@ const INTENT_ALIASES = {
|
|
|
472
474
|
* may well be doing something today — a native listener reaching the root
|
|
473
475
|
* element — but is outside the component's contract. It is the flag a caller
|
|
474
476
|
* uses to report at a lower severity; see `checkEvent`.
|
|
475
|
-
* @typedef {{ component: string, attr: string, line?: number, kind: 'unknown-prop' | 'unknown-component' | 'unknown-model' | 'removed-prop' | 'unknown-slot' | 'unknown-event' | 'object-items-without-text' | string, message: string, hint?: string, fallthrough?: boolean }} Finding
|
|
477
|
+
* @typedef {{ component: string, attr: string, line?: number, kind: 'unknown-prop' | 'unknown-component' | 'unknown-model' | 'removed-prop' | 'unknown-slot' | 'unknown-event' | 'object-items-without-text' | 'redundant-item-accessor' | string, message: string, hint?: string, fallthrough?: boolean }} Finding
|
|
476
478
|
*/
|
|
477
479
|
|
|
478
480
|
/**
|
|
@@ -872,6 +874,15 @@ export function validateVueSnippet(code, manifest, options = {}) {
|
|
|
872
874
|
findings.splice(i, 1);
|
|
873
875
|
}
|
|
874
876
|
findings.push(...formModel);
|
|
877
|
+
// Q60.24: an accessor that names the default field (`item-text="label"`).
|
|
878
|
+
findings.push(
|
|
879
|
+
...redundantItemAccessorFindings(code, { templateAst: ast, arrays })
|
|
880
|
+
);
|
|
881
|
+
// Q64.2–Q64.5: an item field spelled the old way (`{ key, text }` rows,
|
|
882
|
+
// a group's `key`, a tab's or crumb's `key`).
|
|
883
|
+
findings.push(
|
|
884
|
+
...renamedItemFieldFindings(code, { templateAst: ast, arrays })
|
|
885
|
+
);
|
|
875
886
|
// Q43.9: positional `items` providers and single-cause `reason` checks.
|
|
876
887
|
findings.push(...itemsProviderFindings(code, options.providerBindings));
|
|
877
888
|
findings.push(...wrapperDropsPropFindings(code, manifest, aliases));
|
|
@@ -1498,7 +1509,9 @@ export function createComponentChecker(surface, options = {}) {
|
|
|
1498
1509
|
r.surface !== 'slot' &&
|
|
1499
1510
|
r.surface !== 'event' &&
|
|
1500
1511
|
r.surface !== 'method' &&
|
|
1501
|
-
r.surface !== 'option'
|
|
1512
|
+
r.surface !== 'option' &&
|
|
1513
|
+
// An item field (Q64.2) is `renamed-item-field`'s, never an attribute.
|
|
1514
|
+
r.surface !== 'item';
|
|
1502
1515
|
// A removed or renamed EVENT (Q56.28): `checkEvent` reads these.
|
|
1503
1516
|
const removedEvents = new Map(
|
|
1504
1517
|
(surface.removed ?? [])
|
|
@@ -2379,25 +2392,37 @@ const resolveArray = (node, arrays) => {
|
|
|
2379
2392
|
return null;
|
|
2380
2393
|
};
|
|
2381
2394
|
|
|
2382
|
-
|
|
2383
|
-
|
|
2384
|
-
|
|
2385
|
-
|
|
2395
|
+
/**
|
|
2396
|
+
* Q60.24: an object item the option default chain cannot label — no `label`
|
|
2397
|
+
* and no `text` key. A spread may bring either, so it is never judged.
|
|
2398
|
+
*/
|
|
2399
|
+
const hasUnlabelledObjectElement = (array) =>
|
|
2400
|
+
array.elements.some((el) => {
|
|
2401
|
+
const item = unwrapTsExpression(el);
|
|
2402
|
+
return (
|
|
2403
|
+
item?.type === 'ObjectExpression' &&
|
|
2404
|
+
!item.properties.some((p) => p.type === 'SpreadElement') &&
|
|
2405
|
+
!objectKeyNode(item, 'label') &&
|
|
2406
|
+
!objectKeyNode(item, 'text')
|
|
2407
|
+
);
|
|
2408
|
+
});
|
|
2386
2409
|
|
|
2387
2410
|
const GROUP_ITEMS_HINT =
|
|
2388
|
-
|
|
2411
|
+
'hand-written rows are labelled by `label`: give each row one, or make it a mapped group (an `items` getter, or `itemText` / `itemValue` naming the fields your data holds), which reads `label` / `text` and `value` by default';
|
|
2389
2412
|
|
|
2390
2413
|
const OBJECT_ITEMS_HINT =
|
|
2391
|
-
'
|
|
2414
|
+
'`{ label, value }` and `{ text, value }` items work as they are (text: `label`, else `text`; value: `value`, else the whole object). Any other shape needs `item-text` (the field holding the label) and `item-value` (the field holding the value)';
|
|
2392
2415
|
|
|
2393
2416
|
/**
|
|
2394
|
-
* Q53.3 (owner ruling 2026-09-24)
|
|
2395
|
-
* `
|
|
2396
|
-
*
|
|
2397
|
-
*
|
|
2417
|
+
* Q53.3 (owner ruling 2026-09-24), narrowed by Q60.24 (2026-10-07): with no
|
|
2418
|
+
* `item-text` an option reads its own `label`, else its own `text`, else
|
|
2419
|
+
* `JSON.stringify(item)`; with no `item-value`, its own `value`, else the
|
|
2420
|
+
* whole object. So only OBJECT items with neither `label` nor `text` render as
|
|
2421
|
+
* JSON. Flags every item-driven control (any component whose API has `itemText`),
|
|
2398
2422
|
* and each BbDropdown group (`group: true`) with no `itemText` whose object
|
|
2399
|
-
* rows have
|
|
2400
|
-
* render blank
|
|
2423
|
+
* rows have neither `label` nor `text` (hand-written rows are labelled by
|
|
2424
|
+
* `label`, so those render blank; a `text` row is `renamed-item-field`'s).
|
|
2425
|
+
* `item-text` set without `item-value` is a
|
|
2401
2426
|
* deliberate whole-object value and is not flagged; string items are fine.
|
|
2402
2427
|
*
|
|
2403
2428
|
* Reach: only arrays visible in the same file — an inline `:items="[…]"`, or
|
|
@@ -2436,12 +2461,14 @@ export function checkObjectItemsWithoutText(name, surface, node, arrays) {
|
|
|
2436
2461
|
: null;
|
|
2437
2462
|
if (!childArray) continue;
|
|
2438
2463
|
// A literal group with no mapper renders hand-written rows by their
|
|
2439
|
-
// `
|
|
2464
|
+
// `label`; a row with neither `label` nor `text` (the old spelling,
|
|
2465
|
+
// reported as `renamed-item-field`) has no label at all.
|
|
2440
2466
|
const unlabelledRow = childArray.elements.some((raw) => {
|
|
2441
2467
|
const row = unwrapTsExpression(raw);
|
|
2442
2468
|
return (
|
|
2443
2469
|
row?.type === 'ObjectExpression' &&
|
|
2444
2470
|
!row.properties.some((p) => p.type === 'SpreadElement') &&
|
|
2471
|
+
!objectKeyNode(row, 'label') &&
|
|
2445
2472
|
!objectKeyNode(row, 'text')
|
|
2446
2473
|
);
|
|
2447
2474
|
});
|
|
@@ -2450,15 +2477,13 @@ export function checkObjectItemsWithoutText(name, surface, node, arrays) {
|
|
|
2450
2477
|
!objectKeyNode(entry, 'itemText') &&
|
|
2451
2478
|
unlabelledRow
|
|
2452
2479
|
) {
|
|
2453
|
-
const
|
|
2480
|
+
const id = objectKeyNode(entry, 'id')?.value;
|
|
2454
2481
|
const label =
|
|
2455
|
-
|
|
2456
|
-
? `group \`${key.value}\``
|
|
2457
|
-
: 'a group';
|
|
2482
|
+
id?.type === 'StringLiteral' ? `group \`${id.value}\`` : 'a group';
|
|
2458
2483
|
findings.push({
|
|
2459
2484
|
kind: 'object-items-without-text',
|
|
2460
2485
|
attr: 'items',
|
|
2461
|
-
message: `${label} on BbDropdown has object \`items\` with no \`
|
|
2486
|
+
message: `${label} on BbDropdown has object \`items\` with no \`label\` and the group has no \`itemText\` — those rows render without a label.`,
|
|
2462
2487
|
hint: GROUP_ITEMS_HINT,
|
|
2463
2488
|
});
|
|
2464
2489
|
}
|
|
@@ -2472,12 +2497,12 @@ export function checkObjectItemsWithoutText(name, surface, node, arrays) {
|
|
|
2472
2497
|
if (!(surface.props ?? []).some((p) => toCamel(p.name) === 'itemText'))
|
|
2473
2498
|
return [];
|
|
2474
2499
|
if (compilerHasProp(node, 'itemText')) return [];
|
|
2475
|
-
if (!
|
|
2500
|
+
if (!hasUnlabelledObjectElement(items)) return [];
|
|
2476
2501
|
return [
|
|
2477
2502
|
{
|
|
2478
2503
|
kind: 'object-items-without-text',
|
|
2479
2504
|
attr: 'items',
|
|
2480
|
-
message: `${name}'s \`items\`
|
|
2505
|
+
message: `${name}'s \`items\` include objects with neither \`label\` nor \`text\` and \`item-text\` is not set — those options' label is \`JSON.stringify(item)\`.`,
|
|
2481
2506
|
hint: OBJECT_ITEMS_HINT,
|
|
2482
2507
|
},
|
|
2483
2508
|
];
|
|
@@ -2787,12 +2812,45 @@ export function checkComputedSlotRenames(name, surface, node) {
|
|
|
2787
2812
|
* same-file literal (`scriptSetupArrayConsts`, Q53.14).
|
|
2788
2813
|
*/
|
|
2789
2814
|
export const RESERVED_KEY_SOURCES = {
|
|
2790
|
-
BbTable: { prop: 'columns', noun: 'column key' },
|
|
2791
|
-
BbTabs: { prop: 'items', noun: 'tab
|
|
2792
|
-
BbTabsList: { prop: 'items', noun: 'tab
|
|
2793
|
-
BbBreadcrumbs: { prop: 'items', noun: '
|
|
2794
|
-
|
|
2795
|
-
|
|
2815
|
+
BbTable: { prop: 'columns', field: 'key', noun: 'column key' },
|
|
2816
|
+
BbTabs: { prop: 'items', field: 'value', noun: 'tab value' },
|
|
2817
|
+
BbTabsList: { prop: 'items', field: 'value', noun: 'tab value' },
|
|
2818
|
+
BbBreadcrumbs: { prop: 'items', field: 'value', noun: 'crumb value' },
|
|
2819
|
+
// Rows are named by `value`, groups by `id` (`#<groupId>:item`).
|
|
2820
|
+
BbDropdown: {
|
|
2821
|
+
prop: 'items',
|
|
2822
|
+
field: 'value',
|
|
2823
|
+
noun: 'row value',
|
|
2824
|
+
nested: true,
|
|
2825
|
+
},
|
|
2826
|
+
BbDropdownButton: {
|
|
2827
|
+
prop: 'items',
|
|
2828
|
+
field: 'value',
|
|
2829
|
+
noun: 'row value',
|
|
2830
|
+
nested: true,
|
|
2831
|
+
},
|
|
2832
|
+
};
|
|
2833
|
+
|
|
2834
|
+
/** The field the identity was spelled in before 3.0.0-beta.49 (Q64.2–Q64.5). */
|
|
2835
|
+
const OLD_IDENTITY_FIELD = 'key';
|
|
2836
|
+
|
|
2837
|
+
/**
|
|
2838
|
+
* The identity a slot is named after, as written: a dropdown group's `id`,
|
|
2839
|
+
* any other entry's `field` (a stale `key` still counts, so a slot check
|
|
2840
|
+
* agrees with the rename `renamed-item-field` asks for).
|
|
2841
|
+
*/
|
|
2842
|
+
const identityOf = (source, element) => {
|
|
2843
|
+
const entry = unwrapTsExpression(element);
|
|
2844
|
+
const isGroup =
|
|
2845
|
+
source.nested &&
|
|
2846
|
+
entry?.type === 'ObjectExpression' &&
|
|
2847
|
+
(objectKeyNode(entry, 'group') ||
|
|
2848
|
+
objectKeyNode(entry, 'selectable') ||
|
|
2849
|
+
objectKeyNode(entry, 'multiple'));
|
|
2850
|
+
const field = isGroup ? 'id' : source.field;
|
|
2851
|
+
const now = literalKeyOf(element, field);
|
|
2852
|
+
if (now !== null || field === OLD_IDENTITY_FIELD) return now;
|
|
2853
|
+
return literalKeyOf(element, OLD_IDENTITY_FIELD);
|
|
2796
2854
|
};
|
|
2797
2855
|
|
|
2798
2856
|
/**
|
|
@@ -2861,18 +2919,19 @@ export function checkReservedKeys(name, surface, node, arrays) {
|
|
|
2861
2919
|
const findings = [];
|
|
2862
2920
|
const walk = (array) => {
|
|
2863
2921
|
for (const element of array.elements) {
|
|
2864
|
-
const key =
|
|
2922
|
+
const key = identityOf(source, element);
|
|
2865
2923
|
if (key !== null) {
|
|
2866
2924
|
const slot = reserved.get(runtimeSlotKey(key));
|
|
2925
|
+
const word = source.field;
|
|
2867
2926
|
if (slot)
|
|
2868
2927
|
findings.push({
|
|
2869
2928
|
kind: 'reserved-key',
|
|
2870
2929
|
attr: source.prop,
|
|
2871
|
-
message: `${source.noun} \`${key}\` collides with ${name}'s \`#${slot}\` slot; rename the
|
|
2930
|
+
message: `${source.noun} \`${key}\` collides with ${name}'s \`#${slot}\` slot; rename the ${word}`,
|
|
2872
2931
|
hint:
|
|
2873
2932
|
slot === 'actions' && name === 'BbTable'
|
|
2874
2933
|
? 'the #actions slot already creates the actions column — drop this column, or rename its key (e.g. `rowActions`)'
|
|
2875
|
-
: `a
|
|
2934
|
+
: `a ${word} whose slot name is \`${runtimeSlotKey(key)}\` can never have its own slot: pick another ${word}`,
|
|
2876
2935
|
});
|
|
2877
2936
|
}
|
|
2878
2937
|
const entry = unwrapTsExpression(element);
|
|
@@ -2937,7 +2996,7 @@ export function keyedSlotLookup(name, surface, propSource, arrays) {
|
|
|
2937
2996
|
);
|
|
2938
2997
|
const walk = (array) => {
|
|
2939
2998
|
for (const element of array.elements) {
|
|
2940
|
-
const key =
|
|
2999
|
+
const key = identityOf(source, element);
|
|
2941
3000
|
if (key === null) complete = false;
|
|
2942
3001
|
else keys.push(key);
|
|
2943
3002
|
const entry = unwrapTsExpression(element);
|
|
@@ -2964,7 +3023,7 @@ export function keyedSlotLookup(name, surface, propSource, arrays) {
|
|
|
2964
3023
|
);
|
|
2965
3024
|
const expected = new Map();
|
|
2966
3025
|
const legacy = new Map();
|
|
2967
|
-
const noun = source.noun.replace(/ key$/, '');
|
|
3026
|
+
const noun = source.noun.replace(/ (key|value)$/, '');
|
|
2968
3027
|
for (const key of keys)
|
|
2969
3028
|
for (const { head, tail } of patterns) {
|
|
2970
3029
|
const now = `${head}${slotKey(key)}${tail}`;
|
|
@@ -3049,7 +3108,7 @@ export function keyedSlotLookup(name, surface, propSource, arrays) {
|
|
|
3049
3108
|
return {
|
|
3050
3109
|
attr: `#${slot}`,
|
|
3051
3110
|
kind: 'unknown-slot',
|
|
3052
|
-
message: `slot \`#${slot}\` matches no ${noun}
|
|
3111
|
+
message: `slot \`#${slot}\` matches no ${source.noun} and no slot of this ${name}, so it renders nothing${nearest ? ` — the nearest is \`#${nearest.candidate}\`${expected.has(nearest.candidate) ? ` (${noun} \`${expected.get(nearest.candidate)}\`)` : ''}` : ''}.`,
|
|
3053
3112
|
};
|
|
3054
3113
|
}
|
|
3055
3114
|
}
|
|
@@ -3105,11 +3164,13 @@ export function squashedSlotWarning(name, surface, slot) {
|
|
|
3105
3164
|
* Q53.17 (owner ruling 2026-09-24; doctrine: identifiers something outside the
|
|
3106
3165
|
* component reads are written, never derived). On BbDropdown items `check` can
|
|
3107
3166
|
* see (an inline array or a same-file literal, Q53.14):
|
|
3108
|
-
* - a row in a `selectable` group needs a `
|
|
3109
|
-
* - a `selectable` group needs
|
|
3110
|
-
* - two
|
|
3111
|
-
* derived identity would collide; across groups it is legal).
|
|
3112
|
-
*
|
|
3167
|
+
* - a row in a `selectable` group needs a `value` (the v-model holds it);
|
|
3168
|
+
* - a `selectable` group needs an `id` (its picks are stored under it);
|
|
3169
|
+
* - two rows with no `value` and the same `label` in ONE group are an error
|
|
3170
|
+
* (their derived identity would collide; across groups it is legal).
|
|
3171
|
+
* An action row without a `value`, a layout-only group and a crumb without a
|
|
3172
|
+
* `value` are fine. (Before 3.0.0-beta.49 the kinds were `missing-key` and
|
|
3173
|
+
* `duplicate-row-text`; the old fields themselves are `renamed-item-field`.)
|
|
3113
3174
|
* @param {string} name
|
|
3114
3175
|
* @param {{ props?: Array<Record<string, any>> }} node compiler-sfc element
|
|
3115
3176
|
* @param {Map<string, any>} arrays
|
|
@@ -3171,7 +3232,8 @@ export function checkDropdownKeys(name, node, arrays) {
|
|
|
3171
3232
|
if (value.type === 'BooleanLiteral') return value.value;
|
|
3172
3233
|
return null; // bound to something `check` can't read
|
|
3173
3234
|
};
|
|
3174
|
-
const
|
|
3235
|
+
const hasValue = (object) => objectKeyNode(object, 'value') != null;
|
|
3236
|
+
const hasId = (object) => objectKeyNode(object, 'id') != null;
|
|
3175
3237
|
const isSelectable = (object) => {
|
|
3176
3238
|
const node = objectKeyNode(object, 'selectable');
|
|
3177
3239
|
return (
|
|
@@ -3194,37 +3256,42 @@ export function checkDropdownKeys(name, node, arrays) {
|
|
|
3194
3256
|
const children = objectKeyNode(entry, 'items');
|
|
3195
3257
|
const childArray = children ? resolveArray(children.value, arrays) : null;
|
|
3196
3258
|
if (isGroup) {
|
|
3197
|
-
const
|
|
3198
|
-
|
|
3259
|
+
const groupId = literal(entry, 'id');
|
|
3260
|
+
// A group still spelling `key` is `renamed-item-field`'s.
|
|
3261
|
+
if (
|
|
3262
|
+
isSelectable(entry) &&
|
|
3263
|
+
!hasId(entry) &&
|
|
3264
|
+
!objectKeyNode(entry, 'key')
|
|
3265
|
+
)
|
|
3199
3266
|
findings.push({
|
|
3200
|
-
kind: 'missing-
|
|
3267
|
+
kind: 'missing-id',
|
|
3201
3268
|
attr: 'items',
|
|
3202
|
-
message: `a selectable group on ${name} has no \`
|
|
3269
|
+
message: `a selectable group on ${name} has no \`id\` — its picks are stored under it, so it is required (a group without an \`id\` renders as a plain group)`,
|
|
3203
3270
|
});
|
|
3204
3271
|
if (childArray)
|
|
3205
3272
|
scope(
|
|
3206
3273
|
childArray,
|
|
3207
|
-
isSelectable(entry) &&
|
|
3208
|
-
|
|
3274
|
+
isSelectable(entry) && hasId(entry),
|
|
3275
|
+
groupId ? `group \`${groupId}\`` : 'a group'
|
|
3209
3276
|
);
|
|
3210
3277
|
continue;
|
|
3211
3278
|
}
|
|
3212
|
-
if (!
|
|
3279
|
+
if (!hasValue(entry) && !objectKeyNode(entry, 'key')) {
|
|
3213
3280
|
if (selectable)
|
|
3214
3281
|
findings.push({
|
|
3215
|
-
kind: 'missing-
|
|
3282
|
+
kind: 'missing-value',
|
|
3216
3283
|
attr: 'items',
|
|
3217
|
-
message: `a row in ${groupName} (selectable) on ${name} has no \`
|
|
3284
|
+
message: `a row in ${groupName} (selectable) on ${name} has no \`value\` — the v-model holds it, so it is required (a row without a \`value\` renders disabled)`,
|
|
3218
3285
|
});
|
|
3219
|
-
const
|
|
3220
|
-
if (typeof
|
|
3221
|
-
if (seen.has(
|
|
3286
|
+
const label = literal(entry, 'label');
|
|
3287
|
+
if (typeof label === 'string') {
|
|
3288
|
+
if (seen.has(label))
|
|
3222
3289
|
findings.push({
|
|
3223
|
-
kind: 'duplicate-row-
|
|
3290
|
+
kind: 'duplicate-row-label',
|
|
3224
3291
|
attr: 'items',
|
|
3225
|
-
message: `two
|
|
3292
|
+
message: `two rows with no \`value\` in ${groupName} on ${name} read \`${label}\` — give each a \`value\` (an identical label is legal across groups, not within one)`,
|
|
3226
3293
|
});
|
|
3227
|
-
else seen.set(
|
|
3294
|
+
else seen.set(label, true);
|
|
3228
3295
|
}
|
|
3229
3296
|
}
|
|
3230
3297
|
// A submenu is its own level.
|
|
@@ -3232,7 +3299,7 @@ export function checkDropdownKeys(name, node, arrays) {
|
|
|
3232
3299
|
scope(
|
|
3233
3300
|
childArray,
|
|
3234
3301
|
false,
|
|
3235
|
-
`the submenu of \`${literal(entry, '
|
|
3302
|
+
`the submenu of \`${literal(entry, 'label') ?? 'a row'}\``
|
|
3236
3303
|
);
|
|
3237
3304
|
}
|
|
3238
3305
|
};
|
package/dist/i18n/index.js
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
//#region src/i18n/index.ts
|
|
2
|
-
var e = [
|
|
3
|
-
"cs",
|
|
4
|
-
"da",
|
|
5
|
-
"de",
|
|
6
|
-
"el",
|
|
7
|
-
"en",
|
|
8
|
-
"es",
|
|
9
|
-
"fi",
|
|
10
|
-
"fr",
|
|
11
|
-
"hu",
|
|
12
|
-
"it",
|
|
13
|
-
"ja",
|
|
14
|
-
"ko",
|
|
15
|
-
"nb",
|
|
16
|
-
"nl",
|
|
17
|
-
"pl",
|
|
18
|
-
"pt",
|
|
19
|
-
"ro",
|
|
20
|
-
"ru",
|
|
21
|
-
"sv",
|
|
22
|
-
"tr",
|
|
23
|
-
"uk",
|
|
24
|
-
"zh-cn"
|
|
25
|
-
];
|
|
26
|
-
//#endregion
|
|
27
|
-
export { e as BUILTIN_LOCALE_KEYS };
|