@maz-ui/mcp 5.0.1-beta.0 → 5.1.0-beta.1
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 +16 -0
- package/dist/index.d.mts +345 -0
- package/dist/index.d.ts +345 -0
- package/dist/index.mjs +16 -0
- package/dist/shared/mcp.DseFuKdl.mjs +2968 -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 +78 -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 +27 -189
- package/docs/{src/components → components}/maz-btn.md +62 -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 +107 -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 +48 -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 +21 -15
- 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 +50 -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 +239 -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 +507 -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 +59 -0
- package/package.json +86 -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
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
---
|
|
2
|
-
title: snakeCase
|
|
3
|
-
description: Convert any common string casing to snake_case
|
|
2
|
+
title: "snakeCase"
|
|
3
|
+
description: "Convert any common string casing to snake_case - handles camelCase, PascalCase, kebab-case, spaces and consecutive capitals."
|
|
4
|
+
package: "@maz-ui/utils"
|
|
5
|
+
url: "https://maz-ui.com/ecosystem/utils/snake-case"
|
|
4
6
|
---
|
|
5
7
|
|
|
6
|
-
#
|
|
8
|
+
# snakeCase
|
|
7
9
|
|
|
8
|
-
|
|
10
|
+
> Convert any common string casing to snake_case - handles camelCase, PascalCase, kebab-case, spaces and consecutive capitals.
|
|
11
|
+
|
|
12
|
+
- Package: `@maz-ui/utils`
|
|
13
|
+
- Import: `import { snakeCase } from '@maz-ui/utils/helpers/snakeCase'`
|
|
14
|
+
- Web: https://maz-ui.com/ecosystem/utils/snake-case
|
|
9
15
|
|
|
10
16
|
## Usage
|
|
11
17
|
|
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
---
|
|
2
|
-
title: Swipe
|
|
3
|
-
description: Detect directional touch swipes on an element with configurable threshold and optional mouse-wheel guards.
|
|
2
|
+
title: "Swipe"
|
|
3
|
+
description: "Detect directional touch swipes on an element with configurable threshold and optional mouse-wheel guards."
|
|
4
|
+
package: "@maz-ui/utils"
|
|
5
|
+
url: "https://maz-ui.com/ecosystem/utils/swipe-handler"
|
|
4
6
|
---
|
|
5
7
|
|
|
6
|
-
#
|
|
8
|
+
# Swipe
|
|
7
9
|
|
|
8
|
-
|
|
10
|
+
> Detect directional touch swipes on an element with configurable threshold and optional mouse-wheel guards.
|
|
11
|
+
|
|
12
|
+
- Package: `@maz-ui/utils`
|
|
13
|
+
- Import: `import { Swipe } from '@maz-ui/utils/helpers/swipeHandler'`
|
|
14
|
+
- Web: https://maz-ui.com/ecosystem/utils/swipe-handler
|
|
9
15
|
|
|
10
16
|
`Swipe` attaches touch listeners to a DOM element and fires callbacks for left, right, up and down swipes once a configurable distance threshold is crossed.
|
|
11
17
|
|
|
@@ -49,8 +55,8 @@ class Swipe {
|
|
|
49
55
|
| ---------------------------- | ----------------------------------- | ------- | -------------------------------------------------------------------------- |
|
|
50
56
|
| `element` | `HTMLElement \| string \| null` | `null` | Target element or CSS selector. |
|
|
51
57
|
| `threshold` | `number` | `50` | Minimum distance in px before a swipe is recognised. |
|
|
52
|
-
| `onLeft` / `onRight` / `onUp` / `onDown` | `(event: TouchEvent) => void` |
|
|
53
|
-
| `onValuesChanged` | `(values: SwipeValues) => void` |
|
|
58
|
+
| `onLeft` / `onRight` / `onUp` / `onDown` | `(event: TouchEvent) => void` | - | Direction callbacks. |
|
|
59
|
+
| `onValuesChanged` | `(values: SwipeValues) => void` | - | Fires whenever start/end/diff values are updated - useful for live tracking. |
|
|
54
60
|
| `preventDefaultOnTouchMove` | `boolean` | `false` | Calls `event.preventDefault()` on `touchmove`. |
|
|
55
61
|
| `preventDefaultOnMouseWheel` | `boolean` | `false` | Calls `event.preventDefault()` on `mousewheel`. |
|
|
56
62
|
| `immediate` | `boolean` | `false` | Attach listeners immediately from the constructor. |
|
|
@@ -58,8 +64,8 @@ class Swipe {
|
|
|
58
64
|
|
|
59
65
|
### Methods
|
|
60
66
|
|
|
61
|
-
- **`start(element?)`**
|
|
62
|
-
- **`stop()`**
|
|
67
|
+
- **`start(element?)`** - Begin listening. Optionally re-target a new element.
|
|
68
|
+
- **`stop()`** - Detach all listeners. Live values reset.
|
|
63
69
|
|
|
64
70
|
## Examples
|
|
65
71
|
|
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
---
|
|
2
|
-
title: TextareaAutogrow
|
|
3
|
-
description: Automatically resize a `<textarea>` element to fit its content as the user types or the window resizes.
|
|
2
|
+
title: "TextareaAutogrow"
|
|
3
|
+
description: "Automatically resize a `<textarea>` element to fit its content as the user types or the window resizes."
|
|
4
|
+
package: "@maz-ui/utils"
|
|
5
|
+
url: "https://maz-ui.com/ecosystem/utils/textarea-autogrow"
|
|
4
6
|
---
|
|
5
7
|
|
|
6
|
-
#
|
|
8
|
+
# TextareaAutogrow
|
|
7
9
|
|
|
8
|
-
|
|
10
|
+
> Automatically resize a `<textarea>` element to fit its content as the user types or the window resizes.
|
|
11
|
+
|
|
12
|
+
- Package: `@maz-ui/utils`
|
|
13
|
+
- Import: `import { TextareaAutogrow } from '@maz-ui/utils/helpers/TextareaAutogrow'`
|
|
14
|
+
- Web: https://maz-ui.com/ecosystem/utils/textarea-autogrow
|
|
9
15
|
|
|
10
16
|
The helper disables manual resize, sets `box-sizing: border-box`, and updates `height` to match `scrollHeight` on input and (debounced) on window resize.
|
|
11
17
|
|
|
@@ -36,6 +42,6 @@ class TextareaAutogrow {
|
|
|
36
42
|
|
|
37
43
|
## Notes
|
|
38
44
|
|
|
39
|
-
- Listeners are attached on first focus
|
|
45
|
+
- Listeners are attached on first focus - until then, the textarea is fully styled but the height isn't yet computed.
|
|
40
46
|
- Resize updates are debounced by 200 ms.
|
|
41
|
-
-
|
|
47
|
+
- In a Vue app, use [`MazTextarea`](../../components/maz-textarea.md): it grows with its content.
|
|
@@ -1,13 +1,19 @@
|
|
|
1
1
|
---
|
|
2
|
-
title: throttleId
|
|
3
|
-
description: Throttle an async function with isolated state per identifier
|
|
2
|
+
title: "throttleId"
|
|
3
|
+
description: "Throttle an async function with isolated state per identifier - runs immediately, then at most once per interval."
|
|
4
|
+
package: "@maz-ui/utils"
|
|
5
|
+
url: "https://maz-ui.com/ecosystem/utils/throttle-id"
|
|
4
6
|
---
|
|
5
7
|
|
|
6
|
-
#
|
|
8
|
+
# throttleId
|
|
7
9
|
|
|
8
|
-
|
|
10
|
+
> Throttle an async function with isolated state per identifier - runs immediately, then at most once per interval.
|
|
9
11
|
|
|
10
|
-
|
|
12
|
+
- Package: `@maz-ui/utils`
|
|
13
|
+
- Import: `import { throttleId } from '@maz-ui/utils/helpers/throttleId'`
|
|
14
|
+
- Web: https://maz-ui.com/ecosystem/utils/throttle-id
|
|
15
|
+
|
|
16
|
+
`throttleId` is the async, keyed counterpart of [`throttle`](./throttle.md). The first call runs immediately and returns its promise; further calls within `interval` are coalesced and resolve to the result of the last replayed call.
|
|
11
17
|
|
|
12
18
|
## Usage
|
|
13
19
|
|
|
@@ -44,5 +50,5 @@ function throttleId<T, Args extends unknown[]>(
|
|
|
44
50
|
|
|
45
51
|
## Related
|
|
46
52
|
|
|
47
|
-
- [`debounceId`](./debounce-id)
|
|
48
|
-
- [`throttle`](./throttle)
|
|
53
|
+
- [`debounceId`](./debounce-id.md) - wait for silence instead of rate-limiting.
|
|
54
|
+
- [`throttle`](./throttle.md) - non-async, single-instance throttle.
|
|
@@ -1,13 +1,19 @@
|
|
|
1
1
|
---
|
|
2
|
-
title: throttle
|
|
3
|
-
description: Wrap a function so it runs immediately, then at most once every N milliseconds
|
|
2
|
+
title: "throttle"
|
|
3
|
+
description: "Wrap a function so it runs immediately, then at most once every N milliseconds - perfect for scroll, mousemove and resize handlers."
|
|
4
|
+
package: "@maz-ui/utils"
|
|
5
|
+
url: "https://maz-ui.com/ecosystem/utils/throttle"
|
|
4
6
|
---
|
|
5
7
|
|
|
6
|
-
#
|
|
8
|
+
# throttle
|
|
7
9
|
|
|
8
|
-
|
|
10
|
+
> Wrap a function so it runs immediately, then at most once every N milliseconds - perfect for scroll, mousemove and resize handlers.
|
|
9
11
|
|
|
10
|
-
|
|
12
|
+
- Package: `@maz-ui/utils`
|
|
13
|
+
- Import: `import { throttle } from '@maz-ui/utils/helpers/throttle'`
|
|
14
|
+
- Web: https://maz-ui.com/ecosystem/utils/throttle
|
|
15
|
+
|
|
16
|
+
Unlike [`debounce`](./debounce.md) - which waits for a quiet period - `throttle` lets the first call through and rate-limits the rest.
|
|
11
17
|
|
|
12
18
|
## Usage
|
|
13
19
|
|
|
@@ -35,7 +41,7 @@ function throttle<T extends (...args: any[]) => any>(
|
|
|
35
41
|
| `func` | `Function` | The function to throttle |
|
|
36
42
|
| `limit` | `number` | Minimum interval between executions, in ms |
|
|
37
43
|
|
|
38
|
-
The first call always runs immediately. Subsequent calls within `limit` are coalesced
|
|
44
|
+
The first call always runs immediately. Subsequent calls within `limit` are coalesced - only the most recent set of arguments is replayed once the window elapses.
|
|
39
45
|
|
|
40
46
|
## Examples
|
|
41
47
|
|
|
@@ -53,5 +59,5 @@ window.addEventListener('resize', onResize)
|
|
|
53
59
|
|
|
54
60
|
## Related
|
|
55
61
|
|
|
56
|
-
- [`throttleId`](./throttle-id)
|
|
57
|
-
- [`debounce`](./debounce)
|
|
62
|
+
- [`throttleId`](./throttle-id.md) - per-key throttle for async functions, returning a promise.
|
|
63
|
+
- [`debounce`](./debounce.md) - fires only once activity stops.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "truthyFilter"
|
|
3
|
+
description: "Type guard that filters out falsy values (`false`, `''`, `0`, `null`, `undefined`) while narrowing the TypeScript type."
|
|
4
|
+
package: "@maz-ui/utils"
|
|
5
|
+
url: "https://maz-ui.com/ecosystem/utils/truthy-filter"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# truthyFilter
|
|
9
|
+
|
|
10
|
+
> Type guard that filters out falsy values (`false`, `''`, `0`, `null`, `undefined`) while narrowing the TypeScript type.
|
|
11
|
+
|
|
12
|
+
- Package: `@maz-ui/utils`
|
|
13
|
+
- Import: `import { truthyFilter } from '@maz-ui/utils/helpers/truthyFilter'`
|
|
14
|
+
- Web: https://maz-ui.com/ecosystem/utils/truthy-filter
|
|
15
|
+
|
|
16
|
+
Pass it directly to `Array.prototype.filter` to drop nullish/empty entries while telling TypeScript the result no longer contains those types.
|
|
17
|
+
|
|
18
|
+
## Usage
|
|
19
|
+
|
|
20
|
+
```ts
|
|
21
|
+
import { truthyFilter } from '@maz-ui/utils'
|
|
22
|
+
|
|
23
|
+
const items: (string | null | undefined)[] = ['a', null, 'b', undefined, '']
|
|
24
|
+
const cleaned = items.filter(truthyFilter)
|
|
25
|
+
// cleaned has type string[]
|
|
26
|
+
// cleaned = ['a', 'b']
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## API
|
|
30
|
+
|
|
31
|
+
```ts
|
|
32
|
+
type Truthy<T> = T extends false | '' | 0 | null | undefined ? never : T
|
|
33
|
+
|
|
34
|
+
function truthyFilter<T>(value: T): value is Truthy<T>
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
The function returns `Boolean(value)` - its real value is in the type predicate, which narrows away the falsy variants for downstream type-checking.
|
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
---
|
|
2
|
-
title: DeepKeyOf
|
|
3
|
-
description: Recursively build a union of dot-separated key paths for any nested object type.
|
|
2
|
+
title: "DeepKeyOf"
|
|
3
|
+
description: "Recursively build a union of dot-separated key paths for any nested object type."
|
|
4
|
+
package: "@maz-ui/utils"
|
|
5
|
+
url: "https://maz-ui.com/ecosystem/utils/types/deep-key-of"
|
|
4
6
|
---
|
|
5
7
|
|
|
6
|
-
#
|
|
8
|
+
# DeepKeyOf
|
|
7
9
|
|
|
8
|
-
|
|
10
|
+
> Recursively build a union of dot-separated key paths for any nested object type.
|
|
11
|
+
|
|
12
|
+
- Package: `@maz-ui/utils`
|
|
13
|
+
- Import: `import type { DeepKeyOf } from '@maz-ui/utils/ts-helpers/DeepKeyOf'`
|
|
14
|
+
- Web: https://maz-ui.com/ecosystem/utils/types/deep-key-of
|
|
9
15
|
|
|
10
16
|
Use it to type i18n keys, nested form paths, or any string that must reference a leaf of a known object shape.
|
|
11
17
|
|
|
@@ -44,5 +50,5 @@ type DeepKeyOf<T> = T extends object
|
|
|
44
50
|
|
|
45
51
|
## Notes
|
|
46
52
|
|
|
47
|
-
- Numeric and symbol keys are excluded
|
|
53
|
+
- Numeric and symbol keys are excluded - only `string`-keyed properties are walked.
|
|
48
54
|
- Array types are objects, so `DeepKeyOf<{ items: string[] }>` produces `'items.0' | 'items.1' | …` only if the array has tuple typing. With a regular `string[]`, the recursion terminates at `'items'`.
|
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
---
|
|
2
|
-
title: DeepPartial
|
|
3
|
-
description: Recursive variant of TypeScript's `Partial<T>`
|
|
2
|
+
title: "DeepPartial"
|
|
3
|
+
description: "Recursive variant of TypeScript's `Partial<T>` - every property at every depth becomes optional."
|
|
4
|
+
package: "@maz-ui/utils"
|
|
5
|
+
url: "https://maz-ui.com/ecosystem/utils/types/deep-partial"
|
|
4
6
|
---
|
|
5
7
|
|
|
6
|
-
#
|
|
8
|
+
# DeepPartial
|
|
7
9
|
|
|
8
|
-
|
|
10
|
+
> Recursive variant of TypeScript's `Partial<T>` - every property at every depth becomes optional.
|
|
11
|
+
|
|
12
|
+
- Package: `@maz-ui/utils`
|
|
13
|
+
- Import: `import type { DeepPartial } from '@maz-ui/utils/ts-helpers/DeepPartial'`
|
|
14
|
+
- Web: https://maz-ui.com/ecosystem/utils/types/deep-partial
|
|
9
15
|
|
|
10
16
|
## Usage
|
|
11
17
|
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "DeepRequired"
|
|
3
|
+
description: "Recursive variant of TypeScript's `Required<T>` - strips `?` from every property at every depth."
|
|
4
|
+
package: "@maz-ui/utils"
|
|
5
|
+
url: "https://maz-ui.com/ecosystem/utils/types/deep-required"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# DeepRequired
|
|
9
|
+
|
|
10
|
+
> Recursive variant of TypeScript's `Required<T>` - strips `?` from every property at every depth.
|
|
11
|
+
|
|
12
|
+
- Package: `@maz-ui/utils`
|
|
13
|
+
- Import: `import type { DeepRequired } from '@maz-ui/utils/ts-helpers/DeepRequired'`
|
|
14
|
+
- Web: https://maz-ui.com/ecosystem/utils/types/deep-required
|
|
15
|
+
|
|
16
|
+
The mirror image of [`DeepPartial`](./deep-partial.md). Useful when you want a fully-resolved internal type derived from a public options interface.
|
|
17
|
+
|
|
18
|
+
## Usage
|
|
19
|
+
|
|
20
|
+
```ts
|
|
21
|
+
import type { DeepRequired } from '@maz-ui/utils'
|
|
22
|
+
|
|
23
|
+
interface Options {
|
|
24
|
+
cache?: {
|
|
25
|
+
ttl?: number
|
|
26
|
+
strategy?: 'memory' | 'disk'
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
type ResolvedOptions = DeepRequired<Options>
|
|
31
|
+
// {
|
|
32
|
+
// cache: {
|
|
33
|
+
// ttl: number
|
|
34
|
+
// strategy: 'memory' | 'disk'
|
|
35
|
+
// }
|
|
36
|
+
// }
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## API
|
|
40
|
+
|
|
41
|
+
```ts
|
|
42
|
+
type DeepRequired<T> = Required<{
|
|
43
|
+
[K in keyof T]: T[K] extends Required<T[K]> ? T[K] : DeepRequired<T[K]>
|
|
44
|
+
}>
|
|
45
|
+
```
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "FlattenObjectKeys"
|
|
3
|
+
description: "Build a union of dot-separated leaf paths for a nested object, with an optional prefix."
|
|
4
|
+
package: "@maz-ui/utils"
|
|
5
|
+
url: "https://maz-ui.com/ecosystem/utils/types/flatten-object-keys"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# FlattenObjectKeys
|
|
9
|
+
|
|
10
|
+
> Build a union of dot-separated leaf paths for a nested object, with an optional prefix.
|
|
11
|
+
|
|
12
|
+
- Package: `@maz-ui/utils`
|
|
13
|
+
- Import: `import type { FlattenObjectKeys } from '@maz-ui/utils/ts-helpers/FlattenObjectKeys'`
|
|
14
|
+
- Web: https://maz-ui.com/ecosystem/utils/types/flatten-object-keys
|
|
15
|
+
|
|
16
|
+
Similar to [`DeepKeyOf`](./deep-key-of.md) but only yields **leaf** paths (skips intermediate object keys), and accepts a `Prefix` parameter for namespacing.
|
|
17
|
+
|
|
18
|
+
## Usage
|
|
19
|
+
|
|
20
|
+
```ts
|
|
21
|
+
import type { FlattenObjectKeys } from '@maz-ui/utils'
|
|
22
|
+
|
|
23
|
+
interface Config {
|
|
24
|
+
app: {
|
|
25
|
+
name: string
|
|
26
|
+
version: number
|
|
27
|
+
}
|
|
28
|
+
debug: boolean
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
type Leaves = FlattenObjectKeys<Config>
|
|
32
|
+
// → 'app.name' | 'app.version' | 'debug'
|
|
33
|
+
|
|
34
|
+
type Namespaced = FlattenObjectKeys<Config, 'config.'>
|
|
35
|
+
// → 'config.app.name' | 'config.app.version' | 'config.debug'
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## API
|
|
39
|
+
|
|
40
|
+
```ts
|
|
41
|
+
type FlattenObjectKeys<T extends Record<string, any>, Prefix extends string = ''> = {
|
|
42
|
+
[K in keyof T]: T[K] extends Record<string, any>
|
|
43
|
+
? FlattenObjectKeys<T[K], `${Prefix}${K extends string ? K : ''}.`>
|
|
44
|
+
: `${Prefix}${K extends string ? K : ''}`
|
|
45
|
+
}[keyof T]
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Notes
|
|
49
|
+
|
|
50
|
+
- Unlike `DeepKeyOf`, intermediate object keys (e.g. `'app'` in the example) are not included - only the paths that resolve to non-object leaves.
|
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
---
|
|
2
|
-
title: GenericInstanceType
|
|
3
|
-
description: Extract the public instance type from a generic Vue component
|
|
2
|
+
title: "GenericInstanceType"
|
|
3
|
+
description: "Extract the public instance type from a generic Vue component - solves the limitation where `InstanceType<typeof Component>` returns `any` for generic SFCs."
|
|
4
|
+
package: "@maz-ui/utils"
|
|
5
|
+
url: "https://maz-ui.com/ecosystem/utils/types/generic-instance-type"
|
|
4
6
|
---
|
|
5
7
|
|
|
6
|
-
#
|
|
8
|
+
# GenericInstanceType
|
|
7
9
|
|
|
8
|
-
|
|
10
|
+
> Extract the public instance type from a generic Vue component - solves the limitation where `InstanceType<typeof Component>` returns `any` for generic SFCs.
|
|
11
|
+
|
|
12
|
+
- Package: `@maz-ui/utils`
|
|
13
|
+
- Import: `import type { GenericInstanceType } from '@maz-ui/utils/ts-helpers/GenericInstanceType'`
|
|
14
|
+
- Web: https://maz-ui.com/ecosystem/utils/types/generic-instance-type
|
|
9
15
|
|
|
10
16
|
Vue's `InstanceType<typeof Component>` does not work on **generic** components (`<script setup lang="ts" generic="T">`). `GenericInstanceType` walks the type to recover the exposed methods/refs typing.
|
|
11
17
|
|
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
---
|
|
2
|
-
title: InferMaybeRef
|
|
3
|
-
description: Unwrap a Vue `Ref<U>` to its inner `U`
|
|
2
|
+
title: "InferMaybeRef"
|
|
3
|
+
description: "Unwrap a Vue `Ref<U>` to its inner `U` - leaves non-ref types unchanged."
|
|
4
|
+
package: "@maz-ui/utils"
|
|
5
|
+
url: "https://maz-ui.com/ecosystem/utils/types/infer-maybe-ref"
|
|
4
6
|
---
|
|
5
7
|
|
|
6
|
-
#
|
|
8
|
+
# InferMaybeRef
|
|
7
9
|
|
|
8
|
-
|
|
10
|
+
> Unwrap a Vue `Ref<U>` to its inner `U` - leaves non-ref types unchanged.
|
|
11
|
+
|
|
12
|
+
- Package: `@maz-ui/utils`
|
|
13
|
+
- Import: `import type { InferMaybeRef } from '@maz-ui/utils/ts-helpers/InferMaybeRef'`
|
|
14
|
+
- Web: https://maz-ui.com/ecosystem/utils/types/infer-maybe-ref
|
|
9
15
|
|
|
10
16
|
Useful when authoring composables that accept either a plain value or a `Ref`, and you want a unified type for the inner value.
|
|
11
17
|
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "upperFirst"
|
|
3
|
+
description: "Uppercase the first character of a string and leave the rest unchanged."
|
|
4
|
+
package: "@maz-ui/utils"
|
|
5
|
+
url: "https://maz-ui.com/ecosystem/utils/upper-first"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# upperFirst
|
|
9
|
+
|
|
10
|
+
> Uppercase the first character of a string and leave the rest unchanged.
|
|
11
|
+
|
|
12
|
+
- Package: `@maz-ui/utils`
|
|
13
|
+
- Import: `import { upperFirst } from '@maz-ui/utils/helpers/upperFirst'`
|
|
14
|
+
- Web: https://maz-ui.com/ecosystem/utils/upper-first
|
|
15
|
+
|
|
16
|
+
## Usage
|
|
17
|
+
|
|
18
|
+
```ts
|
|
19
|
+
import { upperFirst } from '@maz-ui/utils'
|
|
20
|
+
|
|
21
|
+
upperFirst('hello') // → 'Hello'
|
|
22
|
+
upperFirst('hELLO') // → 'HELLO'
|
|
23
|
+
upperFirst('') // → ''
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## API
|
|
27
|
+
|
|
28
|
+
```ts
|
|
29
|
+
function upperFirst(value: string): string
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
| Parameter | Type | Description |
|
|
33
|
+
| --------- | -------- | --------------------- |
|
|
34
|
+
| `value` | `string` | The string to process |
|
|
35
|
+
|
|
36
|
+
## Notes
|
|
37
|
+
|
|
38
|
+
- Does **not** lowercase the remaining characters - use [`capitalize`](./capitalize.md) for the same behaviour when you control the input shape.
|
|
@@ -1,13 +1,19 @@
|
|
|
1
1
|
---
|
|
2
|
-
title: UserVisibility
|
|
3
|
-
description: Track whether the user is currently looking at the tab using the Page Visibility API, with an optional grace timeout before declaring them away.
|
|
2
|
+
title: "UserVisibility"
|
|
3
|
+
description: "Track whether the user is currently looking at the tab using the Page Visibility API, with an optional grace timeout before declaring them away."
|
|
4
|
+
package: "@maz-ui/utils"
|
|
5
|
+
url: "https://maz-ui.com/ecosystem/utils/user-visibility"
|
|
4
6
|
---
|
|
5
7
|
|
|
6
|
-
#
|
|
8
|
+
# UserVisibility
|
|
7
9
|
|
|
8
|
-
|
|
10
|
+
> Track whether the user is currently looking at the tab using the Page Visibility API, with an optional grace timeout before declaring them away.
|
|
9
11
|
|
|
10
|
-
|
|
12
|
+
- Package: `@maz-ui/utils`
|
|
13
|
+
- Import: `import { UserVisibility } from '@maz-ui/utils/helpers/userVisibility'`
|
|
14
|
+
- Web: https://maz-ui.com/ecosystem/utils/user-visibility
|
|
15
|
+
|
|
16
|
+
`UserVisibility` listens to `visibilitychange` events. When the tab becomes hidden, it waits `timeout` ms before invoking the callback with `isVisible: false` - this avoids spurious switches when the user briefly tabs away.
|
|
11
17
|
|
|
12
18
|
## Usage
|
|
13
19
|
|
|
@@ -66,4 +72,4 @@ new UserVisibility(
|
|
|
66
72
|
|
|
67
73
|
## Related
|
|
68
74
|
|
|
69
|
-
- [`IdleTimeout`](./idle-timeout)
|
|
75
|
+
- [`IdleTimeout`](./idle-timeout.md) - track in-page activity instead of tab visibility.
|