From 696a6022692689663db9b00c895b19a45b408394 Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Sun, 12 Oct 2025 03:55:00 +0300 Subject: [PATCH 1/7] Fix modals created with useModal not showing title defined in component (#2878) Fix: modal title not showing when defined in component with useModal --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: xvaara <130606+xvaara@users.noreply.github.com> --- .../composables/orchestratorShared.spec.ts | 100 ++++++++++++++++++ .../src/composables/orchestratorShared.ts | 15 ++- 2 files changed, 111 insertions(+), 4 deletions(-) create mode 100644 packages/bootstrap-vue-next/src/composables/orchestratorShared.spec.ts diff --git a/packages/bootstrap-vue-next/src/composables/orchestratorShared.spec.ts b/packages/bootstrap-vue-next/src/composables/orchestratorShared.spec.ts new file mode 100644 index 000000000..275f66e4e --- /dev/null +++ b/packages/bootstrap-vue-next/src/composables/orchestratorShared.spec.ts @@ -0,0 +1,100 @@ +import {describe, expect, it} from 'vitest' +import {ref} from 'vue' +import {buildPromise} from './orchestratorShared' +import type {ModalOrchestratorArrayValue} from '../types/ComponentOrchestratorTypes' + +describe('buildPromise', () => { + it('set method does not add undefined title and body when they are not in the value', () => { + const store = ref([]) + const _self = Symbol('test-modal') + + const {value: promise} = buildPromise( + _self, + store + ) + + // First, add an item to the store without title or body + store.value.push({ + type: 'modal', + _self, + position: 'modal', + modelValue: false, + _component: {}, + options: {}, + promise: {value: promise, resolve: () => {}}, + } as ModalOrchestratorArrayValue) + + // Now call set with a value that doesn't have title or body + promise.set({modelValue: true} as never) + + // Get the item from the store + const item = store.value.find((el) => el._self === _self) + expect(item).toBeDefined() + + // The key check: title and body should not be in the object + // This ensures they won't override component-defined props + expect('title' in (item || {})).toBe(false) + expect('body' in (item || {})).toBe(false) + }) + + it('set method preserves title and body when they are defined', () => { + const store = ref([]) + const _self = Symbol('test-modal') + + const {value: promise} = buildPromise( + _self, + store + ) + + // Add an item to the store with title + store.value.push({ + type: 'modal', + _self, + position: 'modal', + modelValue: false, + title: 'Initial Title', + _component: {}, + options: {}, + promise: {value: promise, resolve: () => {}}, + } as ModalOrchestratorArrayValue) + + // Call set with a new title + promise.set({title: 'Updated Title'} as never) + + // Get the item from the store + const item = store.value.find((el) => el._self === _self) + expect(item).toBeDefined() + expect(item?.title).toBe('Updated Title') + }) + + it('set method handles undefined title explicitly passed', () => { + const store = ref([]) + const _self = Symbol('test-modal') + + const {value: promise} = buildPromise( + _self, + store + ) + + // Add an item to the store with title + store.value.push({ + type: 'modal', + _self, + position: 'modal', + modelValue: false, + title: 'Initial Title', + _component: {}, + options: {}, + promise: {value: promise, resolve: () => {}}, + } as ModalOrchestratorArrayValue) + + // Call set without title (title not in the object) + promise.set({modelValue: true} as never) + + // Get the item from the store + const item = store.value.find((el) => el._self === _self) + expect(item).toBeDefined() + // Title should remain as it was, not be overwritten with undefined + expect(item?.title).toBe('Initial Title') + }) +}) diff --git a/packages/bootstrap-vue-next/src/composables/orchestratorShared.ts b/packages/bootstrap-vue-next/src/composables/orchestratorShared.ts index 26ca480aa..0af65208f 100644 --- a/packages/bootstrap-vue-next/src/composables/orchestratorShared.ts +++ b/packages/bootstrap-vue-next/src/composables/orchestratorShared.ts @@ -72,12 +72,19 @@ export function buildPromise).title), - body: toValue((v as Record).body), modelValue: toValue(v.modelValue), - } as TArrayValue) + } as TArrayValue + // Only set title and body if they are defined in v + const vRecord = v as Record + if ('title' in vRecord && vRecord.title !== undefined) { + ;(updatedItem as Record).title = toValue(vRecord.title) + } + if ('body' in vRecord && vRecord.body !== undefined) { + ;(updatedItem as Record).body = toValue(vRecord.body) + } + store.value.splice(itemIndex, 1, updatedItem) } return promise }, From 3ef04e30af998e2813362afb72d2deee77083ebe Mon Sep 17 00:00:00 2001 From: "David W. Gray" Date: Tue, 21 Oct 2025 17:19:45 -0700 Subject: [PATCH 2/7] docs(bmodal): mark header-tag and footer-tag as deprecated (#2881) --- apps/docs/src/docs/migration-guide.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/apps/docs/src/docs/migration-guide.md b/apps/docs/src/docs/migration-guide.md index aa1733124..24cd3509f 100644 --- a/apps/docs/src/docs/migration-guide.md +++ b/apps/docs/src/docs/migration-guide.md @@ -607,7 +607,8 @@ flex utility classes. See their [documentation](https://getbootstrap.com/docs/5. ### BModal - `footer-tag` and `header-tag` +`footer-tag` and `header-tag` are deprecated, use the `footer` and `title` slots instead. See the +[modal documentation](/docs/components/modal#custom-rendering-with-slots) for details. #### Removed Global Modal Management @@ -700,7 +701,7 @@ See the [v-html](#v-html) section for information on deprecation of the `cancel- #### Modal Slot changes -[BootstrapVue](https://bootstrap-vue.github.io/bootstrap-vue/docs/components/modal#custom-rendering-with-slots) provides different slots to configure some pieces of the modal component. These slots are slightly different in [BootstrapVueNext](/docs/components/modal.html#comp-reference-bmodal-slots): +[BootstrapVue](https://bootstrap-vue.github.io/bootstrap-vue/docs/components/modal#custom-rendering-with-slots) provides different slots to configure some pieces of the modal component. These slots are slightly different in [BootstrapVueNext](/docs/components/modal#comp-reference-bmodal-slots): | BootstrapVue | BootstrapVueNext | | ------------------ | ---------------- | From 599c511b07c497812edfbf87ed438b21ede0269f Mon Sep 17 00:00:00 2001 From: "David W. Gray" Date: Tue, 21 Oct 2025 17:21:37 -0700 Subject: [PATCH 3/7] docs: refactor remaining examples in the components documentation (#2882) --- apps/docs/src/docs/components/app.md | 278 +---------------- apps/docs/src/docs/components/demo/App.vue | 10 + .../docs/components/demo/AppBasicUsage.vue | 10 + .../docs/components/demo/AppComposables.vue | 31 ++ .../docs/components/demo/AppCustomMerge.vue | 23 ++ .../src/docs/components/demo/AppDefaults.vue | 25 ++ .../docs/components/demo/AppMergeDefaults.vue | 18 ++ .../components/demo/AppMigrationAfter.vue | 10 + .../components/demo/AppMigrationAfterMain.ts | 10 + .../components/demo/AppMigrationBefore.ts | 18 ++ .../components/demo/AppNoOrchestrator.vue | 6 + apps/docs/src/docs/components/demo/AppRTL.vue | 15 + .../src/docs/components/demo/AppTeleport.vue | 6 + .../docs/components/demo/AppToastConfig.vue | 6 + .../docs/components/demo/FormFileAccept.vue | 15 + .../components/demo/FormFileAutofocus.vue | 6 + .../docs/components/demo/FormFileLabel.vue | 9 + .../docs/components/demo/FormFileMultiple.vue | 15 + .../docs/components/demo/FormFileNoDrop.vue | 15 + .../docs/components/demo/FormFileSingle.vue | 15 + .../docs/components/demo/FormFileSizing.vue | 11 + .../docs/components/demo/FormFileState.vue | 10 + .../components/demo/FormSelectOptionNotes.vue | 27 ++ .../components/demo/OrchestratorFilter.vue | 11 + .../components/demo/OrchestratorInternal.vue | 7 + .../components/demo/OrchestratorSelective.vue | 7 + .../components/demo/PlaceholderAnimation.vue | 11 + .../docs/components/demo/PlaceholderBasic.vue | 5 + .../components/demo/PlaceholderButton.vue | 3 + .../docs/components/demo/PlaceholderCard.vue | 3 + .../demo/PlaceholderCardAdvanced.vue | 21 ++ .../components/demo/PlaceholderSizing.vue | 5 + .../docs/components/demo/PlaceholderTable.vue | 3 + .../demo/PlaceholderTableAdvanced.vue | 46 +++ .../docs/components/demo/PlaceholderWidth.vue | 22 ++ .../components/demo/PlaceholderWrapper.vue | 59 ++++ .../docs/components/demo/SelectOverview.vue | 1 - .../docs/components/demo/ToastAutoDismiss.vue | 24 ++ .../src/docs/components/demo/ToastLink.vue | 20 ++ .../docs/components/demo/ToastOverview.vue | 15 + .../docs/components/demo/ToastPositioning.vue | 39 +++ .../src/docs/components/demo/ToastStatic.vue | 16 + apps/docs/src/docs/components/form-file.md | 164 +--------- apps/docs/src/docs/components/form-select.md | 8 +- apps/docs/src/docs/components/orchestrator.md | 51 +--- apps/docs/src/docs/components/placeholder.md | 285 +----------------- apps/docs/src/docs/components/toast.md | 211 +------------ 47 files changed, 667 insertions(+), 959 deletions(-) create mode 100644 apps/docs/src/docs/components/demo/App.vue create mode 100644 apps/docs/src/docs/components/demo/AppBasicUsage.vue create mode 100644 apps/docs/src/docs/components/demo/AppComposables.vue create mode 100644 apps/docs/src/docs/components/demo/AppCustomMerge.vue create mode 100644 apps/docs/src/docs/components/demo/AppDefaults.vue create mode 100644 apps/docs/src/docs/components/demo/AppMergeDefaults.vue create mode 100644 apps/docs/src/docs/components/demo/AppMigrationAfter.vue create mode 100644 apps/docs/src/docs/components/demo/AppMigrationAfterMain.ts create mode 100644 apps/docs/src/docs/components/demo/AppMigrationBefore.ts create mode 100644 apps/docs/src/docs/components/demo/AppNoOrchestrator.vue create mode 100644 apps/docs/src/docs/components/demo/AppRTL.vue create mode 100644 apps/docs/src/docs/components/demo/AppTeleport.vue create mode 100644 apps/docs/src/docs/components/demo/AppToastConfig.vue create mode 100644 apps/docs/src/docs/components/demo/FormFileAccept.vue create mode 100644 apps/docs/src/docs/components/demo/FormFileAutofocus.vue create mode 100644 apps/docs/src/docs/components/demo/FormFileLabel.vue create mode 100644 apps/docs/src/docs/components/demo/FormFileMultiple.vue create mode 100644 apps/docs/src/docs/components/demo/FormFileNoDrop.vue create mode 100644 apps/docs/src/docs/components/demo/FormFileSingle.vue create mode 100644 apps/docs/src/docs/components/demo/FormFileSizing.vue create mode 100644 apps/docs/src/docs/components/demo/FormFileState.vue create mode 100644 apps/docs/src/docs/components/demo/FormSelectOptionNotes.vue create mode 100644 apps/docs/src/docs/components/demo/OrchestratorFilter.vue create mode 100644 apps/docs/src/docs/components/demo/OrchestratorInternal.vue create mode 100644 apps/docs/src/docs/components/demo/OrchestratorSelective.vue create mode 100644 apps/docs/src/docs/components/demo/PlaceholderAnimation.vue create mode 100644 apps/docs/src/docs/components/demo/PlaceholderBasic.vue create mode 100644 apps/docs/src/docs/components/demo/PlaceholderButton.vue create mode 100644 apps/docs/src/docs/components/demo/PlaceholderCard.vue create mode 100644 apps/docs/src/docs/components/demo/PlaceholderCardAdvanced.vue create mode 100644 apps/docs/src/docs/components/demo/PlaceholderSizing.vue create mode 100644 apps/docs/src/docs/components/demo/PlaceholderTable.vue create mode 100644 apps/docs/src/docs/components/demo/PlaceholderTableAdvanced.vue create mode 100644 apps/docs/src/docs/components/demo/PlaceholderWidth.vue create mode 100644 apps/docs/src/docs/components/demo/PlaceholderWrapper.vue create mode 100644 apps/docs/src/docs/components/demo/ToastAutoDismiss.vue create mode 100644 apps/docs/src/docs/components/demo/ToastLink.vue create mode 100644 apps/docs/src/docs/components/demo/ToastOverview.vue create mode 100644 apps/docs/src/docs/components/demo/ToastPositioning.vue create mode 100644 apps/docs/src/docs/components/demo/ToastStatic.vue diff --git a/apps/docs/src/docs/components/app.md b/apps/docs/src/docs/components/app.md index 63979ed65..a5c188dc1 100644 --- a/apps/docs/src/docs/components/app.md +++ b/apps/docs/src/docs/components/app.md @@ -19,24 +19,7 @@ The `BApp` component is the new recommended way to configure bootstrap-vue-next. ## Basic Usage - - - +<<< FRAGMENT ./demo/AppBasicUsage.vue ## Configuration @@ -44,104 +27,19 @@ import {BApp} from 'bootstrap-vue-next' You can provide global defaults for any bootstrap-vue-next component: - - - +<<< FRAGMENT ./demo/AppDefaults.vue ### Merging Defaults By default, the `defaults` prop completely replaces any existing defaults. Use `mergeDefaults` to merge with parent or plugin defaults: - - - +<<< FRAGMENT ./demo/AppMergeDefaults.vue ### Custom Merge Function For advanced use cases, you can provide a custom merge function: - - - +<<< FRAGMENT ./demo/AppCustomMerge.vue ## Orchestrator Configuration @@ -149,151 +47,37 @@ const customMerge = ( By default, orchestrators render inline with your `BApp` component. Use `teleportTo` to render them elsewhere in the DOM: - - - +<<< FRAGMENT ./demo/AppTeleport.vue#template{vue-html} ### Disabling Orchestrators If you don't need the built-in orchestrators (for example, if you're using custom implementations), you can disable them: - - - +<<< FRAGMENT ./demo/AppNoOrchestrator.vue#template{vue-html} ### Toast Configuration Control how toasts are added to the list: - - - +<<< FRAGMENT ./demo/AppToastConfig.vue#template{vue-html} ## RTL Support `BApp` provides built-in right-to-left language support: - - - +<<< FRAGMENT ./demo/AppRTL.vue ## Migration from Plugins ### Before (Plugin-based) - - - +<<< FRAGMENT ./demo/AppMigrationBefore.ts{typescript} ### After (BApp-based) - - - +<<< FRAGMENT ./demo/AppMigrationAfterMain.ts{typescript} ## Working with Composables @@ -303,45 +87,7 @@ When using `BApp`, the following composables work without requiring plugin insta - [`useModal()`](/docs/composables/useModal) - Create and manage modals programmatically - [`usePopover()`](/docs/composables/usePopover) - Create and manage popovers programmatically - - - +<<< FRAGMENT ./demo/AppComposables.vue ## Backward Compatibility diff --git a/apps/docs/src/docs/components/demo/App.vue b/apps/docs/src/docs/components/demo/App.vue new file mode 100644 index 000000000..66c21804c --- /dev/null +++ b/apps/docs/src/docs/components/demo/App.vue @@ -0,0 +1,10 @@ + + + diff --git a/apps/docs/src/docs/components/demo/AppBasicUsage.vue b/apps/docs/src/docs/components/demo/AppBasicUsage.vue new file mode 100644 index 000000000..020acdc2a --- /dev/null +++ b/apps/docs/src/docs/components/demo/AppBasicUsage.vue @@ -0,0 +1,10 @@ + + + diff --git a/apps/docs/src/docs/components/demo/AppComposables.vue b/apps/docs/src/docs/components/demo/AppComposables.vue new file mode 100644 index 000000000..b6164385c --- /dev/null +++ b/apps/docs/src/docs/components/demo/AppComposables.vue @@ -0,0 +1,31 @@ + + + diff --git a/apps/docs/src/docs/components/demo/AppCustomMerge.vue b/apps/docs/src/docs/components/demo/AppCustomMerge.vue new file mode 100644 index 000000000..5252d3728 --- /dev/null +++ b/apps/docs/src/docs/components/demo/AppCustomMerge.vue @@ -0,0 +1,23 @@ + + + diff --git a/apps/docs/src/docs/components/demo/AppDefaults.vue b/apps/docs/src/docs/components/demo/AppDefaults.vue new file mode 100644 index 000000000..2f0aed8ad --- /dev/null +++ b/apps/docs/src/docs/components/demo/AppDefaults.vue @@ -0,0 +1,25 @@ + + + diff --git a/apps/docs/src/docs/components/demo/AppMergeDefaults.vue b/apps/docs/src/docs/components/demo/AppMergeDefaults.vue new file mode 100644 index 000000000..3a04c61b9 --- /dev/null +++ b/apps/docs/src/docs/components/demo/AppMergeDefaults.vue @@ -0,0 +1,18 @@ + + + diff --git a/apps/docs/src/docs/components/demo/AppMigrationAfter.vue b/apps/docs/src/docs/components/demo/AppMigrationAfter.vue new file mode 100644 index 000000000..df0b54119 --- /dev/null +++ b/apps/docs/src/docs/components/demo/AppMigrationAfter.vue @@ -0,0 +1,10 @@ + + + + diff --git a/apps/docs/src/docs/components/demo/AppMigrationAfterMain.ts b/apps/docs/src/docs/components/demo/AppMigrationAfterMain.ts new file mode 100644 index 000000000..74b1be1cf --- /dev/null +++ b/apps/docs/src/docs/components/demo/AppMigrationAfterMain.ts @@ -0,0 +1,10 @@ +// main.ts +import {createApp} from 'vue' +import App from './App.vue' + +// Add the necessary CSS +import 'bootstrap/dist/css/bootstrap.css' +import 'bootstrap-vue-next/dist/bootstrap-vue-next.css' + +const app = createApp(App) +app.mount('#app') diff --git a/apps/docs/src/docs/components/demo/AppMigrationBefore.ts b/apps/docs/src/docs/components/demo/AppMigrationBefore.ts new file mode 100644 index 000000000..f9abdd643 --- /dev/null +++ b/apps/docs/src/docs/components/demo/AppMigrationBefore.ts @@ -0,0 +1,18 @@ +// main.ts +import {createApp} from 'vue' +import {createBootstrap} from 'bootstrap-vue-next' +import App from './App.vue' + +const app = createApp(App) + +app.use( + createBootstrap({ + components: { + BButton: { + variant: 'primary', + }, + }, + }) +) + +app.mount('#app') diff --git a/apps/docs/src/docs/components/demo/AppNoOrchestrator.vue b/apps/docs/src/docs/components/demo/AppNoOrchestrator.vue new file mode 100644 index 000000000..8d76d85bb --- /dev/null +++ b/apps/docs/src/docs/components/demo/AppNoOrchestrator.vue @@ -0,0 +1,6 @@ + diff --git a/apps/docs/src/docs/components/demo/AppRTL.vue b/apps/docs/src/docs/components/demo/AppRTL.vue new file mode 100644 index 000000000..c89780270 --- /dev/null +++ b/apps/docs/src/docs/components/demo/AppRTL.vue @@ -0,0 +1,15 @@ + + + diff --git a/apps/docs/src/docs/components/demo/AppTeleport.vue b/apps/docs/src/docs/components/demo/AppTeleport.vue new file mode 100644 index 000000000..2cc9bd317 --- /dev/null +++ b/apps/docs/src/docs/components/demo/AppTeleport.vue @@ -0,0 +1,6 @@ + diff --git a/apps/docs/src/docs/components/demo/AppToastConfig.vue b/apps/docs/src/docs/components/demo/AppToastConfig.vue new file mode 100644 index 000000000..ff65d8e5b --- /dev/null +++ b/apps/docs/src/docs/components/demo/AppToastConfig.vue @@ -0,0 +1,6 @@ + diff --git a/apps/docs/src/docs/components/demo/FormFileAccept.vue b/apps/docs/src/docs/components/demo/FormFileAccept.vue new file mode 100644 index 000000000..3a8ecd24a --- /dev/null +++ b/apps/docs/src/docs/components/demo/FormFileAccept.vue @@ -0,0 +1,15 @@ + + + diff --git a/apps/docs/src/docs/components/demo/FormFileAutofocus.vue b/apps/docs/src/docs/components/demo/FormFileAutofocus.vue new file mode 100644 index 000000000..a1de33369 --- /dev/null +++ b/apps/docs/src/docs/components/demo/FormFileAutofocus.vue @@ -0,0 +1,6 @@ + diff --git a/apps/docs/src/docs/components/demo/FormFileLabel.vue b/apps/docs/src/docs/components/demo/FormFileLabel.vue new file mode 100644 index 000000000..67fb75e86 --- /dev/null +++ b/apps/docs/src/docs/components/demo/FormFileLabel.vue @@ -0,0 +1,9 @@ + diff --git a/apps/docs/src/docs/components/demo/FormFileMultiple.vue b/apps/docs/src/docs/components/demo/FormFileMultiple.vue new file mode 100644 index 000000000..e17b21cfe --- /dev/null +++ b/apps/docs/src/docs/components/demo/FormFileMultiple.vue @@ -0,0 +1,15 @@ + + + diff --git a/apps/docs/src/docs/components/demo/FormFileNoDrop.vue b/apps/docs/src/docs/components/demo/FormFileNoDrop.vue new file mode 100644 index 000000000..a24d5d30d --- /dev/null +++ b/apps/docs/src/docs/components/demo/FormFileNoDrop.vue @@ -0,0 +1,15 @@ + + + diff --git a/apps/docs/src/docs/components/demo/FormFileSingle.vue b/apps/docs/src/docs/components/demo/FormFileSingle.vue new file mode 100644 index 000000000..1320a4c2e --- /dev/null +++ b/apps/docs/src/docs/components/demo/FormFileSingle.vue @@ -0,0 +1,15 @@ + + + diff --git a/apps/docs/src/docs/components/demo/FormFileSizing.vue b/apps/docs/src/docs/components/demo/FormFileSizing.vue new file mode 100644 index 000000000..1e444cdd9 --- /dev/null +++ b/apps/docs/src/docs/components/demo/FormFileSizing.vue @@ -0,0 +1,11 @@ + diff --git a/apps/docs/src/docs/components/demo/FormFileState.vue b/apps/docs/src/docs/components/demo/FormFileState.vue new file mode 100644 index 000000000..17e558869 --- /dev/null +++ b/apps/docs/src/docs/components/demo/FormFileState.vue @@ -0,0 +1,10 @@ + diff --git a/apps/docs/src/docs/components/demo/FormSelectOptionNotes.vue b/apps/docs/src/docs/components/demo/FormSelectOptionNotes.vue new file mode 100644 index 000000000..9ff619b67 --- /dev/null +++ b/apps/docs/src/docs/components/demo/FormSelectOptionNotes.vue @@ -0,0 +1,27 @@ + + + diff --git a/apps/docs/src/docs/components/demo/OrchestratorFilter.vue b/apps/docs/src/docs/components/demo/OrchestratorFilter.vue new file mode 100644 index 000000000..dea0ceda8 --- /dev/null +++ b/apps/docs/src/docs/components/demo/OrchestratorFilter.vue @@ -0,0 +1,11 @@ + + + diff --git a/apps/docs/src/docs/components/demo/OrchestratorInternal.vue b/apps/docs/src/docs/components/demo/OrchestratorInternal.vue new file mode 100644 index 000000000..29548b2ce --- /dev/null +++ b/apps/docs/src/docs/components/demo/OrchestratorInternal.vue @@ -0,0 +1,7 @@ + + + diff --git a/apps/docs/src/docs/components/demo/OrchestratorSelective.vue b/apps/docs/src/docs/components/demo/OrchestratorSelective.vue new file mode 100644 index 000000000..5ec62de56 --- /dev/null +++ b/apps/docs/src/docs/components/demo/OrchestratorSelective.vue @@ -0,0 +1,7 @@ + diff --git a/apps/docs/src/docs/components/demo/PlaceholderAnimation.vue b/apps/docs/src/docs/components/demo/PlaceholderAnimation.vue new file mode 100644 index 000000000..407f9f665 --- /dev/null +++ b/apps/docs/src/docs/components/demo/PlaceholderAnimation.vue @@ -0,0 +1,11 @@ + diff --git a/apps/docs/src/docs/components/demo/PlaceholderBasic.vue b/apps/docs/src/docs/components/demo/PlaceholderBasic.vue new file mode 100644 index 000000000..aeaf5855d --- /dev/null +++ b/apps/docs/src/docs/components/demo/PlaceholderBasic.vue @@ -0,0 +1,5 @@ + diff --git a/apps/docs/src/docs/components/demo/PlaceholderButton.vue b/apps/docs/src/docs/components/demo/PlaceholderButton.vue new file mode 100644 index 000000000..cbdf20197 --- /dev/null +++ b/apps/docs/src/docs/components/demo/PlaceholderButton.vue @@ -0,0 +1,3 @@ + diff --git a/apps/docs/src/docs/components/demo/PlaceholderCard.vue b/apps/docs/src/docs/components/demo/PlaceholderCard.vue new file mode 100644 index 000000000..1abe3cb23 --- /dev/null +++ b/apps/docs/src/docs/components/demo/PlaceholderCard.vue @@ -0,0 +1,3 @@ + diff --git a/apps/docs/src/docs/components/demo/PlaceholderCardAdvanced.vue b/apps/docs/src/docs/components/demo/PlaceholderCardAdvanced.vue new file mode 100644 index 000000000..bbfa35142 --- /dev/null +++ b/apps/docs/src/docs/components/demo/PlaceholderCardAdvanced.vue @@ -0,0 +1,21 @@ + diff --git a/apps/docs/src/docs/components/demo/PlaceholderSizing.vue b/apps/docs/src/docs/components/demo/PlaceholderSizing.vue new file mode 100644 index 000000000..a6ff2d86b --- /dev/null +++ b/apps/docs/src/docs/components/demo/PlaceholderSizing.vue @@ -0,0 +1,5 @@ + diff --git a/apps/docs/src/docs/components/demo/PlaceholderTable.vue b/apps/docs/src/docs/components/demo/PlaceholderTable.vue new file mode 100644 index 000000000..bf4d69b95 --- /dev/null +++ b/apps/docs/src/docs/components/demo/PlaceholderTable.vue @@ -0,0 +1,3 @@ + diff --git a/apps/docs/src/docs/components/demo/PlaceholderTableAdvanced.vue b/apps/docs/src/docs/components/demo/PlaceholderTableAdvanced.vue new file mode 100644 index 000000000..65c23fa31 --- /dev/null +++ b/apps/docs/src/docs/components/demo/PlaceholderTableAdvanced.vue @@ -0,0 +1,46 @@ + diff --git a/apps/docs/src/docs/components/demo/PlaceholderWidth.vue b/apps/docs/src/docs/components/demo/PlaceholderWidth.vue new file mode 100644 index 000000000..2693ca531 --- /dev/null +++ b/apps/docs/src/docs/components/demo/PlaceholderWidth.vue @@ -0,0 +1,22 @@ + diff --git a/apps/docs/src/docs/components/demo/PlaceholderWrapper.vue b/apps/docs/src/docs/components/demo/PlaceholderWrapper.vue new file mode 100644 index 000000000..efd43b354 --- /dev/null +++ b/apps/docs/src/docs/components/demo/PlaceholderWrapper.vue @@ -0,0 +1,59 @@ + + + diff --git a/apps/docs/src/docs/components/demo/SelectOverview.vue b/apps/docs/src/docs/components/demo/SelectOverview.vue index b02023c5c..5fb61c98a 100644 --- a/apps/docs/src/docs/components/demo/SelectOverview.vue +++ b/apps/docs/src/docs/components/demo/SelectOverview.vue @@ -1,4 +1,3 @@ -```vue + + diff --git a/apps/docs/src/docs/components/demo/ToastLink.vue b/apps/docs/src/docs/components/demo/ToastLink.vue new file mode 100644 index 000000000..6e9d59b2b --- /dev/null +++ b/apps/docs/src/docs/components/demo/ToastLink.vue @@ -0,0 +1,20 @@ + + + diff --git a/apps/docs/src/docs/components/demo/ToastOverview.vue b/apps/docs/src/docs/components/demo/ToastOverview.vue new file mode 100644 index 000000000..a41a3fc3c --- /dev/null +++ b/apps/docs/src/docs/components/demo/ToastOverview.vue @@ -0,0 +1,15 @@ + + + diff --git a/apps/docs/src/docs/components/demo/ToastPositioning.vue b/apps/docs/src/docs/components/demo/ToastPositioning.vue new file mode 100644 index 000000000..6b2481e2f --- /dev/null +++ b/apps/docs/src/docs/components/demo/ToastPositioning.vue @@ -0,0 +1,39 @@ + + + diff --git a/apps/docs/src/docs/components/demo/ToastStatic.vue b/apps/docs/src/docs/components/demo/ToastStatic.vue new file mode 100644 index 000000000..7e68ef92d --- /dev/null +++ b/apps/docs/src/docs/components/demo/ToastStatic.vue @@ -0,0 +1,16 @@ + + + diff --git a/apps/docs/src/docs/components/form-file.md b/apps/docs/src/docs/components/form-file.md index d2cf81673..639256317 100644 --- a/apps/docs/src/docs/components/form-file.md +++ b/apps/docs/src/docs/components/form-file.md @@ -14,155 +14,37 @@ The current variation is subject to change pre v1.0. The implementation may chan The default behavior is single file mode. While using single file mode the `modelValue` will be a single `File` object - - -
- File: {{ first }} -
- -
+<<< DEMO ./demo/FormFileSingle.vue ## Multiple File Mode To toggle multiple file mode, simply set the `multiple` prop to `true`. While in multiple file mode, the `modelValue` will be a `File[]`, even if only one file is selected - - -
- Files: {{ second }} -
- -
+<<< DEMO ./demo/FormFileMultiple.vue ## Limiting to certain file types You can limit the file types by setting the `accept` prop. The `accept` attribute is a csv list of acceptable types. This can be a `string` or `string[]`. If a `string[]` is inputted, it simply gets joined as a csv list - - -
- File: {{ third }} -
- -
+<<< DEMO ./demo/FormFileAccept.vue ## Drag and Drop Support Drag and drop support uses the browsers default behavior. You can explicitly disable drag and drop by using the `noDrop` prop - - -
- File: {{ fourth }} -
- -
+<<< DEMO ./demo/FormFileNoDrop.vue ## Sizing You can modify the size of the form control by using the `size` prop - - - - - - - +<<< DEMO ./demo/FormFileSizing.vue#template{vue-html} ## Label You can add a label above the input by using the `label` prop or the `label` slot - - - - - - - - +<<< DEMO ./demo/FormFileLabel.vue#template{vue-html} ## Directory Mode @@ -178,35 +60,13 @@ By adding the `directory` prop, a user can select directories instead of files If you set the `autofocus` prop to true, the input will be focused when the component is inserted - - - - - +<<< DEMO ./demo/FormFileAutofocus.vue#template{vue-html} ## Contextual State You can use the `state` prop to provide visual feedback on the state of the input - - - - - - +<<< DEMO ./demo/FormFileState.vue#template{vue-html} ## Modifying the file selection @@ -224,12 +84,4 @@ The BFormFile exposes functions to control the component: `focus(), blur(), rese diff --git a/apps/docs/src/docs/components/form-select.md b/apps/docs/src/docs/components/form-select.md index 31dde3bf6..910b83ba7 100644 --- a/apps/docs/src/docs/components/form-select.md +++ b/apps/docs/src/docs/components/form-select.md @@ -47,13 +47,7 @@ _unselected_ state. On iOS this will cause the user not being able to select the iOS does not fire a change event in this case. It is therefore recommended providing a disabled option with an empty value as your first option. -```vue-html - - - -``` +<<< FRAGMENT ./demo/FormSelectOptionNotes.vue#template{vue-html} See the [Vue select](https://v3.vuejs.org/guide/forms.html#select) documentation for more details. diff --git a/apps/docs/src/docs/components/orchestrator.md b/apps/docs/src/docs/components/orchestrator.md index f8c6de347..36fc0508b 100644 --- a/apps/docs/src/docs/components/orchestrator.md +++ b/apps/docs/src/docs/components/orchestrator.md @@ -23,62 +23,17 @@ The `BOrchestrator` component manages the rendering and positioning of dynamic c - - - +<<< DEMO ./demo/OrchestratorInternal.vue ## Advanced Usage ### Custom Filtering - - - +<<< DEMO ./demo/OrchestratorFilter.vue ### Selective Component Types - - - +<<< FRAGMENT ./demo/OrchestratorSelective.vue#template{vue-html} ## Related Components diff --git a/apps/docs/src/docs/components/placeholder.md b/apps/docs/src/docs/components/placeholder.md index 52fdb4447..f8429a543 100644 --- a/apps/docs/src/docs/components/placeholder.md +++ b/apps/docs/src/docs/components/placeholder.md @@ -10,43 +10,13 @@ Placeholders are components that indicate that something may still be loading. At the placeholder core, you have the `BPlaceholder` component: - - - - - - +<<< DEMO ./demo/PlaceholderBasic.vue#template{vue-html} ## Width You can adjust the width using props `width` and `cols`. Cols is a number value 1-12, whereas width is a percentage. Width takes priority over cols. - - - - - - - - +<<< DEMO ./demo/PlaceholderWidth.vue#template{vue-html} ## Placeholder Animations @@ -54,39 +24,13 @@ Bootstrap supports two types of animations, `wave` and `glow`. - Note: when using `BPlaceholderCard`, the image does not inherit an animation - - - - - - +<<< DEMO ./demo/PlaceholderAnimation.vue#template{vue-html} ## Sizing You can adjust the sizing of a placeholder by using the `size` prop. Acceptable values are 'xs', 'sm', or 'lg'. - - - - - - +<<< DEMO ./demo/PlaceholderSizing.vue#template{vue-html} ## Helper Components @@ -96,121 +40,25 @@ You can adjust the sizing of a placeholder by using the `size` prop. Acceptable The `BPlaceholderWrapper` is a renderless component that picks between a 'loading' component, and a 'finished' component. It is useful when you have to wait for loading to finish, before rendering the actual content. Depending on the use case, you may prefer to use [Suspense](https://vuejs.org/guide/built-ins/suspense.html) instead. - - - - - - Some quick example text to build on the card title and make up the bulk of the card's content. - - Go somewhere - - - Restart - - +<<< DEMO ./demo/PlaceholderWrapper.vue ### Placeholder Buttons You can easily render a placeholder that has the button styling by using `BPlaceholderButton`. - - - - +<<< DEMO ./demo/PlaceholderButton.vue#template{vue-html} ### Placeholder Cards Placeholders have built-in support for rendering a placeholder card with `BPlaceholderCard`. - - - - +<<< DEMO ./demo/PlaceholderCard.vue#template{vue-html} ### Placeholder Tables You can also render a full placeholder table with `BPlaceholderTable`. - - - - +<<< DEMO ./demo/PlaceholderTable.vue#template{vue-html} ### Advanced Helper Component Usage @@ -224,35 +72,7 @@ Each section of the `BPlaceholderCard` exposes its slot elements, so you can eas The footer also exposes some props that you can use to adjust the behavior of a button. Most notably prop `noButton`. If set to true, it will convert it to a basic placeholder appearance. Alternatively, you can use the `noFooter` prop to remove it altogether. - - - - - - - +<<< DEMO ./demo/PlaceholderCardAdvanced.vue#template{vue-html} #### Advanced Tables @@ -262,95 +82,10 @@ You can adjust the number of columns and rows using props `columns` and `rows` r Optionally, you can manually adjust any scope of the table using slots. The following slots are available: `thead`, `default`, and `tfoot`. Do note that the slots wrap the **entire** table scope, slot `thead` is the entire thead, and slot `default` is the entire tbody, so you will likely need to manually wrap your slot usages in these elements if you plan on using them. - - - - - - +<<< DEMO ./demo/PlaceholderTableAdvanced.vue#template{vue-html} diff --git a/apps/docs/src/docs/components/toast.md b/apps/docs/src/docs/components/toast.md index 6fb031063..728b61564 100644 --- a/apps/docs/src/docs/components/toast.md +++ b/apps/docs/src/docs/components/toast.md @@ -14,30 +14,7 @@ This section only refers to using the raw component variation. Oftentimes, `Toas The component variation is shown by using the `v-model` like so - - - - Body - - - +<<< DEMO ./demo/ToastOverview.vue By default Toasts are rendered in place. You can use Vue's `Teleport` to change the location, commonly to `body` @@ -45,95 +22,13 @@ By default Toasts are rendered in place. You can use Vue's `Teleport` to change In combination with `Teleport`, you can render Toasts above the page, and in specific locations. You will need to create a wrapper component around said Toast to declare its location - - - - +<<< DEMO ./demo/ToastPositioning.vue ## Static placement You can place toasts in static placements, and with more control by using them directly. Although, it is more uncommon - - - - Body - - Toggle - - +<<< DEMO ./demo/ToastStatic.vue ## Auto-dismissing Toasts @@ -141,50 +36,7 @@ To create a `BToast` that dismisses automatically after a specified duration, se The **interval** prop determines how frequently the timer updates. While the default is `requestAnimationFrame`, you can set a custom interval. Negative values for either `modelValue` or `interval` will stop the timer. If the `modelValue` does not divide evenly by the interval, the timer will continue to the nearest interval. For example, a `modelValue` of 5400 ms with an interval of 1000 ms will run for 6000 ms. To avoid this, choose an interval that divides evenly into the `modelValue`, such as 540 ms or 1080 ms. - - - Show - - - - - +<<< DEMO ./demo/ToastAutoDismiss.vue ### ProgressBar Integration @@ -194,37 +46,7 @@ As you may have noticed in that example, there was a built-in progress bar. This `Toast` can accept `BLink` props which will modify its behavior - - - Show - - - - - +<<< DEMO ./demo/ToastLink.vue ## Programmatically Control @@ -240,27 +62,4 @@ If you just need a single simple message to appear along the bottom or top of th From 8d9cc88f50891f3e111944a00c1d21031c11b1f5 Mon Sep 17 00:00:00 2001 From: Issayah Date: Tue, 21 Oct 2025 19:22:05 -0500 Subject: [PATCH 4/7] refactor: select and unselect row methods in BTable (#2875) --- .../bootstrap-vue-next/src/components/BTable/BTable.vue | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/bootstrap-vue-next/src/components/BTable/BTable.vue b/packages/bootstrap-vue-next/src/components/BTable/BTable.vue index 28f015aba..d4c87ddb7 100644 --- a/packages/bootstrap-vue-next/src/components/BTable/BTable.vue +++ b/packages/bootstrap-vue-next/src/components/BTable/BTable.vue @@ -25,8 +25,8 @@ name="row-details" v-bind="scope" :fields="computedFields" - :select-row="(index = scope.index) => exposedSelectableUtilities.selectRow(index)" - :unselect-row="(index = scope.index) => exposedSelectableUtilities.unselectRow(index)" + :select-row="() => exposedSelectableUtilities.selectRow(scope.index)" + :unselect-row="() => exposedSelectableUtilities.unselectRow(scope.index)" :row-selected="exposedSelectableUtilities.isRowSelected(scope.index)" /> @@ -43,8 +43,8 @@ From 52fd18b99eb4968d350d8b9ce47530f1f8480b5b Mon Sep 17 00:00:00 2001 From: "David W. Gray" Date: Tue, 21 Oct 2025 17:22:57 -0700 Subject: [PATCH 5/7] docs: prevent href=# links from scrolling to top (#2861) --- .../docs/.vitepress/plugins/demo-container.ts | 12 +- apps/docs/.vitepress/theme/Layout.vue | 2 +- .../docs/components/demo/AlertLinkColors.vue | 16 +-- .../components/demo/ButtonElementType.vue | 2 +- .../docs/components/demo/CardHeaderFooter.vue | 4 +- .../docs/components/demo/CardKitchenSink.vue | 4 +- .../src/docs/components/demo/CardOverview.vue | 2 +- .../src/docs/components/demo/CardParts.vue | 2 +- .../docs/components/demo/CardTextVariants.vue | 2 +- .../components/demo/DropdownBlockMenu.vue | 6 +- .../components/demo/DropdownBlockToggle.vue | 12 +- .../components/demo/DropdownButtonContent.vue | 8 +- .../components/demo/DropdownColorVariants.vue | 18 +-- .../docs/components/demo/DropdownDropup.vue | 6 +- .../docs/components/demo/DropdownFloating.vue | 6 +- .../components/demo/DropdownHiddenCaret.vue | 6 +- .../components/demo/DropdownMenuAlignment.vue | 24 ++-- .../components/demo/DropdownMenuOffset.vue | 12 +- .../docs/components/demo/DropdownNoFlip.vue | 6 +- .../components/demo/DropdownPlacement.vue | 24 ++-- .../components/demo/DropdownSplitButton.vue | 6 +- .../demo/DropdownSplitButtonLink.vue | 6 +- .../demo/DropdownSplitButtonVariant.vue | 6 +- .../components/demo/ListGroupActionable.vue | 4 +- .../demo/ListGroupActionableVariants.vue | 18 +-- .../docs/components/demo/ListGroupCard.vue | 12 +- .../docs/components/demo/ListGroupCustom.vue | 6 +- .../docs/components/demo/ModalVariants.vue | 48 +++---- .../src/docs/components/demo/NavAlignment.vue | 16 ++- .../src/docs/components/demo/NavDropdown.vue | 8 +- .../docs/src/docs/components/demo/NavFill.vue | 16 ++- .../src/docs/components/demo/NavJustified.vue | 16 ++- .../src/docs/components/demo/NavOverview.vue | 16 ++- .../docs/src/docs/components/demo/NavPill.vue | 16 ++- .../src/docs/components/demo/NavPillCard.vue | 14 +- .../src/docs/components/demo/NavPlainCard.vue | 14 +- .../src/docs/components/demo/NavSmall.vue | 16 ++- apps/docs/src/docs/components/demo/NavTab.vue | 16 ++- .../src/docs/components/demo/NavTabCard.vue | 14 +- .../src/docs/components/demo/NavVertical.vue | 16 ++- .../docs/components/demo/NavbarBrandImage.vue | 2 +- .../components/demo/NavbarBrandImageText.vue | 2 +- .../docs/components/demo/NavbarBrandLink.vue | 2 +- .../components/demo/NavbarItemDropdown.vue | 14 +- .../docs/components/demo/NavbarOffcanvas.vue | 18 +-- .../docs/components/demo/NavbarOverview.vue | 18 +-- .../src/docs/components/demo/NavbarScroll.vue | 18 +-- .../src/docs/components/demo/NavbarToggle.vue | 8 +- .../components/demo/PopoverCustomClass.vue | 2 +- .../src/docs/components/demo/TabsEmpty.vue | 2 +- .../components/demo/TooltipCustomClass.vue | 4 +- apps/docs/src/docs/migration-guide.md | 10 ++ packages/bootstrap-vue-next/CHANGELOG.md | 61 ++++----- packages/nuxt/CHANGELOG.md | 120 ++++++++---------- 54 files changed, 413 insertions(+), 326 deletions(-) diff --git a/apps/docs/.vitepress/plugins/demo-container.ts b/apps/docs/.vitepress/plugins/demo-container.ts index d52937cab..b17d4697a 100644 --- a/apps/docs/.vitepress/plugins/demo-container.ts +++ b/apps/docs/.vitepress/plugins/demo-container.ts @@ -42,6 +42,14 @@ export const demoContainer = (md: MarkdownRenderer, srcDir: string) => { const {filepath, extension, region, lines, lang, title} = rawPathToToken(rawPath) const component = isDemo ? `<${title.substring(0, title.indexOf('.'))}/>` : '' + // Generate kebab-case ID from filename (without extension) + const dotIndex = title.lastIndexOf('.') + const filename = (dotIndex === -1 ? title : title.substring(0, dotIndex)).trim() + const kebabCaseId = filename + .replace(/([a-z0-9])([A-Z])/g, '$1-$2') + .replace(/[\s_]+/g, '-') + .toLowerCase() + // Resolve path early so it can be used in the prefix token const {realPath, path: _path} = state.env as MarkdownEnv const resolvedPath = path.resolve(path.dirname(realPath ?? _path), filepath) @@ -62,12 +70,12 @@ export const demoContainer = (md: MarkdownRenderer, srcDir: string) => { state.line += 1 const prefixToken = state.push('html_block', '', 0) - prefixToken.content = `${component} Header and footers using slots. Go somewhere diff --git a/apps/docs/src/docs/components/demo/CardKitchenSink.vue b/apps/docs/src/docs/components/demo/CardKitchenSink.vue index 0bf6c36ed..a62ba62df 100644 --- a/apps/docs/src/docs/components/demo/CardKitchenSink.vue +++ b/apps/docs/src/docs/components/demo/CardKitchenSink.vue @@ -25,12 +25,12 @@ Card link Another link diff --git a/apps/docs/src/docs/components/demo/CardOverview.vue b/apps/docs/src/docs/components/demo/CardOverview.vue index 558d03ead..d17d29448 100644 --- a/apps/docs/src/docs/components/demo/CardOverview.vue +++ b/apps/docs/src/docs/components/demo/CardOverview.vue @@ -12,7 +12,7 @@ Some quick example text to build on the card title and make up the bulk of the card's content. Go somewhere diff --git a/apps/docs/src/docs/components/demo/CardParts.vue b/apps/docs/src/docs/components/demo/CardParts.vue index baca61c91..49edb1e87 100644 --- a/apps/docs/src/docs/components/demo/CardParts.vue +++ b/apps/docs/src/docs/components/demo/CardParts.vue @@ -12,7 +12,7 @@ Some quick example text to build on the card title and make up the bulk of the card's content. Go somewhere diff --git a/apps/docs/src/docs/components/demo/CardTextVariants.vue b/apps/docs/src/docs/components/demo/CardTextVariants.vue index b7797d329..8acfa66dd 100644 --- a/apps/docs/src/docs/components/demo/CardTextVariants.vue +++ b/apps/docs/src/docs/components/demo/CardTextVariants.vue @@ -7,7 +7,7 @@ > With supporting text below as a natural lead-in to additional content. Go somewhere diff --git a/apps/docs/src/docs/components/demo/DropdownBlockMenu.vue b/apps/docs/src/docs/components/demo/DropdownBlockMenu.vue index 368b5d3a6..d1dea1afc 100644 --- a/apps/docs/src/docs/components/demo/DropdownBlockMenu.vue +++ b/apps/docs/src/docs/components/demo/DropdownBlockMenu.vue @@ -6,9 +6,9 @@ variant="primary" menu-class="w-100" > - Action - Another action - Something else here + Action + Another action + Something else here diff --git a/apps/docs/src/docs/components/demo/DropdownBlockToggle.vue b/apps/docs/src/docs/components/demo/DropdownBlockToggle.vue index 8d4e8f4ed..1d6178786 100644 --- a/apps/docs/src/docs/components/demo/DropdownBlockToggle.vue +++ b/apps/docs/src/docs/components/demo/DropdownBlockToggle.vue @@ -5,9 +5,9 @@ variant="primary" class="d-grid gap-2 mb-2" > - Action - Another action - Something else here + Action + Another action + Something else here
- Action - Another action - Something else here... + Action + Another action + Something else here...
diff --git a/apps/docs/src/docs/components/demo/DropdownButtonContent.vue b/apps/docs/src/docs/components/demo/DropdownButtonContent.vue index 95ee1115a..d7af51b74 100644 --- a/apps/docs/src/docs/components/demo/DropdownButtonContent.vue +++ b/apps/docs/src/docs/components/demo/DropdownButtonContent.vue @@ -5,15 +5,15 @@ text="Button text via Prop" class="me-2" > - An item - Another item + An item + Another item - An item - Another item + An item + Another item diff --git a/apps/docs/src/docs/components/demo/DropdownColorVariants.vue b/apps/docs/src/docs/components/demo/DropdownColorVariants.vue index 616d24ab6..96fff2ec2 100644 --- a/apps/docs/src/docs/components/demo/DropdownColorVariants.vue +++ b/apps/docs/src/docs/components/demo/DropdownColorVariants.vue @@ -6,27 +6,27 @@ variant="primary" class="me-2" > - Action - Another action - Something else here + Action + Another action + Something else here - Action - Another action - Something else here + Action + Another action + Something else here - Action - Another action - Something else here + Action + Another action + Something else here diff --git a/apps/docs/src/docs/components/demo/DropdownDropup.vue b/apps/docs/src/docs/components/demo/DropdownDropup.vue index 7530f1b08..aec88036f 100644 --- a/apps/docs/src/docs/components/demo/DropdownDropup.vue +++ b/apps/docs/src/docs/components/demo/DropdownDropup.vue @@ -6,9 +6,9 @@ variant="primary" class="me-2" > - Action - Another action - Something else here + Action + Another action + Something else here diff --git a/apps/docs/src/docs/components/demo/DropdownFloating.vue b/apps/docs/src/docs/components/demo/DropdownFloating.vue index b6bdca3fc..55ded9482 100644 --- a/apps/docs/src/docs/components/demo/DropdownFloating.vue +++ b/apps/docs/src/docs/components/demo/DropdownFloating.vue @@ -5,9 +5,9 @@ strategy="fixed" class="me-2" > - Action - Another action - Something else here + Action + Another action + Something else here diff --git a/apps/docs/src/docs/components/demo/DropdownHiddenCaret.vue b/apps/docs/src/docs/components/demo/DropdownHiddenCaret.vue index 4779fb030..9030cf258 100644 --- a/apps/docs/src/docs/components/demo/DropdownHiddenCaret.vue +++ b/apps/docs/src/docs/components/demo/DropdownHiddenCaret.vue @@ -7,9 +7,9 @@ no-caret > - Action - Another action - Something else here... + Action + Another action + Something else here... diff --git a/apps/docs/src/docs/components/demo/DropdownMenuAlignment.vue b/apps/docs/src/docs/components/demo/DropdownMenuAlignment.vue index 51d59d10d..95ad31e69 100644 --- a/apps/docs/src/docs/components/demo/DropdownMenuAlignment.vue +++ b/apps/docs/src/docs/components/demo/DropdownMenuAlignment.vue @@ -6,9 +6,9 @@ variant="primary" class="me-2" > - Action - Another action - Something else here + Action + Another action + Something else here - Action - Another action - Something else here + Action + Another action + Something else here - Action - Another action - Something else here + Action + Another action + Something else here - Action - Another action - Something else here + Action + Another action + Something else here diff --git a/apps/docs/src/docs/components/demo/DropdownMenuOffset.vue b/apps/docs/src/docs/components/demo/DropdownMenuOffset.vue index a6f9ae654..1ebbd75e7 100644 --- a/apps/docs/src/docs/components/demo/DropdownMenuOffset.vue +++ b/apps/docs/src/docs/components/demo/DropdownMenuOffset.vue @@ -6,18 +6,18 @@ text="Offset Dropdown" class="me-2" > - Action - Another action - Something else here + Action + Another action + Something else here - Action - Another action - Something else here + Action + Another action + Something else here diff --git a/apps/docs/src/docs/components/demo/DropdownNoFlip.vue b/apps/docs/src/docs/components/demo/DropdownNoFlip.vue index 2c0c33c17..5df92d7fb 100644 --- a/apps/docs/src/docs/components/demo/DropdownNoFlip.vue +++ b/apps/docs/src/docs/components/demo/DropdownNoFlip.vue @@ -5,9 +5,9 @@ no-flip class="me-2" > - An item - Another item - Yet Another item + An item + Another item + Yet Another item diff --git a/apps/docs/src/docs/components/demo/DropdownPlacement.vue b/apps/docs/src/docs/components/demo/DropdownPlacement.vue index 10f317ca9..8bd2a187b 100644 --- a/apps/docs/src/docs/components/demo/DropdownPlacement.vue +++ b/apps/docs/src/docs/components/demo/DropdownPlacement.vue @@ -7,9 +7,9 @@ variant="primary" class="me-2" > - Action - Another action - Something else here + Action + Another action + Something else here - Action - Another action - Something else here + Action + Another action + Something else here - Action - Another action - Something else here + Action + Another action + Something else here - Action - Another action - Something else here + Action + Another action + Something else here diff --git a/apps/docs/src/docs/components/demo/DropdownSplitButton.vue b/apps/docs/src/docs/components/demo/DropdownSplitButton.vue index d632cfb73..b9d103b01 100644 --- a/apps/docs/src/docs/components/demo/DropdownSplitButton.vue +++ b/apps/docs/src/docs/components/demo/DropdownSplitButton.vue @@ -5,9 +5,9 @@ text="Split Dropdown" class="me-2" > - Action - Another action - Something else here... + Action + Another action + Something else here... diff --git a/apps/docs/src/docs/components/demo/DropdownSplitButtonLink.vue b/apps/docs/src/docs/components/demo/DropdownSplitButtonLink.vue index 96d50d7f1..00a096434 100644 --- a/apps/docs/src/docs/components/demo/DropdownSplitButtonLink.vue +++ b/apps/docs/src/docs/components/demo/DropdownSplitButtonLink.vue @@ -6,9 +6,9 @@ text="Split Link" class="me-2" > - Action - Another action - Something else here... + Action + Another action + Something else here... diff --git a/apps/docs/src/docs/components/demo/DropdownSplitButtonVariant.vue b/apps/docs/src/docs/components/demo/DropdownSplitButtonVariant.vue index 081dea8ca..8f7787ce5 100644 --- a/apps/docs/src/docs/components/demo/DropdownSplitButtonVariant.vue +++ b/apps/docs/src/docs/components/demo/DropdownSplitButtonVariant.vue @@ -7,9 +7,9 @@ text="Split Variant Dropdown" class="me-2" > - Action - Another action - Something else here... + Action + Another action + Something else here... diff --git a/apps/docs/src/docs/components/demo/ListGroupActionable.vue b/apps/docs/src/docs/components/demo/ListGroupActionable.vue index e98ac133b..daaf1569b 100644 --- a/apps/docs/src/docs/components/demo/ListGroupActionable.vue +++ b/apps/docs/src/docs/components/demo/ListGroupActionable.vue @@ -3,11 +3,11 @@ Awesome link Link with active state - Action links are easy + Action links are easy - Default list group item + Default list group item Primary list group item Secondary list group item Success list group item Danger list group item Warning list group item Info list group item Light list group item Dark list group item diff --git a/apps/docs/src/docs/components/demo/ListGroupCard.vue b/apps/docs/src/docs/components/demo/ListGroupCard.vue index b301ee3bb..0826ca34a 100644 --- a/apps/docs/src/docs/components/demo/ListGroupCard.vue +++ b/apps/docs/src/docs/components/demo/ListGroupCard.vue @@ -3,9 +3,9 @@ - Cras justo odio - Dapibus ac facilisis in - Vestibulum at eros + Cras justo odio + Dapibus ac facilisis in + Vestibulum at eros

Quis magna Lorem anim amet ipsum do mollit sit cillum voluptate ex nulla tempor. Laborum @@ -18,9 +18,9 @@ header="Card with flush list group" > - Cras justo odio - Dapibus ac facilisis in - Vestibulum at eros + Cras justo odio + Dapibus ac facilisis in + Vestibulum at eros Quis magna Lorem anim amet ipsum do mollit sit cillum voluptate ex nulla tempor. Laborum diff --git a/apps/docs/src/docs/components/demo/ListGroupCustom.vue b/apps/docs/src/docs/components/demo/ListGroupCustom.vue index 3ef07fa6a..2ca29ddd3 100644 --- a/apps/docs/src/docs/components/demo/ListGroupCustom.vue +++ b/apps/docs/src/docs/components/demo/ListGroupCustom.vue @@ -2,7 +2,7 @@ @@ -17,7 +17,7 @@ Donec id elit non mi porta.

@@ -31,7 +31,7 @@ Donec id elit non mi porta. diff --git a/apps/docs/src/docs/components/demo/ModalVariants.vue b/apps/docs/src/docs/components/demo/ModalVariants.vue index 3810c4214..d44e06881 100644 --- a/apps/docs/src/docs/components/demo/ModalVariants.vue +++ b/apps/docs/src/docs/components/demo/ModalVariants.vue @@ -94,38 +94,38 @@ import {ref} from 'vue' const show = ref(false) const bgVariants = [ - { value: null, text: 'None' }, - { value: 'primary', text: 'Primary' }, - { value: 'secondary', text: 'Secondary' }, - { value: 'success', text: 'Success' }, - { value: 'warning', text: 'Warning' }, - { value: 'danger', text: 'Danger' }, - { value: 'info', text: 'Info' }, - { value: 'light', text: 'Light' }, - { value: 'dark', text: 'Dark' }, + {value: null, text: 'None'}, + {value: 'primary', text: 'Primary'}, + {value: 'secondary', text: 'Secondary'}, + {value: 'success', text: 'Success'}, + {value: 'warning', text: 'Warning'}, + {value: 'danger', text: 'Danger'}, + {value: 'info', text: 'Info'}, + {value: 'light', text: 'Light'}, + {value: 'dark', text: 'Dark'}, ] as const const textVariants = [ - { value: null, text: 'None' }, - { value: 'primary', text: 'Primary' }, - { value: 'secondary', text: 'Secondary' }, - { value: 'success', text: 'Success' }, - { value: 'warning', text: 'Warning' }, - { value: 'danger', text: 'Danger' }, - { value: 'info', text: 'Info' }, - { value: 'light', text: 'Light' }, - { value: 'dark', text: 'Dark' }, - { value: 'white', text: 'White' }, - { value: 'body', text: 'Body' }, + {value: null, text: 'None'}, + {value: 'primary', text: 'Primary'}, + {value: 'secondary', text: 'Secondary'}, + {value: 'success', text: 'Success'}, + {value: 'warning', text: 'Warning'}, + {value: 'danger', text: 'Danger'}, + {value: 'info', text: 'Info'}, + {value: 'light', text: 'Light'}, + {value: 'dark', text: 'Dark'}, + {value: 'white', text: 'White'}, + {value: 'body', text: 'Body'}, ] as const type BgVariant = (typeof bgVariants)[number]['value'] type TextVariant = (typeof textVariants)[number]['value'] -const headerBgVariant = ref('dark') +const headerBgVariant = ref('dark') const headerTextVariant = ref('white') -const bodyBgVariant = ref('light') -const bodyTextVariant = ref('dark') -const footerBgVariant = ref('warning') +const bodyBgVariant = ref('light') +const bodyTextVariant = ref('dark') +const footerBgVariant = ref('warning') const footerTextVariant = ref('dark') diff --git a/apps/docs/src/docs/components/demo/NavAlignment.vue b/apps/docs/src/docs/components/demo/NavAlignment.vue index 6c8615500..3af4b1530 100644 --- a/apps/docs/src/docs/components/demo/NavAlignment.vue +++ b/apps/docs/src/docs/components/demo/NavAlignment.vue @@ -4,10 +4,18 @@ tabs align="center" > - Active - Link - Link with a long name - Disabled + Active + Link + Link with a long name + Disabled diff --git a/apps/docs/src/docs/components/demo/NavDropdown.vue b/apps/docs/src/docs/components/demo/NavDropdown.vue index df230b4f5..c488712d3 100644 --- a/apps/docs/src/docs/components/demo/NavDropdown.vue +++ b/apps/docs/src/docs/components/demo/NavDropdown.vue @@ -1,8 +1,12 @@ diff --git a/apps/docs/src/docs/components/demo/NavJustified.vue b/apps/docs/src/docs/components/demo/NavJustified.vue index c7d09b3be..18e6b1531 100644 --- a/apps/docs/src/docs/components/demo/NavJustified.vue +++ b/apps/docs/src/docs/components/demo/NavJustified.vue @@ -4,10 +4,18 @@ tabs justified > - Active - Link - Link with a long name - Disabled + Active + Link + Link with a long name + Disabled diff --git a/apps/docs/src/docs/components/demo/NavOverview.vue b/apps/docs/src/docs/components/demo/NavOverview.vue index dbe6a04bf..b0add1a84 100644 --- a/apps/docs/src/docs/components/demo/NavOverview.vue +++ b/apps/docs/src/docs/components/demo/NavOverview.vue @@ -1,10 +1,18 @@ diff --git a/apps/docs/src/docs/components/demo/NavPill.vue b/apps/docs/src/docs/components/demo/NavPill.vue index 30d60f10a..3d71d283c 100644 --- a/apps/docs/src/docs/components/demo/NavPill.vue +++ b/apps/docs/src/docs/components/demo/NavPill.vue @@ -1,10 +1,18 @@ diff --git a/apps/docs/src/docs/components/demo/NavPillCard.vue b/apps/docs/src/docs/components/demo/NavPillCard.vue index 3fe40ce3c..e75899e04 100644 --- a/apps/docs/src/docs/components/demo/NavPillCard.vue +++ b/apps/docs/src/docs/components/demo/NavPillCard.vue @@ -9,9 +9,17 @@ card-header pills > - Active - Inactive - Disabled + Active + Inactive + Disabled diff --git a/apps/docs/src/docs/components/demo/NavPlainCard.vue b/apps/docs/src/docs/components/demo/NavPlainCard.vue index 0dee2d6c3..ff0243ff3 100644 --- a/apps/docs/src/docs/components/demo/NavPlainCard.vue +++ b/apps/docs/src/docs/components/demo/NavPlainCard.vue @@ -6,9 +6,17 @@ > - Active - Inactive - Disabled + Active + Inactive + Disabled diff --git a/apps/docs/src/docs/components/demo/NavSmall.vue b/apps/docs/src/docs/components/demo/NavSmall.vue index ddd61582f..53e8a980d 100644 --- a/apps/docs/src/docs/components/demo/NavSmall.vue +++ b/apps/docs/src/docs/components/demo/NavSmall.vue @@ -1,10 +1,18 @@ diff --git a/apps/docs/src/docs/components/demo/NavTab.vue b/apps/docs/src/docs/components/demo/NavTab.vue index 319c3c66d..2d00136c5 100644 --- a/apps/docs/src/docs/components/demo/NavTab.vue +++ b/apps/docs/src/docs/components/demo/NavTab.vue @@ -1,10 +1,18 @@ diff --git a/apps/docs/src/docs/components/demo/NavTabCard.vue b/apps/docs/src/docs/components/demo/NavTabCard.vue index 8ef2997b2..15e57cd56 100644 --- a/apps/docs/src/docs/components/demo/NavTabCard.vue +++ b/apps/docs/src/docs/components/demo/NavTabCard.vue @@ -9,9 +9,17 @@ card-header tabs > - Active - Inactive - Disabled + Active + Inactive + Disabled diff --git a/apps/docs/src/docs/components/demo/NavVertical.vue b/apps/docs/src/docs/components/demo/NavVertical.vue index 673c36759..5727f1a7a 100644 --- a/apps/docs/src/docs/components/demo/NavVertical.vue +++ b/apps/docs/src/docs/components/demo/NavVertical.vue @@ -4,10 +4,18 @@ vertical class="w-25" > - Active - Link - Another Link - Disabled + Active + Link + Another Link + Disabled diff --git a/apps/docs/src/docs/components/demo/NavbarBrandImage.vue b/apps/docs/src/docs/components/demo/NavbarBrandImage.vue index d759265db..2d631ea32 100644 --- a/apps/docs/src/docs/components/demo/NavbarBrandImage.vue +++ b/apps/docs/src/docs/components/demo/NavbarBrandImage.vue @@ -5,7 +5,7 @@ v-b-color-mode="'dark'" variant="success" > - + Kitten - + - BootstrapVueNext + BootstrapVueNext diff --git a/apps/docs/src/docs/components/demo/NavbarItemDropdown.vue b/apps/docs/src/docs/components/demo/NavbarItemDropdown.vue index 593603ca2..f23d88412 100644 --- a/apps/docs/src/docs/components/demo/NavbarItemDropdown.vue +++ b/apps/docs/src/docs/components/demo/NavbarItemDropdown.vue @@ -5,22 +5,22 @@ variant="dark" > - Home + Home - EN - ES - RU - FA + EN + ES + RU + FA - Account - Settings + Account + Settings diff --git a/apps/docs/src/docs/components/demo/NavbarOffcanvas.vue b/apps/docs/src/docs/components/demo/NavbarOffcanvas.vue index 7057facbd..d0cbc7ea5 100644 --- a/apps/docs/src/docs/components/demo/NavbarOffcanvas.vue +++ b/apps/docs/src/docs/components/demo/NavbarOffcanvas.vue @@ -5,7 +5,7 @@ :toggleable="true" variant="primary" > - NavBar + NavBar - Link + Link Disabled @@ -27,18 +27,18 @@ text="Lang" right > - EN - ES - RU - FA + EN + ES + RU + FA - Profile - Sign Out + Profile + Sign Out diff --git a/apps/docs/src/docs/components/demo/NavbarOverview.vue b/apps/docs/src/docs/components/demo/NavbarOverview.vue index 8a4e7fda3..e8998829b 100644 --- a/apps/docs/src/docs/components/demo/NavbarOverview.vue +++ b/apps/docs/src/docs/components/demo/NavbarOverview.vue @@ -5,16 +5,16 @@ toggleable="lg" variant="primary" > - NavBar + NavBar - Link + Link Disabled @@ -25,18 +25,18 @@ text="Lang" right > - EN - ES - RU - FA + EN + ES + RU + FA - Profile - Sign Out + Profile + Sign Out diff --git a/apps/docs/src/docs/components/demo/NavbarScroll.vue b/apps/docs/src/docs/components/demo/NavbarScroll.vue index a4b3aff0f..325509590 100644 --- a/apps/docs/src/docs/components/demo/NavbarScroll.vue +++ b/apps/docs/src/docs/components/demo/NavbarScroll.vue @@ -6,16 +6,16 @@ variant="primary" class="navbar-nav-scroll" > - NavBar + NavBar - Link + Link Disabled @@ -26,18 +26,18 @@ text="Lang" right > - EN - ES - RU - FA + EN + ES + RU + FA - Profile - Sign Out + Profile + Sign Out diff --git a/apps/docs/src/docs/components/demo/NavbarToggle.vue b/apps/docs/src/docs/components/demo/NavbarToggle.vue index 865568e8a..4fc4f085f 100644 --- a/apps/docs/src/docs/components/demo/NavbarToggle.vue +++ b/apps/docs/src/docs/components/demo/NavbarToggle.vue @@ -4,7 +4,7 @@ toggleable variant="dark" > - NavBar + NavBar