Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 35 additions & 0 deletions apps/docs/src/docs/composables/demo/UseBreadcrumbBasic.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
<template>
<BBreadcrumb />

<BFormInput
v-model="inputValue"
class="my-3"
/>

<BButton
class="me-2"
@click="addItem"
>Add</BButton
>
<BButton
variant="danger"
@click="breadcrumb.reset"
>Clear</BButton
>
</template>

<script setup lang="ts">
import {ref} from 'vue'
import {BBreadcrumb, BButton, BFormInput, useBreadcrumb} from 'bootstrap-vue-next'

const breadcrumb = useBreadcrumb()

const inputValue = ref('')

const addItem = () => {
if (breadcrumb.items?.value) {
breadcrumb.items.value.push(inputValue.value)
}
inputValue.value = ''
}
</script>
34 changes: 34 additions & 0 deletions apps/docs/src/docs/composables/demo/UseBreadcrumbWithId.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
<template>
<BBreadcrumb id="foobar" />

<BFormInput
v-model="inputValue"
class="my-3"
/>

<BButton
class="me-2"
@click="addItem"
>Add</BButton
>
<BButton
variant="danger"
@click="breadcrumb.reset"
>Clear</BButton
>
</template>

<script setup lang="ts">
import {ref} from 'vue'
import {BBreadcrumb, BButton, BFormInput, useBreadcrumb} from 'bootstrap-vue-next'

// Input matches the id passed to the component
const breadcrumb = useBreadcrumb('foobar')

const inputValue = ref('')

const addItem = () => {
breadcrumb.items.value.push(inputValue.value)
inputValue.value = ''
}
</script>
23 changes: 23 additions & 0 deletions apps/docs/src/docs/composables/demo/UseColorModeBasic.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<template>
<ClientOnly>
<BCard ref="target">
<BButton @click="changeColor"> Current color: {{ mode }} </BButton>
</BCard>
</ClientOnly>
</template>

<script setup lang="ts">
import {ref} from 'vue'
import {useColorMode} from 'bootstrap-vue-next'
import {type BCard} from 'bootstrap-vue-next/components/BCard'

const target = ref<InstanceType<typeof BCard> | null>(null)

const mode = useColorMode({
selector: target,
})

const changeColor = () => {
mode.value = mode.value === 'dark' ? 'light' : 'dark'
}
</script>
42 changes: 42 additions & 0 deletions apps/docs/src/docs/composables/demo/UseModalAdvanced.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
<template>
<BButton @click="showMeAdvancedExample">Click me</BButton>
</template>

<script setup lang="ts">
import {h, onMounted, onUnmounted, ref} from 'vue'
import {BButton, useModal} from 'bootstrap-vue-next'

const {create} = useModal()

const firstRef = ref({
body: `${Math.random()}`,
})
let intervalId: ReturnType<typeof setInterval> | undefined

onMounted(() => {
intervalId = setInterval(() => {
firstRef.value.body = `${Math.random()}`
}, 1000)
})

onUnmounted(() => {
if (intervalId) {
clearInterval(intervalId)
}
})

const showMeAdvancedExample = () => {
create({
slots: {
default: (scope) => h('div', null, `custom ${firstRef.value.body} - ${scope.visible}`),
},
}).show()

// Demonstration pseudocode, you can import a component and use it
// const importedComponent = () => {
// create({
// component: (await import('./TestModal.vue')).default,
// })
// }
}
</script>
19 changes: 19 additions & 0 deletions apps/docs/src/docs/composables/demo/UseModalBasic.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<template>
<BButton @click="showExample">Click me</BButton>
</template>

<script setup lang="ts">
import {BButton, useModal} from 'bootstrap-vue-next'

const {create} = useModal()

const showExample = async () => {
const value = await create({title: 'Hello World!'}).show()

if (value && typeof value === 'object' && 'ok' in value && 'trigger' in value) {
create({
body: `Promise resolved to object with {ok: ${value.ok}, trigger: ${value.trigger}}`,
}).show()
}
}
</script>
54 changes: 54 additions & 0 deletions apps/docs/src/docs/composables/demo/UseModalNested.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
<template>
<BButton @click="nestedModal1 = !nestedModal1">Open First Modal</BButton>

