Magna deserunt nulla aliquip velit aute. Et occaecat elit nulla excepteur labore cupidatat. Duis culpa mollit commodo dolor qui Lorem qui laborum elit elit Lorem occaecat. Commodo eiusmod esse voluptate officia amet quis occaecat aliqua. Proident do irure amet ut occaecat dolor laboris consectetur.
20 |
21 |
22 |
--------------------------------------------------------------------------------
/docs/content/1.index.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "Vue Final Modal"
3 | description: "Vue Final Modal is the most powerful yet most light-weight modal library for Vue 3"
4 | navigation: false
5 | layout: page
6 | ---
7 |
8 | ::block-hero
9 | ---
10 | cta:
11 | - Get Started
12 | - /get-started/guide/concepts
13 | secondary:
14 | - Star on GitHub
15 | - https://github.com/vue-final/vue-final-modal
16 | snippet: npm install vue-final-modal@latest
17 | ---
18 |
19 | #title
20 | Modals made easy for Vue Developers
21 |
22 | #description
23 | The most powerful yet most light-weight modal library for Vue 3.
24 |
25 | #right
26 | ::
27 |
28 | ::buy-me-a-coffee
29 | ::
30 |
31 | ::card-grid
32 | #title
33 | Powerful Features
34 |
35 | #default
36 | ::card
37 | ---
38 | icon: ph:file-css-duotone
39 | ---
40 | #title
41 | Custom Styling
42 | #description
43 | Write your own CSS or bring libraries like Tailwind/WindiCSS.
44 | ::
45 |
46 | ::card
47 | ---
48 | icon: ph:file-code
49 | ---
50 | #title
51 | useModal
52 | #description
53 | Open and close modal programmatically with `useModal()`{lang=ts} composable function.
54 | ::
55 |
56 | ::card
57 | ---
58 | icon: tabler:brand-nuxt
59 | ---
60 | #title
61 | Support Nuxt 3
62 | #description
63 | SSR support with ``{lang=ts} by default.
64 | ::
65 |
66 | ::card
67 | ---
68 | icon: ph:file-ts
69 | ---
70 | #title
71 | Rewrite with Typescript
72 | #description
73 | Rewrite with Typescript for better DX.
74 | ::
75 |
76 | ::card
77 | ---
78 | icon: icon-park-outline:christmas-tree-one
79 | ---
80 | #title
81 | Only 7.x kB!
82 | #description
83 | Vue Final Modal focuses on the core functionality of modals, leaves the complex CSS up to the developer.
84 | ::
85 |
86 | #root
87 | ::
88 |
89 | ## Contribution Guide
90 |
91 | ```bash [pnpm]
92 | # Install packages
93 | pnpm install --shamefully-hoist
94 |
95 | # Build vue-final-modal library first
96 | pnpm build:vfm
97 |
98 | # Run both docs and viteplay
99 | pnpm dev
100 |
101 | # Run docs: http://localhost:3000/
102 | pnpm dev:docs
103 |
104 | # Run viteplay: http://localhost:5173/
105 | pnpm dev:viteplay
106 | ```
107 |
108 |
109 | ## Contributors
110 |
111 | Thank you to all the people who already contributed to `vue-final-modal`!
112 |
113 |
114 |
115 |
116 |
117 | Made with [contributors-img](https://contrib.rocks).
118 |
119 | 🚀 If you have any ideas for optimization of `vue-final-modal`, feel free to open [issues](https://github.com/hunterliu1003/vue-final-modal/issues) or [pull requests](https://github.com/hunterliu1003/vue-final-modal/pulls).
120 |
--------------------------------------------------------------------------------
/docs/content/2.get-started/.2.advanced/1.Testing.md:
--------------------------------------------------------------------------------
1 | # Testing a modal
2 |
3 | ## TBD
--------------------------------------------------------------------------------
/docs/content/2.get-started/.2.advanced/_dir.yml:
--------------------------------------------------------------------------------
1 | icon: heroicons-outline:lightning-bolt
2 |
--------------------------------------------------------------------------------
/docs/content/2.get-started/1.guide/1.concepts.md:
--------------------------------------------------------------------------------
1 | # Concepts
2 |
3 | These are the core concepts you need to know about vue-final-modal and its approach to modals management.
4 |
5 | ::alert{type=danger}
6 | ❗️ If you came from vue-final-modal 3.x, please check the [migration guide](/get-started/guide/migration-guide).
7 | ::
8 |
9 | ## What is VueFinalModal?
10 |
11 | `vue-final-modal` is a modal library built specifically for Vue.js and as such it makes some assumptions and enforces "best-practices" for your modals while being versatile and customizable.
12 |
13 | `vue-final-modal` is a collection of [composables](https://vuejs.org/guide/reusability/composables.html#what-is-a-composable) and Vue components, the main things that will be covered is how to use these components to build your own modal components and use them with [useModal()](/api/composables/use-modal) composable function.
14 |
15 | ### Built-in features
16 |
17 | ::list{type=success}
18 | - SSR (Nuxt 3) support. [Teleport](/api/components/vue-final-modal#teleportto) your modals to `'body'`{lang=ts} by default.
19 | - [`useModal()`{lang=ts}](http://localhost:3000/api/composables/use-modal) composable to manage your modal programmatically.
20 | - Trap keyboard focus within modal element (uses [focus-trap](https://github.com/focus-trap/focus-trap) for best web accessibility).
21 | - Full control to the zIndex of the nested modals (see [zIndexFn prop](/api/components/vue-final-modal#zindexfn)).
22 | - Customizable `` for the modal content and overlay.
23 | - Tiny footprint! Only 4.x kB! Vue Final Modal focuses on the core functionality of modals, leaves the complex CSS up to the developer.
24 | ::
25 |
26 | ### A Styleless component
27 |
28 | [\](/api/components/vue-final-modal) is a styleless component that provides the features that modal required as much as possible but leave the layout as a slot to developer.
29 |
30 | So you have to define the modal style by yourself.
31 |
32 | ::alert{type=info}
33 | Follow the [Setup section](/get-started/guide/setup) to learn how to use VueFinalModal.
34 | ::
35 |
36 | ## You Might Not Need VueFinalModal
37 |
38 | Although I created `vue-final-modal`, I still try not to use it as much as possible.
39 |
40 | Here are the articles that I highly recommended you to read before diving into VueFinalModal:
41 |
42 | - [Popups: 10 Problematic Trends and Alternatives](https://www.nngroup.com/articles/popups/)
43 | - [Can Hated Design Elements Be Made to Work?](https://www.nngroup.com/articles/making-hated-design-elements-work/)
44 | - [The Most Hated Online Advertising Techniques](https://www.nngroup.com/articles/most-hated-advertising-techniques/)
45 | - [Modal & Nonmodal Dialogs: When (& When Not) to Use Them](https://www.nngroup.com/articles/modal-nonmodal-dialog/)
46 | - [Modes in User Interfaces: When They Help and When They Hurt Users](https://www.nngroup.com/articles/modes/)
47 |
48 |
--------------------------------------------------------------------------------
/docs/content/2.get-started/1.guide/3.migration-guide.md:
--------------------------------------------------------------------------------
1 | # Migration Guide
2 |
3 | This document should help you navigate the tricky path of migrating between different versions of vue-final-modal that introduced breaking changes:
4 |
5 | ## Migrating from 3.x to 4.0
6 |
7 | vue-final-modal 4.0 introduced a lot of breaking changes.
8 |
9 | You should treat 4.x as a different library and read the documentation carefully, however these are some pointers towards more of the significant changes.
10 |
11 | To migrate from `3.x` you need to understand some of the changes to the public API and note that there is not direct path to upgrade and if you have a large app and you don't need some of the newer features, consider staying at the 3.x releases.
12 |
13 | ## Step by step
14 |
15 | ### Removed `vfmPlugin`
16 |
17 | #### In Vue 3
18 |
19 | So this:
20 |
21 | ```ts [main.ts]
22 | import { vfmPlugin } from 'vue-final-modal'
23 |
24 | app.use(vfmPlugin)
25 | ```
26 |
27 | Will be re-written as this:
28 |
29 | ```ts [main.ts]
30 | import { createVfm } from 'vue-final-modal'
31 | const vfm = createVfm()
32 | app.use(vfm)
33 | ```
34 |
35 | #### In Nuxt 3
36 |
37 | So this:
38 |
39 | ```ts [./plugins/vue-final-modal.ts]
40 | import { defineNuxtPlugin } from '#imports'
41 | import { vfmPlugin } from 'vue-final-modal'
42 |
43 | export default defineNuxtPlugin(nuxtApp => {
44 | nuxtApp.vueApp.use(vfmPlugin)
45 | })
46 | ```
47 |
48 | Will be re-written as this:
49 |
50 | ```ts [./plugins/vue-final-modal.ts]
51 | import { createVfm } from 'vue-final-modal'
52 |
53 | export default defineNuxtPlugin((nuxtApp) => {
54 | const vfm = createVfm() as any
55 |
56 | nuxtApp.vueApp.use(vfm)
57 | })
58 | ```
59 |
60 | ### Import Required CSS
61 |
62 | #### In Vue 3
63 |
64 | ```ts [main.ts]
65 | import 'vue-final-modal/style.css'
66 | ```
67 |
68 | #### In Nuxt 3
69 |
70 | ```ts [./nuxt.config.ts]
71 | export default defineNuxtConfig({
72 | css: ['vue-final-modal/style.css'],
73 | })
74 | ```
75 |
76 | ### Removed Dynamic Modal `$vfm.show`
77 |
78 | If you are using `$vfm.show()`{lang=ts} to create dynamic modals. You have to re-written them with [useModal()](/api/composables/use-modal) composable.
79 |
80 | So this:
81 |
82 | ```ts
83 | this.$vfm.show({
84 | component: ModalConfirm,
85 | bind: {
86 | name: 'ModalConfirmName'
87 | },
88 | on: {
89 | confirm() {
90 | this.$vfm.hide('ModalConfirmName')
91 | },
92 | opened() {
93 | console.log('modal opened')
94 | },
95 | },
96 | slots: {
97 | default: '
',
118 | },
119 | })
120 | open()
121 | ```
122 |
123 | ### Removed `params`
124 |
125 | `params` is not a good practice and hard to keep type-save in Typescript.
126 | So if you are using `params`, you have to re-written it with [useModal()](/api/composables/use-modal) composable.
127 |
128 | ### Delete Drag & Resize
129 |
130 | To keep vue-final-modal simple and easier to maintain, I decided to remove the Drag & Resize feature.
131 |
132 | If you are using Drag & Resize, please consider staying at the 3.x releases.
133 |
134 | Here is a new drag & resize example with an awesome library `vue3-drag-resize`:
135 | ::ReadMore{link="/use-cases/modal-drag-resize"}
136 | ::
137 |
138 | ### Renamed properties
139 |
140 | | 3.x | 4.0 | Description |
141 | | -------------- | ---------------------------------------------------------------------- | ------------------------- |
142 | | `name` | [modalId](/api/components/vue-final-modal#modalid) | - |
143 | | `ssr` | [display-directive](/api/components/vue-final-modal#displaydirective) | - |
144 | | `attach` | [teleportTo](/api/components/vue-final-modal#teleportto) | Use `` in Vue 3 |
145 | | `preventClick` | [background](/api/components/vue-final-modal#background) | - |
146 | | `transition` | [contentTransition](/api/components/vue-final-modal#contenttransition) | - |
147 |
148 | ### Deleted properties
149 |
150 | | 3.x | 4.0 |
151 | | ------------------ | ------------------------------------------------------------------ |
152 | | `classes` | Just use `class` |
153 | | `styles` | Just use `class` |
154 | | `focusRetain` | Merged into [focusTrap](/api/components/vue-final-modal#focustrap) |
155 | | `zIndexAuto` | Replaced by [zIndexFn](/api/components/vue-final-modal#zindexfn) |
156 | | `zIndexBase` | Replaced by [zIndexFn](/api/components/vue-final-modal#zindexfn) |
157 | | `zIndex` | Replaced by [zIndexFn](/api/components/vue-final-modal#zindexfn) |
158 | | `drag` | Not support `Drag & Resize` anymore |
159 | | `fitParent` | Not support `Drag & Resize` anymore |
160 | | `dragSelector` | Not support `Drag & Resize` anymore |
161 | | `keepChangedStyle` | Not support `Drag & Resize` anymore |
162 | | `resize` | Not support `Drag & Resize` anymore |
163 | | `resizeDirections` | Not support `Drag & Resize` anymore |
164 | | `minWidth` | Not support `Drag & Resize` anymore |
165 | | `minHeight` | Not support `Drag & Resize` anymore |
166 | | `maxWidth` | Not support `Drag & Resize` anymore |
167 | | `maxHeight` | Not support `Drag & Resize` anymore |
168 |
169 | ::ReadMore{link="/use-cases/modal-drag-resize"}
170 | ::
171 |
172 | ### Renamed APIs `$vfm` to `useVfm`
173 |
174 | - You can still use `this.$vfm`{lang=ts} in Options API.
175 | - If you are using script setup syntax:
176 | ```ts
177 | import { $vfm } from 'vue-final-modal'
178 |
179 | $vfm.show(...)
180 | $vfm.hide(...)
181 | $vfm.hideAll(...)
182 | ```
183 |
184 | Will be re-written as this:
185 |
186 | ```ts
187 | import { useVfm } from 'vue-final-modal'
188 |
189 | const vfm = useVfm()
190 |
191 | vfm.open(...)
192 | vfm.close(...)
193 | vfm.closeAll(...)
194 | ```
195 |
196 | | 3.x | 4.0 |
197 | | ---------------- | -------------------------------------------------------------------------------------------------------------------------- |
198 | | `$vfm.show()` | [vfm.open()](/api/composables/use-vfm#functions) |
199 | | `$vfm.hide()` | [vfm.close()](/api/composables/use-vfm#functions) |
200 | | `$vfm.hideAll()` | [vfm.closeAll()](/api/composables/use-vfm#functions) |
--------------------------------------------------------------------------------
/docs/content/2.get-started/1.guide/4.types.md:
--------------------------------------------------------------------------------
1 | # Types
2 |
3 | The exported types in VueFinalModal.
4 |
5 | ## ModalId
6 |
7 | ```ts
8 | export type ModalId = number | string | symbol
9 | ```
10 |
11 | ## StyleValue
12 |
13 | ```ts
14 | export type StyleValue = string | CSSProperties | (string | CSSProperties)[]
15 | ```
16 |
17 | ## ModalSlot
18 |
19 | ```ts
20 | export interface ModalSlotOptions { component: Raw; attrs?: Record }
21 | export type ModalSlot = string | ComponentType | ModalSlotOptions
22 | ```
23 |
24 | ## UseModalOptions
25 |
26 | ```ts
27 | export type UseModalOptions = {
28 | defaultModelValue?: boolean
29 | keepAlive?: boolean
30 | component?: T
31 | attrs?: ComponentProps
32 | slots?: {
33 | [key: string]: ModalSlot
34 | }
35 | }
36 | ```
37 |
38 | ## UseModalOptionsPrivate
39 |
40 | ```ts
41 | export type UseModalOptionsPrivate = {
42 | id: symbol
43 | modelValue: boolean
44 | resolveOpened: () => void
45 | resolveClosed: () => void
46 | }
47 | ```
48 |
49 | ## UseModalReturnType
50 |
51 | ```ts
52 | export interface UseModalReturnType {
53 | options: UseModalOptions & UseModalOptionsPrivate
54 | open: () => Promise
55 | close: () => Promise
56 | patchOptions: (options: Partial>) => void
57 | destroy: () => void
58 | }
59 | ```
60 |
61 | ## Vfm
62 |
63 | ```ts
64 | export type Vfm = {
65 | install(app: App): void
66 | modals: ComputedRef[]
67 | openedModals: ComputedRef[]
68 | openedModalOverlays: ComputedRef[]
69 | dynamicModals: (UseModalOptions & UseModalOptionsPrivate)[]
70 | modalsContainers: Ref
71 | get: (modalId: ModalId) => undefined | ComputedRef
72 | toggle: (modalId: ModalId, show?: boolean) => undefined | Promise
73 | open: (modalId: ModalId) => undefined | Promise
74 | close: (modalId: ModalId) => undefined | Promise
75 | closeAll: () => Promise<[PromiseSettledResult[]>]>
76 | }
77 | ```
78 |
79 | ## Modal
80 |
81 | ```ts
82 | export type Modal = {
83 | modalId?: ModalId
84 | hideOverlay: Ref | undefined
85 | overlayVisible: Ref
86 | toggle: (show?: boolean) => Promise
87 | }
88 | ```
89 |
--------------------------------------------------------------------------------
/docs/content/2.get-started/1.guide/_dir.yml:
--------------------------------------------------------------------------------
1 | icon: akar-icons:book
--------------------------------------------------------------------------------
/docs/content/2.get-started/3.migration/_dir.yml:
--------------------------------------------------------------------------------
1 | icon: heroicons-outline:code
2 |
--------------------------------------------------------------------------------
/docs/content/2.get-started/_dir.yml:
--------------------------------------------------------------------------------
1 | icon: heroicons-outline:book-open
2 |
--------------------------------------------------------------------------------
/docs/content/3.api/1.components/2.modals-container.md:
--------------------------------------------------------------------------------
1 | # ``
2 |
3 | A container for the dynamic modals that created by `useModal()`.
4 |
5 | ``{lang=ts} is an [renderless component](https://adamwathan.me/renderless-components-in-vuejs/) that is responsible for hosting the Vue instances of your dynamic modals. You don't need to do add anything else to the ``{lang=ts}, as long as you include it in your Vue tree, you can use Dynamic modals.
6 |
7 | Checkout the [Prerequisite section](/api/composables/use-modal#prerequisite) to learn how to use dynamic modals with `useModal()`{lang=ts}.
8 |
9 | ::ReadMore{link="/api/composables/use-modal"}
10 | ::
--------------------------------------------------------------------------------
/docs/content/3.api/1.components/_dir.yml:
--------------------------------------------------------------------------------
1 | icon: heroicons-outline:cube
2 |
--------------------------------------------------------------------------------
/docs/content/3.api/2.composables/1.use-modal.md:
--------------------------------------------------------------------------------
1 | # useModal()
2 |
3 | A composable function to define a dynamic modal.
4 |
5 | With `useModal()`{lang=ts}, that means you don't have to add the modal to your Vue template and you don't have to use [v-model](/get-started/guide/setup#v-model) or [modalId](/get-started/guide/setup#modalid) to open or close the modal. You can simply use it to create a dynamic modal everywhere and control it programmatically.
6 |
7 | ## Prerequisite
8 |
9 | Using `useModal()`{lang=ts} to control dynamic modal must add [\](/api/components/modals-container) to your main `App.vue` file like so:
10 |
11 | ```vue [App.vue]
12 |
15 |
16 |
17 |
18 | ...
19 |
20 |
21 |
22 | ```
23 |
24 | ## Usage
25 |
26 | ### Passing Props and Events
27 |
28 | ```ts
29 | import { VueFinalModal, useModal } from 'vue-final-modal'
30 |
31 | const { open, close, destroy, options, patchOptions } = useModal({
32 | // Open the modal or not when the modal was created, the default value is `false`.
33 | defaultModelValue: false,
34 | /**
35 | * If set `keepAlive` to `true`:
36 | * 1. The `displayDirective` will be set to `show` by default.
37 | * 2. The modal component will not be removed after the modal closed until you manually execute `destroy()`.
38 | */
39 | keepAlive: false,
40 | // `component` is optional and the default value is ``.
41 | component: VueFinalModal,
42 | attrs: {
43 | // Bind props to the modal component (VueFinalModal in this case).
44 | clickToClose: true,
45 | escToClose: true,
46 | // Bind events to the modal component (VueFinalModal in this case).
47 | // Any custom events can be listened for when prefixed with "on", e.g. "onEventName".
48 | onBeforeOpen() { /* on before open */ },
49 | onOpened() { /* on opened */ },
50 | onBeforeClose() { /* on before close */ },
51 | onClosed() { /* on closed */ },
52 | }
53 | })
54 |
55 | // Open the modal
56 | open().then(() => { /* Do something after modal opened */ })
57 | // Close the modal
58 | close().then(() => { /* Do something after modal closed */ })
59 | // Destroy the modal manually, it only be needed when the `keepAlive` is set to `true`
60 | destroy()
61 | // Checkout the modal options
62 | options // the state of the dynamic modal
63 |
64 | // Overwrite the modal options
65 | patchOptions({
66 | attrs: {
67 | // Overwrite the modal's props
68 | clickToClose: false,
69 | escToClose: false,
70 | }
71 | })
72 | ```
73 |
74 | ### Passing Slots
75 |
76 | #### with `String`
77 |
78 |
79 | ```ts
80 | import { VueFinalModal, useModal } from 'vue-final-modal'
81 |
82 | const modalInstance = useModal({
83 | component: VueFinalModal,
84 | attrs: { ... },
85 | slots: {
86 | default: '
The content of the modal
'
87 | }
88 | })
89 | ```
90 |
91 | ::alert{type=warning}
92 | Security Note: https://vuejs.org/api/built-in-directives.html#v-html
93 | Dynamically rendering arbitrary HTML on your website can be very dangerousbecause it can easily lead to XSS attacks. Only use v-html on trusted content and never on user-provided content.
94 | ::
95 |
96 | #### with `Component`
97 |
98 |
99 | ```ts
100 | import { VueFinalModal, useModal } from 'vue-final-modal'
101 | // ModalContent is the component you want to put into the modal content
102 | import ModalContent from './ModalContent.vue'
103 |
104 |
105 | const modalInstance = useModal({
106 | component: VueFinalModal,
107 | attrs: { ... },
108 | slots: {
109 | // You can import your own component as a slot and put it to `slots.default` without binding props and events.
110 | default: ModalContent
111 | }
112 | })
113 | ```
114 |
115 | #### with `Component`, `Props` and `Events`
116 |
117 | ```ts
118 | import { VueFinalModal, useModal, useModalSlot } from 'vue-final-modal'
119 | // ModalContent is the component you want to put into the modal content
120 | import ModalContent from './ModalContent.vue'
121 |
122 | const modalInstance = useModal({
123 | component: VueFinalModal,
124 | attrs: { ... },
125 | slots: {
126 | default: useModalSlot({
127 | component: ModalContent,
128 | attrs: {
129 | // Bind ModalContent props
130 | title: 'Hello world!'
131 | // Bind ModalContent events
132 | onConfirm() { }
133 | }
134 | })
135 | }
136 | })
137 | ```
138 |
139 | ::alert{type=info}
140 | `useModalSlot()` is a function that provides better DX for type checking. It just returns the same object you passed in.
141 | ::
142 |
143 | ## Type Declarations
144 |
145 | ::alert{type=info}
146 | Checkout [Types section](/get-started/guide/types).
147 | ::
148 |
--------------------------------------------------------------------------------
/docs/content/3.api/2.composables/2.use-vfm.md:
--------------------------------------------------------------------------------
1 | # useVfm()
2 |
3 | `useVfm()`{lang=ts} provides global state for the modal components and also provides functions that can be used to control the modal
4 | components.
5 |
6 | ## Usage
7 |
8 | ```vue
9 |
24 | ```
25 |
26 | ## Global state
27 |
28 | - `vfm.modals`{lang=ts}: All modals including opened and closed modals.
29 | - `vfm.openedModals`{lang=ts}: All opened modals including opened `vfm.modals` and opened `vfm.dynamicModals`.
30 | - `vfm.dynamicModals`{lang=ts}: All opened dynamic modals that create by [useModal()](/api/composables/use-modal).
31 |
32 | ## Functions
33 |
34 | `vfm` instance provides some utility functions that allows you to operate a modal (see [modalId](/api/components/vue-final-modal#modalid-optional)) or modals.
35 |
36 | - `vfm.get(modalId)`{lang=ts}: Get a modal instance by given a modalId
37 | - `vfm.toggle(modalId)`{lang=ts}: Toggle a modal by given a modalId
38 | ```ts
39 | vfm.toggle(modalId).then(() => {
40 | // Do something after the modal opened or closed
41 | })
42 | ```
43 | - `vfm.open(modalId)`{lang=ts}: Open a modal by given a modalId
44 | ```ts
45 | vfm.open(modalId).then(() => {
46 | // Do something after the modal opened
47 | })
48 | ```
49 | - `vfm.close(modalId)`{lang=ts}: Close a modal by given a modalId
50 | ```ts
51 | vfm.close(modalId).then(() => {
52 | // Do something after the modal closed
53 | })
54 | ```
55 | - `vfm.closeAll()`{lang=ts}: Close all modals
56 | ```ts
57 | vfm.closeAll().then(() => {
58 | // Do something after all modals closed
59 | })
60 | ```
61 |
62 |
63 | ## Type Declarations
64 |
65 | ::ReadMore{link="/get-started/guide/types"}
66 | ::
--------------------------------------------------------------------------------
/docs/content/3.api/2.composables/_dir.yml:
--------------------------------------------------------------------------------
1 | icon: heroicons-outline:switch-horizontal
2 |
--------------------------------------------------------------------------------
/docs/content/3.api/_dir.yml:
--------------------------------------------------------------------------------
1 | title: 'API'
2 | icon: heroicons-outline:bookmark-alt
3 |
--------------------------------------------------------------------------------
/docs/content/4.use-cases/.2.modal-transition.md:
--------------------------------------------------------------------------------
1 | ---
2 | head.title: 'Modal Transition | Examples'
3 | ---
4 |
5 | # Modal Transition
6 |
7 | TBD
--------------------------------------------------------------------------------
/docs/content/4.use-cases/1.playground.md:
--------------------------------------------------------------------------------
1 | ---
2 | head.title: 'Playground | Examples'
3 | ---
4 |
5 | # Playground
6 |
7 | ::code-group
8 | ::code-block{label="Preview" preview}
9 | :playground
10 | ::
11 |
12 | ```vue [Preview.vue]
13 |
37 |
38 |
39 |
40 |
modelValue:
41 |
42 |
43 |
displayDirective:
44 |
45 |
49 |
50 |
51 |
hideOverlay:
52 |
53 |
54 |
overlayTransition:
55 |
56 |
60 |
61 |
62 |
contentTransition:
63 |
64 |
68 |
69 |
70 |
clickToClose:
71 |
72 |
73 |
escToClose:
74 |
75 |
76 |
background:
77 |
78 |
82 |
83 |
84 |
lockScroll:
85 |
86 |
87 |
reserveScrollBarGap:
88 |
89 |
90 |
swipeToClose:
91 |
92 |
96 |
97 |
98 |
99 |
100 |
103 |
106 |
107 |
108 |
124 |
125 | Hello World!
126 |
127 |
Magna deserunt nulla aliquip velit aute. Et occaecat elit nulla excepteur labore cupidatat. Duis culpa mollit commodo dolor qui Lorem qui laborum elit elit Lorem occaecat. Commodo eiusmod esse voluptate officia amet quis occaecat aliqua. Proident do irure amet ut occaecat dolor laboris consectetur.