bitboss-ui 3.0.0-beta.2 → 3.0.0-beta.20
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 +72 -33
- package/dist/ai/BbAccordion.md +3 -3
- package/dist/ai/BbAlert.md +9 -5
- package/dist/ai/BbAsterisk.md +17 -0
- package/dist/ai/BbAvatar.md +12 -3
- package/dist/ai/BbBadge.md +15 -10
- package/dist/ai/BbBadgeButton.md +16 -16
- package/dist/ai/BbBaseButton.md +16 -16
- package/dist/ai/BbBaseCheckbox.md +8 -8
- package/dist/ai/BbBaseCheckboxGroup.md +13 -13
- package/dist/ai/BbBaseCheckboxIcon.md +26 -9
- package/dist/ai/BbBaseColorInput.md +11 -11
- package/dist/ai/BbBaseDatePicker.md +6 -6
- package/dist/ai/BbBaseDatePickerInput.md +15 -15
- package/dist/ai/BbBaseInputContainer.md +12 -12
- package/dist/ai/BbBaseNumberInput.md +8 -8
- package/dist/ai/BbBaseRadio.md +5 -5
- package/dist/ai/BbBaseRadioGroup.md +7 -7
- package/dist/ai/BbBaseRadioIcon.md +25 -9
- package/dist/ai/BbBaseRating.md +5 -5
- package/dist/ai/BbBaseSelect.md +22 -21
- package/dist/ai/BbBaseSlider.md +9 -9
- package/dist/ai/BbBaseSwitch.md +8 -8
- package/dist/ai/BbBaseSwitchGroup.md +13 -13
- package/dist/ai/BbBaseSwitchIcon.md +28 -10
- package/dist/ai/BbBaseTag.md +10 -10
- package/dist/ai/BbBaseTextInput.md +9 -9
- package/dist/ai/BbBaseTextarea.md +9 -9
- package/dist/ai/BbBaseTimePickerInput.md +13 -13
- package/dist/ai/BbBreadcrumbs.md +2 -2
- package/dist/ai/BbButton.md +15 -15
- package/dist/ai/BbCheckbox.md +18 -17
- package/dist/ai/BbCheckboxGroup.md +15 -14
- package/dist/ai/BbCollapsible.md +11 -9
- package/dist/ai/BbColorInput.md +15 -15
- package/dist/ai/BbColorPalette.md +12 -6
- package/dist/ai/BbConfirm.md +12 -5
- package/dist/ai/BbDatePicker.md +13 -13
- package/dist/ai/BbDatePickerInput.md +20 -20
- package/dist/ai/BbDialog.md +78 -12
- package/dist/ai/BbDropdown.md +132 -22
- package/dist/ai/BbDropdownButton.md +12 -12
- package/dist/ai/BbDropdownGroup.md +1 -1
- package/dist/ai/BbDropzone.md +4 -4
- package/dist/ai/BbForm.md +49 -14
- package/dist/ai/BbIcon.md +6 -0
- package/dist/ai/BbIndicator.md +5 -5
- package/dist/ai/BbNumberInput.md +11 -11
- package/dist/ai/BbOffCanvas.md +90 -20
- package/dist/ai/BbPagination.md +3 -3
- package/dist/ai/BbPopover.md +32 -17
- package/dist/ai/BbProgress.md +7 -4
- package/dist/ai/BbRadio.md +16 -15
- package/dist/ai/BbRadioGroup.md +20 -17
- package/dist/ai/BbRating.md +11 -11
- package/dist/ai/BbSelect.md +138 -37
- package/dist/ai/BbSelectPopover.md +40 -41
- package/dist/ai/BbSlider.md +37 -22
- package/dist/ai/BbSmoothHeight.md +1 -1
- package/dist/ai/BbSwitch.md +25 -10
- package/dist/ai/BbSwitchGroup.md +17 -14
- package/dist/ai/BbTable.md +791 -88
- package/dist/ai/BbTabs.md +28 -14
- package/dist/ai/BbTabsList.md +1 -1
- package/dist/ai/BbTabsPanes.md +1 -1
- package/dist/ai/BbTabsRoot.md +10 -10
- package/dist/ai/BbTag.md +14 -14
- package/dist/ai/BbTextInput.md +16 -15
- package/dist/ai/BbTextarea.md +13 -13
- package/dist/ai/BbTimePicker.md +10 -10
- package/dist/ai/BbTimePickerInput.md +17 -17
- package/dist/ai/BbToast.md +1 -1
- package/dist/ai/BbToastPortal.md +1 -1
- package/dist/ai/BbTooltip.md +12 -10
- package/dist/ai/BbTree.md +1 -1
- package/dist/ai/ChipsBox.md +1 -1
- package/dist/ai/CommonInputWrapper.md +10 -10
- package/dist/ai/CommonPopover.md +6 -6
- package/dist/ai/FlatListBox.md +5 -5
- package/dist/ai/GroupedListBox.md +5 -5
- package/dist/ai/ListBox.md +4 -4
- package/dist/ai/OptionsContainer.md +4 -4
- package/dist/ai/changelog.json +110 -2
- package/dist/ai/components.json +882 -90
- package/dist/ai/composables/useBbConfig.md +72 -11
- package/dist/ai/composables/useConfirm.md +5 -3
- package/dist/ai/guides/ai-router.md +9 -4
- package/dist/ai/guides/component-picker.md +2 -2
- package/dist/ai/guides/design-language.md +14 -14
- package/dist/ai/guides/design-tokens.md +25 -18
- package/dist/ai/guides/fetch-items-playbook.md +1 -1
- package/dist/ai/guides/icons-policy.md +4 -2
- package/dist/ai/guides/installation-and-plugin-setup.md +74 -9
- package/dist/ai/guides/migration/components/bb-checkbox-group.md +30 -0
- package/dist/ai/guides/migration/components/bb-checkbox.md +37 -3
- package/dist/ai/guides/migration/components/bb-collapsible.md +5 -5
- package/dist/ai/guides/migration/components/bb-dialog.md +62 -34
- package/dist/ai/guides/migration/components/bb-offcanvas.md +29 -13
- package/dist/ai/guides/migration/components/bb-rating.md +8 -2
- package/dist/ai/guides/migration/components/bb-select.md +5 -2
- package/dist/ai/guides/migration/components/bb-table.md +446 -28
- package/dist/ai/guides/migration/components/bb-text-input.md +6 -6
- package/dist/ai/guides/migration/v2-to-v3.md +260 -89
- package/dist/ai/guides/ssr-prefill.md +120 -0
- package/dist/ai/index.md +10 -9
- package/dist/ai/recipes/inertia/layout-scaffold.md +5 -1
- package/dist/ai/recipes/inertia/ownership-atlas.md +41 -20
- package/dist/ai/recipes/inertia/records-workspace.md +26 -7
- package/dist/ai/recipes/nuxt/layout-scaffold.md +5 -1
- package/dist/ai/recipes/nuxt/records-workspace.md +26 -7
- package/dist/ai/recipes/vue/layout-scaffold.md +5 -1
- package/dist/ai/recipes/vue/records-workspace.md +26 -7
- package/dist/ai/source/BbAlert.md +60 -2
- package/dist/ai/source/BbAvatar.md +3 -3
- package/dist/ai/source/BbBadge.md +60 -15
- package/dist/ai/source/BbBadgeButton.md +8 -2
- package/dist/ai/source/BbBaseButton.md +3 -1
- package/dist/ai/source/BbBaseCheckboxGroup.md +6 -2
- package/dist/ai/source/BbBaseDatePicker.md +3 -1
- package/dist/ai/source/BbBaseDatePickerInput.md +5 -1
- package/dist/ai/source/BbBaseInputContainer.md +52 -1
- package/dist/ai/source/BbBaseRadioGroup.md +4 -0
- package/dist/ai/source/BbBaseRating.md +3 -1
- package/dist/ai/source/BbBaseSelect.md +71 -16
- package/dist/ai/source/BbBaseSwitchGroup.md +4 -0
- package/dist/ai/source/BbBaseTimePickerInput.md +5 -1
- package/dist/ai/source/BbBreadcrumbs.md +31 -0
- package/dist/ai/source/BbButton.md +51 -24
- package/dist/ai/source/BbCheckbox.md +15 -1
- package/dist/ai/source/BbCheckboxGroup.md +2 -1
- package/dist/ai/source/BbCollapsible.md +7 -1
- package/dist/ai/source/BbColorInput.md +3 -4
- package/dist/ai/source/BbColorPalette.md +3 -4
- package/dist/ai/source/BbDatePicker.md +5 -1
- package/dist/ai/source/BbDatePickerInput.md +5 -1
- package/dist/ai/source/BbDialog.md +175 -19
- package/dist/ai/source/BbDropdown.md +376 -69
- package/dist/ai/source/BbDropdownGroup.md +330 -59
- package/dist/ai/source/BbForm.md +93 -5
- package/dist/ai/source/BbIcon.md +46 -36
- package/dist/ai/source/BbNumberInput.md +3 -4
- package/dist/ai/source/BbOffCanvas.md +474 -194
- package/dist/ai/source/BbPopover.md +24 -17
- package/dist/ai/source/BbProgress.md +2 -2
- package/dist/ai/source/BbRadio.md +15 -1
- package/dist/ai/source/BbRadioGroup.md +3 -1
- package/dist/ai/source/BbSelect.md +50 -2
- package/dist/ai/source/BbSelectPopover.md +171 -23
- package/dist/ai/source/BbSlider.md +3 -4
- package/dist/ai/source/BbSwitch.md +15 -1
- package/dist/ai/source/BbSwitchGroup.md +8 -5
- package/dist/ai/source/BbTable.md +4642 -1387
- package/dist/ai/source/BbTabs.md +6 -7
- package/dist/ai/source/BbTabsList.md +6 -7
- package/dist/ai/source/BbTabsPanes.md +6 -7
- package/dist/ai/source/BbTabsRoot.md +6 -7
- package/dist/ai/source/BbTag.md +3 -4
- package/dist/ai/source/BbTextInput.md +3 -4
- package/dist/ai/source/BbTextarea.md +3 -4
- package/dist/ai/source/BbTimePicker.md +4 -1
- package/dist/ai/source/BbTimePickerInput.md +5 -1
- package/dist/ai/source/BbToast.md +3 -1
- package/dist/ai/source/BbTooltip.md +5 -1
- package/dist/ai/source/CommonInputWrapper.md +4 -0
- package/dist/ai/source/CommonPopover.md +6 -0
- package/dist/ai/source/FlatListBox.md +11 -5
- package/dist/ai/source/GroupedListBox.md +7 -5
- package/dist/components/BbAlert/BbAlert.vue_vue_type_script_setup_true_lang.js +4 -4
- package/dist/components/BbAlert/types.d.ts +10 -1
- package/dist/components/BbAvatar/BbAvatar.vue.d.ts +1 -1
- package/dist/components/BbAvatar/BbAvatar.vue_vue_type_script_setup_true_lang.js +33 -33
- package/dist/components/BbBadge/BadgeBodyContent.vue_vue_type_script_setup_true_lang.js +22 -16
- package/dist/components/BbBadge/BbBadge.vue_vue_type_script_setup_true_lang.js +36 -15
- package/dist/components/BbBadge/badgeButtonContext.d.ts +21 -8
- package/dist/components/BbBadge/types.d.ts +8 -2
- package/dist/components/BbBaseButton/BbBaseButton.vue_vue_type_script_setup_true_lang.js +47 -47
- package/dist/components/BbBaseButton/RouterComponent.vue_vue_type_script_setup_true_lang.js +14 -14
- package/dist/components/BbBaseCheckboxGroup/BbBaseCheckboxGroup.vue_vue_type_script_setup_true_lang.js +30 -28
- package/dist/components/BbBaseCheckboxGroup/types.d.ts +2 -2
- package/dist/components/BbBaseDatePicker/BbBaseDatePicker.vue_vue_type_script_setup_true_lang.js +167 -167
- package/dist/components/BbBaseDatePicker/BbBaseDatePickerInputDaySelector.vue.d.ts +9 -9
- package/dist/components/BbBaseDatePicker/BbBaseDatePickerInputDaySelector.vue_vue_type_script_setup_true_lang.js +78 -78
- package/dist/components/BbBaseDatePicker/BbBaseDatePickerMonthSelector.vue_vue_type_script_setup_true_lang.js +64 -64
- package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerInput.vue.d.ts +1 -1
- package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerInput.vue_vue_type_script_setup_true_lang.js +138 -138
- package/dist/components/BbBaseInputContainer/BbBaseInputContainer.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/components/BbBaseRadioGroup/BbBaseRadioGroup.vue_vue_type_script_setup_true_lang.js +24 -22
- package/dist/components/BbBaseRating/BbBaseRating.vue_vue_type_script_setup_true_lang.js +40 -40
- package/dist/components/BbBaseSelect/BbBaseSelect.vue_vue_type_script_setup_true_lang.js +74 -65
- package/dist/components/BbBaseSelect/types.d.ts +22 -0
- package/dist/components/BbBaseSlider/BbBaseSlider.vue_vue_type_script_setup_true_lang.js +5 -5
- package/dist/components/BbBaseSwitchGroup/BbBaseSwitchGroup.vue_vue_type_script_setup_true_lang.js +30 -28
- package/dist/components/BbBaseTimePickerInput/BbBaseTimePickerInput.vue.d.ts +1 -1
- package/dist/components/BbBaseTimePickerInput/BbBaseTimePickerInput.vue_vue_type_script_setup_true_lang.js +104 -104
- package/dist/components/BbBreadcrumbs/BbBreadcrumbs.vue_vue_type_script_setup_true_lang.js +35 -35
- package/dist/components/BbButton/BbButton.vue_vue_type_script_setup_true_lang.js +85 -81
- package/dist/components/BbCheckboxGroup/types.d.ts +2 -1
- package/dist/components/BbCollapsible/types.d.ts +7 -1
- package/dist/components/BbColorInput/BbColorInput.vue.d.ts +1 -1
- package/dist/components/BbColorInput/BbColorInput.vue_vue_type_script_setup_true_lang.js +18 -18
- package/dist/components/BbColorPalette/BbColorPalette.vue.d.ts +2 -2
- package/dist/components/BbColorPalette/BbColorPalette.vue_vue_type_script_setup_true_lang.js +50 -50
- package/dist/components/BbConfirm/BbConfirm.vue_vue_type_script_setup_true_lang.js +17 -17
- package/dist/components/BbDatePicker/BbDatePicker.vue.d.ts +1 -1
- package/dist/components/BbDatePicker/BbDatePicker.vue_vue_type_script_setup_true_lang.js +100 -100
- package/dist/components/BbDatePickerInput/BbDatePickerInput.vue_vue_type_script_setup_true_lang.js +21 -21
- package/dist/components/BbDialog/BbDialog.vue.d.ts +1 -1
- package/dist/components/BbDialog/BbDialog.vue_vue_type_script_setup_true_lang.js +133 -107
- package/dist/components/BbDialog/types.d.ts +29 -2
- package/dist/components/BbDropdown/AdaptiveDropdown.vue.d.ts +2 -0
- package/dist/components/BbDropdown/AdaptiveDropdown.vue_vue_type_script_setup_true_lang.js +99 -100
- package/dist/components/BbDropdown/BbDropdown.vue.d.ts +2 -2
- package/dist/components/BbDropdown/BbDropdown.vue_vue_type_script_setup_true_lang.js +208 -201
- package/dist/components/BbDropdown/BbDropdownList.vue_vue_type_script_setup_true_lang.js +225 -208
- package/dist/components/BbDropdown/DropdownPipelineResolver.vue_vue_type_script_setup_true_lang.js +21 -21
- package/dist/components/BbDropdown/types.d.ts +20 -5
- package/dist/components/BbDropdownButton/BbDropdownButton.vue_vue_type_script_setup_true_lang.js +5 -5
- package/dist/components/BbIcon/BbIcon.vue_vue_type_script_setup_true_lang.js +46 -46
- package/dist/components/BbIcon/iconCache.d.ts +33 -0
- package/dist/components/BbIcon/iconCache.js +17 -0
- package/dist/components/BbNumberInput/BbNumberInput.vue.d.ts +1 -1
- package/dist/components/BbNumberInput/BbNumberInput.vue_vue_type_script_setup_true_lang.js +15 -15
- package/dist/components/BbOffCanvas/BbOffCanvas.vue.d.ts +1 -1
- package/dist/components/BbOffCanvas/BbOffCanvas.vue_vue_type_script_setup_true_lang.js +254 -208
- package/dist/components/BbOffCanvas/types.d.ts +30 -5
- package/dist/components/BbPagination/BbPagination.vue.d.ts +1 -1
- package/dist/components/BbPopover/BbPopover.vue.d.ts +2 -2
- package/dist/components/BbPopover/BbPopover.vue_vue_type_script_setup_true_lang.js +149 -146
- package/dist/components/BbPopover/types.d.ts +3 -2
- package/dist/components/BbRadioGroup/types.d.ts +3 -1
- package/dist/components/BbSelect/BbSelect.vue_vue_type_script_setup_true_lang.js +27 -23
- package/dist/components/BbSelect/types.d.ts +32 -0
- package/dist/components/BbSelectPopover/BbSelectPopover.vue_vue_type_script_setup_true_lang.js +221 -213
- package/dist/components/BbSlider/BbSlider.vue.d.ts +1 -1
- package/dist/components/BbSlider/BbSlider.vue_vue_type_script_setup_true_lang.js +20 -20
- package/dist/components/BbTable/BbTable.vue.d.ts +8 -4
- package/dist/components/BbTable/BbTable.vue_vue_type_script_setup_true_lang.js +1319 -616
- package/dist/components/BbTable/BbTableDataRow.d.ts +162 -0
- package/dist/components/BbTable/BbTableDataRow.js +136 -0
- package/dist/components/BbTable/BbTableExpandRow.d.ts +73 -0
- package/dist/components/BbTable/BbTableExpandRow.js +52 -0
- package/dist/components/BbTable/types.d.ts +247 -86
- package/dist/components/BbTable/utils.d.ts +87 -4
- package/dist/components/BbTable/utils.js +71 -36
- package/dist/components/BbTabs/types.d.ts +0 -8
- package/dist/components/BbTag/BbTag.vue.d.ts +1 -1
- package/dist/components/BbTag/BbTag.vue_vue_type_script_setup_true_lang.js +18 -18
- package/dist/components/BbTextInput/BbTextInput.vue.d.ts +1 -1
- package/dist/components/BbTextInput/BbTextInput.vue_vue_type_script_setup_true_lang.js +18 -18
- package/dist/components/BbTextarea/BbTextarea.vue.d.ts +1 -1
- package/dist/components/BbTextarea/BbTextarea.vue_vue_type_script_setup_true_lang.js +54 -54
- package/dist/components/BbTimePicker/BbTimePicker.vue.d.ts +1 -1
- package/dist/components/BbTimePicker/BbTimePicker.vue_vue_type_script_setup_true_lang.js +80 -80
- package/dist/components/BbTimePickerInput/BbTimePickerInput.vue_vue_type_script_setup_true_lang.js +61 -61
- package/dist/components/BbToast/BbToast.vue_vue_type_script_setup_true_lang.js +17 -17
- package/dist/components/BbToast/BbToastMessage.vue_vue_type_script_setup_true_lang.js +13 -13
- package/dist/components/BbTooltip/types.d.ts +5 -1
- package/dist/components/ChipsBox/ChipsBox.vue_vue_type_script_setup_true_lang.js +17 -17
- package/dist/components/ClearableButton/ClearableButton.vue_vue_type_script_setup_true_lang.js +5 -5
- package/dist/components/CommonPopover/CommonPopover.vue_vue_type_script_setup_true_lang.js +2 -1
- package/dist/components/FlatListBox/FlatListBox.vue_vue_type_script_setup_true_lang.js +83 -83
- package/dist/components/GroupedListBox/GroupedListBox.vue_vue_type_script_setup_true_lang.js +56 -56
- package/dist/composables/useBaseOptions.js +30 -20
- package/dist/composables/useBbConfig.d.ts +27 -6
- package/dist/composables/useBbConfig.js +8 -2
- package/dist/composables/useConfig.d.ts +59 -0
- package/dist/composables/useConfig.js +9 -0
- package/dist/composables/useItemsGetter.d.ts +11 -0
- package/dist/composables/useItemsGetter.js +44 -18
- package/dist/composables/useLocale.js +10 -7
- package/dist/composables/useMobile.js +5 -5
- package/dist/composables/usePrefill.d.ts +21 -2
- package/dist/composables/usePrefill.js +25 -19
- package/dist/composables/useSsrState.d.ts +20 -0
- package/dist/composables/useSsrState.js +13 -0
- package/dist/composables/useToast.js +5 -5
- package/dist/deprecation/ai-deprecations.json.d.ts +99 -11
- package/dist/deprecation/ai-deprecations.json.js +1 -1
- package/dist/directives/bbDropdown.d.ts +15 -4
- package/dist/directives/bbDropdown.js +31 -9
- package/dist/directives/createPopoverDirective.d.ts +62 -0
- package/dist/directives/createPopoverDirective.js +63 -23
- package/dist/i18n/locales/cs.json +4 -1
- package/dist/i18n/locales/da.json +4 -1
- package/dist/i18n/locales/de.json +4 -1
- package/dist/i18n/locales/el.json +4 -1
- package/dist/i18n/locales/en.json +4 -1
- package/dist/i18n/locales/es.json +4 -1
- package/dist/i18n/locales/fi.json +4 -1
- package/dist/i18n/locales/fr.json +4 -1
- package/dist/i18n/locales/hu.json +4 -1
- package/dist/i18n/locales/it.json +4 -1
- package/dist/i18n/locales/ja.json +4 -1
- package/dist/i18n/locales/ko.json +4 -1
- package/dist/i18n/locales/nb.json +4 -1
- package/dist/i18n/locales/nl.json +4 -1
- package/dist/i18n/locales/pl.json +4 -1
- package/dist/i18n/locales/pt.json +4 -1
- package/dist/i18n/locales/ro.json +4 -1
- package/dist/i18n/locales/ru.json +4 -1
- package/dist/i18n/locales/sv.json +4 -1
- package/dist/i18n/locales/tr.json +4 -1
- package/dist/i18n/locales/uk.json +4 -1
- package/dist/i18n/locales/zh-cn.json +4 -1
- package/dist/index.d.ts +7 -2
- package/dist/index.js +69 -67
- package/dist/llms-full.txt +3712 -1381
- package/dist/llms-medium.txt +113 -43
- package/dist/llms.txt +7 -6
- package/dist/locale-blueprint.json +4 -1
- package/dist/nuxt-auto-imports.d.ts +100 -0
- package/dist/nuxt-auto-imports.js +55 -0
- package/dist/nuxt-module.d.ts +22 -1
- package/dist/nuxt.js +22 -8
- package/dist/plugin.d.ts +10 -1
- package/dist/plugin.js +20 -19
- package/dist/runtime/nuxt-plugin.js +28 -21
- package/dist/styles.css +1 -1
- package/dist/utilities/misc/listboxMetrics.d.ts +3 -3
- package/dist/utilities/misc/listboxMetrics.js +2 -2
- package/dist/utilities/misc/ssrStateInjectionKey.d.ts +42 -0
- package/dist/utilities/misc/ssrStateInjectionKey.js +4 -0
- package/dist/validated/BbForm.vue_vue_type_script_setup_true_lang.js +45 -27
- package/dist/validated/BbSelect.vue.d.ts +2 -0
- package/dist/validated/BbSelect.vue_vue_type_script_setup_true_lang.js +1 -0
- package/dist/validated/useValidatedField.js +25 -23
- package/dist/vite.js +6 -2
- package/llms.txt +8 -7
- package/package.json +2 -2
- package/scripts/lib/eslint-plugin.d.ts +19 -1
- package/scripts/lib/eslint-plugin.mjs +146 -0
- package/scripts/lib/html-attributes.mjs +91 -0
- package/scripts/lib/validate-bb-markup.mjs +59 -4
- package/dist/assets/svgs/sort.svg_raw.js +0 -4
- 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
|
@@ -25,6 +25,13 @@ export type ItemKey<Item = any> = NestedPaths<Item> | (string & {});
|
|
|
25
25
|
* inferred per column, so the conditional has literal types to distribute over.
|
|
26
26
|
*/
|
|
27
27
|
export type ReservedColumnKey = 'actions' | 'select';
|
|
28
|
+
/**
|
|
29
|
+
* Suffixes of the header affix slots (`header:prepend` / `header:append` and
|
|
30
|
+
* their per-column `header:<key>:prepend/append` variants). A column key that
|
|
31
|
+
* normalizes to one of these shadows the table-wide slot name; the table-wide
|
|
32
|
+
* interpretation wins and dev builds warn.
|
|
33
|
+
*/
|
|
34
|
+
export type HeaderAffixSuffix = 'prepend' | 'append';
|
|
28
35
|
/**
|
|
29
36
|
* Skeleton placeholder style for the loading state.
|
|
30
37
|
* Matches the expected content type for a better loading experience.
|
|
@@ -80,17 +87,17 @@ export type BbTableColumn<Item = any> = BaseColumn<Item> & {
|
|
|
80
87
|
*/
|
|
81
88
|
sorted?: 'asc' | 'desc';
|
|
82
89
|
/**
|
|
83
|
-
* Classes this column contributes to the whole row
|
|
90
|
+
* Classes this column contributes to the whole row element. Every column's
|
|
84
91
|
* `rowClass` is accumulated with the table-level `rowClass` prop and applied
|
|
85
92
|
* together. Can also be a function of the cell's content for dynamic values.
|
|
86
93
|
*/
|
|
87
94
|
rowClass?: ColumnClasses<Item>;
|
|
88
95
|
/**
|
|
89
|
-
* Defines the classes to be passed to
|
|
96
|
+
* Defines the classes to be passed to this column's data cells. Can also be a function for dynamic values.
|
|
90
97
|
*/
|
|
91
98
|
tdClass?: ColumnClasses<Item>;
|
|
92
99
|
/**
|
|
93
|
-
* Defines the classes to be passed to
|
|
100
|
+
* Defines the classes to be passed to this column's header cell.
|
|
94
101
|
*/
|
|
95
102
|
thClass?: Classes;
|
|
96
103
|
/**
|
|
@@ -112,7 +119,11 @@ export type BbTableColumn<Item = any> = BaseColumn<Item> & {
|
|
|
112
119
|
* region.
|
|
113
120
|
*
|
|
114
121
|
* When omitted the column chains from the previous column's end to the next
|
|
115
|
-
* whole snap point (a one-to-one inheritance by index).
|
|
122
|
+
* whole snap point (a one-to-one inheritance by index). The last column
|
|
123
|
+
* always runs to the end of the parent's data region (as if `[start, -1]`)
|
|
124
|
+
* unless it declares a `width` or an explicit pair, so a table with fewer
|
|
125
|
+
* columns than its parent widens its last content cell across the parent's
|
|
126
|
+
* trailing tracks rather than its actions cell.
|
|
116
127
|
*/
|
|
117
128
|
snap?: number | [start: number, end: number];
|
|
118
129
|
};
|
|
@@ -120,6 +131,8 @@ export type BbTableProps<Item = any> = {
|
|
|
120
131
|
/**
|
|
121
132
|
* Function that accepts the columns and the current item as
|
|
122
133
|
* arguments and returns a label to be used for accessibility purposes.
|
|
134
|
+
* The cells arrive in RENDER order (they follow `order`, so the
|
|
135
|
+
* label reads like the row) — look a cell up by `key`, never by position.
|
|
123
136
|
*/
|
|
124
137
|
accessibleLabel?: (columns: MappedCell[], item: any) => string;
|
|
125
138
|
/**
|
|
@@ -136,31 +149,6 @@ export type BbTableProps<Item = any> = {
|
|
|
136
149
|
* @defaultValue `'left'`
|
|
137
150
|
*/
|
|
138
151
|
align?: 'left' | 'center' | 'right';
|
|
139
|
-
/**
|
|
140
|
-
* Stable id for this table's width context. When omitted a unique id is
|
|
141
|
-
* generated. Nested tables use the nearest ancestor id to inherit widths.
|
|
142
|
-
*/
|
|
143
|
-
id?: string;
|
|
144
|
-
/**
|
|
145
|
-
* Opt a nested table into inheriting its column widths from an ancestor
|
|
146
|
-
* table's matching tracks (accounting for `select`/`actions` columns). This
|
|
147
|
-
* also forces `table-layout: fixed`, so it is **off by default** — a nested
|
|
148
|
-
* table renders independently unless you ask for alignment.
|
|
149
|
-
* - `false` (the default): do not inherit; size independently.
|
|
150
|
-
* - `true`: inherit from the nearest ancestor table.
|
|
151
|
-
* - a table id (string): inherit from the specific ancestor in the chain with
|
|
152
|
-
* that id rather than the immediate parent. Use this when an intermediate
|
|
153
|
-
* table has a different column count, so the extra columns would otherwise
|
|
154
|
-
* misalign against it.
|
|
155
|
-
*/
|
|
156
|
-
inheritColumnWidths?: boolean | string;
|
|
157
|
-
/**
|
|
158
|
-
* Hides the "Select all" checkbox that selectable multi-row tables
|
|
159
|
-
* display by default.
|
|
160
|
-
*
|
|
161
|
-
* @defaultValue `false`
|
|
162
|
-
*/
|
|
163
|
-
disableSelectAll?: boolean;
|
|
164
152
|
/**
|
|
165
153
|
* Caption that describes the content of the table. Used for accessibility purposes.
|
|
166
154
|
*/
|
|
@@ -193,6 +181,18 @@ export type BbTableProps<Item = any> = {
|
|
|
193
181
|
* Disables the component
|
|
194
182
|
*/
|
|
195
183
|
disabled?: boolean;
|
|
184
|
+
/**
|
|
185
|
+
* Hides the "Select all" checkbox that selectable multi-row tables
|
|
186
|
+
* display by default.
|
|
187
|
+
*
|
|
188
|
+
* @defaultValue `false`
|
|
189
|
+
*/
|
|
190
|
+
disableSelectAll?: boolean;
|
|
191
|
+
/**
|
|
192
|
+
* Boolean that defines whether to display or hide the caption.
|
|
193
|
+
* By default is true and the caption is hidden.
|
|
194
|
+
*/
|
|
195
|
+
displayCaption?: boolean;
|
|
196
196
|
/**
|
|
197
197
|
* After every load (initial, `dependencies` refetch or a change of the
|
|
198
198
|
* `items` array) prunes the row-keyed models of values whose row is no
|
|
@@ -210,12 +210,17 @@ export type BbTableProps<Item = any> = {
|
|
|
210
210
|
*/
|
|
211
211
|
enforceCoherence?: boolean;
|
|
212
212
|
/**
|
|
213
|
-
*
|
|
214
|
-
*
|
|
213
|
+
* Used by `v-model:expandedItems`. Array of the currently expanded items —
|
|
214
|
+
* toggled by the row expand control and by external writes (mirrors the
|
|
215
|
+
* `highlighted`/`sort` v-model surfaces). Drives the `#expand` slot rows and
|
|
216
|
+
* their `aria-expanded`/`aria-controls` wiring.
|
|
217
|
+
*
|
|
218
|
+
* @defaultValue `[]`
|
|
215
219
|
*/
|
|
216
|
-
|
|
220
|
+
expandedItems?: any[];
|
|
217
221
|
/**
|
|
218
|
-
*
|
|
222
|
+
* Splits the width equally among the columns that declare no `width`
|
|
223
|
+
* (each undeclared column becomes a `minmax(0, 1fr)` track)
|
|
219
224
|
* making each column take up the same amount of space.
|
|
220
225
|
*/
|
|
221
226
|
fixed?: boolean;
|
|
@@ -224,6 +229,11 @@ export type BbTableProps<Item = any> = {
|
|
|
224
229
|
* It can be an array of index of the column to fix on the left side of the table or
|
|
225
230
|
* an array of objects indicating the index and the position `left` or `right` where to affix the columns.
|
|
226
231
|
*
|
|
232
|
+
* Indices are POSITIONS in the rendered column list (a selection column is
|
|
233
|
+
* index 0), like a spreadsheet's freeze panes — not per-column pins. With
|
|
234
|
+
* `order` the pinned slot holds and whichever column lands in it is
|
|
235
|
+
* pinned; dragging a column out of a pinned slot unpins it.
|
|
236
|
+
*
|
|
227
237
|
* @defaultValue `[]`
|
|
228
238
|
*/
|
|
229
239
|
fixedColumns?: Array<number | {
|
|
@@ -234,21 +244,66 @@ export type BbTableProps<Item = any> = {
|
|
|
234
244
|
* Boolean that sets the headers as sticky to the top of the table.
|
|
235
245
|
*/
|
|
236
246
|
fixedHeaders?: boolean;
|
|
247
|
+
/**
|
|
248
|
+
* Defines the classes to be passed to the header row.
|
|
249
|
+
*/
|
|
250
|
+
headerRowClass?: Classes;
|
|
237
251
|
/**
|
|
238
252
|
* Used by `v-model:highlighted`. A parallel, UI-intent state to selection —
|
|
239
253
|
* typically "the row whose details are open". A single item value (or
|
|
240
254
|
* `null`) — highlight is single by design.
|
|
241
|
-
*
|
|
242
|
-
*
|
|
243
|
-
* is
|
|
255
|
+
*
|
|
256
|
+
* **Opt-in, and `undefined` is the opt-out.** Leave it unbound and the whole
|
|
257
|
+
* mechanic is off: clicking a row emits `click:row` and nothing else — no
|
|
258
|
+
* class, no `aria-current`, no internal state. Bind it and clicking a row
|
|
259
|
+
* toggles it. The value itself is the switch: `undefined` means "never
|
|
260
|
+
* initialised", `null` means "initialised and currently empty", so bind
|
|
261
|
+
* `ref(null)` rather than `ref()` — a bound-but-`undefined` model warns in
|
|
262
|
+
* dev and stays off. A value seeded through
|
|
263
|
+
* `useBbTableContext(id, { highlighted })` counts as bound the same way.
|
|
264
|
+
*
|
|
265
|
+
* A highlighted row gets `aria-current="true"` and the
|
|
266
|
+
* `bb-table-data__row--highlighted` class, which the shipped stylesheet
|
|
267
|
+
* paints with a neutral fill plus a brand accent bar; override the whole
|
|
268
|
+
* look with `rowClass`.
|
|
244
269
|
*/
|
|
245
270
|
highlighted?: any;
|
|
271
|
+
/**
|
|
272
|
+
* Stable id for this table's width context. When omitted a unique id is
|
|
273
|
+
* generated. Nested tables use the nearest ancestor id to inherit widths.
|
|
274
|
+
*/
|
|
275
|
+
id?: string;
|
|
276
|
+
/**
|
|
277
|
+
* Opt a nested table into inheriting its column widths from an ancestor
|
|
278
|
+
* table's matching tracks (accounting for `select`/`actions` columns). This
|
|
279
|
+
* also makes the parent's tracks authoritative, so it is **off by default** — a nested
|
|
280
|
+
* table renders independently unless you ask for alignment.
|
|
281
|
+
* - `false` (the default): do not inherit; size independently.
|
|
282
|
+
* - `true`: inherit from the nearest ancestor table.
|
|
283
|
+
* - a table id (string): inherit from the specific ancestor in the chain with
|
|
284
|
+
* that id rather than the immediate parent. Use this when an intermediate
|
|
285
|
+
* table has a different column count, so the extra columns would otherwise
|
|
286
|
+
* misalign against it.
|
|
287
|
+
*/
|
|
288
|
+
inheritColumnWidths?: boolean | string;
|
|
289
|
+
/**
|
|
290
|
+
* Keeps the table interactive while it is loading. The header and the rows are
|
|
291
|
+
* `inert` while loading by default — a refetch is about to replace the rows,
|
|
292
|
+
* so editing, selecting or sorting them races the incoming data. This escape
|
|
293
|
+
* hatch exists for tables that must stay usable during background refreshes
|
|
294
|
+
* (e.g. a poll that must not interrupt an open editor).
|
|
295
|
+
*
|
|
296
|
+
* The loading announcement is never inert, so the busy state is always
|
|
297
|
+
* conveyed.
|
|
298
|
+
*/
|
|
299
|
+
interactiveWhileLoading?: boolean;
|
|
246
300
|
/**
|
|
247
301
|
* Rows to render, or a fetcher that returns them.
|
|
248
302
|
*
|
|
249
303
|
* @defaultValue `[]`
|
|
250
304
|
*/
|
|
251
305
|
items: Item[] | ((prefill: boolean, modelValue?: any) => Item[] | Promise<Item[]>);
|
|
306
|
+
itemValue?: ItemAccessor<Item>;
|
|
252
307
|
/**
|
|
253
308
|
* Opt-in keyboard navigation with a roving tabindex: the body is one tab
|
|
254
309
|
* stop, ArrowUp/ArrowDown move the focused row (Home/End jump), and
|
|
@@ -257,7 +312,6 @@ export type BbTableProps<Item = any> = {
|
|
|
257
312
|
* not highlight until committed. Focused rows show the standard focus ring.
|
|
258
313
|
*/
|
|
259
314
|
keyboardNavigation?: boolean;
|
|
260
|
-
itemValue?: ItemAccessor<Item>;
|
|
261
315
|
/**
|
|
262
316
|
* Text content of the `<legend>` a `selectable` table renders (it becomes
|
|
263
317
|
* a `<fieldset>`, and the legend is that fieldset's accessible name).
|
|
@@ -274,17 +328,6 @@ export type BbTableProps<Item = any> = {
|
|
|
274
328
|
* a refetch should not blank a table the user is reading.
|
|
275
329
|
*/
|
|
276
330
|
loading?: boolean;
|
|
277
|
-
/**
|
|
278
|
-
* Keeps the table interactive while it is loading. The header and the rows are
|
|
279
|
-
* `inert` while loading by default — a refetch is about to replace the rows,
|
|
280
|
-
* so editing, selecting or sorting them races the incoming data. This escape
|
|
281
|
-
* hatch exists for tables that must stay usable during background refreshes
|
|
282
|
-
* (e.g. a poll that must not interrupt an open editor).
|
|
283
|
-
*
|
|
284
|
-
* The loading announcement is never inert, so the busy state is always
|
|
285
|
-
* conveyed.
|
|
286
|
-
*/
|
|
287
|
-
interactiveWhileLoading?: boolean;
|
|
288
331
|
/**
|
|
289
332
|
* Screen-reader announcement for the loading row's `aria-live` status.
|
|
290
333
|
* Visually hidden — the skeleton (or the `#loading` slot) is the visible
|
|
@@ -321,6 +364,24 @@ export type BbTableProps<Item = any> = {
|
|
|
321
364
|
* @defaultValue the localized `common.noDataText` ("No data to display")
|
|
322
365
|
*/
|
|
323
366
|
noDataText?: string;
|
|
367
|
+
/**
|
|
368
|
+
* Used by `v-model:order`. Ordered array of column keys — the render
|
|
369
|
+
* order of the data columns. Keys listed here render first, in this order;
|
|
370
|
+
* declared columns it omits follow, in declaration order (so a column added
|
|
371
|
+
* to `columns` later renders last); keys that match no declared column render
|
|
372
|
+
* nothing but are PRESERVED in place on every write — a column you hide by
|
|
373
|
+
* removing it from `columns` (a column panel) keeps its slot and comes back
|
|
374
|
+
* where it was. The header drag / keyboard reorder of `reorderable`
|
|
375
|
+
* writes it back complete (every declared key present, duplicates dropped —
|
|
376
|
+
* first occurrence wins) with exactly the moved column relocated: every other
|
|
377
|
+
* key, hidden ones included, keeps its relative order, and a drop that
|
|
378
|
+
* changes nothing emits nothing. Works uncontrolled when unbound, exactly
|
|
379
|
+
* like `sort`. The `select` and `actions` columns are structural and never
|
|
380
|
+
* part of it.
|
|
381
|
+
*
|
|
382
|
+
* @defaultValue `[]`
|
|
383
|
+
*/
|
|
384
|
+
order?: string[];
|
|
324
385
|
/**
|
|
325
386
|
* Current page number starting from 1, used for accessibility purposes.
|
|
326
387
|
* Also flows into the shared table context, so a `BbPagination` paired
|
|
@@ -343,14 +404,42 @@ export type BbTableProps<Item = any> = {
|
|
|
343
404
|
*/
|
|
344
405
|
readonly?: boolean;
|
|
345
406
|
/**
|
|
346
|
-
*
|
|
407
|
+
* Lets the user reorder the data columns: drag a header cell (AG Grid style —
|
|
408
|
+
* the column moves live under the pointer and a chip with its label follows)
|
|
409
|
+
* or, from the keyboard, use each header's reorder handle (ArrowLeft /
|
|
410
|
+
* ArrowRight move the column one slot, Home / End to the ends). Every move
|
|
411
|
+
* writes `v-model:order`. Not needed by an external control (a column
|
|
412
|
+
* panel) that only writes `order`. The `select` / `actions` columns and
|
|
413
|
+
* a custom `#thead` are never draggable.
|
|
414
|
+
*
|
|
415
|
+
* @defaultValue `false`
|
|
416
|
+
*/
|
|
417
|
+
reorderable?: boolean;
|
|
418
|
+
/**
|
|
419
|
+
* Lets the user resize the data columns of a root table: drag the handle on
|
|
420
|
+
* a header's trailing edge (the column follows live, the width commits on
|
|
421
|
+
* release), or press Alt + ArrowLeft / ArrowRight on the focused header;
|
|
422
|
+
* double-click the handle to go back to the declared width. Each commit
|
|
423
|
+
* fires `resize:column(key, width)` once. `column.width` stays the single declared
|
|
424
|
+
* truth: a resized width is an override the table keeps until that
|
|
425
|
+
* column's `width` changes — write the reported width back into your
|
|
426
|
+
* column definition to persist it. Ignored on a table that inherits its
|
|
427
|
+
* widths from a parent.
|
|
428
|
+
*
|
|
429
|
+
* @defaultValue `false`
|
|
430
|
+
*/
|
|
431
|
+
resizable?: boolean;
|
|
432
|
+
/**
|
|
433
|
+
* Defines the classes to be passed to each data row. Can also be a
|
|
347
434
|
* function of the row's item for dynamic values.
|
|
348
435
|
*/
|
|
349
436
|
rowClass?: RowClasses<Item>;
|
|
350
437
|
/**
|
|
351
|
-
* Defines the
|
|
438
|
+
* Defines whether the table is selectable.
|
|
439
|
+
* Can be a global boolean that affects all rows or a function
|
|
440
|
+
* that accepts an item and returns a boolean that only affects that item.
|
|
352
441
|
*/
|
|
353
|
-
|
|
442
|
+
selectable?: boolean | ((item: Item) => boolean);
|
|
354
443
|
/**
|
|
355
444
|
* Defines whether the "Select all" checkbox is checked.
|
|
356
445
|
*
|
|
@@ -358,11 +447,13 @@ export type BbTableProps<Item = any> = {
|
|
|
358
447
|
*/
|
|
359
448
|
selectAll?: boolean;
|
|
360
449
|
/**
|
|
361
|
-
*
|
|
362
|
-
* Can be a global boolean that affects all rows or a function
|
|
363
|
-
* that accepts an item and returns a boolean that only affects that item.
|
|
450
|
+
* Text of the label used by the "Select all" boolean.
|
|
364
451
|
*/
|
|
365
|
-
|
|
452
|
+
selectAllLabel?: string;
|
|
453
|
+
/**
|
|
454
|
+
* Text of the header used for the radio inputs when the table is not `multiple`.
|
|
455
|
+
*/
|
|
456
|
+
selectText?: string;
|
|
366
457
|
/**
|
|
367
458
|
* Used by `v-model:sort`. Ordered array of `[columnKey, direction]`
|
|
368
459
|
* entries, one per actively sorted column. Bidirectional: the header
|
|
@@ -374,28 +465,11 @@ export type BbTableProps<Item = any> = {
|
|
|
374
465
|
*/
|
|
375
466
|
sort?: BbTableSortEntry[];
|
|
376
467
|
/**
|
|
377
|
-
*
|
|
378
|
-
* toggled by the row expand control and by external writes (mirrors the
|
|
379
|
-
* `highlighted`/`sort` v-model surfaces). Drives the `#expand` slot rows and
|
|
380
|
-
* their `aria-expanded`/`aria-controls` wiring.
|
|
381
|
-
*
|
|
382
|
-
* @defaultValue `[]`
|
|
383
|
-
*/
|
|
384
|
-
expandedItems?: any[];
|
|
385
|
-
/**
|
|
386
|
-
* Text of the label used by the "Select all" boolean.
|
|
387
|
-
*/
|
|
388
|
-
selectAllLabel?: string;
|
|
389
|
-
/**
|
|
390
|
-
* Text of the header used for the radio inputs when the table is not `multiple`.
|
|
391
|
-
*/
|
|
392
|
-
selectText?: string;
|
|
393
|
-
/**
|
|
394
|
-
* Defines the classes to be passed to the `<td>` elements. Can also be a function for dynamic values.
|
|
468
|
+
* Defines the classes to be passed to every data cell. Can also be a function for dynamic values.
|
|
395
469
|
*/
|
|
396
470
|
tdClass?: ColumnClasses<Item>;
|
|
397
471
|
/**
|
|
398
|
-
* Defines the classes to be passed to
|
|
472
|
+
* Defines the classes to be passed to every header cell.
|
|
399
473
|
*/
|
|
400
474
|
thClass?: Classes;
|
|
401
475
|
/**
|
|
@@ -423,6 +497,22 @@ export type BbTableProps<Item = any> = {
|
|
|
423
497
|
* @defaultValue `[]`
|
|
424
498
|
*/
|
|
425
499
|
unselectedItems?: any[];
|
|
500
|
+
/**
|
|
501
|
+
* Windows the body: only the rows in (and just around) the vertical
|
|
502
|
+
* scrollport are mounted, so a client-side dataset of any size scrolls at
|
|
503
|
+
* a constant cost. The table itself is the scroller as soon as you bound
|
|
504
|
+
* its height (`max-height` / `height`, or a flex item with
|
|
505
|
+
* `min-height: 0`); left unbounded, the nearest scrolling ancestor or the
|
|
506
|
+
* page scrolls it. The header sticks to that scroller. Column widths are
|
|
507
|
+
* measured once from the first rendered batch and then hold — later rows
|
|
508
|
+
* never widen them. Expand rows and nested tables stay fully rendered
|
|
509
|
+
* inside their row (a nested table is never windowed); the row that owns
|
|
510
|
+
* focus stays mounted even when scrolled out of view. Ignored by a table
|
|
511
|
+
* that inherits its widths from a parent, and under a `#tbody` slot.
|
|
512
|
+
*
|
|
513
|
+
* @defaultValue `false`
|
|
514
|
+
*/
|
|
515
|
+
virtual?: boolean;
|
|
426
516
|
};
|
|
427
517
|
/**
|
|
428
518
|
* We allow table data classes to be a function so it can depend on the item.
|
|
@@ -454,12 +544,22 @@ export type MappedItem = Option & {
|
|
|
454
544
|
onRowContextMenu: (event: MouseEvent) => void;
|
|
455
545
|
onRowDblClick: (event: MouseEvent) => void;
|
|
456
546
|
rowIndex: number | undefined;
|
|
547
|
+
/**
|
|
548
|
+
* The row's slot scope, built ONCE per row in the projection rather than
|
|
549
|
+
* per cell per render (a 16-column row used to allocate ~100 closures and
|
|
550
|
+
* objects on every render; a virtualized table mounts a dozen rows per
|
|
551
|
+
* scroll step).
|
|
552
|
+
*/
|
|
553
|
+
expandProps: Record<string, unknown>;
|
|
554
|
+
toggleExpanded: () => void;
|
|
555
|
+
toggleHighlighted: () => void;
|
|
556
|
+
toggleSelected: () => void;
|
|
457
557
|
};
|
|
458
558
|
/**
|
|
459
559
|
* Projection that represents a header
|
|
460
560
|
*/
|
|
461
561
|
export type MappedHeader = {
|
|
462
|
-
align:
|
|
562
|
+
align: string;
|
|
463
563
|
classes?: Classes;
|
|
464
564
|
key: string;
|
|
465
565
|
label: string;
|
|
@@ -486,34 +586,76 @@ export type ExpandControllerProps = {
|
|
|
486
586
|
onKeydown: (event: KeyboardEvent) => void;
|
|
487
587
|
};
|
|
488
588
|
export type BbTableEvents = {
|
|
489
|
-
(e: 'click:row', event: MouseEvent, item: any
|
|
490
|
-
(e: 'contextmenu:row', event: MouseEvent, item: any
|
|
491
|
-
(e: 'dblclick:row', event: MouseEvent, item: any
|
|
589
|
+
(e: 'click:row', event: MouseEvent, item: any): void;
|
|
590
|
+
(e: 'contextmenu:row', event: MouseEvent, item: any): void;
|
|
591
|
+
(e: 'dblclick:row', event: MouseEvent, item: any): void;
|
|
492
592
|
(e: 'update:highlighted', value: any): void;
|
|
493
593
|
(e: 'update:modelValue', value: any): void;
|
|
494
594
|
(e: 'update:selectAll', value: boolean): void;
|
|
495
595
|
(e: 'update:sort', value: BbTableSortEntry[]): void;
|
|
596
|
+
(e: 'update:order', value: string[]): void;
|
|
597
|
+
/**
|
|
598
|
+
* A column was resized by the user (`resizable`): the new width in
|
|
599
|
+
* px, or `null` when the handle was double-clicked to reset the column to
|
|
600
|
+
* its declared width.
|
|
601
|
+
*/
|
|
602
|
+
(e: 'resize:column', key: string, width: number | null): void;
|
|
496
603
|
(e: 'update:expandedItems', value: any[]): void;
|
|
497
604
|
(e: 'update:unselectedItems', value: any[]): void;
|
|
498
605
|
(e: 'item:selected', value: any): void;
|
|
499
606
|
(e: 'item:unselected', value: any): void;
|
|
500
607
|
};
|
|
608
|
+
/**
|
|
609
|
+
* Props exposed by the table-wide `header:prepend` / `header:append` slots and
|
|
610
|
+
* their per-column `header:<key>:prepend` / `header:<key>:append` variants —
|
|
611
|
+
* the `header:<key>` payload plus the column key.
|
|
612
|
+
*/
|
|
613
|
+
export type BbTableHeaderAffixSlotProps<Item = any> = {
|
|
614
|
+
/** Merged header classes for this column. */
|
|
615
|
+
classes?: Classes;
|
|
616
|
+
/**
|
|
617
|
+
* The raw key of the column being rendered — branch on it in the
|
|
618
|
+
* table-wide slots.
|
|
619
|
+
*/
|
|
620
|
+
columnKey: string;
|
|
621
|
+
/** The current table items. */
|
|
622
|
+
items?: Item[];
|
|
623
|
+
/** The column's label. */
|
|
624
|
+
label?: string;
|
|
625
|
+
/** Whether this column is sortable. */
|
|
626
|
+
sortable?: boolean;
|
|
627
|
+
/** This column's current sort direction, or `null` when unsorted. */
|
|
628
|
+
sortOrder?: 'asc' | 'desc' | null;
|
|
629
|
+
/** Cycles this column's sort: unsorted → asc → desc → unsorted. */
|
|
630
|
+
toggleSort?: () => void;
|
|
631
|
+
};
|
|
501
632
|
export type BbTableSlots<Item = any> = {
|
|
502
633
|
/**
|
|
503
|
-
* Replaces the
|
|
634
|
+
* Replaces the content of the header row group (`.bb-table__head`). Use when
|
|
635
|
+
* you need full control over the header markup. The table is a CSS grid,
|
|
636
|
+
* not a `<table>`: provide role-complete rows — `<div role="row">` holding
|
|
637
|
+
* one `<div role="columnheader">` per column — and never a `<tr>`/`<th>`.
|
|
638
|
+
* Rows are subgrid rows, so each cell lands on the matching column track.
|
|
504
639
|
*/
|
|
505
640
|
thead?: (props: object) => any;
|
|
506
641
|
/**
|
|
507
|
-
* Replaces the
|
|
642
|
+
* Replaces the content of the body row group (`.bb-table__body`). Use when
|
|
643
|
+
* you need full control over the body markup. Provide role-complete rows —
|
|
644
|
+
* `<div role="row">` holding one `<div role="cell">` per column — never a
|
|
645
|
+
* `<tr>`/`<td>`. A full-width cell spans with `grid-column: 1 / -1`.
|
|
508
646
|
*/
|
|
509
647
|
tbody?: (props: object) => any;
|
|
510
648
|
/**
|
|
511
|
-
*
|
|
649
|
+
* Fills the footer row group (`.bb-table__foot`). Use when you need a
|
|
650
|
+
* footer. Provide role-complete rows — `<div role="row">` holding
|
|
651
|
+
* `<div role="cell">` elements — never a `<tr>`/`<td>`.
|
|
512
652
|
*/
|
|
513
653
|
tfoot?: (props: {
|
|
514
654
|
/**
|
|
515
|
-
* Total rendered column count
|
|
516
|
-
*
|
|
655
|
+
* Total rendered column count (accounts for the selection/actions
|
|
656
|
+
* columns), so you never hand-count it. A footer cell spanning the
|
|
657
|
+
* whole table uses `grid-column: 1 / -1`; one spanning a subset uses
|
|
658
|
+
* `grid-column: span N` with `N` up to this value.
|
|
517
659
|
*/
|
|
518
660
|
columnCount: number;
|
|
519
661
|
}) => any;
|
|
@@ -535,6 +677,20 @@ export type BbTableSlots<Item = any> = {
|
|
|
535
677
|
'header:actions'?: (props: {
|
|
536
678
|
text: string;
|
|
537
679
|
}) => any;
|
|
680
|
+
/**
|
|
681
|
+
* Content rendered before every data column's header cell content — the
|
|
682
|
+
* label + sort control, or the column's own `header:<key>` replacement.
|
|
683
|
+
* A column's `header:<key>:prepend` slot wins over this one for that
|
|
684
|
+
* column; they never stack. Branch on `columnKey` for per-column output.
|
|
685
|
+
*/
|
|
686
|
+
'header:prepend'?: (props: BbTableHeaderAffixSlotProps<Item>) => any;
|
|
687
|
+
/**
|
|
688
|
+
* Content rendered after every data column's header cell content — the
|
|
689
|
+
* label + sort control, or the column's own `header:<key>` replacement.
|
|
690
|
+
* A column's `header:<key>:append` slot wins over this one for that
|
|
691
|
+
* column; they never stack. Branch on `columnKey` for per-column output.
|
|
692
|
+
*/
|
|
693
|
+
'header:append'?: (props: BbTableHeaderAffixSlotProps<Item>) => any;
|
|
538
694
|
/**
|
|
539
695
|
* Content shown while table rows are loading (replaces the skeleton rows).
|
|
540
696
|
* @param items - The current (possibly stale) list of items, useful to match the previous row count.
|
|
@@ -544,9 +700,9 @@ export type BbTableSlots<Item = any> = {
|
|
|
544
700
|
}) => any;
|
|
545
701
|
/**
|
|
546
702
|
* Content shown when the items list is empty and not loading. It fills the
|
|
547
|
-
* table's own full-width empty-state cell (
|
|
548
|
-
*
|
|
549
|
-
* illustration, a "clear filters" button — never a
|
|
703
|
+
* table's own full-width empty-state cell (it already spans the
|
|
704
|
+
* selection/actions columns), so provide the *content* — a message, an
|
|
705
|
+
* illustration, a "clear filters" button — never a row/cell of your own.
|
|
550
706
|
*/
|
|
551
707
|
'no-data'?: (props: object) => any;
|
|
552
708
|
/**
|
|
@@ -616,6 +772,11 @@ export type BbTableSlots<Item = any> = {
|
|
|
616
772
|
}) => any;
|
|
617
773
|
} & Record<string, (props: {
|
|
618
774
|
classes?: Classes[];
|
|
775
|
+
/**
|
|
776
|
+
* Present only in the `header:<key>:prepend/append` affix slots — the
|
|
777
|
+
* raw key of the column being rendered.
|
|
778
|
+
*/
|
|
779
|
+
columnKey?: string;
|
|
619
780
|
content?: any;
|
|
620
781
|
expanded?: boolean;
|
|
621
782
|
expandProps?: ExpandControllerProps;
|
|
@@ -5,10 +5,93 @@ export type FixedColumnConfig = number | {
|
|
|
5
5
|
position: 'left' | 'right';
|
|
6
6
|
};
|
|
7
7
|
/**
|
|
8
|
-
*
|
|
9
|
-
*
|
|
8
|
+
* Splits the grid root's *resolved* `grid-template-columns` (one
|
|
9
|
+
* `getComputedStyle` read) into its px tokens, verbatim. Returns `null` when
|
|
10
|
+
* any token is not a px length: a table hidden by `display: none` reports its
|
|
11
|
+
* SPECIFIED template (`max-content auto …`) instead of used values, and the
|
|
12
|
+
* caller must keep its last good measurement rather than publish keywords.
|
|
13
|
+
*
|
|
14
|
+
* Read the root only — a subgrid box reports the literal `subgrid [] [] …`.
|
|
10
15
|
*/
|
|
11
|
-
export declare const
|
|
16
|
+
export declare const readResolvedTracks: (root: Element) => string[] | null;
|
|
17
|
+
/**
|
|
18
|
+
* Applies sticky positioning to fixed table columns — a RECONCILE pass, not a
|
|
19
|
+
* set-only one: every cell of every processed row ends up with exactly the
|
|
20
|
+
* inline `position`/`left`/`right` its slot calls for, and nothing else.
|
|
21
|
+
*
|
|
22
|
+
* `root` is the grid root (`.bb-table__table`). Offsets are prefix sums of the
|
|
23
|
+
* resolved track list, so they hold to the subpixel regardless of what sized
|
|
24
|
+
* the track (frozen width, inherited parent track, content). Call after DOM
|
|
25
|
+
* updates (e.g. in a `flush: 'post'` watch) and after every re-measure so the
|
|
26
|
+
* offsets follow the tracks.
|
|
27
|
+
*
|
|
28
|
+
* Pins are POSITIONAL (indices into the rendered track list, `select`
|
|
29
|
+
* included): the pinned slot holds and whichever column lands in it is
|
|
30
|
+
* pinned. Cells are keyed by column, so a reorder MOVES the cell element —
|
|
31
|
+
* inline styles travel with it. A column leaving a pinned slot would keep
|
|
32
|
+
* `position: sticky; left: 0px` and, once the container scrolls, paint over
|
|
33
|
+
* the column that took the slot (and shrink a right-pinned slot's `left`
|
|
34
|
+
* would linger too), which is why every non-pinned cell is cleared and every
|
|
35
|
+
* pinned cell has its opposite side cleared. The same clearing is what makes
|
|
36
|
+
* shrinking `fixedColumns` (or emptying it) unpin. Clearing an absent inline
|
|
37
|
+
* property is mutation-free, so the pass is idempotent and cheap.
|
|
38
|
+
*/
|
|
39
|
+
export declare const applyFixedTableColumns: (root: HTMLElement, fixedColumns: FixedColumnConfig[],
|
|
40
|
+
/**
|
|
41
|
+
* The resolved tracks when the caller already holds them (the measure path
|
|
42
|
+
* just read them; a `virtual` window change moves no track): skips the
|
|
43
|
+
* `getComputedStyle` read, which forces style on every call.
|
|
44
|
+
*/
|
|
45
|
+
resolvedTracks?: string[] | null,
|
|
46
|
+
/**
|
|
47
|
+
* Skip rows whose inline styles were already written for this exact track
|
|
48
|
+
* list and pin config — the caller opting in to the row stamp below. Only
|
|
49
|
+
* safe when the CELL ORDER cannot have changed since the last pass, which
|
|
50
|
+
* is the caller's knowledge, not ours: a reorder can leave the track list
|
|
51
|
+
* and the config byte-identical while every cell has moved to a different
|
|
52
|
+
* track. `virtual`'s window-move pass is exactly that case (the rows
|
|
53
|
+
* change, the columns do not).
|
|
54
|
+
*/
|
|
55
|
+
memoize?: boolean) => void;
|
|
56
|
+
/**
|
|
57
|
+
* Completes an `order` model against the declared column keys: the
|
|
58
|
+
* model's keys first (duplicates dropped, first occurrence wins), then every
|
|
59
|
+
* declared key the model omits, in declaration order. Unknown keys (columns
|
|
60
|
+
* the consumer currently hides) are kept in place.
|
|
61
|
+
*/
|
|
62
|
+
export declare const completeColumnOrder: (model: readonly string[], declared: readonly string[]) => string[];
|
|
63
|
+
/**
|
|
64
|
+
* Declared columns in render order — the completed model restricted to the
|
|
65
|
+
* declared keys. A key declared twice keeps both columns (parity with the
|
|
66
|
+
* unordered render), adjacent, in declaration order.
|
|
67
|
+
*/
|
|
68
|
+
export declare const orderColumns: <C extends {
|
|
69
|
+
key: string;
|
|
70
|
+
}>(columns: readonly C[], model: readonly string[]) => C[];
|
|
71
|
+
/**
|
|
72
|
+
* The write-back. Moves `key` to render index `toIndex` among the declared
|
|
73
|
+
* columns and returns the complete model to emit: the completed model with
|
|
74
|
+
* exactly ONE entry relocated — what dragging that entry in a panel listing
|
|
75
|
+
* the complete order (hidden columns included) would produce.
|
|
76
|
+
*
|
|
77
|
+
* Invariants (each pinned by a unit test):
|
|
78
|
+
* 1. completeness — a permutation of `completeColumnOrder(model, declared)`,
|
|
79
|
+
* no duplicates;
|
|
80
|
+
* 2. single relocation — `result` without `key` equals the completed model
|
|
81
|
+
* without `key`: every other key, hidden ones included, keeps its
|
|
82
|
+
* relative order (this IS the "hidden columns keep their slot" guarantee);
|
|
83
|
+
* 3. render index — among the declared keys, `key` sits at
|
|
84
|
+
* `clamp(toIndex, 0, N - 1)`;
|
|
85
|
+
* 4. adjacency — `key` lands right AFTER (moving right) / right BEFORE
|
|
86
|
+
* (moving left) the visible column it displaces, so a hidden key is never
|
|
87
|
+
* caught between the mover and its new neighbour;
|
|
88
|
+
* 5. stability — an unknown or hidden `key`, or `toIndex` equal to the
|
|
89
|
+
* current index, returns the completed model unchanged (callers compare
|
|
90
|
+
* against the completed model and emit nothing).
|
|
91
|
+
*/
|
|
92
|
+
export declare const moveColumnKey: (model: readonly string[], declared: readonly string[], key: string, toIndex: number) => string[];
|
|
93
|
+
/** Sequence equality for the commit guard. */
|
|
94
|
+
export declare const sameColumnOrder: (a: readonly string[], b: readonly string[]) => boolean;
|
|
12
95
|
/**
|
|
13
96
|
* Converts a column key (e.g. "address.nested.value") to a slot-safe name (e.g. "address_nested_value").
|
|
14
97
|
* Thin alias over the shared {@link slotKey} normalizer used across every
|
|
@@ -20,7 +103,7 @@ export declare const columnKeyToSlotName: (key: string) => string;
|
|
|
20
103
|
*/
|
|
21
104
|
export declare const mergeHeaderClasses: (base: Classes, global?: Classes, column?: Classes) => Classes;
|
|
22
105
|
/**
|
|
23
|
-
* Accumulates every row-class source for a row
|
|
106
|
+
* Accumulates every row-class source for a data row: the table-level
|
|
24
107
|
* `rowClass` prop (item function or static), then each column's `rowClass`
|
|
25
108
|
* (resolved with that column's cell content, like `tdClass`), in column order.
|
|
26
109
|
*/
|