@maz-ui/mcp 5.0.0 → 5.1.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +61 -228
- package/bin/maz-ui-mcp.mjs +2 -5
- package/dist/cli.d.mts +7 -0
- package/dist/cli.d.ts +7 -0
- package/dist/cli.mjs +14 -0
- package/dist/index.d.mts +340 -0
- package/dist/index.d.ts +340 -0
- package/dist/index.mjs +14 -0
- package/dist/shared/mcp.DzqVbCaL.mjs +2346 -0
- package/docs/README.md +207 -0
- package/docs/agents/agents-md.md +52 -0
- package/docs/agents/claude-rule.md +52 -0
- package/docs/components/maz-accordion.md +76 -0
- package/docs/{src/components → components}/maz-alert.md +31 -164
- package/docs/components/maz-animated-counter.md +87 -0
- package/docs/components/maz-animated-element.md +46 -0
- package/docs/components/maz-animated-text.md +53 -0
- package/docs/components/maz-avatar.md +193 -0
- package/docs/components/maz-backdrop.md +178 -0
- package/docs/{src/components → components}/maz-badge.md +26 -67
- package/docs/components/maz-bottom-sheet.md +257 -0
- package/docs/{src/components → components}/maz-btn-group.md +26 -189
- package/docs/{src/components → components}/maz-btn.md +60 -245
- package/docs/components/maz-card-spotlight.md +84 -0
- package/docs/{src/components → components}/maz-card.md +67 -192
- package/docs/components/maz-carousel.md +153 -0
- package/docs/{src/components → components}/maz-chart.md +17 -161
- package/docs/components/maz-checkbox.md +138 -0
- package/docs/components/maz-checklist.md +251 -0
- package/docs/components/maz-circular-progress-bar.md +109 -0
- package/docs/{src/components → components}/maz-code-highlight.md +15 -93
- package/docs/components/maz-container.md +241 -0
- package/docs/{src/components → components}/maz-date-picker.md +85 -454
- package/docs/components/maz-dialog-confirm.md +215 -0
- package/docs/components/maz-dialog.md +143 -0
- package/docs/components/maz-drawer.md +106 -0
- package/docs/components/maz-dropdown.md +419 -0
- package/docs/{src/components → components}/maz-dropzone.md +80 -221
- package/docs/components/maz-expand-animation.md +82 -0
- package/docs/components/maz-fullscreen-loader.md +58 -0
- package/docs/components/maz-gallery.md +79 -0
- package/docs/{src/components → components}/maz-icon.md +32 -83
- package/docs/components/maz-input-code.md +73 -0
- package/docs/components/maz-input-number.md +79 -0
- package/docs/components/maz-input-phone-number.md +536 -0
- package/docs/components/maz-input-price.md +68 -0
- package/docs/components/maz-input-tags.md +112 -0
- package/docs/{src/components → components}/maz-input.md +74 -221
- package/docs/components/maz-lazy-img.md +113 -0
- package/docs/components/maz-link.md +146 -0
- package/docs/components/maz-loading-bar.md +38 -0
- package/docs/{src/components → components}/maz-markdown-editor.md +72 -125
- package/docs/components/maz-pagination.md +82 -0
- package/docs/components/maz-popover.md +794 -0
- package/docs/{src/components → components}/maz-pull-to-refresh.md +59 -45
- package/docs/components/maz-radio-buttons.md +313 -0
- package/docs/components/maz-radio.md +119 -0
- package/docs/{src/components → components}/maz-read-more.md +31 -122
- package/docs/components/maz-reading-progress-bar.md +96 -0
- package/docs/{src/components → components}/maz-select-country.md +80 -340
- package/docs/{src/components → components}/maz-select.md +76 -206
- package/docs/components/maz-sidebar-content.md +25 -0
- package/docs/components/maz-sidebar-footer.md +25 -0
- package/docs/components/maz-sidebar-group.md +27 -0
- package/docs/components/maz-sidebar-header.md +25 -0
- package/docs/components/maz-sidebar-menu-button.md +41 -0
- package/docs/components/maz-sidebar-menu-item.md +25 -0
- package/docs/components/maz-sidebar-menu-sub.md +32 -0
- package/docs/components/maz-sidebar-menu.md +25 -0
- package/docs/components/maz-sidebar-separator.md +21 -0
- package/docs/components/maz-sidebar-trigger.md +25 -0
- package/docs/{src/components → components}/maz-sidebar.md +117 -329
- package/docs/{src/components → components}/maz-skeleton.md +27 -156
- package/docs/{src/components → components}/maz-slider.md +33 -66
- package/docs/components/maz-spinner.md +84 -0
- package/docs/{src/components → components}/maz-stepper.md +43 -185
- package/docs/components/maz-switch.md +86 -0
- package/docs/components/maz-table-cell.md +27 -0
- package/docs/components/maz-table-row.md +28 -0
- package/docs/components/maz-table-title.md +27 -0
- package/docs/components/maz-table-virtualizer.md +31 -0
- package/docs/components/maz-table.md +426 -0
- package/docs/components/maz-tabs-bar.md +43 -0
- package/docs/components/maz-tabs-content-item.md +27 -0
- package/docs/components/maz-tabs-content.md +27 -0
- package/docs/{src/components → components}/maz-tabs.md +89 -126
- package/docs/components/maz-textarea.md +255 -0
- package/docs/components/maz-ticker.md +427 -0
- package/docs/components/maz-timeline.md +304 -0
- package/docs/components/maz-ui-provider.md +26 -0
- package/docs/{src/components → components}/maz-window-mockup.md +38 -105
- package/docs/composables/use-aos.md +41 -0
- package/docs/composables/use-breakpoints.md +42 -0
- package/docs/composables/use-dialog.md +58 -0
- package/docs/{src/composables → composables}/use-display-names.md +12 -59
- package/docs/{src/composables → composables}/use-drag.md +14 -68
- package/docs/{src/composables → composables}/use-form-validator.md +22 -696
- package/docs/{src/composables → composables}/use-idle-timeout.md +13 -97
- package/docs/{src/composables → composables}/use-pull-to-refresh.md +14 -7
- package/docs/{src/composables → composables}/use-reading-time.md +20 -56
- package/docs/composables/use-string-matching.md +41 -0
- package/docs/{src/composables → composables}/use-swipe.md +14 -81
- package/docs/{src/composables → composables}/use-timer.md +12 -38
- package/docs/composables/use-toast.md +50 -0
- package/docs/{src/composables → composables}/use-user-visibility.md +14 -56
- package/docs/composables/use-wait.md +50 -0
- package/docs/composables/use-window-size.md +25 -0
- package/docs/{src/directives → directives}/click-outside.md +13 -99
- package/docs/{src/directives → directives}/fullscreen-img.md +10 -28
- package/docs/{src/directives → directives}/lazy-img.md +14 -49
- package/docs/{src/directives → directives}/tooltip.md +12 -217
- package/docs/{src/directives → directives}/zoom-img.md +11 -38
- package/docs/{src/ecosystem → ecosystem}/eslint-config.md +37 -29
- package/docs/ecosystem/icons/icon-set.md +25 -0
- package/docs/{src/ecosystem → ecosystem}/icons/index.md +22 -16
- package/docs/ecosystem/mcp.md +165 -0
- package/docs/{src/ecosystem → ecosystem}/node/exec-promise.md +12 -6
- package/docs/ecosystem/node/index.md +53 -0
- package/docs/{src/ecosystem → ecosystem}/node/logger.md +12 -6
- package/docs/{src/ecosystem → ecosystem}/node/print-banner.md +12 -4
- package/docs/ecosystem/node/setup-agents.md +102 -0
- package/docs/{src/ecosystem → ecosystem}/nuxt.md +46 -19
- package/docs/{src/ecosystem → ecosystem}/stylelint-config.md +33 -25
- package/docs/{src/ecosystem → ecosystem}/themes.md +72 -235
- package/docs/{src/ecosystem → ecosystem}/translations.md +25 -23
- package/docs/ecosystem/utils/camel-case.md +37 -0
- package/docs/ecosystem/utils/capitalize.md +37 -0
- package/docs/{src/ecosystem → ecosystem}/utils/check-availability.md +14 -8
- package/docs/{src/ecosystem → ecosystem}/utils/cookie.md +18 -12
- package/docs/ecosystem/utils/country-code-to-unicode-flag.md +128 -0
- package/docs/{src/ecosystem → ecosystem}/utils/currency.md +12 -26
- package/docs/{src/ecosystem → ecosystem}/utils/date.md +10 -24
- package/docs/ecosystem/utils/debounce-callback.md +44 -0
- package/docs/{src/ecosystem → ecosystem}/utils/debounce-id.md +14 -8
- package/docs/{src/ecosystem → ecosystem}/utils/debounce.md +14 -8
- package/docs/ecosystem/utils/fetch-locale-ip.md +39 -0
- package/docs/{src/ecosystem → ecosystem}/utils/format-json.md +11 -5
- package/docs/{src/ecosystem → ecosystem}/utils/format-phone-number.md +12 -6
- package/docs/ecosystem/utils/get-browser-locale.md +35 -0
- package/docs/ecosystem/utils/get-country-flag-url.md +67 -0
- package/docs/{src/ecosystem → ecosystem}/utils/get-error-message.md +10 -4
- package/docs/{src/ecosystem → ecosystem}/utils/idle-timeout.md +15 -9
- package/docs/{src/ecosystem → ecosystem}/utils/index.md +10 -13
- package/docs/{src/ecosystem → ecosystem}/utils/is-client.md +11 -5
- package/docs/{src/ecosystem → ecosystem}/utils/is-equal.md +14 -8
- package/docs/{src/ecosystem → ecosystem}/utils/is-ios.md +12 -6
- package/docs/ecosystem/utils/is-server.md +37 -0
- package/docs/ecosystem/utils/is-standalone-mode.md +49 -0
- package/docs/{src/ecosystem → ecosystem}/utils/kebab-case.md +10 -4
- package/docs/{src/ecosystem → ecosystem}/utils/normalize-string.md +10 -4
- package/docs/{src/ecosystem → ecosystem}/utils/number.md +10 -24
- package/docs/{src/ecosystem → ecosystem}/utils/pascal-case.md +11 -5
- package/docs/{src/ecosystem → ecosystem}/utils/prevent-ios-input-zoom.md +14 -8
- package/docs/{src/ecosystem → ecosystem}/utils/script-loader.md +16 -8
- package/docs/{src/ecosystem → ecosystem}/utils/sleep.md +10 -4
- package/docs/{src/ecosystem → ecosystem}/utils/snake-case.md +10 -4
- package/docs/{src/ecosystem → ecosystem}/utils/swipe-handler.md +14 -8
- package/docs/{src/ecosystem → ecosystem}/utils/textarea-autogrow.md +12 -6
- package/docs/{src/ecosystem → ecosystem}/utils/throttle-id.md +13 -7
- package/docs/{src/ecosystem → ecosystem}/utils/throttle.md +14 -8
- package/docs/ecosystem/utils/truthy-filter.md +37 -0
- package/docs/{src/ecosystem → ecosystem}/utils/types/deep-key-of.md +11 -5
- package/docs/{src/ecosystem → ecosystem}/utils/types/deep-partial.md +10 -4
- package/docs/ecosystem/utils/types/deep-required.md +45 -0
- package/docs/ecosystem/utils/types/flatten-object-keys.md +50 -0
- package/docs/{src/ecosystem → ecosystem}/utils/types/generic-instance-type.md +10 -4
- package/docs/{src/ecosystem → ecosystem}/utils/types/infer-maybe-ref.md +10 -4
- package/docs/ecosystem/utils/upper-first.md +38 -0
- package/docs/{src/ecosystem → ecosystem}/utils/user-visibility.md +12 -6
- package/docs/guide/ai-agents.md +237 -0
- package/docs/{src/guide → guide}/browser-support.md +22 -15
- package/docs/{src/guide → guide}/getting-started.md +34 -139
- package/docs/{src/guide → guide}/global-defaults.md +12 -11
- package/docs/{src/guide → guide}/maz-ui-provider.md +17 -16
- package/docs/{src/guide → guide}/migration-v5.md +95 -88
- package/docs/{src/guide → guide}/resolvers.md +33 -100
- package/docs/guide/tailwind.md +483 -0
- package/docs/{src/guide → guide}/vue.md +33 -39
- package/docs/manifest.json +1 -0
- package/docs/{src/plugins → plugins}/aos.md +20 -55
- package/docs/{src/plugins → plugins}/dialog.md +14 -161
- package/docs/plugins/toast.md +221 -0
- package/docs/plugins/wait.md +78 -0
- package/docs/reference/icons.md +46 -0
- package/docs/reference/tailwind-tokens.md +191 -0
- package/docs/rules.md +57 -0
- package/package.json +84 -22
- package/dist/mcp.d.mts +0 -153
- package/dist/mcp.d.ts +0 -153
- package/dist/mcp.mjs +0 -1511
- package/docs/generated-docs/maz-accordion.doc.md +0 -21
- package/docs/generated-docs/maz-alert.doc.md +0 -20
- package/docs/generated-docs/maz-animated-counter.doc.md +0 -17
- package/docs/generated-docs/maz-animated-element.doc.md +0 -14
- package/docs/generated-docs/maz-animated-text.doc.md +0 -17
- package/docs/generated-docs/maz-avatar.doc.md +0 -45
- package/docs/generated-docs/maz-backdrop.doc.md +0 -55
- package/docs/generated-docs/maz-badge.doc.md +0 -16
- package/docs/generated-docs/maz-bottom-sheet.doc.md +0 -24
- package/docs/generated-docs/maz-btn-group.doc.md +0 -20
- package/docs/generated-docs/maz-btn.doc.md +0 -33
- package/docs/generated-docs/maz-card-spotlight.doc.md +0 -16
- package/docs/generated-docs/maz-card.doc.md +0 -39
- package/docs/generated-docs/maz-carousel.doc.md +0 -17
- package/docs/generated-docs/maz-chart.doc.md +0 -10
- package/docs/generated-docs/maz-checkbox.doc.md +0 -33
- package/docs/generated-docs/maz-checklist.doc.md +0 -30
- package/docs/generated-docs/maz-circular-progress-bar.doc.md +0 -27
- package/docs/generated-docs/maz-code-highlight.doc.md +0 -11
- package/docs/generated-docs/maz-container.doc.md +0 -26
- package/docs/generated-docs/maz-date-picker.doc.md +0 -56
- package/docs/generated-docs/maz-dialog-confirm.doc.md +0 -24
- package/docs/generated-docs/maz-dialog.doc.md +0 -22
- package/docs/generated-docs/maz-drawer.doc.md +0 -25
- package/docs/generated-docs/maz-dropdown.doc.md +0 -45
- package/docs/generated-docs/maz-dropzone.doc.md +0 -82
- package/docs/generated-docs/maz-expand-animation.doc.md +0 -12
- package/docs/generated-docs/maz-fullscreen-loader.doc.md +0 -13
- package/docs/generated-docs/maz-gallery.doc.md +0 -17
- package/docs/generated-docs/maz-icon.doc.md +0 -16
- package/docs/generated-docs/maz-input-code.doc.md +0 -25
- package/docs/generated-docs/maz-input-number.doc.md +0 -33
- package/docs/generated-docs/maz-input-phone-number.doc.md +0 -62
- package/docs/generated-docs/maz-input-price.doc.md +0 -26
- package/docs/generated-docs/maz-input-tags.doc.md +0 -24
- package/docs/generated-docs/maz-input.doc.md +0 -54
- package/docs/generated-docs/maz-lazy-img.doc.md +0 -49
- package/docs/generated-docs/maz-link.doc.md +0 -31
- package/docs/generated-docs/maz-loading-bar.doc.md +0 -6
- package/docs/generated-docs/maz-markdown-editor.doc.md +0 -65
- package/docs/generated-docs/maz-pagination.doc.md +0 -21
- package/docs/generated-docs/maz-popover.doc.md +0 -79
- package/docs/generated-docs/maz-pull-to-refresh.doc.md +0 -50
- package/docs/generated-docs/maz-radio-buttons.doc.md +0 -34
- package/docs/generated-docs/maz-radio.doc.md +0 -33
- package/docs/generated-docs/maz-read-more.doc.md +0 -18
- package/docs/generated-docs/maz-reading-progress-bar.doc.md +0 -18
- package/docs/generated-docs/maz-select-country.doc.md +0 -45
- package/docs/generated-docs/maz-select.doc.md +0 -32
- package/docs/generated-docs/maz-sidebar-content.doc.md +0 -5
- package/docs/generated-docs/maz-sidebar-footer.doc.md +0 -5
- package/docs/generated-docs/maz-sidebar-group.doc.md +0 -11
- package/docs/generated-docs/maz-sidebar-header.doc.md +0 -5
- package/docs/generated-docs/maz-sidebar-menu-button.doc.md +0 -27
- package/docs/generated-docs/maz-sidebar-menu-item.doc.md +0 -5
- package/docs/generated-docs/maz-sidebar-menu-sub.doc.md +0 -16
- package/docs/generated-docs/maz-sidebar-menu.doc.md +0 -5
- package/docs/generated-docs/maz-sidebar-separator.doc.md +0 -0
- package/docs/generated-docs/maz-sidebar-trigger.doc.md +0 -5
- package/docs/generated-docs/maz-sidebar.doc.md +0 -36
- package/docs/generated-docs/maz-skeleton.doc.md +0 -12
- package/docs/generated-docs/maz-slider.doc.md +0 -20
- package/docs/generated-docs/maz-spinner.doc.md +0 -6
- package/docs/generated-docs/maz-stepper.doc.md +0 -30
- package/docs/generated-docs/maz-switch.doc.md +0 -31
- package/docs/generated-docs/maz-table-cell.doc.md +0 -5
- package/docs/generated-docs/maz-table-row.doc.md +0 -12
- package/docs/generated-docs/maz-table-title.doc.md +0 -5
- package/docs/generated-docs/maz-table-virtualizer.doc.md +0 -20
- package/docs/generated-docs/maz-table.doc.md +0 -72
- package/docs/generated-docs/maz-tabs-bar.doc.md +0 -29
- package/docs/generated-docs/maz-tabs-content-item.doc.md +0 -11
- package/docs/generated-docs/maz-tabs-content.doc.md +0 -5
- package/docs/generated-docs/maz-tabs.doc.md +0 -20
- package/docs/generated-docs/maz-textarea.doc.md +0 -46
- package/docs/generated-docs/maz-ticker.doc.md +0 -25
- package/docs/generated-docs/maz-timeline.doc.md +0 -32
- package/docs/generated-docs/maz-ui-provider.doc.md +0 -12
- package/docs/generated-docs/maz-window-mockup.doc.md +0 -23
- package/docs/src/blog/v4.md +0 -276
- package/docs/src/blog/v5.md +0 -184
- package/docs/src/changelog.md +0 -7
- package/docs/src/components/index.md +0 -8
- package/docs/src/components/maz-accordion.md +0 -80
- package/docs/src/components/maz-animated-counter.md +0 -124
- package/docs/src/components/maz-animated-element.md +0 -36
- package/docs/src/components/maz-animated-text.md +0 -36
- package/docs/src/components/maz-avatar.md +0 -227
- package/docs/src/components/maz-backdrop.md +0 -250
- package/docs/src/components/maz-bottom-sheet.md +0 -533
- package/docs/src/components/maz-card-spotlight.md +0 -163
- package/docs/src/components/maz-carousel.md +0 -231
- package/docs/src/components/maz-checkbox.md +0 -168
- package/docs/src/components/maz-checklist.md +0 -414
- package/docs/src/components/maz-circular-progress-bar.md +0 -145
- package/docs/src/components/maz-container.md +0 -363
- package/docs/src/components/maz-dialog-confirm.md +0 -240
- package/docs/src/components/maz-dialog.md +0 -164
- package/docs/src/components/maz-drawer.md +0 -181
- package/docs/src/components/maz-dropdown.md +0 -691
- package/docs/src/components/maz-expand-animation.md +0 -99
- package/docs/src/components/maz-fullscreen-loader.md +0 -58
- package/docs/src/components/maz-gallery.md +0 -85
- package/docs/src/components/maz-input-code.md +0 -61
- package/docs/src/components/maz-input-number.md +0 -81
- package/docs/src/components/maz-input-phone-number.md +0 -942
- package/docs/src/components/maz-input-price.md +0 -67
- package/docs/src/components/maz-input-tags.md +0 -114
- package/docs/src/components/maz-lazy-img.md +0 -88
- package/docs/src/components/maz-link.md +0 -178
- package/docs/src/components/maz-loading-bar.md +0 -26
- package/docs/src/components/maz-pagination.md +0 -79
- package/docs/src/components/maz-popover.md +0 -1416
- package/docs/src/components/maz-radio-buttons.md +0 -462
- package/docs/src/components/maz-radio.md +0 -142
- package/docs/src/components/maz-reading-progress-bar.md +0 -74
- package/docs/src/components/maz-spinner.md +0 -93
- package/docs/src/components/maz-switch.md +0 -92
- package/docs/src/components/maz-table.md +0 -732
- package/docs/src/components/maz-textarea.md +0 -400
- package/docs/src/components/maz-ticker.md +0 -692
- package/docs/src/components/maz-timeline.md +0 -478
- package/docs/src/composables/use-aos.md +0 -34
- package/docs/src/composables/use-breakpoints.md +0 -35
- package/docs/src/composables/use-dialog.md +0 -88
- package/docs/src/composables/use-string-matching.md +0 -63
- package/docs/src/composables/use-toast.md +0 -71
- package/docs/src/composables/use-wait.md +0 -62
- package/docs/src/composables/use-window-size.md +0 -18
- package/docs/src/ecosystem/icons/icon-set.md +0 -123
- package/docs/src/ecosystem/mcp.md +0 -210
- package/docs/src/ecosystem/node/index.md +0 -53
- package/docs/src/ecosystem/utils/camel-case.md +0 -31
- package/docs/src/ecosystem/utils/capitalize.md +0 -50
- package/docs/src/ecosystem/utils/country-code-to-unicode-flag.md +0 -213
- package/docs/src/ecosystem/utils/debounce-callback.md +0 -38
- package/docs/src/ecosystem/utils/fetch-locale-ip.md +0 -33
- package/docs/src/ecosystem/utils/get-browser-locale.md +0 -29
- package/docs/src/ecosystem/utils/get-country-flag-url.md +0 -156
- package/docs/src/ecosystem/utils/is-server.md +0 -31
- package/docs/src/ecosystem/utils/is-standalone-mode.md +0 -43
- package/docs/src/ecosystem/utils/truthy-filter.md +0 -31
- package/docs/src/ecosystem/utils/types/deep-required.md +0 -39
- package/docs/src/ecosystem/utils/types/flatten-object-keys.md +0 -44
- package/docs/src/ecosystem/utils/upper-first.md +0 -32
- package/docs/src/guide/cli.md +0 -144
- package/docs/src/guide/migration-v4.md +0 -925
- package/docs/src/guide/tailwind.md +0 -158
- package/docs/src/index.md +0 -603
- package/docs/src/made-with-maz-ui.md +0 -58
- package/docs/src/plugins/toast.md +0 -349
- package/docs/src/plugins/wait.md +0 -109
- package/docs/src/theme-editor.md +0 -21
|
@@ -0,0 +1,794 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "MazPopover"
|
|
3
|
+
description: "MazPopover is a versatile Vue component for displaying content in overlays that bypass overflow constraints of parent elements"
|
|
4
|
+
package: "maz-ui"
|
|
5
|
+
url: "https://maz-ui.com/components/maz-popover"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# MazPopover
|
|
9
|
+
|
|
10
|
+
> MazPopover is a versatile Vue component for displaying content in overlays that bypass overflow constraints of parent elements
|
|
11
|
+
|
|
12
|
+
- Package: `maz-ui`
|
|
13
|
+
- Import: `import MazPopover from 'maz-ui/components/MazPopover'`
|
|
14
|
+
- Nuxt: auto-imported by `@maz-ui/nuxt`, no import needed in a Nuxt app
|
|
15
|
+
- Web: https://maz-ui.com/components/maz-popover
|
|
16
|
+
|
|
17
|
+
## Basic usage
|
|
18
|
+
|
|
19
|
+
```vue
|
|
20
|
+
<template>
|
|
21
|
+
<MazPopover>
|
|
22
|
+
<template #trigger>
|
|
23
|
+
<MazBtn>
|
|
24
|
+
Click me
|
|
25
|
+
</MazBtn>
|
|
26
|
+
</template>
|
|
27
|
+
<div class="p-4">
|
|
28
|
+
<h3 class="mb-2 text-lg font-semibold">
|
|
29
|
+
Popover Content
|
|
30
|
+
</h3>
|
|
31
|
+
<p class="text-sm">
|
|
32
|
+
This is the content inside the popover.
|
|
33
|
+
</p>
|
|
34
|
+
</div>
|
|
35
|
+
</MazPopover>
|
|
36
|
+
|
|
37
|
+
<MazPopover trigger="hover">
|
|
38
|
+
<template #trigger>
|
|
39
|
+
<MazBtn color="secondary">
|
|
40
|
+
Hover me
|
|
41
|
+
</MazBtn>
|
|
42
|
+
</template>
|
|
43
|
+
<div class="p-4">
|
|
44
|
+
<p class="text-sm">
|
|
45
|
+
This popover appears on hover!
|
|
46
|
+
</p>
|
|
47
|
+
</div>
|
|
48
|
+
</MazPopover>
|
|
49
|
+
</template>
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Adaptive trigger
|
|
53
|
+
|
|
54
|
+
The `adaptive` trigger mode automatically adapts to the user's device:
|
|
55
|
+
- **Desktop**: Uses hover behavior (mouseenter/mouseleave)
|
|
56
|
+
- **Mobile/Touch devices**: Uses click behavior
|
|
57
|
+
|
|
58
|
+
This provides the best user experience across all devices without requiring manual configuration.
|
|
59
|
+
|
|
60
|
+
```vue
|
|
61
|
+
<template>
|
|
62
|
+
<!-- Basic adaptive trigger -->
|
|
63
|
+
<MazPopover trigger="adaptive">
|
|
64
|
+
<template #trigger>
|
|
65
|
+
<MazBtn color="primary">
|
|
66
|
+
Adaptive Trigger
|
|
67
|
+
</MazBtn>
|
|
68
|
+
</template>
|
|
69
|
+
<div class="p-4">
|
|
70
|
+
<h3 class="text-lg font-semibold mb-2">Smart Behavior</h3>
|
|
71
|
+
<p class="text-sm mb-2">
|
|
72
|
+
On desktop: Hover to open, move away to close
|
|
73
|
+
</p>
|
|
74
|
+
<p class="text-sm">
|
|
75
|
+
On mobile: Tap to open, tap outside to close
|
|
76
|
+
</p>
|
|
77
|
+
</div>
|
|
78
|
+
</MazPopover>
|
|
79
|
+
|
|
80
|
+
<!-- Adaptive with keep-open-on-hover for menus -->
|
|
81
|
+
<MazPopover trigger="adaptive" keep-open-on-hover>
|
|
82
|
+
<template #trigger>
|
|
83
|
+
<MazBtn color="secondary">
|
|
84
|
+
Adaptive Menu
|
|
85
|
+
</MazBtn>
|
|
86
|
+
</template>
|
|
87
|
+
<div class="p-4">
|
|
88
|
+
<p class="text-sm mb-2">
|
|
89
|
+
Perfect for dropdown menus that work on all devices
|
|
90
|
+
</p>
|
|
91
|
+
<button class="block w-full px-3 py-2 text-start text-sm hover:bg-surface-600 dark:hover:bg-surface-400 rounded-md">
|
|
92
|
+
Menu Item 1
|
|
93
|
+
</button>
|
|
94
|
+
<button class="block w-full px-3 py-2 text-start text-sm hover:bg-surface-600 dark:hover:bg-surface-400 rounded-md">
|
|
95
|
+
Menu Item 2
|
|
96
|
+
</button>
|
|
97
|
+
</div>
|
|
98
|
+
</MazPopover>
|
|
99
|
+
</template>
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
## Positions
|
|
103
|
+
|
|
104
|
+
**Tip:**
|
|
105
|
+
|
|
106
|
+
The position prop is used to position the popover relative to the trigger. The chosen position will force the popover to be displayed in the chosen position.
|
|
107
|
+
|
|
108
|
+
```vue
|
|
109
|
+
<template>
|
|
110
|
+
<MazPopover trigger="hover" position="top">
|
|
111
|
+
<template #trigger>
|
|
112
|
+
<MazBtn>Top</MazBtn>
|
|
113
|
+
</template>
|
|
114
|
+
<div class="p-3">
|
|
115
|
+
<p class="text-sm">
|
|
116
|
+
Top positioned popover
|
|
117
|
+
</p>
|
|
118
|
+
</div>
|
|
119
|
+
</MazPopover>
|
|
120
|
+
|
|
121
|
+
<MazPopover trigger="hover" position="bottom">
|
|
122
|
+
<template #trigger>
|
|
123
|
+
<MazBtn>Bottom</MazBtn>
|
|
124
|
+
</template>
|
|
125
|
+
<div class="p-3">
|
|
126
|
+
<p class="text-sm">
|
|
127
|
+
Bottom positioned popover
|
|
128
|
+
</p>
|
|
129
|
+
</div>
|
|
130
|
+
</MazPopover>
|
|
131
|
+
|
|
132
|
+
<MazPopover trigger="hover" position="left">
|
|
133
|
+
<template #trigger>
|
|
134
|
+
<MazBtn>Left</MazBtn>
|
|
135
|
+
</template>
|
|
136
|
+
<div class="p-3">
|
|
137
|
+
<p class="text-sm">
|
|
138
|
+
Left positioned popover
|
|
139
|
+
</p>
|
|
140
|
+
</div>
|
|
141
|
+
</MazPopover>
|
|
142
|
+
|
|
143
|
+
<MazPopover trigger="hover" position="right">
|
|
144
|
+
<template #trigger>
|
|
145
|
+
<MazBtn>Right</MazBtn>
|
|
146
|
+
</template>
|
|
147
|
+
<div class="p-3">
|
|
148
|
+
<p class="text-sm">
|
|
149
|
+
Right positioned popover
|
|
150
|
+
</p>
|
|
151
|
+
</div>
|
|
152
|
+
</MazPopover>
|
|
153
|
+
</template>
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
## Advanced positions
|
|
157
|
+
|
|
158
|
+
```vue
|
|
159
|
+
<template>
|
|
160
|
+
<MazPopover position="top-start">
|
|
161
|
+
<template #trigger>
|
|
162
|
+
<MazBtn block size="sm">
|
|
163
|
+
Top Start
|
|
164
|
+
</MazBtn>
|
|
165
|
+
</template>
|
|
166
|
+
<div class="p-3">
|
|
167
|
+
<p class="text-sm">Top start aligned</p>
|
|
168
|
+
</div>
|
|
169
|
+
</MazPopover>
|
|
170
|
+
<MazPopover position="top-end">
|
|
171
|
+
<template #trigger>
|
|
172
|
+
<MazBtn block size="sm">
|
|
173
|
+
Top End
|
|
174
|
+
</MazBtn>
|
|
175
|
+
</template>
|
|
176
|
+
<div class="p-3">
|
|
177
|
+
<p class="text-sm">Top end aligned</p>
|
|
178
|
+
</div>
|
|
179
|
+
</MazPopover>
|
|
180
|
+
<MazPopover position="bottom-start">
|
|
181
|
+
<template #trigger>
|
|
182
|
+
<MazBtn block size="sm">
|
|
183
|
+
Bottom Start
|
|
184
|
+
</MazBtn>
|
|
185
|
+
</template>
|
|
186
|
+
<div class="p-3">
|
|
187
|
+
<p class="text-sm">Bottom start aligned</p>
|
|
188
|
+
</div>
|
|
189
|
+
</MazPopover>
|
|
190
|
+
<MazPopover position="bottom-end">
|
|
191
|
+
<template #trigger>
|
|
192
|
+
<MazBtn block size="sm">
|
|
193
|
+
Bottom End
|
|
194
|
+
</MazBtn>
|
|
195
|
+
</template>
|
|
196
|
+
<div class="p-3">
|
|
197
|
+
<p class="text-sm">Bottom end aligned</p>
|
|
198
|
+
</div>
|
|
199
|
+
</MazPopover>
|
|
200
|
+
|
|
201
|
+
<MazPopover position="left-start">
|
|
202
|
+
<template #trigger>
|
|
203
|
+
<MazBtn block size="sm">
|
|
204
|
+
Left Start
|
|
205
|
+
</MazBtn>
|
|
206
|
+
</template>
|
|
207
|
+
<div class="p-3">
|
|
208
|
+
<p class="text-sm">Left start aligned</p>
|
|
209
|
+
</div>
|
|
210
|
+
</MazPopover>
|
|
211
|
+
<MazPopover position="left-end">
|
|
212
|
+
<template #trigger>
|
|
213
|
+
<MazBtn block size="sm">
|
|
214
|
+
Left End
|
|
215
|
+
</MazBtn>
|
|
216
|
+
</template>
|
|
217
|
+
<div class="p-3">
|
|
218
|
+
<p class="text-sm">Left end aligned</p>
|
|
219
|
+
</div>
|
|
220
|
+
</MazPopover>
|
|
221
|
+
|
|
222
|
+
<MazPopover position="right-start">
|
|
223
|
+
<template #trigger>
|
|
224
|
+
<MazBtn block size="sm">
|
|
225
|
+
Right Start
|
|
226
|
+
</MazBtn>
|
|
227
|
+
</template>
|
|
228
|
+
<div class="p-3">
|
|
229
|
+
<p class="text-sm">Right start aligned</p>
|
|
230
|
+
</div>
|
|
231
|
+
</MazPopover>
|
|
232
|
+
<MazPopover position="right-end">
|
|
233
|
+
<template #trigger>
|
|
234
|
+
<MazBtn block size="sm">
|
|
235
|
+
Right End
|
|
236
|
+
</MazBtn>
|
|
237
|
+
</template>
|
|
238
|
+
<div class="p-3">
|
|
239
|
+
<p class="text-sm">Right end aligned</p>
|
|
240
|
+
</div>
|
|
241
|
+
</MazPopover>
|
|
242
|
+
|
|
243
|
+
<MazPopover position="auto">
|
|
244
|
+
<template #trigger>
|
|
245
|
+
<MazBtn color="accent">
|
|
246
|
+
Auto Position
|
|
247
|
+
</MazBtn>
|
|
248
|
+
</template>
|
|
249
|
+
<div class="p-3">
|
|
250
|
+
<p class="text-sm">
|
|
251
|
+
Automatically positioned based on available space
|
|
252
|
+
</p>
|
|
253
|
+
</div>
|
|
254
|
+
</MazPopover>
|
|
255
|
+
</template>
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
## Prefer position and fallback position
|
|
259
|
+
|
|
260
|
+
**Tip:**
|
|
261
|
+
|
|
262
|
+
The prefer-position and fallback-position props are used to position the popover relative to the trigger. The prefer-position is the position that will be used if it's available, and the fallback-position is the position that will be used if the prefer-position is not available.
|
|
263
|
+
|
|
264
|
+
When you not specify a fallback position, the popover will fallback on the best position available.
|
|
265
|
+
|
|
266
|
+
```html
|
|
267
|
+
<MazPopover prefer-position="top-start" fallback-position="bottom-start">
|
|
268
|
+
<template #trigger>
|
|
269
|
+
<MazBtn>
|
|
270
|
+
Prefer position and fallback position
|
|
271
|
+
</MazBtn>
|
|
272
|
+
</template>
|
|
273
|
+
<div class="p-4">
|
|
274
|
+
<p class="text-sm">This popover will prefer the top position, but if it's not available, it will fallback to the bottom position.</p>
|
|
275
|
+
</div>
|
|
276
|
+
</MazPopover>
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
## Colors
|
|
280
|
+
|
|
281
|
+
```vue
|
|
282
|
+
<template>
|
|
283
|
+
<MazPopover color="surface" trigger="hover">
|
|
284
|
+
<template #trigger>
|
|
285
|
+
<MazBtn color="contrast">Background</MazBtn>
|
|
286
|
+
</template>
|
|
287
|
+
<div class="p-4">
|
|
288
|
+
<p class="text-sm">This popover has a default color!</p>
|
|
289
|
+
</div>
|
|
290
|
+
</MazPopover>
|
|
291
|
+
<MazPopover color="primary" trigger="hover">
|
|
292
|
+
<template #trigger>
|
|
293
|
+
<MazBtn color="primary">Primary</MazBtn>
|
|
294
|
+
</template>
|
|
295
|
+
<div class="p-4">
|
|
296
|
+
<p class="text-sm">This popover has a primary color!</p>
|
|
297
|
+
</div>
|
|
298
|
+
</MazPopover>
|
|
299
|
+
<MazPopover color="secondary" trigger="hover">
|
|
300
|
+
<template #trigger>
|
|
301
|
+
<MazBtn color="secondary">Secondary</MazBtn>
|
|
302
|
+
</template>
|
|
303
|
+
<div class="p-4">
|
|
304
|
+
<p class="text-sm">This popover has a secondary color!</p>
|
|
305
|
+
</div>
|
|
306
|
+
</MazPopover>
|
|
307
|
+
<MazPopover color="accent" trigger="hover">
|
|
308
|
+
<template #trigger>
|
|
309
|
+
<MazBtn color="accent">Accent</MazBtn>
|
|
310
|
+
</template>
|
|
311
|
+
<div class="p-4">
|
|
312
|
+
<p class="text-sm">This popover has a accent color!</p>
|
|
313
|
+
</div>
|
|
314
|
+
</MazPopover>
|
|
315
|
+
<MazPopover color="contrast" trigger="hover">
|
|
316
|
+
<template #trigger>
|
|
317
|
+
<MazBtn color="contrast">Contrast</MazBtn>
|
|
318
|
+
</template>
|
|
319
|
+
<div class="p-4">
|
|
320
|
+
<p class="text-sm">This popover has a contrast color!</p>
|
|
321
|
+
</div>
|
|
322
|
+
</MazPopover>
|
|
323
|
+
<MazPopover color="success" trigger="hover">
|
|
324
|
+
<template #trigger>
|
|
325
|
+
<MazBtn color="success">Success</MazBtn>
|
|
326
|
+
</template>
|
|
327
|
+
<div class="p-4">
|
|
328
|
+
<p class="text-sm">This popover has a success color!</p>
|
|
329
|
+
</div>
|
|
330
|
+
</MazPopover>
|
|
331
|
+
<MazPopover color="info" trigger="hover">
|
|
332
|
+
<template #trigger>
|
|
333
|
+
<MazBtn color="info">Info</MazBtn>
|
|
334
|
+
</template>
|
|
335
|
+
<div class="p-4">
|
|
336
|
+
<p class="text-sm">This popover has a info color!</p>
|
|
337
|
+
</div>
|
|
338
|
+
</MazPopover>
|
|
339
|
+
<MazPopover color="destructive" trigger="hover">
|
|
340
|
+
<template #trigger>
|
|
341
|
+
<MazBtn color="destructive">Destructive</MazBtn>
|
|
342
|
+
</template>
|
|
343
|
+
<div class="p-4">
|
|
344
|
+
<p class="text-sm">This popover has a destructive color!</p>
|
|
345
|
+
</div>
|
|
346
|
+
</MazPopover>
|
|
347
|
+
<MazPopover color="warning" trigger="hover">
|
|
348
|
+
<template #trigger>
|
|
349
|
+
<MazBtn color="warning">Warning</MazBtn>
|
|
350
|
+
</template>
|
|
351
|
+
<div class="p-4">
|
|
352
|
+
<p class="text-sm">This popover has a warning color!</p>
|
|
353
|
+
</div>
|
|
354
|
+
</MazPopover>
|
|
355
|
+
</template>
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
## Tooltip role
|
|
359
|
+
|
|
360
|
+
A directive is available to more easily add a tooltip to an element, see [vTooltip](../directives/tooltip.md) for more information.
|
|
361
|
+
|
|
362
|
+
```vue
|
|
363
|
+
<template>
|
|
364
|
+
<MazPopover role="tooltip" trigger="hover" position="top">
|
|
365
|
+
<template #trigger>
|
|
366
|
+
<MazBtn color="info">
|
|
367
|
+
Hover for tooltip
|
|
368
|
+
</MazBtn>
|
|
369
|
+
</template>
|
|
370
|
+
<div class="p-2">
|
|
371
|
+
<p class="text-xs">This is a tooltip with proper ARIA attributes</p>
|
|
372
|
+
</div>
|
|
373
|
+
</MazPopover>
|
|
374
|
+
<MazPopover
|
|
375
|
+
role="tooltip"
|
|
376
|
+
trigger="hover"
|
|
377
|
+
position="bottom"
|
|
378
|
+
panel-class="bg-gray-800! text-white! border-gray-700!"
|
|
379
|
+
>
|
|
380
|
+
<template #trigger>
|
|
381
|
+
<span class="underline cursor-help">
|
|
382
|
+
Hover this text
|
|
383
|
+
</span>
|
|
384
|
+
</template>
|
|
385
|
+
<div class="p-2">
|
|
386
|
+
<p class="text-xs">Custom styled tooltip</p>
|
|
387
|
+
</div>
|
|
388
|
+
</MazPopover>
|
|
389
|
+
<MazPopover
|
|
390
|
+
role="tooltip"
|
|
391
|
+
trigger="hover"
|
|
392
|
+
:delay="1000"
|
|
393
|
+
position="right"
|
|
394
|
+
>
|
|
395
|
+
<template #trigger>
|
|
396
|
+
<MazInformationCircle class="cursor-help text-info text-xl" />
|
|
397
|
+
</template>
|
|
398
|
+
<div class="p-2 max-w-48">
|
|
399
|
+
<p class="text-xs">This tooltip has a 1000ms delay before showing</p>
|
|
400
|
+
</div>
|
|
401
|
+
</MazPopover>
|
|
402
|
+
</template>
|
|
403
|
+
```
|
|
404
|
+
|
|
405
|
+
## Controlled popover
|
|
406
|
+
|
|
407
|
+
```vue
|
|
408
|
+
<script setup>
|
|
409
|
+
import { ref } from 'vue'
|
|
410
|
+
|
|
411
|
+
const isOpen = ref(false)
|
|
412
|
+
</script>
|
|
413
|
+
|
|
414
|
+
<template>
|
|
415
|
+
<MazPopover v-model="isOpen" trigger="manual">
|
|
416
|
+
<template #trigger="{ toggle }">
|
|
417
|
+
<MazBtn @click="toggle">
|
|
418
|
+
Controlled Trigger
|
|
419
|
+
</MazBtn>
|
|
420
|
+
</template>
|
|
421
|
+
<div class="p-4">
|
|
422
|
+
<h4 class="font-semibold mb-2">Controlled Popover</h4>
|
|
423
|
+
<p class="text-sm mb-3">This popover is controlled externally.</p>
|
|
424
|
+
<MazBtn @click="isOpen = false" size="sm" color="destructive">
|
|
425
|
+
Close
|
|
426
|
+
</MazBtn>
|
|
427
|
+
</div>
|
|
428
|
+
</MazPopover>
|
|
429
|
+
<MazBtn @click="isOpen = !isOpen" color="secondary">
|
|
430
|
+
{{ isOpen ? 'Close' : 'Open' }} Popover
|
|
431
|
+
</MazBtn>
|
|
432
|
+
<span class="text-sm text-muted">
|
|
433
|
+
Popover is {{ isOpen ? 'open' : 'closed' }}
|
|
434
|
+
</span>
|
|
435
|
+
|
|
436
|
+
<MazBtn color="secondary" @click="isOpen = !isOpen">
|
|
437
|
+
{{ isOpen ? 'Close' : 'Open' }} Popover
|
|
438
|
+
</MazBtn>
|
|
439
|
+
</template>
|
|
440
|
+
```
|
|
441
|
+
|
|
442
|
+
## Menu example
|
|
443
|
+
|
|
444
|
+
```vue
|
|
445
|
+
<script setup>
|
|
446
|
+
const menuItems = [
|
|
447
|
+
{ label: 'Profile', icon: 'user', action: 'profile' },
|
|
448
|
+
{ label: 'Settings', icon: 'cog-6-tooth', action: 'settings' },
|
|
449
|
+
{ label: 'Sign out', icon: 'arrow-right-on-rectangle', action: 'signout' }
|
|
450
|
+
]
|
|
451
|
+
|
|
452
|
+
function handleMenuClick(action) {
|
|
453
|
+
console.log('Menu action:', action)
|
|
454
|
+
}
|
|
455
|
+
</script>
|
|
456
|
+
|
|
457
|
+
<template>
|
|
458
|
+
<MazPopover position="bottom-start">
|
|
459
|
+
<template #trigger>
|
|
460
|
+
<MazBtn>
|
|
461
|
+
<MazIcon icon="/cog-6-tooth.svg" class="me-2" />
|
|
462
|
+
Settings
|
|
463
|
+
<MazIcon icon="/chevron-down.svg" class="ms-2" />
|
|
464
|
+
</MazBtn>
|
|
465
|
+
</template>
|
|
466
|
+
<div class="py-1 min-w-48">
|
|
467
|
+
<button
|
|
468
|
+
v-for="item in menuItems"
|
|
469
|
+
:key="item.label"
|
|
470
|
+
class="w-full px-4 py-2 text-start text-sm hover:bg-surface-600 dark:hover:bg-surface-400 flex items-center gap-2"
|
|
471
|
+
@click="handleMenuClick(item.action)"
|
|
472
|
+
>
|
|
473
|
+
<MazIcon :icon="item.icon" class="w-4 h-4" />
|
|
474
|
+
{{ item.label }}
|
|
475
|
+
</button>
|
|
476
|
+
</div>
|
|
477
|
+
</MazPopover>
|
|
478
|
+
|
|
479
|
+
<MazPopover position="bottom-end">
|
|
480
|
+
<template #trigger>
|
|
481
|
+
<MazBtn color="transparent" size="sm">
|
|
482
|
+
<MazIcon icon="/ellipsis-vertical.svg" />
|
|
483
|
+
</MazBtn>
|
|
484
|
+
</template>
|
|
485
|
+
<div class="py-1 min-w-32">
|
|
486
|
+
<button class="w-full px-3 py-2 text-start text-sm hover:bg-surface-600 dark:hover:bg-surface-400">
|
|
487
|
+
Edit
|
|
488
|
+
</button>
|
|
489
|
+
<button class="w-full px-3 py-2 text-start text-sm hover:bg-surface-600 dark:hover:bg-surface-400">
|
|
490
|
+
Share
|
|
491
|
+
</button>
|
|
492
|
+
<hr class="my-1 border-divider">
|
|
493
|
+
<button class="w-full px-3 py-2 text-start text-sm hover:bg-surface-600 dark:hover:bg-surface-400 text-destructive">
|
|
494
|
+
Delete
|
|
495
|
+
</button>
|
|
496
|
+
</div>
|
|
497
|
+
</MazPopover>
|
|
498
|
+
</template>
|
|
499
|
+
```
|
|
500
|
+
|
|
501
|
+
## Keep open on hover
|
|
502
|
+
|
|
503
|
+
> With this option, the popover will stay open when you hover over it (a timeout is used to close the popover after a certain time).
|
|
504
|
+
|
|
505
|
+
```vue
|
|
506
|
+
<template>
|
|
507
|
+
<MazPopover position="bottom-end" keep-open-on-hover trigger="hover">
|
|
508
|
+
<template #trigger>
|
|
509
|
+
<MazBtn color="secondary">
|
|
510
|
+
Keep open on hover
|
|
511
|
+
</MazBtn>
|
|
512
|
+
</template>
|
|
513
|
+
<div class="py-1 min-w-32">
|
|
514
|
+
<button class="w-full px-3 py-2 text-start text-sm hover:bg-surface-600 dark:hover:bg-surface-400">
|
|
515
|
+
Edit
|
|
516
|
+
</button>
|
|
517
|
+
<button class="w-full px-3 py-2 text-start text-sm hover:bg-surface-600 dark:hover:bg-surface-400">
|
|
518
|
+
Share
|
|
519
|
+
</button>
|
|
520
|
+
<hr class="my-1 border-divider">
|
|
521
|
+
<button class="w-full px-3 py-2 text-start text-sm hover:bg-surface-600 dark:hover:bg-surface-400 text-destructive">
|
|
522
|
+
Delete
|
|
523
|
+
</button>
|
|
524
|
+
</div>
|
|
525
|
+
</MazPopover>
|
|
526
|
+
</template>
|
|
527
|
+
```
|
|
528
|
+
|
|
529
|
+
## Form example
|
|
530
|
+
|
|
531
|
+
```vue
|
|
532
|
+
<script setup>
|
|
533
|
+
import { reactive } from 'vue'
|
|
534
|
+
|
|
535
|
+
const formData = reactive({
|
|
536
|
+
name: '',
|
|
537
|
+
description: ''
|
|
538
|
+
})
|
|
539
|
+
|
|
540
|
+
function handleSubmit() {
|
|
541
|
+
console.log('Form submitted:', formData)
|
|
542
|
+
resetForm()
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
function resetForm() {
|
|
546
|
+
formData.name = ''
|
|
547
|
+
formData.description = ''
|
|
548
|
+
}
|
|
549
|
+
</script>
|
|
550
|
+
|
|
551
|
+
<template>
|
|
552
|
+
<MazPopover position="bottom-start" :close-on-click-outside="false">
|
|
553
|
+
<template #trigger>
|
|
554
|
+
<MazBtn block>
|
|
555
|
+
<MazIcon icon="/plus.svg" class="me-2" />
|
|
556
|
+
Add Item
|
|
557
|
+
</MazBtn>
|
|
558
|
+
</template>
|
|
559
|
+
<div class="w-80 p-4">
|
|
560
|
+
<h3 class="mb-4 text-lg font-semibold">
|
|
561
|
+
Add New Item
|
|
562
|
+
</h3>
|
|
563
|
+
<form class="space-y-4" @submit.prevent="handleSubmit">
|
|
564
|
+
<MazInput
|
|
565
|
+
v-model="formData.name"
|
|
566
|
+
label="Name"
|
|
567
|
+
placeholder="Enter item name"
|
|
568
|
+
required
|
|
569
|
+
/>
|
|
570
|
+
<MazTextarea
|
|
571
|
+
v-model="formData.description"
|
|
572
|
+
label="Description"
|
|
573
|
+
placeholder="Enter description"
|
|
574
|
+
rows="3"
|
|
575
|
+
/>
|
|
576
|
+
<div class="flex gap-2">
|
|
577
|
+
<MazBtn type="submit" color="success" size="sm">
|
|
578
|
+
Save
|
|
579
|
+
</MazBtn>
|
|
580
|
+
<MazBtn type="button" color="transparent" size="sm" @click="resetForm">
|
|
581
|
+
Reset
|
|
582
|
+
</MazBtn>
|
|
583
|
+
</div>
|
|
584
|
+
</form>
|
|
585
|
+
</div>
|
|
586
|
+
</MazPopover>
|
|
587
|
+
</template>
|
|
588
|
+
```
|
|
589
|
+
|
|
590
|
+
## Configuration options
|
|
591
|
+
|
|
592
|
+
```vue
|
|
593
|
+
<template>
|
|
594
|
+
<!-- Persistent popover -->
|
|
595
|
+
<MazPopover persistent>
|
|
596
|
+
<template #trigger>
|
|
597
|
+
<MazBtn color="warning">
|
|
598
|
+
Persistent Popover
|
|
599
|
+
</MazBtn>
|
|
600
|
+
</template>
|
|
601
|
+
<div class="p-4">
|
|
602
|
+
<p class="mb-3 text-sm">
|
|
603
|
+
This popover won't close on click outside or ESC.
|
|
604
|
+
</p>
|
|
605
|
+
<MazBtn size="sm" color="destructive" @click="close">
|
|
606
|
+
Close manually
|
|
607
|
+
</MazBtn>
|
|
608
|
+
</div>
|
|
609
|
+
</MazPopover>
|
|
610
|
+
|
|
611
|
+
<!-- Custom offset -->
|
|
612
|
+
<MazPopover :offset="20" position="top">
|
|
613
|
+
<template #trigger>
|
|
614
|
+
<MazBtn color="accent">
|
|
615
|
+
Large Offset
|
|
616
|
+
</MazBtn>
|
|
617
|
+
</template>
|
|
618
|
+
<div class="p-3">
|
|
619
|
+
<p class="text-sm">
|
|
620
|
+
20px offset from trigger
|
|
621
|
+
</p>
|
|
622
|
+
</div>
|
|
623
|
+
</MazPopover>
|
|
624
|
+
|
|
625
|
+
<!-- Custom styling -->
|
|
626
|
+
<MazPopover
|
|
627
|
+
panel-class="bg-linear-to-r from-purple-500 to-pink-500 text-white border-none"
|
|
628
|
+
position="bottom"
|
|
629
|
+
>
|
|
630
|
+
<template #trigger>
|
|
631
|
+
<MazBtn color="contrast">
|
|
632
|
+
Styled Popover
|
|
633
|
+
</MazBtn>
|
|
634
|
+
</template>
|
|
635
|
+
<div class="p-4">
|
|
636
|
+
<p class="text-sm font-semibold">
|
|
637
|
+
Beautiful gradient background!
|
|
638
|
+
</p>
|
|
639
|
+
</div>
|
|
640
|
+
</MazPopover>
|
|
641
|
+
|
|
642
|
+
<!-- Disabled -->
|
|
643
|
+
<MazPopover disabled>
|
|
644
|
+
<template #trigger>
|
|
645
|
+
<MazBtn disabled>
|
|
646
|
+
Disabled Popover
|
|
647
|
+
</MazBtn>
|
|
648
|
+
</template>
|
|
649
|
+
<div class="p-3">
|
|
650
|
+
<p class="text-sm">
|
|
651
|
+
This won't show
|
|
652
|
+
</p>
|
|
653
|
+
</div>
|
|
654
|
+
</MazPopover>
|
|
655
|
+
</template>
|
|
656
|
+
```
|
|
657
|
+
|
|
658
|
+
## Events
|
|
659
|
+
|
|
660
|
+
```vue
|
|
661
|
+
<script setup>
|
|
662
|
+
import { ref } from 'vue'
|
|
663
|
+
|
|
664
|
+
const events = ref([])
|
|
665
|
+
|
|
666
|
+
function onOpen() {
|
|
667
|
+
console.log('Popover opened')
|
|
668
|
+
events.value.push({
|
|
669
|
+
type: 'open',
|
|
670
|
+
time: new Date().toLocaleTimeString()
|
|
671
|
+
})
|
|
672
|
+
}
|
|
673
|
+
|
|
674
|
+
function onClose() {
|
|
675
|
+
console.log('Popover closed')
|
|
676
|
+
events.value.push({
|
|
677
|
+
type: 'close',
|
|
678
|
+
time: new Date().toLocaleTimeString()
|
|
679
|
+
})
|
|
680
|
+
}
|
|
681
|
+
|
|
682
|
+
function onToggle(isOpen) {
|
|
683
|
+
console.log('Popover toggled:', isOpen)
|
|
684
|
+
events.value.push({
|
|
685
|
+
type: `toggle (${isOpen ? 'open' : 'close'})`,
|
|
686
|
+
time: new Date().toLocaleTimeString()
|
|
687
|
+
})
|
|
688
|
+
}
|
|
689
|
+
</script>
|
|
690
|
+
|
|
691
|
+
<template>
|
|
692
|
+
<MazPopover
|
|
693
|
+
@open="onOpen"
|
|
694
|
+
@close="onClose"
|
|
695
|
+
@toggle="onToggle"
|
|
696
|
+
>
|
|
697
|
+
<template #trigger>
|
|
698
|
+
<MazBtn>
|
|
699
|
+
Event Example
|
|
700
|
+
</MazBtn>
|
|
701
|
+
</template>
|
|
702
|
+
<div class="p-4">
|
|
703
|
+
<p class="text-sm">
|
|
704
|
+
Check the console for events!
|
|
705
|
+
</p>
|
|
706
|
+
</div>
|
|
707
|
+
</MazPopover>
|
|
708
|
+
</template>
|
|
709
|
+
```
|
|
710
|
+
|
|
711
|
+
## Position values
|
|
712
|
+
|
|
713
|
+
- `auto` - Automatically choose best position
|
|
714
|
+
- `top`, `bottom`, `left`, `right` - Basic positions
|
|
715
|
+
- `top-start`, `top-end` - Top with start/end alignment
|
|
716
|
+
- `bottom-start`, `bottom-end` - Bottom with start/end alignment
|
|
717
|
+
- `left-start`, `left-end` - Left with start/end alignment
|
|
718
|
+
- `right-start`, `right-end` - Right with start/end alignment
|
|
719
|
+
|
|
720
|
+
## Accessibility
|
|
721
|
+
|
|
722
|
+
MazPopover follows WAI-ARIA guidelines:
|
|
723
|
+
|
|
724
|
+
- **Focus management**: Automatically manages focus when opening/closing
|
|
725
|
+
- **Keyboard navigation**: Supports Escape key and Tab navigation
|
|
726
|
+
- **ARIA attributes**: Proper `role`, `aria-modal`, `aria-labelledby`, etc.
|
|
727
|
+
- **Screen reader support**: Appropriate roles for different use cases
|
|
728
|
+
- **Trigger ARIA on the real control**: `aria-expanded`, `aria-haspopup` and `aria-controls` are set on the interactive element of the `trigger` slot (your button, link...), never on a wrapper around it. ARIA attributes you set yourself on that element are kept, and a `combobox` keeps managing its own state. When the slot has no interactive element, the wrapper becomes a focusable `button` (Enter / Space toggle the popover).
|
|
729
|
+
|
|
730
|
+
### Best practices
|
|
731
|
+
|
|
732
|
+
- Use `role="tooltip"` for simple informational overlays
|
|
733
|
+
- Use `role="dialog"` for interactive content
|
|
734
|
+
- Provide meaningful `aria-labelledby` or `aria-describedby` attributes
|
|
735
|
+
- Ensure trigger elements are focusable and have proper labels
|
|
736
|
+
|
|
737
|
+
## MazPopover API
|
|
738
|
+
|
|
739
|
+
`import MazPopover from 'maz-ui/components/MazPopover'`
|
|
740
|
+
|
|
741
|
+
### Props
|
|
742
|
+
|
|
743
|
+
- `model-value` (`boolean`, default: `false`, `v-model`): Controls the popover open state.
|
|
744
|
+
- `position` (`MazPopoverPosition`, default: `"auto"`): Position of the popover relative to trigger - Position of the popover relative to trigger. Values: `'auto'`, `'top'`, `'bottom'`, `'left'`, `'right'`, `'top-start'`, `'top-end'`, `'bottom-start'`, `'bottom-end'`, `'left-start'`, `'left-end'`, `'right-start'`, `'right-end'` (non exhaustive).
|
|
745
|
+
- `prefer-position` (`MazPopoverPreferPosition`, default: `'bottom-start'`): Preferred position of the popover relative to trigger when auto position is used - Preferred position of the popover relative to trigger. Values: `'auto'`, `'top'`, `'bottom'`, `'left'`, `'right'`, `'top-start'`, `'top-end'`, `'bottom-start'`, `'bottom-end'`, `'left-start'`, `'left-end'`, `'right-start'`, `'right-end'` (non exhaustive).
|
|
746
|
+
- `fallback-position` (`MazPopoverFallbackPosition`, default: `auto`): Fallback position of the popover relative to trigger when prefer position is not visible - Fallback position of the popover relative to trigger. Values: `'auto'`, `'top'`, `'bottom'`, `'left'`, `'right'`, `'top-start'`, `'top-end'`, `'bottom-start'`, `'bottom-end'`, `'left-start'`, `'left-end'`, `'right-start'`, `'right-end'` (non exhaustive).
|
|
747
|
+
- `trigger` (`MazPopoverTrigger`, default: `"click"`): How the popover is triggered - How the popover is triggered. 'adaptive' uses hover on desktop and click on mobile. Values: `'click'`, `'hover'`, `'manual'`, `'adaptive'` (non exhaustive).
|
|
748
|
+
- `role` (`MazPopoverRole`, default: `"dialog"`): ARIA role for accessibility - ARIA role for accessibility. Values: `'dialog'`, `'tooltip'` (non exhaustive).
|
|
749
|
+
- `aria-label` (`string`): ARIA label for the popover.
|
|
750
|
+
- `announce-changes` (`boolean`, default: `false`): Announce content changes to screen readers.
|
|
751
|
+
- `disabled` (`boolean`, default: `false`): Disables the popover - Disables the popover.
|
|
752
|
+
- `offset` (`number`, default: `8`): Distance between trigger and popover in pixels.
|
|
753
|
+
- `delay` (`number`, default: `0`): Delay before showing/hiding in milliseconds.
|
|
754
|
+
- `hover-delay` (`number`, default: `150`): Delay before closing on hover in milliseconds.
|
|
755
|
+
- `transition` (`string`, default: `"scale-pop"`): CSS transition name for animations - 'scale-pop' | 'scale-fade' for default transitions. 'scale-pop' is a pop effect, 'scale-fade' is a fade effect. Values: `'scale-pop'`, `'scale-fade'`, `'string'` (non exhaustive).
|
|
756
|
+
- `teleport-to` (`string`, default: `"body"`): Teleport target selector.
|
|
757
|
+
- `overlay-class` (`ClassValue`): Additional CSS classes for the overlay wrapper.
|
|
758
|
+
- `panel-class` (`ClassValue`): Additional CSS classes for the popover panel.
|
|
759
|
+
- `panel-style` (`StyleValue`): Inline styles for the popover panel.
|
|
760
|
+
- `close-on-click-outside` (`boolean`, default: `true`): Close popover when clicking outside.
|
|
761
|
+
- `close-on-escape` (`boolean`, default: `true`): Close popover when pressing Escape key.
|
|
762
|
+
- `persistent` (`boolean`, default: `false`): Prevent auto-close (ignores click outside and escape key).
|
|
763
|
+
- `id` (`string`): Custom ID for the popover element.
|
|
764
|
+
- `aria-labelledby` (`string`): ARIA labelledby attribute for accessibility.
|
|
765
|
+
- `aria-describedby` (`string`): ARIA describedby attribute for accessibility.
|
|
766
|
+
- `color` (`"primary" | "secondary" | "accent" | "info" | "success" | "warning" | "destructive" | "contrast" | "transparent" | "surface"`, default: `"surface"`): Color variant of the popover.
|
|
767
|
+
- `trap-focus` (`boolean`, default: `true`): Trap focus inside the popover.
|
|
768
|
+
- `keep-open-on-hover` (`boolean`, default: `false`): Keep popover open when hovering over the panel.
|
|
769
|
+
- `block` (`boolean`, default: `false`): The popover will be full width of the trigger.
|
|
770
|
+
- `position-reference` (`string | HTMLElement`): CSS selector or element reference to use for positioning calculations - When provided, the popover will position relative to this element instead of the trigger Useful for components with labels where you want to position relative to the actual input.
|
|
771
|
+
|
|
772
|
+
### Events
|
|
773
|
+
|
|
774
|
+
- `@update:model-value` (payload: `value: boolean`): Emitted when popover state changes
|
|
775
|
+
- `@open`: Emitted when popover opens
|
|
776
|
+
- `@close`: Emitted when popover closes
|
|
777
|
+
- `@toggle` (payload: `value: boolean`): Emitted when popover toggles
|
|
778
|
+
- `@update:modelValue` (payload: `value: boolean`)
|
|
779
|
+
- `@after-close-animation`: Emitted after the close animation
|
|
780
|
+
|
|
781
|
+
### Slots
|
|
782
|
+
|
|
783
|
+
- `#trigger`: Trigger element content Bindings: `open: () => void` (Function to open the popover), `close: () => void` (Function to close the popover), `toggle: () => void` (Function to toggle the popover), `isOpen: boolean` (Current open state of the popover), `trigger: "click" | "hover" | "manual"` (The trigger type).
|
|
784
|
+
- `#default`: Popover content Bindings: `open: () => void` (Function to open the popover), `close: () => void` (Function to close the popover), `toggle: () => void` (Function to toggle the popover), `isOpen: true` (Current open state of the popover).
|
|
785
|
+
|
|
786
|
+
### Exposed (template ref)
|
|
787
|
+
|
|
788
|
+
- `open`: Open the popover
|
|
789
|
+
- `close`: Close the popover
|
|
790
|
+
- `toggle`: Toggle the popover
|
|
791
|
+
- `isOpen`: Check if the popover is open
|
|
792
|
+
- `updatePosition`: Update the popover position
|
|
793
|
+
- `panelRef`: Panel reference
|
|
794
|
+
- `onTransitionAfterLeave`
|