<BModal
v-model="nestedModal1"
title="First Modal"
ok-only
>
<p class="my-2">First Modal</p>
<BButtonGroup>
<BButton @click="nestedModal2 = !nestedModal2">Open Second Modal</BButton>
<BButton @click="() => hide()">Hide Last</BButton>
<BButton @click="() => hideAll()">Hide All</BButton>
</BButtonGroup>
</BModal>
<BModal
v-model="nestedModal2"
title="Second Modal"
ok-only
>
<p class="my-2">Second Modal</p>
<BButtonGroup>
<BButton
size="sm"
@click="nestedModal3 = !nestedModal3"
>Open Third Modal</BButton
>
<BButton @click="() => hide()">Hide Last</BButton>
<BButton @click="() => hideAll()">Hide All</BButton>
</BButtonGroup>
</BModal>
<BModal
v-model="nestedModal3"
title="Third Modal"
ok-only
>
<p class="my-1">Third Modal</p>
<BButtonGroup>
<BButton @click="() => hide()">Hide Last</BButton>
<BButton @click="() => hideAll()">Hide All</BButton>
</BButtonGroup>
</BModal>
</template>

<script setup lang="ts">
import {ref} from 'vue'
import {BButton, BButtonGroup, BModal, useModal} from 'bootstrap-vue-next'

const nestedModal1 = ref(false)
const nestedModal2 = ref(false)
const nestedModal3 = ref(false)

const {hide, hideAll} = useModal()
</script>
31 changes: 31 additions & 0 deletions apps/docs/src/docs/composables/demo/UseModalReactive.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
<template>
<BButton @click="showReactiveExample">Click me</BButton>
</template>

<script setup lang="ts">
import {onMounted, onUnmounted, ref} from 'vue'
import {BButton, useModal} from 'bootstrap-vue-next'

const {create} = useModal()

const title = ref('Hello')
let intervalId: ReturnType<typeof setInterval> | undefined

onMounted(() => {
intervalId = setInterval(() => {
title.value = title.value === 'Hello' ? 'World' : 'Hello'
}, 2500)
})

onUnmounted(() => {
if (intervalId) {
clearInterval(intervalId)
}
})

const showReactiveExample = () => {
create({
title,
}).show()
}
</script>
5 changes: 5 additions & 0 deletions apps/docs/src/docs/composables/demo/UseModalSetup.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<template>
<BApp>
<router-view />
</BApp>
</template>
21 changes: 21 additions & 0 deletions apps/docs/src/docs/composables/demo/UsePopoverAdvanced.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<template>
<BButton ref="advancedExample">Hover me</BButton>
</template>

<script setup lang="ts">
import {h, onMounted, ref} from 'vue'
import {BButton, usePopover} from 'bootstrap-vue-next'

const {popover} = usePopover()
const advancedExample = ref<HTMLElement>()

onMounted(() => {
popover({
slots: {
default: (scope) => h('div', null, `Custom content - Visible: ${scope.visible}`),
},
target: advancedExample.value,
title: 'Advanced Popover',
})
})
</script>
15 changes: 15 additions & 0 deletions apps/docs/src/docs/composables/demo/UsePopoverBasic.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<template>
<BButton ref="popoverButton">Hover me</BButton>
</template>

<script setup lang="ts">
import {type ComponentPublicInstance, onMounted, ref} from 'vue'
import {usePopover} from 'bootstrap-vue-next'

const {popover} = usePopover()
const popoverButton = ref<ComponentPublicInstance>()

onMounted(() => {
popover({title: 'Hello World!', body: 'This is a popover.', target: popoverButton.value})
})
</script>
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
/* eslint-disable @typescript-eslint/no-unused-vars */
import {usePopover} from 'bootstrap-vue-next'

{
const {popover} = usePopover()

// #region snippet
await using pop = popover({title: 'Hello World!'})
// #endregion snippet
}
12 changes: 12 additions & 0 deletions apps/docs/src/docs/composables/demo/UsePopoverLifecycleManual.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import {usePopover} from 'bootstrap-vue-next'

{
const {popover} = usePopover()

// #region snippet
const pop = popover({title: 'Hello World!'})
pop.show()
// do something
pop.destroy()
// #endregion snippet
}
31 changes: 31 additions & 0 deletions apps/docs/src/docs/composables/demo/UsePopoverReactive.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
<template>
<BButton ref="reactiveExample">Hover me</BButton>
</template>

<script setup lang="ts">
import {onMounted, onUnmounted, ref} from 'vue'
import {BButton, usePopover} from 'bootstrap-vue-next'

const {tooltip} = usePopover()

const title = ref('Hello')
const reactiveExample = ref<HTMLElement>()
let intervalId: NodeJS.Timeout | undefined

onMounted(() => {
intervalId = setInterval(() => {
title.value = title.value === 'Hello' ? 'World' : 'Hello'
}, 2500)

tooltip({
title,
target: reactiveExample.value,
})
})

onUnmounted(() => {
if (intervalId !== undefined) {
clearInterval(intervalId)
}
})
</script>
5 changes: 5 additions & 0 deletions apps/docs/src/docs/composables/demo/UsePopoverSetup.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<template>
<BApp>
<router-view />
</BApp>
</template>
Loading
Loading