quasar 2.19.3 → 2.20.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/dist/api/Lang.json +1 -1
- package/dist/api/QCarouselSlide.json +1 -1
- package/dist/api/QChatMessage.json +1 -1
- package/dist/api/QImg.json +1 -1
- package/dist/api/QParallax.json +1 -1
- package/dist/api/QRange.json +1 -1
- package/dist/api/QSlider.json +1 -1
- package/dist/api/QTimelineEntry.json +1 -1
- package/dist/api/QTree.json +1 -1
- package/dist/icon-set/bootstrap-icons.umd.prod.js +1 -1
- package/dist/icon-set/eva-icons.umd.prod.js +2 -2
- package/dist/icon-set/fontawesome-v5-pro.umd.prod.js +5 -5
- package/dist/icon-set/fontawesome-v5.umd.prod.js +5 -5
- package/dist/icon-set/fontawesome-v6-pro.umd.prod.js +5 -5
- package/dist/icon-set/fontawesome-v6.umd.prod.js +5 -5
- package/dist/icon-set/fontawesome-v7-pro.umd.prod.js +1 -1
- package/dist/icon-set/fontawesome-v7.umd.prod.js +1 -1
- package/dist/icon-set/ionicons-v4.umd.prod.js +1 -1
- package/dist/icon-set/line-awesome.umd.prod.js +1 -1
- package/dist/icon-set/material-icons-outlined.umd.prod.js +1 -1
- package/dist/icon-set/material-icons-round.umd.prod.js +1 -1
- package/dist/icon-set/material-icons-sharp.umd.prod.js +1 -1
- package/dist/icon-set/material-icons.umd.prod.js +1 -1
- package/dist/icon-set/material-symbols-outlined.umd.prod.js +1 -1
- package/dist/icon-set/material-symbols-rounded.umd.prod.js +1 -1
- package/dist/icon-set/material-symbols-sharp.umd.prod.js +1 -1
- package/dist/icon-set/mdi-v3.umd.prod.js +5 -5
- package/dist/icon-set/mdi-v4.umd.prod.js +5 -5
- package/dist/icon-set/mdi-v5.umd.prod.js +5 -5
- package/dist/icon-set/mdi-v6.umd.prod.js +5 -5
- package/dist/icon-set/mdi-v7.umd.prod.js +1 -1
- package/dist/icon-set/svg-bootstrap-icons.umd.prod.js +1 -1
- package/dist/icon-set/svg-eva-icons.umd.prod.js +2 -2
- package/dist/icon-set/svg-fontawesome-v5.umd.prod.js +5 -5
- package/dist/icon-set/svg-fontawesome-v6.umd.prod.js +5 -5
- package/dist/icon-set/svg-fontawesome-v7.umd.prod.js +1 -1
- package/dist/icon-set/svg-ionicons-v4.umd.prod.js +1 -1
- package/dist/icon-set/svg-ionicons-v5.umd.prod.js +5 -5
- package/dist/icon-set/svg-ionicons-v6.umd.prod.js +5 -5
- package/dist/icon-set/svg-ionicons-v7.umd.prod.js +5 -5
- package/dist/icon-set/svg-ionicons-v8.umd.prod.js +1 -1
- package/dist/icon-set/svg-line-awesome.umd.prod.js +1 -1
- package/dist/icon-set/svg-material-icons-outlined.umd.prod.js +1 -1
- package/dist/icon-set/svg-material-icons-round.umd.prod.js +1 -1
- package/dist/icon-set/svg-material-icons-sharp.umd.prod.js +1 -1
- package/dist/icon-set/svg-material-icons.umd.prod.js +1 -1
- package/dist/icon-set/svg-material-symbols-outlined.umd.prod.js +1 -1
- package/dist/icon-set/svg-material-symbols-rounded.umd.prod.js +1 -1
- package/dist/icon-set/svg-material-symbols-sharp.umd.prod.js +1 -1
- package/dist/icon-set/svg-mdi-v6.umd.prod.js +5 -5
- package/dist/icon-set/svg-mdi-v7.umd.prod.js +1 -1
- package/dist/icon-set/svg-themify.umd.prod.js +2 -2
- package/dist/icon-set/themify.umd.prod.js +2 -2
- package/dist/lang/ar-TN.umd.prod.js +2 -2
- package/dist/lang/ar.umd.prod.js +2 -2
- package/dist/lang/az-Latn.umd.prod.js +2 -2
- package/dist/lang/bg.umd.prod.js +2 -2
- package/dist/lang/bn.umd.prod.js +2 -2
- package/dist/lang/bs-BA.umd.prod.js +2 -2
- package/dist/lang/ca.umd.prod.js +2 -2
- package/dist/lang/cs.umd.prod.js +2 -2
- package/dist/lang/da.umd.prod.js +2 -2
- package/dist/lang/de-CH.umd.prod.js +2 -2
- package/dist/lang/de-DE.umd.prod.js +2 -2
- package/dist/lang/de.umd.prod.js +2 -2
- package/dist/lang/el.umd.prod.js +2 -2
- package/dist/lang/en-GB.umd.prod.js +2 -2
- package/dist/lang/en-US.umd.prod.js +2 -2
- package/dist/lang/eo.umd.prod.js +2 -2
- package/dist/lang/es.umd.prod.js +2 -2
- package/dist/lang/et.umd.prod.js +2 -2
- package/dist/lang/eu.umd.prod.js +2 -2
- package/dist/lang/fa-IR.umd.prod.js +2 -2
- package/dist/lang/fa.umd.prod.js +2 -2
- package/dist/lang/fi.umd.prod.js +2 -2
- package/dist/lang/fr.umd.prod.js +2 -2
- package/dist/lang/gn.umd.prod.js +2 -2
- package/dist/lang/he.umd.prod.js +2 -2
- package/dist/lang/hi.umd.prod.js +2 -2
- package/dist/lang/hr.umd.prod.js +2 -2
- package/dist/lang/hu.umd.prod.js +2 -2
- package/dist/lang/id.umd.prod.js +2 -2
- package/dist/lang/is.umd.prod.js +2 -2
- package/dist/lang/it.umd.prod.js +2 -2
- package/dist/lang/ja.umd.prod.js +2 -2
- package/dist/lang/kk.umd.prod.js +2 -2
- package/dist/lang/km.umd.prod.js +2 -2
- package/dist/lang/ko-KR.umd.prod.js +1 -1
- package/dist/lang/kur-CKB.umd.prod.js +2 -2
- package/dist/lang/lt.umd.prod.js +2 -2
- package/dist/lang/lu.umd.prod.js +2 -2
- package/dist/lang/lv.umd.prod.js +2 -2
- package/dist/lang/mk.umd.prod.js +2 -2
- package/dist/lang/ml.umd.prod.js +2 -2
- package/dist/lang/mm.umd.prod.js +2 -2
- package/dist/lang/ms-MY.umd.prod.js +2 -2
- package/dist/lang/ms.umd.prod.js +2 -2
- package/dist/lang/my.umd.prod.js +2 -2
- package/dist/lang/nb-NO.umd.prod.js +2 -2
- package/dist/lang/nl.umd.prod.js +2 -2
- package/dist/lang/pl.umd.prod.js +2 -2
- package/dist/lang/pt-BR.umd.prod.js +2 -2
- package/dist/lang/pt.umd.prod.js +2 -2
- package/dist/lang/ro.umd.prod.js +2 -2
- package/dist/lang/ru.umd.prod.js +2 -2
- package/dist/lang/sk.umd.prod.js +2 -2
- package/dist/lang/sl.umd.prod.js +2 -2
- package/dist/lang/sm.umd.prod.js +2 -2
- package/dist/lang/sq.umd.prod.js +2 -2
- package/dist/lang/sr-CYR.umd.prod.js +2 -2
- package/dist/lang/sr.umd.prod.js +2 -2
- package/dist/lang/sv.umd.prod.js +2 -2
- package/dist/lang/ta.umd.prod.js +2 -2
- package/dist/lang/th.umd.prod.js +2 -2
- package/dist/lang/tl.umd.prod.js +2 -2
- package/dist/lang/tr.umd.prod.js +2 -2
- package/dist/lang/ug.umd.prod.js +2 -2
- package/dist/lang/uk.umd.prod.js +2 -2
- package/dist/lang/ur-PK.umd.prod.js +2 -2
- package/dist/lang/uz-Cyrl.umd.prod.js +2 -2
- package/dist/lang/uz-Latn.umd.prod.js +2 -2
- package/dist/lang/vi.umd.prod.js +2 -2
- package/dist/lang/zh-CN.umd.prod.js +2 -2
- package/dist/lang/zh-TW.umd.prod.js +2 -2
- package/dist/quasar.client.js +2621 -2604
- package/dist/quasar.sass +1 -1
- package/dist/quasar.server.prod.cjs +11 -11
- package/dist/quasar.server.prod.js +25 -25
- package/dist/quasar.umd.js +2616 -2599
- package/dist/quasar.umd.prod.js +23 -23
- package/dist/types/api/dialog.d.ts +1 -1
- package/dist/types/api/qnotify.d.ts +1 -1
- package/dist/types/api/qpopupproxy.d.ts +1 -1
- package/dist/types/feature-flag.d.ts +2 -2
- package/dist/types/globals.d.ts +2 -2
- package/dist/types/icon-set.d.ts +16 -16
- package/dist/types/shim-icon-set.d.ts +1 -2
- package/dist/types/shim-lang.d.ts +1 -2
- package/dist/types/ts-helpers.d.ts +3 -3
- package/dist/types/tsconfig.json +1 -1
- package/dist/types/utils/scroll.d.ts +1 -1
- package/dist/types/utils.d.ts +2 -2
- package/dist/web-types/web-types.json +1 -1
- package/icon-set/bootstrap-icons.js +1 -1
- package/icon-set/eva-icons.js +22 -22
- package/icon-set/ionicons-v4.js +16 -16
- package/icon-set/svg-bootstrap-icons.js +1 -1
- package/icon-set/svg-eva-icons.js +22 -22
- package/icon-set/svg-fontawesome-v5.js +1 -1
- package/icon-set/svg-ionicons-v4.js +16 -16
- package/icon-set/svg-themify.js +7 -7
- package/icon-set/themify.js +7 -7
- package/lang/ar-TN.js +1 -1
- package/lang/ar.js +1 -1
- package/lang/az-Latn.js +1 -1
- package/lang/bg.js +1 -1
- package/lang/bn.js +1 -1
- package/lang/bs-BA.js +1 -1
- package/lang/ca.js +1 -1
- package/lang/cs.js +11 -6
- package/lang/da.js +1 -1
- package/lang/de-CH.js +1 -1
- package/lang/de-DE.js +1 -1
- package/lang/de.js +1 -1
- package/lang/el.js +1 -1
- package/lang/en-GB.js +1 -1
- package/lang/en-US.js +1 -1
- package/lang/eo.js +1 -1
- package/lang/es.js +1 -1
- package/lang/et.js +1 -1
- package/lang/eu.js +1 -1
- package/lang/fa-IR.js +1 -1
- package/lang/fa.js +1 -1
- package/lang/fi.js +1 -1
- package/lang/fr.js +1 -1
- package/lang/gn.js +1 -1
- package/lang/he.js +1 -1
- package/lang/hi.js +1 -1
- package/lang/hr.js +1 -1
- package/lang/hu.js +1 -1
- package/lang/id.js +1 -1
- package/lang/is.js +1 -1
- package/lang/it.js +1 -1
- package/lang/ja.js +1 -1
- package/lang/kk.js +1 -1
- package/lang/km.js +1 -1
- package/lang/kur-CKB.js +1 -1
- package/lang/lt.js +2 -2
- package/lang/lu.js +1 -1
- package/lang/lv.js +1 -1
- package/lang/mk.js +1 -1
- package/lang/ml.js +1 -1
- package/lang/mm.js +1 -1
- package/lang/ms-MY.js +1 -1
- package/lang/ms.js +1 -1
- package/lang/my.js +1 -1
- package/lang/nb-NO.js +1 -1
- package/lang/nl.js +1 -1
- package/lang/pl.js +1 -1
- package/lang/pt-BR.js +1 -1
- package/lang/pt.js +1 -1
- package/lang/ro.js +1 -1
- package/lang/ru.js +1 -1
- package/lang/sk.js +1 -1
- package/lang/sl.js +1 -1
- package/lang/sm.js +1 -1
- package/lang/sq.js +1 -1
- package/lang/sr-CYR.js +1 -1
- package/lang/sr.js +1 -1
- package/lang/sv.js +1 -1
- package/lang/ta.js +1 -1
- package/lang/th.js +1 -1
- package/lang/tl.js +1 -1
- package/lang/tr.js +1 -1
- package/lang/ug.js +1 -1
- package/lang/uk.js +1 -1
- package/lang/ur-PK.js +1 -1
- package/lang/uz-Cyrl.js +1 -1
- package/lang/uz-Latn.js +1 -1
- package/lang/vi.js +1 -1
- package/lang/zh-CN.js +1 -1
- package/lang/zh-TW.js +1 -1
- package/package.json +13 -17
- package/src/components/ajax-bar/QAjaxBar.js +22 -25
- package/src/components/avatar/QAvatar.js +3 -3
- package/src/components/avatar/QAvatar.test.js +2 -2
- package/src/components/badge/QBadge.js +9 -10
- package/src/components/badge/QBadge.test.js +2 -2
- package/src/components/banner/QBanner.js +6 -6
- package/src/components/banner/QBanner.test.js +2 -2
- package/src/components/bar/QBar.js +3 -3
- package/src/components/bar/QBar.test.js +2 -2
- package/src/components/breadcrumbs/QBreadcrumbs.js +5 -4
- package/src/components/breadcrumbs/QBreadcrumbs.test.js +3 -3
- package/src/components/breadcrumbs/QBreadcrumbsEl.js +4 -4
- package/src/components/breadcrumbs/QBreadcrumbsEl.test.js +2 -2
- package/src/components/btn/QBtn.js +39 -44
- package/src/components/btn/QBtn.test.js +2 -2
- package/src/components/btn/use-btn.js +34 -47
- package/src/components/btn/use-btn.test.js +5 -5
- package/src/components/btn-dropdown/QBtnDropdown.js +15 -16
- package/src/components/btn-group/QBtnGroup.js +3 -3
- package/src/components/btn-toggle/QBtnToggle.js +5 -9
- package/src/components/card/QCard.js +5 -5
- package/src/components/card/QCardActions.js +2 -2
- package/src/components/card/QCardSection.js +2 -2
- package/src/components/carousel/QCarousel.js +32 -38
- package/src/components/carousel/QCarouselControl.js +1 -1
- package/src/components/carousel/QCarouselSlide.js +1 -1
- package/src/components/carousel/QCarouselSlide.json +1 -1
- package/src/components/chat/QChatMessage.js +13 -14
- package/src/components/chat/QChatMessage.json +1 -1
- package/src/components/checkbox/QCheckbox.js +5 -5
- package/src/components/checkbox/use-checkbox.js +38 -50
- package/src/components/chip/QChip.js +26 -34
- package/src/components/chip/QChip.test.js +2 -2
- package/src/components/circular-progress/QCircularProgress.js +8 -11
- package/src/components/circular-progress/circular-progress.test.js +1 -1
- package/src/components/color/QColor.js +75 -98
- package/src/components/date/QDate.js +128 -140
- package/src/components/date/use-datetime.js +3 -6
- package/src/components/dialog/QDialog.js +44 -51
- package/src/components/dialog/QDialog.test.js +7 -7
- package/src/components/drawer/QDrawer.js +110 -152
- package/src/components/editor/QEditor.js +44 -37
- package/src/components/editor/editor-caret.js +27 -31
- package/src/components/editor/editor-utils.js +9 -5
- package/src/components/expansion-item/QExpansionItem.js +36 -48
- package/src/components/fab/QFab.js +11 -11
- package/src/components/fab/QFabAction.js +2 -4
- package/src/components/fab/use-fab.js +6 -7
- package/src/components/field/QField.js +2 -2
- package/src/components/file/QFile.js +26 -33
- package/src/components/footer/QFooter.js +40 -53
- package/src/components/form/QForm.js +37 -43
- package/src/components/form/QFormChildMixin.js +3 -3
- package/src/components/header/QHeader.js +35 -47
- package/src/components/icon/QIcon.js +19 -19
- package/src/components/img/QImg.js +24 -24
- package/src/components/img/QImg.json +3 -3
- package/src/components/infinite-scroll/QInfiniteScroll.js +38 -52
- package/src/components/inner-loading/QInnerLoading.js +3 -3
- package/src/components/input/QInput.js +53 -52
- package/src/components/input/use-mask.js +56 -54
- package/src/components/intersection/QIntersection.js +6 -8
- package/src/components/item/QItem.js +20 -30
- package/src/components/item/QItemLabel.js +5 -7
- package/src/components/item/QItemSection.js +6 -6
- package/src/components/item/QList.js +6 -6
- package/src/components/item/QList.test.js +2 -2
- package/src/components/knob/QKnob.js +39 -44
- package/src/components/layout/QLayout.js +30 -34
- package/src/components/linear-progress/QLinearProgress.js +14 -23
- package/src/components/markup-table/QMarkupTable.js +7 -9
- package/src/components/menu/QMenu.js +36 -37
- package/src/components/no-ssr/QNoSsr.js +1 -1
- package/src/components/option-group/QOptionGroup.js +5 -5
- package/src/components/page/QPage.js +16 -18
- package/src/components/page/QPageContainer.js +9 -9
- package/src/components/page-scroller/QPageScroller.js +11 -13
- package/src/components/page-sticky/use-page-sticky.js +18 -18
- package/src/components/pagination/QPagination.js +24 -26
- package/src/components/parallax/QParallax.js +15 -9
- package/src/components/parallax/QParallax.json +1 -1
- package/src/components/popup-edit/QPopupEdit.js +10 -13
- package/src/components/popup-proxy/QPopupProxy.js +5 -7
- package/src/components/pull-to-refresh/QPullToRefresh.js +15 -17
- package/src/components/radio/QRadio.js +24 -29
- package/src/components/range/QRange.js +33 -37
- package/src/components/rating/QRating.js +59 -61
- package/src/components/resize-observer/QResizeObserver.js +55 -62
- package/src/components/scroll-area/QScrollArea.js +32 -36
- package/src/components/scroll-observer/QScrollObserver.js +3 -3
- package/src/components/select/QSelect.js +208 -269
- package/src/components/separator/QSeparator.js +7 -10
- package/src/components/skeleton/QSkeleton.js +4 -4
- package/src/components/slide-item/QSlideItem.js +7 -7
- package/src/components/slide-transition/QSlideTransition.js +4 -4
- package/src/components/slider/QSlider.js +13 -16
- package/src/components/slider/use-slider.js +53 -81
- package/src/components/slider/use-slider.json +3 -3
- package/src/components/space/QSpace.test.js +1 -1
- package/src/components/spinner/QSpinner.test.js +2 -2
- package/src/components/spinner/QSpinnerAudio.test.js +2 -2
- package/src/components/spinner/QSpinnerBall.test.js +2 -2
- package/src/components/spinner/QSpinnerBars.test.js +2 -2
- package/src/components/spinner/QSpinnerBox.test.js +2 -2
- package/src/components/spinner/QSpinnerClock.test.js +2 -2
- package/src/components/spinner/QSpinnerComment.test.js +2 -2
- package/src/components/spinner/QSpinnerCube.test.js +2 -2
- package/src/components/spinner/QSpinnerDots.test.js +2 -2
- package/src/components/spinner/QSpinnerFacebook.test.js +2 -2
- package/src/components/spinner/QSpinnerGears.test.js +2 -2
- package/src/components/spinner/QSpinnerGrid.test.js +2 -2
- package/src/components/spinner/QSpinnerHearts.test.js +2 -2
- package/src/components/spinner/QSpinnerHourglass.test.js +2 -2
- package/src/components/spinner/QSpinnerInfinity.test.js +2 -2
- package/src/components/spinner/QSpinnerIos.test.js +2 -2
- package/src/components/spinner/QSpinnerOrbit.test.js +2 -2
- package/src/components/spinner/QSpinnerOval.test.js +2 -2
- package/src/components/spinner/QSpinnerPie.test.js +2 -2
- package/src/components/spinner/QSpinnerPuff.test.js +2 -2
- package/src/components/spinner/QSpinnerRadio.test.js +2 -2
- package/src/components/spinner/QSpinnerRings.test.js +2 -2
- package/src/components/spinner/QSpinnerTail.test.js +2 -2
- package/src/components/spinner/use-spinner.test.js +1 -1
- package/src/components/splitter/QSplitter.js +19 -21
- package/src/components/stepper/QStep.js +12 -14
- package/src/components/stepper/QStepper.js +13 -14
- package/src/components/stepper/StepHeader.js +34 -35
- package/src/components/tab-panels/QTabPanels.js +3 -3
- package/src/components/table/QTable.js +82 -100
- package/src/components/table/QTd.js +3 -3
- package/src/components/table/QTh.js +5 -6
- package/src/components/table/QTr.js +3 -3
- package/src/components/table/table-column-selection.js +4 -6
- package/src/components/table/table-filter.js +2 -2
- package/src/components/table/table-pagination.js +14 -20
- package/src/components/table/table-row-expand.js +3 -3
- package/src/components/table/table-row-selection.js +10 -20
- package/src/components/table/table-sort.js +7 -7
- package/src/components/tabs/QRouteTab.js +1 -1
- package/src/components/tabs/QTab.js +1 -1
- package/src/components/tabs/QTabs.js +82 -109
- package/src/components/tabs/use-tab.js +36 -38
- package/src/components/time/QTime.js +109 -132
- package/src/components/timeline/QTimeline.js +7 -4
- package/src/components/timeline/QTimelineEntry.js +7 -6
- package/src/components/timeline/QTimelineEntry.json +1 -1
- package/src/components/toggle/QToggle.js +6 -8
- package/src/components/toolbar/QToolbar.js +2 -2
- package/src/components/toolbar/QToolbar.test.js +2 -2
- package/src/components/toolbar/QToolbarTitle.js +2 -4
- package/src/components/toolbar/QToolbarTitle.test.js +2 -2
- package/src/components/tooltip/QTooltip.js +27 -28
- package/src/components/tree/QTree.js +96 -114
- package/src/components/tree/QTree.json +1 -1
- package/src/components/uploader/QUploaderAddTrigger.js +2 -2
- package/src/components/uploader/uploader-core.js +44 -51
- package/src/components/uploader/xhr-uploader-plugin.js +13 -17
- package/src/components/video/QVideo.js +1 -1
- package/src/components/video/QVideo.test.js +2 -2
- package/src/components/virtual-scroll/QVirtualScroll.js +9 -10
- package/src/components/virtual-scroll/use-virtual-scroll.js +42 -50
- package/src/composables/private.use-align/use-align.js +2 -2
- package/src/composables/private.use-align/use-align.test.js +1 -1
- package/src/composables/private.use-anchor/use-anchor.js +23 -32
- package/src/composables/private.use-dark/use-dark.test.js +1 -1
- package/src/composables/private.use-field/use-field.js +79 -99
- package/src/composables/private.use-file/use-file-dom-props.js +2 -2
- package/src/composables/private.use-file/use-file.js +27 -27
- package/src/composables/private.use-fullscreen/use-fullscreen.js +15 -20
- package/src/composables/private.use-history/use-history.js +2 -2
- package/src/composables/private.use-history/use-history.test.js +1 -1
- package/src/composables/private.use-key-composition/use-key-composition.js +11 -12
- package/src/composables/private.use-model-toggle/use-model-toggle.js +16 -25
- package/src/composables/private.use-panel/use-panel.js +25 -27
- package/src/composables/private.use-portal/use-portal.js +11 -9
- package/src/composables/private.use-prevent-scroll/use-prevent-scroll.js +1 -4
- package/src/composables/private.use-ratio/use-ratio.js +6 -5
- package/src/composables/private.use-ratio/use-ratio.test.js +1 -1
- package/src/composables/private.use-refocus-target/use-refocus-target.js +2 -4
- package/src/composables/private.use-router-link/use-router-link.js +44 -55
- package/src/composables/private.use-scroll-target/use-scroll-target.js +1 -1
- package/src/composables/private.use-size/use-size.test.js +1 -1
- package/src/composables/private.use-transition/use-transition.test.js +1 -1
- package/src/composables/private.use-validate/use-validate.js +23 -36
- package/src/composables/use-dialog-plugin-component/use-dialog-plugin-component.js +1 -1
- package/src/composables/use-form/private.use-form.js +1 -1
- package/src/composables/use-form/private.use-form.test.js +3 -3
- package/src/composables/use-form/use-form-child.js +7 -7
- package/src/composables/use-hydration/use-hydration.js +2 -2
- package/src/composables/use-hydration/use-hydration.test.js +1 -1
- package/src/composables/use-id/use-id.js +4 -8
- package/src/composables/use-id/use-id.test.js +1 -1
- package/src/composables/use-interval/use-interval.js +2 -2
- package/src/composables/use-interval/use-interval.test.js +1 -1
- package/src/composables/use-meta/use-meta.js +3 -3
- package/src/composables/use-quasar/use-quasar.test.js +1 -1
- package/src/composables/use-render-cache/use-render-cache.js +1 -1
- package/src/composables/use-render-cache/use-render-cache.test.js +1 -1
- package/src/composables/use-split-attrs/use-split-attrs.js +3 -7
- package/src/composables/use-split-attrs/use-split-attrs.test.js +1 -1
- package/src/composables/use-tick/use-tick.js +3 -3
- package/src/composables/use-tick/use-tick.test.js +2 -2
- package/src/composables/use-timeout/use-timeout.js +2 -2
- package/src/composables/use-timeout/use-timeout.test.js +1 -1
- package/src/directives/close-popup/ClosePopup.js +4 -9
- package/src/directives/intersection/Intersection.js +5 -8
- package/src/directives/morph/Morph.js +12 -18
- package/src/directives/ripple/Ripple.js +19 -26
- package/src/directives/ripple/Ripple.test.js +2 -2
- package/src/directives/scroll/Scroll.js +2 -2
- package/src/directives/touch-hold/TouchHold.js +22 -28
- package/src/directives/touch-pan/TouchPan.js +68 -84
- package/src/directives/touch-repeat/TouchRepeat.js +28 -39
- package/src/directives/touch-swipe/TouchSwipe.js +30 -33
- package/src/index.ssr.js +2 -0
- package/src/index.umd.js +2 -0
- package/src/install-quasar.js +9 -9
- package/src/plugins/addressbar/AddressbarColor.js +9 -9
- package/src/plugins/addressbar/AddressbarColor.test.js +2 -2
- package/src/plugins/app-fullscreen/AppFullscreen.js +11 -10
- package/src/plugins/app-fullscreen/AppFullscreen.test.js +2 -2
- package/src/plugins/app-fullscreen/test/mock-fullscreen.js +2 -2
- package/src/plugins/app-visibility/AppVisibility.js +5 -5
- package/src/plugins/app-visibility/AppVisibility.test.js +2 -2
- package/src/plugins/bottom-sheet/BottomSheet.js +2 -2
- package/src/plugins/bottom-sheet/component/BottomSheetComponent.js +4 -4
- package/src/plugins/cookies/Cookies.js +50 -62
- package/src/plugins/dark/Dark.js +3 -5
- package/src/plugins/dark/Dark.test.js +1 -1
- package/src/plugins/dialog/Dialog.js +2 -2
- package/src/plugins/dialog/component/DialogPluginComponent.js +17 -20
- package/src/plugins/icon-set/IconSet.js +2 -4
- package/src/plugins/icon-set/IconSet.test.js +1 -1
- package/src/plugins/lang/Lang.js +7 -10
- package/src/plugins/lang/Lang.json +2 -2
- package/src/plugins/lang/Lang.test.js +2 -2
- package/src/plugins/loading/Loading.js +10 -12
- package/src/plugins/loading-bar/LoadingBar.js +4 -4
- package/src/plugins/meta/Meta.js +10 -11
- package/src/plugins/notify/Notify.js +67 -72
- package/src/plugins/platform/Platform.js +19 -21
- package/src/plugins/platform/Platform.test.js +1 -1
- package/src/plugins/private.body/Body.js +23 -29
- package/src/plugins/private.body/Body.test.js +1 -1
- package/src/plugins/private.history/History.js +17 -25
- package/src/plugins/private.history/History.test.js +1 -1
- package/src/plugins/screen/Screen.js +16 -16
- package/src/plugins/screen/Screen.test.js +1 -1
- package/src/plugins/storage/LocalStorage.js +3 -4
- package/src/plugins/storage/LocalStorage.test.js +2 -2
- package/src/plugins/storage/SessionStorage.js +3 -4
- package/src/plugins/storage/SessionStorage.test.js +2 -2
- package/src/plugins/storage/engine/web-storage.js +30 -23
- package/src/plugins/storage/engine/web-storage.test.js +1 -1
- package/src/utils/EventBus/EventBus.js +3 -4
- package/src/utils/EventBus/EventBus.test.js +1 -1
- package/src/utils/clone/clone.test.js +4 -8
- package/src/utils/colors/colors.js +38 -29
- package/src/utils/colors/colors.test.js +2 -2
- package/src/utils/copy-to-clipboard/copy-to-clipboard.js +6 -11
- package/src/utils/create-meta-mixin/create-meta-mixin.js +2 -2
- package/src/utils/create-uploader-component/create-uploader-component.js +12 -7
- package/src/utils/css-var/get-css-var.test.js +2 -2
- package/src/utils/css-var/set-css-var.test.js +2 -2
- package/src/utils/date/date.js +229 -172
- package/src/utils/date/private.persian.js +11 -11
- package/src/utils/debounce/debounce.js +3 -7
- package/src/utils/debounce/debounce.test.js +1 -1
- package/src/utils/dom/dom.js +2 -4
- package/src/utils/dom/dom.test.js +4 -4
- package/src/utils/event/event.js +21 -23
- package/src/utils/export-file/export-file.js +3 -3
- package/src/utils/extend/extend.js +15 -14
- package/src/utils/extend/extend.test.js +2 -2
- package/src/utils/format/format.js +4 -10
- package/src/utils/format/format.test.js +1 -1
- package/src/utils/frame-debounce/frame-debounce.js +23 -12
- package/src/utils/frame-debounce/frame-debounce.test.js +1 -1
- package/src/utils/is/is.js +15 -26
- package/src/utils/is/is.test.js +8 -7
- package/src/utils/morph/morph.js +57 -48
- package/src/utils/open-url/open-url.js +7 -7
- package/src/utils/patterns/patterns.js +26 -23
- package/src/utils/patterns/patterns.test.js +1 -1
- package/src/utils/private.click-outside/click-outside.js +5 -5
- package/src/utils/private.config/instance-config.js +2 -0
- package/src/utils/private.config/instance-config.test.js +4 -4
- package/src/utils/private.config/nodes.js +5 -5
- package/src/utils/private.config/nodes.test.js +4 -4
- package/src/utils/private.create/create.test.js +1 -1
- package/src/utils/private.dialog/create-dialog.js +9 -12
- package/src/utils/private.focus/focus-manager.js +5 -1
- package/src/utils/private.focus/focus-manager.test.js +4 -4
- package/src/utils/private.focus/focusout.js +2 -2
- package/src/utils/private.focus/focusout.test.js +1 -1
- package/src/utils/private.get-emits-object/get-emits-object.test.js +1 -1
- package/src/utils/private.inject-obj-prop/inject-obj-prop.test.js +2 -2
- package/src/utils/private.keyboard/escape-key.js +5 -5
- package/src/utils/private.keyboard/escape-key.test.js +1 -1
- package/src/utils/private.keyboard/key-composition.js +4 -6
- package/src/utils/private.noop-ssr-directive-transform/noop-ssr-directive-transform.js +3 -1
- package/src/utils/private.noop-ssr-directive-transform/noop-ssr-directive-transform.test.js +1 -1
- package/src/utils/private.portal/portal.js +5 -5
- package/src/utils/private.position-engine/position-engine.js +20 -22
- package/src/utils/private.render/render.js +5 -7
- package/src/utils/private.render/render.test.js +5 -5
- package/src/utils/private.rtl/rtl.js +3 -2
- package/src/utils/private.rtl/rtl.test.js +1 -1
- package/src/utils/private.selection/selection.js +1 -1
- package/src/utils/private.selection/selection.test.js +2 -2
- package/src/utils/private.sort/sort.test.js +2 -2
- package/src/utils/private.touch/touch.js +10 -14
- package/src/utils/private.touch/touch.test.js +1 -1
- package/src/utils/private.vm/vm.js +2 -2
- package/src/utils/private.vm/vm.test.js +4 -4
- package/src/utils/run-sequential-promises/run-sequential-promises.js +44 -54
- package/src/utils/run-sequential-promises/run-sequential-promises.test.js +183 -0
- package/src/utils/scroll/prevent-scroll.js +9 -9
- package/src/utils/scroll/scroll.js +11 -12
- package/src/utils/throttle/throttle.js +4 -3
- package/src/utils/throttle/throttle.test.js +1 -1
- package/src/utils/uid/uid.js +51 -77
- package/src/utils/uid/uid.test.js +3 -3
- package/wrappers/index.cjs +2 -2
- package/wrappers/index.js +2 -2
- package/dist/vetur/quasar-attributes.json +0 -1
- package/dist/vetur/quasar-tags.json +0 -1
package/src/utils/morph/morph.js
CHANGED
|
@@ -3,31 +3,35 @@ import { isObject } from '../is/is.js'
|
|
|
3
3
|
let id = 0
|
|
4
4
|
let offsetBase = void 0
|
|
5
5
|
|
|
6
|
+
function defaultCancel() {
|
|
7
|
+
return false
|
|
8
|
+
}
|
|
9
|
+
|
|
6
10
|
function getAbsolutePosition(el, resize) {
|
|
7
11
|
if (offsetBase === void 0) {
|
|
8
12
|
offsetBase = document.createElement('div')
|
|
9
13
|
offsetBase.style.cssText = 'position: absolute; left: 0; top: 0'
|
|
10
|
-
document.body.
|
|
14
|
+
document.body.append(offsetBase)
|
|
11
15
|
}
|
|
12
16
|
|
|
13
17
|
const boundingRect = el.getBoundingClientRect()
|
|
14
18
|
const baseRect = offsetBase.getBoundingClientRect()
|
|
15
19
|
const { marginLeft, marginRight, marginTop, marginBottom } =
|
|
16
20
|
window.getComputedStyle(el)
|
|
17
|
-
const marginH =
|
|
18
|
-
|
|
21
|
+
const marginH =
|
|
22
|
+
Number.parseInt(marginLeft, 10) + Number.parseInt(marginRight, 10)
|
|
23
|
+
const marginV =
|
|
24
|
+
Number.parseInt(marginTop, 10) + Number.parseInt(marginBottom, 10)
|
|
19
25
|
|
|
20
26
|
return {
|
|
21
27
|
left: boundingRect.left - baseRect.left,
|
|
22
28
|
top: boundingRect.top - baseRect.top,
|
|
23
29
|
width: boundingRect.right - boundingRect.left,
|
|
24
30
|
height: boundingRect.bottom - boundingRect.top,
|
|
25
|
-
widthM:
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
marginH: resize === true ? marginH : 0,
|
|
30
|
-
marginV: resize === true ? marginV : 0
|
|
31
|
+
widthM: boundingRect.right - boundingRect.left + (resize ? 0 : marginH),
|
|
32
|
+
heightM: boundingRect.bottom - boundingRect.top + (resize ? 0 : marginV),
|
|
33
|
+
marginH: resize ? marginH : 0,
|
|
34
|
+
marginV: resize ? marginV : 0
|
|
31
35
|
}
|
|
32
36
|
}
|
|
33
37
|
|
|
@@ -61,15 +65,13 @@ function getComputedStyle(el, props) {
|
|
|
61
65
|
let val = ''
|
|
62
66
|
|
|
63
67
|
for (let styleIndex = 0; styleIndex < styleLen; styleIndex++) {
|
|
64
|
-
if (reStyleSkipKey.test(style[styleIndex])
|
|
68
|
+
if (!reStyleSkipKey.test(style[styleIndex])) {
|
|
65
69
|
val += style[styleIndex] + ': ' + style[style[styleIndex]] + '; '
|
|
66
70
|
}
|
|
67
71
|
}
|
|
68
72
|
|
|
69
73
|
fixed[prop] = val
|
|
70
|
-
} else if (
|
|
71
|
-
['borderWidth', 'borderStyle', 'borderColor'].indexOf(prop) !== -1
|
|
72
|
-
) {
|
|
74
|
+
} else if (['borderWidth', 'borderStyle', 'borderColor'].includes(prop)) {
|
|
73
75
|
const suffix = prop.replace('border', '')
|
|
74
76
|
let val = ''
|
|
75
77
|
for (let j = 0; j < styleEdges.length; j++) {
|
|
@@ -92,7 +94,7 @@ function getComputedStyle(el, props) {
|
|
|
92
94
|
} else if (prop === 'cssText') {
|
|
93
95
|
fixed[prop] = style[prop]
|
|
94
96
|
.split(';')
|
|
95
|
-
.filter(val => reStyleSkipRule.test(val)
|
|
97
|
+
.filter(val => !reStyleSkipRule.test(val))
|
|
96
98
|
.join(';')
|
|
97
99
|
} else {
|
|
98
100
|
fixed[prop] = style[prop]
|
|
@@ -114,7 +116,7 @@ function getMaxZIndex(elStart) {
|
|
|
114
116
|
|
|
115
117
|
if (
|
|
116
118
|
zIndexNum > maxIndex &&
|
|
117
|
-
(el === elStart || zIndexPositions.includes(position)
|
|
119
|
+
(el === elStart || zIndexPositions.includes(position))
|
|
118
120
|
) {
|
|
119
121
|
maxIndex = zIndexNum
|
|
120
122
|
}
|
|
@@ -132,6 +134,11 @@ function normalizeElements(opts) {
|
|
|
132
134
|
}
|
|
133
135
|
}
|
|
134
136
|
|
|
137
|
+
function getOpacity(value, fallback) {
|
|
138
|
+
const parsed = Number.parseFloat(value)
|
|
139
|
+
return Number.isFinite(parsed) ? Math.max(0, Math.min(1, parsed)) : fallback
|
|
140
|
+
}
|
|
141
|
+
|
|
135
142
|
function normalizeOptions(options) {
|
|
136
143
|
if (typeof options === 'number') {
|
|
137
144
|
options = {
|
|
@@ -143,18 +150,20 @@ function normalizeOptions(options) {
|
|
|
143
150
|
}
|
|
144
151
|
}
|
|
145
152
|
|
|
153
|
+
const parsedDuration = Number.parseInt(options.duration, 10)
|
|
154
|
+
const parsedDelay = Number.parseInt(options.delay, 10)
|
|
155
|
+
|
|
146
156
|
return {
|
|
147
157
|
...options,
|
|
148
158
|
|
|
149
159
|
waitFor: options.waitFor === void 0 ? 0 : options.waitFor,
|
|
150
160
|
|
|
151
|
-
duration:
|
|
152
|
-
|
|
161
|
+
duration: Number.isNaN(parsedDuration) ? 300 : parsedDuration,
|
|
162
|
+
delay: Number.isNaN(parsedDelay) ? 0 : parsedDelay,
|
|
153
163
|
easing:
|
|
154
164
|
typeof options.easing === 'string' && options.easing.length !== 0
|
|
155
165
|
? options.easing
|
|
156
166
|
: 'ease-in-out',
|
|
157
|
-
delay: isNaN(options.delay) === true ? 0 : parseInt(options.delay, 10),
|
|
158
167
|
fill:
|
|
159
168
|
typeof options.fill === 'string' && options.fill.length !== 0
|
|
160
169
|
? options.fill
|
|
@@ -171,14 +180,8 @@ function normalizeOptions(options) {
|
|
|
171
180
|
keepToClone: options.keepToClone === true || options.keeptoclone === true,
|
|
172
181
|
|
|
173
182
|
tween: options.tween === true,
|
|
174
|
-
tweenFromOpacity:
|
|
175
|
-
|
|
176
|
-
? 0.6
|
|
177
|
-
: parseFloat(options.tweenFromOpacity),
|
|
178
|
-
tweenToOpacity:
|
|
179
|
-
isNaN(options.tweenToOpacity) === true
|
|
180
|
-
? 0.5
|
|
181
|
-
: parseFloat(options.tweenToOpacity)
|
|
183
|
+
tweenFromOpacity: getOpacity(options.tweenFromOpacity, 0.6),
|
|
184
|
+
tweenToOpacity: getOpacity(options.tweenToOpacity, 0.5)
|
|
182
185
|
}
|
|
183
186
|
}
|
|
184
187
|
|
|
@@ -199,7 +202,7 @@ function isValidElement(element) {
|
|
|
199
202
|
}
|
|
200
203
|
|
|
201
204
|
export default function morph(_options) {
|
|
202
|
-
let cancel =
|
|
205
|
+
let cancel = defaultCancel
|
|
203
206
|
let cancelStatus = false
|
|
204
207
|
let endElementTo = true
|
|
205
208
|
|
|
@@ -207,7 +210,7 @@ export default function morph(_options) {
|
|
|
207
210
|
const options = normalizeOptions(_options)
|
|
208
211
|
|
|
209
212
|
const elFrom = getElement(elements.from)
|
|
210
|
-
if (isValidElement(elFrom)
|
|
213
|
+
if (!isValidElement(elFrom)) {
|
|
211
214
|
// we return a cancel function that return false, meaning the cancel function failed
|
|
212
215
|
return cancel
|
|
213
216
|
}
|
|
@@ -259,7 +262,7 @@ export default function morph(_options) {
|
|
|
259
262
|
elFromTween.className = elFromTween.classList
|
|
260
263
|
.toString()
|
|
261
264
|
.split(' ')
|
|
262
|
-
.filter(c =>
|
|
265
|
+
.filter(c => !c.startsWith('bg-'))
|
|
263
266
|
.join(' ')
|
|
264
267
|
}
|
|
265
268
|
|
|
@@ -273,6 +276,8 @@ export default function morph(_options) {
|
|
|
273
276
|
elFromClone.style.transition = 'none'
|
|
274
277
|
elFromClone.style.animation = 'none'
|
|
275
278
|
elFromClone.style.pointerEvents = 'none'
|
|
279
|
+
|
|
280
|
+
// oxlint-disable-next-line unicorn/prefer-modern-dom-apis
|
|
276
281
|
elFromParent.insertBefore(elFromClone, elFromNext)
|
|
277
282
|
|
|
278
283
|
// we mark the element with its cleanup function
|
|
@@ -294,7 +299,7 @@ export default function morph(_options) {
|
|
|
294
299
|
// will be called after Vue catches up with the changes done by _options.onToggle() function
|
|
295
300
|
const calculateFinalState = () => {
|
|
296
301
|
const elTo = getElement(elements.to)
|
|
297
|
-
if (cancelStatus === true || isValidElement(elTo)
|
|
302
|
+
if (cancelStatus === true || !isValidElement(elTo)) {
|
|
298
303
|
if (typeof elFrom.qMorphCancel === 'function') elFrom.qMorphCancel()
|
|
299
304
|
return
|
|
300
305
|
}
|
|
@@ -393,6 +398,8 @@ export default function morph(_options) {
|
|
|
393
398
|
elTo === elFrom && elFromParent === elToParent
|
|
394
399
|
? elFromClone
|
|
395
400
|
: elTo.nextElementSibling
|
|
401
|
+
|
|
402
|
+
// oxlint-disable-next-line unicorn/prefer-modern-dom-apis
|
|
396
403
|
elToParent.insertBefore(elToClone, elToNext)
|
|
397
404
|
|
|
398
405
|
const {
|
|
@@ -425,7 +432,7 @@ export default function morph(_options) {
|
|
|
425
432
|
// we strip the background classes (background color can no longer be animated if !important is used)
|
|
426
433
|
elTo.className = elToClassSaved
|
|
427
434
|
.split(' ')
|
|
428
|
-
.filter(c =>
|
|
435
|
+
.filter(c => !c.startsWith('bg-'))
|
|
429
436
|
.join(' ')
|
|
430
437
|
|
|
431
438
|
const elToPosition = getAbsolutePosition(elTo, options.resize)
|
|
@@ -463,14 +470,14 @@ export default function morph(_options) {
|
|
|
463
470
|
|
|
464
471
|
const elSharedSize =
|
|
465
472
|
elFrom === elTo &&
|
|
466
|
-
['absolute', 'fixed'].includes(elToPositioningType)
|
|
467
|
-
['absolute', 'fixed'].includes(elFromPositioningType)
|
|
473
|
+
!['absolute', 'fixed'].includes(elToPositioningType) &&
|
|
474
|
+
!['absolute', 'fixed'].includes(elFromPositioningType)
|
|
468
475
|
|
|
469
476
|
// if the final element has fixed position or if a parent
|
|
470
477
|
// has fixed position we need to animate it as fixed
|
|
471
478
|
let elToNeedsFixedPosition = elToPositioningType === 'fixed'
|
|
472
479
|
let parent = elToParent
|
|
473
|
-
while (elToNeedsFixedPosition
|
|
480
|
+
while (!elToNeedsFixedPosition && parent !== document) {
|
|
474
481
|
elToNeedsFixedPosition =
|
|
475
482
|
window.getComputedStyle(parent).position === 'fixed'
|
|
476
483
|
parent = parent.parentNode
|
|
@@ -508,7 +515,7 @@ export default function morph(_options) {
|
|
|
508
515
|
// we apply styles specified by user
|
|
509
516
|
if (typeof options.style === 'string') {
|
|
510
517
|
elTo.style.cssText += ' ' + options.style
|
|
511
|
-
} else if (isObject(options.style)
|
|
518
|
+
} else if (isObject(options.style)) {
|
|
512
519
|
for (const prop in options.style) {
|
|
513
520
|
elTo.style[prop] = options.style[prop]
|
|
514
521
|
}
|
|
@@ -519,12 +526,10 @@ export default function morph(_options) {
|
|
|
519
526
|
|
|
520
527
|
// we position the morphing element
|
|
521
528
|
// if we use fixed position for the final element we need to adjust for scroll
|
|
522
|
-
const documentScroll =
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
elTo.style.position =
|
|
527
|
-
elToNeedsFixedPosition === true ? 'fixed' : 'absolute'
|
|
529
|
+
const documentScroll = elToNeedsFixedPosition
|
|
530
|
+
? document.documentElement
|
|
531
|
+
: { scrollLeft: 0, scrollTop: 0 }
|
|
532
|
+
elTo.style.position = elToNeedsFixedPosition ? 'fixed' : 'absolute'
|
|
528
533
|
elTo.style.left = `${elToPosition.left - documentScroll.scrollLeft}px`
|
|
529
534
|
elTo.style.right = 'unset'
|
|
530
535
|
elTo.style.top = `${elToPosition.top - documentScroll.scrollTop}px`
|
|
@@ -540,7 +545,7 @@ export default function morph(_options) {
|
|
|
540
545
|
elTo.style.overflowY = 'hidden'
|
|
541
546
|
}
|
|
542
547
|
|
|
543
|
-
document.body.
|
|
548
|
+
document.body.append(elTo)
|
|
544
549
|
|
|
545
550
|
if (elFromTween !== void 0) {
|
|
546
551
|
elFromTween.style.cssText = elFromCssText
|
|
@@ -565,7 +570,7 @@ export default function morph(_options) {
|
|
|
565
570
|
elFromTween.style.overflowY = 'hidden'
|
|
566
571
|
}
|
|
567
572
|
|
|
568
|
-
document.body.
|
|
573
|
+
document.body.append(elFromTween)
|
|
569
574
|
}
|
|
570
575
|
|
|
571
576
|
const commonCleanup = aborted => {
|
|
@@ -580,7 +585,7 @@ export default function morph(_options) {
|
|
|
580
585
|
}
|
|
581
586
|
|
|
582
587
|
if (elToClone.parentNode === elToParent) {
|
|
583
|
-
|
|
588
|
+
elToClone.before(elTo)
|
|
584
589
|
}
|
|
585
590
|
|
|
586
591
|
// we clean the spacers
|
|
@@ -589,7 +594,7 @@ export default function morph(_options) {
|
|
|
589
594
|
elFromTween?.remove()
|
|
590
595
|
|
|
591
596
|
// cancel will be no longer available
|
|
592
|
-
cancel =
|
|
597
|
+
cancel = defaultCancel
|
|
593
598
|
|
|
594
599
|
elFrom.qMorphCancel = void 0
|
|
595
600
|
elTo.qMorphCancel = void 0
|
|
@@ -974,7 +979,7 @@ export default function morph(_options) {
|
|
|
974
979
|
|
|
975
980
|
${keyframesTo}
|
|
976
981
|
`
|
|
977
|
-
document.head.
|
|
982
|
+
document.head.append(style)
|
|
978
983
|
|
|
979
984
|
let animationDirection = 'normal'
|
|
980
985
|
|
|
@@ -1046,7 +1051,9 @@ export default function morph(_options) {
|
|
|
1046
1051
|
) {
|
|
1047
1052
|
const delayPromise =
|
|
1048
1053
|
options.waitFor > 0
|
|
1049
|
-
? new Promise(resolve =>
|
|
1054
|
+
? new Promise(resolve => {
|
|
1055
|
+
setTimeout(resolve, options.waitFor)
|
|
1056
|
+
})
|
|
1050
1057
|
: options.waitFor === 'transitionend'
|
|
1051
1058
|
? new Promise(resolve => {
|
|
1052
1059
|
const endFn = () => {
|
|
@@ -1060,7 +1067,9 @@ export default function morph(_options) {
|
|
|
1060
1067
|
elTo.removeEventListener('transitioncancel', endFn)
|
|
1061
1068
|
}
|
|
1062
1069
|
|
|
1063
|
-
|
|
1070
|
+
// oxlint-disable-next-line promise/no-multiple-resolved
|
|
1071
|
+
resolve?.()
|
|
1072
|
+
resolve = null
|
|
1064
1073
|
}
|
|
1065
1074
|
|
|
1066
1075
|
let timer = setTimeout(endFn, 400)
|
|
@@ -4,7 +4,7 @@ import { noop } from '../event/event.js'
|
|
|
4
4
|
import { isNumber } from '../is/is.js'
|
|
5
5
|
|
|
6
6
|
function parseFeatures(winFeatures) {
|
|
7
|
-
const cfg =
|
|
7
|
+
const cfg = { noopener: true, ...winFeatures }
|
|
8
8
|
const feat = []
|
|
9
9
|
for (const key in cfg) {
|
|
10
10
|
const value = cfg[key]
|
|
@@ -20,7 +20,7 @@ function parseFeatures(winFeatures) {
|
|
|
20
20
|
function openWindow(url, reject, windowFeatures) {
|
|
21
21
|
let open = window.open
|
|
22
22
|
|
|
23
|
-
if (Platform.is.cordova
|
|
23
|
+
if (Platform.is.cordova) {
|
|
24
24
|
if (cordova?.InAppBrowser?.open !== void 0) {
|
|
25
25
|
open = cordova.InAppBrowser.open
|
|
26
26
|
} else if (navigator?.app !== void 0) {
|
|
@@ -35,21 +35,21 @@ function openWindow(url, reject, windowFeatures) {
|
|
|
35
35
|
// also implies "noopener". Only reject if neither is in effect, so that the
|
|
36
36
|
// null return can be treated as a blocked popup.
|
|
37
37
|
// Note: parseFeatures() normalizes values to booleans, so strict === true is safe.
|
|
38
|
-
const cfg =
|
|
39
|
-
const hasNoopener = cfg.noopener
|
|
38
|
+
const cfg = { noopener: true, ...windowFeatures }
|
|
39
|
+
const hasNoopener = cfg.noopener || cfg.noreferrer
|
|
40
40
|
|
|
41
41
|
const win = open(url, '_blank', parseFeatures(windowFeatures))
|
|
42
42
|
|
|
43
43
|
if (win) {
|
|
44
44
|
if (Platform.is.desktop) win.focus()
|
|
45
45
|
return win
|
|
46
|
-
} else if (hasNoopener
|
|
46
|
+
} else if (!hasNoopener) {
|
|
47
47
|
reject?.()
|
|
48
48
|
}
|
|
49
49
|
}
|
|
50
50
|
|
|
51
|
-
export default (url, reject, windowFeatures)
|
|
52
|
-
if (Platform.is.ios
|
|
51
|
+
export default function openUrl(url, reject, windowFeatures) {
|
|
52
|
+
if (Platform.is.ios && window.SafariViewController !== void 0) {
|
|
53
53
|
window.SafariViewController.isAvailable(available => {
|
|
54
54
|
if (available) {
|
|
55
55
|
window.SafariViewController.show({ url }, noop, reject)
|
|
@@ -1,42 +1,45 @@
|
|
|
1
1
|
// file referenced from docs
|
|
2
2
|
|
|
3
|
-
const
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
const hexRE = /^#[0-9a-fA-F]{3}([0-9a-fA-F]{3})?$/,
|
|
4
|
+
hexaRE = /^#[0-9a-fA-F]{4}([0-9a-fA-F]{4})?$/,
|
|
5
|
+
hexOrHexaRE =
|
|
6
6
|
/^#([0-9a-fA-F]{3}|[0-9a-fA-F]{4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/,
|
|
7
|
-
|
|
7
|
+
rgbRE =
|
|
8
8
|
/^rgb\(((0|[1-9][\d]?|1[\d]{0,2}|2[\d]?|2[0-4][\d]|25[0-5]),){2}(0|[1-9][\d]?|1[\d]{0,2}|2[\d]?|2[0-4][\d]|25[0-5])\)$/,
|
|
9
|
-
|
|
10
|
-
/^rgba\(((0|[1-9][\d]?|1[\d]{0,2}|2[\d]?|2[0-4][\d]|25[0-5]),){2}(0|[1-9][\d]?|1[\d]{0,2}|2[\d]?|2[0-4][\d]|25[0-5]),(0|0\.[0-9]+[1-9]|0\.[1-9]+|1)\)
|
|
9
|
+
rgbaRE =
|
|
10
|
+
/^rgba\(((0|[1-9][\d]?|1[\d]{0,2}|2[\d]?|2[0-4][\d]|25[0-5]),){2}(0|[1-9][\d]?|1[\d]{0,2}|2[\d]?|2[0-4][\d]|25[0-5]),(0|0\.[0-9]+[1-9]|0\.[1-9]+|1)\)$/,
|
|
11
|
+
dateRE = /^-?[\d]+\/[0-1]\d\/[0-3]\d$/,
|
|
12
|
+
timeRE = /^([0-1]?\d|2[0-3]):[0-5]\d$/,
|
|
13
|
+
fulltimeRE = /^([0-1]?\d|2[0-3]):[0-5]\d:[0-5]\d$/,
|
|
14
|
+
timeOrFulltimeRE = /^([0-1]?\d|2[0-3]):[0-5]\d(:[0-5]\d)?$/,
|
|
15
|
+
emailRE =
|
|
16
|
+
/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
|
|
11
17
|
|
|
12
18
|
// Keep in sync with ui/types/api/validation.d.ts
|
|
13
19
|
export const testPattern = {
|
|
14
|
-
date: v =>
|
|
15
|
-
time: v =>
|
|
16
|
-
fulltime: v =>
|
|
17
|
-
timeOrFulltime: v =>
|
|
20
|
+
date: v => dateRE.test(v),
|
|
21
|
+
time: v => timeRE.test(v),
|
|
22
|
+
fulltime: v => fulltimeRE.test(v),
|
|
23
|
+
timeOrFulltime: v => timeOrFulltimeRE.test(v),
|
|
18
24
|
|
|
19
25
|
// -- RFC 5322 --
|
|
20
26
|
// -- Added in v2.6.6 --
|
|
21
27
|
// This is a basic helper validation.
|
|
22
28
|
// For something more complex (like RFC 822) you should write and use your own rule.
|
|
23
29
|
// We won't be accepting PRs to enhance the one below because of the reason above.
|
|
24
|
-
email: v =>
|
|
25
|
-
/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(
|
|
26
|
-
v
|
|
27
|
-
),
|
|
30
|
+
email: v => emailRE.test(v),
|
|
28
31
|
|
|
29
|
-
hexColor: v =>
|
|
30
|
-
hexaColor: v =>
|
|
31
|
-
hexOrHexaColor: v =>
|
|
32
|
+
hexColor: v => hexRE.test(v),
|
|
33
|
+
hexaColor: v => hexaRE.test(v),
|
|
34
|
+
hexOrHexaColor: v => hexOrHexaRE.test(v),
|
|
32
35
|
|
|
33
|
-
rgbColor: v =>
|
|
34
|
-
rgbaColor: v =>
|
|
35
|
-
rgbOrRgbaColor: v =>
|
|
36
|
+
rgbColor: v => rgbRE.test(v),
|
|
37
|
+
rgbaColor: v => rgbaRE.test(v),
|
|
38
|
+
rgbOrRgbaColor: v => rgbRE.test(v) || rgbaRE.test(v),
|
|
36
39
|
|
|
37
|
-
hexOrRgbColor: v =>
|
|
38
|
-
hexaOrRgbaColor: v =>
|
|
39
|
-
anyColor: v =>
|
|
40
|
+
hexOrRgbColor: v => hexRE.test(v) || rgbRE.test(v),
|
|
41
|
+
hexaOrRgbaColor: v => hexaRE.test(v) || rgbaRE.test(v),
|
|
42
|
+
anyColor: v => hexOrHexaRE.test(v) || rgbRE.test(v) || rgbaRE.test(v)
|
|
40
43
|
}
|
|
41
44
|
|
|
42
45
|
export default {
|
|
@@ -17,7 +17,7 @@ function globalHandler(evt) {
|
|
|
17
17
|
if (
|
|
18
18
|
target === void 0 ||
|
|
19
19
|
target.nodeType === 8 ||
|
|
20
|
-
target.classList.contains('no-pointer-events')
|
|
20
|
+
target.classList.contains('no-pointer-events')
|
|
21
21
|
) {
|
|
22
22
|
return
|
|
23
23
|
}
|
|
@@ -39,7 +39,7 @@ function globalHandler(evt) {
|
|
|
39
39
|
break
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
-
if (proxy.props.seamless
|
|
42
|
+
if (!proxy.props.seamless) return
|
|
43
43
|
|
|
44
44
|
portalIndex--
|
|
45
45
|
}
|
|
@@ -49,10 +49,10 @@ function globalHandler(evt) {
|
|
|
49
49
|
|
|
50
50
|
if (
|
|
51
51
|
(state.anchorEl.value === null ||
|
|
52
|
-
state.anchorEl.value.contains(target)
|
|
52
|
+
!state.anchorEl.value.contains(target)) &&
|
|
53
53
|
(target === document.body ||
|
|
54
54
|
(state.innerRef.value !== null &&
|
|
55
|
-
state.innerRef.value.contains(target)
|
|
55
|
+
!state.innerRef.value.contains(target)))
|
|
56
56
|
) {
|
|
57
57
|
// mark the event as being processed by clickOutside
|
|
58
58
|
// used to prevent refocus after menu close
|
|
@@ -74,7 +74,7 @@ export function addClickOutside(clickOutsideProps) {
|
|
|
74
74
|
}
|
|
75
75
|
|
|
76
76
|
export function removeClickOutside(clickOutsideProps) {
|
|
77
|
-
const index = registeredList.
|
|
77
|
+
const index = registeredList.indexOf(clickOutsideProps)
|
|
78
78
|
|
|
79
79
|
if (index !== -1) {
|
|
80
80
|
registeredList.splice(index, 1)
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { describe,
|
|
2
|
-
import {
|
|
1
|
+
import { describe, expect, test } from 'vitest'
|
|
2
|
+
import { config, mount } from '@vue/test-utils'
|
|
3
3
|
|
|
4
4
|
import {
|
|
5
|
+
freezeGlobalConfig,
|
|
5
6
|
globalConfig,
|
|
6
|
-
globalConfigIsFrozen
|
|
7
|
-
freezeGlobalConfig
|
|
7
|
+
globalConfigIsFrozen
|
|
8
8
|
} from './instance-config.js'
|
|
9
9
|
|
|
10
10
|
// We override Quasar install so we have a custom $q.config
|
|
@@ -19,7 +19,7 @@ export function createGlobalNode(id, portalType) {
|
|
|
19
19
|
}
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
-
target.
|
|
22
|
+
target.append(el)
|
|
23
23
|
nodesList.push(el)
|
|
24
24
|
portalTypeList.push(portalType)
|
|
25
25
|
|
|
@@ -49,8 +49,8 @@ export function changeGlobalNodesTarget(newTarget) {
|
|
|
49
49
|
) < 2
|
|
50
50
|
) {
|
|
51
51
|
nodesList.forEach(node => {
|
|
52
|
-
if (node.contains(target)
|
|
53
|
-
target.
|
|
52
|
+
if (!node.contains(target)) {
|
|
53
|
+
target.append(node)
|
|
54
54
|
}
|
|
55
55
|
})
|
|
56
56
|
|
|
@@ -64,9 +64,9 @@ export function changeGlobalNodesTarget(newTarget) {
|
|
|
64
64
|
|
|
65
65
|
if (
|
|
66
66
|
(i === lastDialogIndex || portalTypeList[i] !== 'dialog') &&
|
|
67
|
-
el.contains(target)
|
|
67
|
+
!el.contains(target)
|
|
68
68
|
) {
|
|
69
|
-
target.
|
|
69
|
+
target.append(el)
|
|
70
70
|
}
|
|
71
71
|
}
|
|
72
72
|
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { afterEach, describe, expect, test } from 'vitest'
|
|
2
2
|
|
|
3
3
|
import {
|
|
4
|
+
changeGlobalNodesTarget,
|
|
4
5
|
createGlobalNode,
|
|
5
|
-
removeGlobalNode
|
|
6
|
-
changeGlobalNodesTarget
|
|
6
|
+
removeGlobalNode
|
|
7
7
|
} from './nodes.js'
|
|
8
8
|
import { globalConfig } from './instance-config.js'
|
|
9
9
|
|
|
@@ -91,7 +91,7 @@ describe('[nodes API]', () => {
|
|
|
91
91
|
|
|
92
92
|
const newTargetEl = document.createElement('div')
|
|
93
93
|
newTargetEl.setAttribute('id', 'new-target')
|
|
94
|
-
document.body.
|
|
94
|
+
document.body.append(newTargetEl)
|
|
95
95
|
|
|
96
96
|
expect(changeGlobalNodesTarget(newTargetEl)).toBeUndefined()
|
|
97
97
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { h,
|
|
1
|
+
import { h, nextTick, ref } from 'vue'
|
|
2
2
|
|
|
3
3
|
import { createChildApp } from '../../install-quasar.js'
|
|
4
4
|
import { createGlobalNode, removeGlobalNode } from '../private.config/nodes.js'
|
|
@@ -24,21 +24,18 @@ export function merge(target, source) {
|
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
-
export
|
|
27
|
+
export function createDialog(
|
|
28
28
|
DefaultComponent,
|
|
29
29
|
supportsCustomComponent,
|
|
30
30
|
parentApp
|
|
31
31
|
) {
|
|
32
32
|
return pluginProps => {
|
|
33
|
-
if (__QUASAR_SSR_SERVER__)
|
|
34
|
-
return ssrAPI
|
|
35
|
-
}
|
|
33
|
+
if (__QUASAR_SSR_SERVER__) return ssrAPI
|
|
36
34
|
|
|
37
35
|
let DialogComponent, props
|
|
38
|
-
const isCustom =
|
|
39
|
-
supportsCustomComponent === true && pluginProps.component !== void 0
|
|
36
|
+
const isCustom = supportsCustomComponent && pluginProps.component !== void 0
|
|
40
37
|
|
|
41
|
-
if (isCustom
|
|
38
|
+
if (isCustom) {
|
|
42
39
|
const { component, componentProps } = pluginProps
|
|
43
40
|
|
|
44
41
|
DialogComponent =
|
|
@@ -56,8 +53,8 @@ export default function createDialog(
|
|
|
56
53
|
if (style !== void 0) otherProps.cardStyle = style
|
|
57
54
|
}
|
|
58
55
|
|
|
59
|
-
let vm
|
|
60
|
-
|
|
56
|
+
let vm
|
|
57
|
+
let emittedOK = false
|
|
61
58
|
const dialogRef = ref(null)
|
|
62
59
|
const el = createGlobalNode(false, 'dialog')
|
|
63
60
|
|
|
@@ -113,7 +110,7 @@ export default function createDialog(
|
|
|
113
110
|
},
|
|
114
111
|
update(componentProps) {
|
|
115
112
|
if (vm !== null) {
|
|
116
|
-
if (isCustom
|
|
113
|
+
if (isCustom) {
|
|
117
114
|
Object.assign(props, componentProps)
|
|
118
115
|
} else {
|
|
119
116
|
const { class: klass, style, ...cfg } = componentProps
|
|
@@ -143,7 +140,7 @@ export default function createDialog(
|
|
|
143
140
|
app = null
|
|
144
141
|
vm = null
|
|
145
142
|
|
|
146
|
-
if (emittedOK
|
|
143
|
+
if (!emittedOK) {
|
|
147
144
|
cancelFns.forEach(fn => {
|
|
148
145
|
fn()
|
|
149
146
|
})
|
|
@@ -15,7 +15,7 @@ export function removeFocusWaitFlag(flag) {
|
|
|
15
15
|
|
|
16
16
|
if (waitFlags.length === 0 && queue.length !== 0) {
|
|
17
17
|
// only call last focus handler (can't focus multiple things at once)
|
|
18
|
-
queue
|
|
18
|
+
queue.at(-1)()
|
|
19
19
|
queue = []
|
|
20
20
|
}
|
|
21
21
|
}
|
|
@@ -24,6 +24,10 @@ export function addFocusFn(fn) {
|
|
|
24
24
|
if (waitFlags.length === 0) {
|
|
25
25
|
fn()
|
|
26
26
|
} else {
|
|
27
|
+
/**
|
|
28
|
+
* While in the wait state, do not let focus be set on any element.
|
|
29
|
+
*/
|
|
30
|
+
document.activeElement?.blur?.()
|
|
27
31
|
queue.push(fn)
|
|
28
32
|
}
|
|
29
33
|
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { afterEach, describe, expect, test, vi } from 'vitest'
|
|
2
2
|
|
|
3
3
|
import {
|
|
4
|
-
addFocusWaitFlag,
|
|
5
|
-
removeFocusWaitFlag,
|
|
6
4
|
addFocusFn,
|
|
7
|
-
|
|
5
|
+
addFocusWaitFlag,
|
|
6
|
+
removeFocusFn,
|
|
7
|
+
removeFocusWaitFlag
|
|
8
8
|
} from './focus-manager.js'
|
|
9
9
|
|
|
10
10
|
let waitFlagList = []
|
|
@@ -3,11 +3,11 @@ import { client } from '../../plugins/platform/Platform.js'
|
|
|
3
3
|
const handlers = []
|
|
4
4
|
|
|
5
5
|
function trigger(e) {
|
|
6
|
-
handlers
|
|
6
|
+
handlers.at(-1)(e)
|
|
7
7
|
}
|
|
8
8
|
|
|
9
9
|
export function addFocusout(fn) {
|
|
10
|
-
if (client.is.desktop
|
|
10
|
+
if (client.is.desktop) {
|
|
11
11
|
handlers.push(fn)
|
|
12
12
|
|
|
13
13
|
if (handlers.length === 1) {
|